summaryrefslogtreecommitdiff
path: root/libs/multiprecision
diff options
context:
space:
mode:
authorChanho Park <chanho61.park@samsung.com>2014-12-11 18:55:56 +0900
committerChanho Park <chanho61.park@samsung.com>2014-12-11 18:55:56 +0900
commit08c1e93fa36a49f49325a07fe91ff92c964c2b6c (patch)
tree7a7053ceb8874b28ec4b868d4c49b500008a102e /libs/multiprecision
parentbb4dd8289b351fae6b55e303f189127a394a1edd (diff)
downloadboost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.gz
boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.bz2
boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.zip
Imported Upstream version 1.57.0upstream/1.57.0
Diffstat (limited to 'libs/multiprecision')
-rw-r--r--libs/multiprecision/config/Jamfile.v264
-rw-r--r--libs/multiprecision/config/has_float128.cpp18
-rw-r--r--libs/multiprecision/config/has_gmp.cpp32
-rw-r--r--libs/multiprecision/config/has_intel_quad.cpp16
-rw-r--r--libs/multiprecision/config/has_mpfi.cpp55
-rw-r--r--libs/multiprecision/config/has_mpfr.cpp42
-rw-r--r--libs/multiprecision/config/has_tommath.cpp15
-rw-r--r--libs/multiprecision/doc/Jamfile.v282
-rw-r--r--libs/multiprecision/doc/debugger1.pngbin0 -> 18899 bytes
-rw-r--r--libs/multiprecision/doc/debugger2.pngbin0 -> 29907 bytes
-rw-r--r--libs/multiprecision/doc/debugger3.pngbin0 -> 18453 bytes
-rw-r--r--libs/multiprecision/doc/debugger4.pngbin0 -> 18225 bytes
-rw-r--r--libs/multiprecision/doc/debugger5.pngbin0 -> 18600 bytes
-rw-r--r--libs/multiprecision/doc/debugger6.pngbin0 -> 40879 bytes
-rw-r--r--libs/multiprecision/doc/debugger7.pngbin0 -> 37343 bytes
-rw-r--r--libs/multiprecision/doc/floating_point_eg1.mml154
-rw-r--r--libs/multiprecision/doc/floating_point_eg1.pngbin0 -> 10150 bytes
-rw-r--r--libs/multiprecision/doc/floating_point_eg1.svg2
-rw-r--r--libs/multiprecision/doc/floating_point_eg2.mml152
-rw-r--r--libs/multiprecision/doc/floating_point_eg2.pngbin0 -> 7972 bytes
-rw-r--r--libs/multiprecision/doc/floating_point_eg2.svg2
-rw-r--r--libs/multiprecision/doc/floating_point_eg3.mml53
-rw-r--r--libs/multiprecision/doc/floating_point_eg3.pngbin0 -> 3623 bytes
-rw-r--r--libs/multiprecision/doc/floating_point_eg3.svg2
-rwxr-xr-xlibs/multiprecision/doc/generate.sh33
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/indexes.html49
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html667
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html156
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html316
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html1370
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/intro.html710
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/map.html49
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/map/ack.html64
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/map/faq.html120
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/map/hist.html295
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/map/todo.html229
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf.html57
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html2078
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html381
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html4830
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html200
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html1958
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html284
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref.html57
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html3970
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html186
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html92
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html157
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html63
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html424
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html114
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html79
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html79
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/number.html1330
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html63
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut.html131
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html216
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html277
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html198
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html176
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html166
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html55
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html119
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html158
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html215
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html199
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html152
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html194
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html283
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html180
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html185
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html47
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html286
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html200
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html385
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html47
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html95
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html149
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html148
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html134
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html100
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html705
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html534
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html168
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html2049
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html210
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html52
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html99
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html223
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html215
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html106
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html177
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html116
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/random.html167
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html261
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html51
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html123
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html156
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html67
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html67
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html130
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html191
-rw-r--r--libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html64
-rw-r--r--libs/multiprecision/doc/html/index.html172
-rw-r--r--libs/multiprecision/doc/html4_symbols.qbk215
-rw-r--r--libs/multiprecision/doc/index.idx18
-rw-r--r--libs/multiprecision/doc/multiprecision.qbk5203
-rw-r--r--libs/multiprecision/doc/numeric_limits_32_tables.qbk94
-rw-r--r--libs/multiprecision/doc/numeric_limits_qbk.cpp719
-rw-r--r--libs/multiprecision/example/Jamfile.v295
-rw-r--r--libs/multiprecision/example/cpp_bin_float_snips.cpp32
-rw-r--r--libs/multiprecision/example/cpp_dec_float_snips.cpp33
-rw-r--r--libs/multiprecision/example/cpp_int_snips.cpp74
-rw-r--r--libs/multiprecision/example/debug_adaptor_snips.cpp40
-rw-r--r--libs/multiprecision/example/float128_snips.cpp42
-rw-r--r--libs/multiprecision/example/floating_point_examples.cpp697
-rw-r--r--libs/multiprecision/example/gauss_laguerre_quadrature.cpp514
-rw-r--r--libs/multiprecision/example/gmp_snips.cpp117
-rw-r--r--libs/multiprecision/example/hypergeometric_luke_algorithms.cpp803
-rw-r--r--libs/multiprecision/example/integer_examples.cpp230
-rw-r--r--libs/multiprecision/example/logged_adaptor.cpp119
-rw-r--r--libs/multiprecision/example/mixed_integer_arithmetic.cpp55
-rw-r--r--libs/multiprecision/example/mpfi_snips.cpp42
-rw-r--r--libs/multiprecision/example/mpfr_snips.cpp40
-rw-r--r--libs/multiprecision/example/numeric_limits_snips.cpp435
-rw-r--r--libs/multiprecision/example/random_snips.cpp134
-rw-r--r--libs/multiprecision/example/safe_prime.cpp45
-rw-r--r--libs/multiprecision/example/tommath_snips.cpp84
-rw-r--r--libs/multiprecision/index.html15
-rw-r--r--libs/multiprecision/meta/libraries.json16
-rw-r--r--libs/multiprecision/performance/Jamfile.v2133
-rw-r--r--libs/multiprecision/performance/arithmetic_backend.hpp600
-rw-r--r--libs/multiprecision/performance/delaunay_test.cpp295
-rw-r--r--libs/multiprecision/performance/linpack-benchmark.cpp1278
-rw-r--r--libs/multiprecision/performance/miller_rabin_performance.cpp167
-rw-r--r--libs/multiprecision/performance/performance_test-gcc-linux.log718
-rw-r--r--libs/multiprecision/performance/performance_test-intel-linux.log422
-rw-r--r--libs/multiprecision/performance/performance_test-msvc-10.log1220
-rw-r--r--libs/multiprecision/performance/performance_test.cpp852
-rw-r--r--libs/multiprecision/performance/sf_performance-msvc-10.log69
-rw-r--r--libs/multiprecision/performance/sf_performance.cpp45
-rw-r--r--libs/multiprecision/performance/sf_performance.hpp214
-rw-r--r--libs/multiprecision/performance/sf_performance_basic.cpp49
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel.cpp42
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel1.cpp23
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel2.cpp20
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel3.cpp16
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel4.cpp15
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel5.cpp17
-rw-r--r--libs/multiprecision/performance/sf_performance_bessel6.cpp22
-rw-r--r--libs/multiprecision/performance/sf_performance_nct.cpp39
-rw-r--r--libs/multiprecision/performance/sf_performance_nct1.cpp15
-rw-r--r--libs/multiprecision/performance/sf_performance_nct2.cpp14
-rw-r--r--libs/multiprecision/performance/sf_performance_nct3.cpp25
-rw-r--r--libs/multiprecision/performance/sf_performance_nct4.cpp15
-rw-r--r--libs/multiprecision/performance/sf_performance_nct5.cpp14
-rw-r--r--libs/multiprecision/performance/sf_performance_nct6.cpp25
-rw-r--r--libs/multiprecision/performance/sf_performance_poly.cpp72
-rw-r--r--libs/multiprecision/performance/voronoi_performance.cpp229
-rw-r--r--libs/multiprecision/test/Jamfile.v2865
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_01.cpp17
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_02.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_03.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_04.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_05.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_06.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_07.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_08.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_09.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_10.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_11.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_12.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_13.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_14.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_15.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_16.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_17.cpp15
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_18.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_19.cpp15
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_20.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_21.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_22.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_23.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_24.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_25.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_26.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_27.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_28.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_29.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_30.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_31.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_32.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_33.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_34.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_35.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_36.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_37.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_38.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_39.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_40.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_41.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_42.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_43.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_44.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_45.cpp24
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_46.cpp23
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_47.cpp24
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_48.cpp23
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_49.cpp23
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_50.cpp22
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_51.cpp15
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_52.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_53.cpp15
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_54.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_55.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_56.cpp15
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_57.cpp15
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_58.cpp16
-rw-r--r--libs/multiprecision/test/compile_fail/conv_fail_59.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/cpp_int_complement.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/cpp_int_negate_1.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/cpp_int_negate_2.cpp14
-rw-r--r--libs/multiprecision/test/compile_fail/operator_fail_01.cpp17
-rw-r--r--libs/multiprecision/test/compile_fail/operator_fail_02.cpp18
-rw-r--r--libs/multiprecision/test/concepts/number_concept_check.cpp255
-rw-r--r--libs/multiprecision/test/concepts/sf_concept_check_basic.cpp167
-rw-r--r--libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp135
-rw-r--r--libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp139
-rw-r--r--libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp157
-rw-r--r--libs/multiprecision/test/concepts/sf_concept_check_poly.cpp130
-rw-r--r--libs/multiprecision/test/coverage/Makefile313
-rw-r--r--libs/multiprecision/test/cpp_int1024_serial32.txt1
-rw-r--r--libs/multiprecision/test/cpp_int1024_serial64.txt1
-rw-r--r--libs/multiprecision/test/cpp_int128_serial32.txt1
-rw-r--r--libs/multiprecision/test/cpp_int128_serial64.txt1
-rw-r--r--libs/multiprecision/test/cpp_int64_serial32.txt1
-rw-r--r--libs/multiprecision/test/cpp_int64_serial64.txt1
-rw-r--r--libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp12
-rw-r--r--libs/multiprecision/test/include_test/cpp_dec_float_include_test.cpp12
-rw-r--r--libs/multiprecision/test/include_test/cpp_int_include_test.cpp16
-rw-r--r--libs/multiprecision/test/include_test/gmp_include_test.cpp14
-rw-r--r--libs/multiprecision/test/include_test/mpfr_include_test.cpp12
-rw-r--r--libs/multiprecision/test/include_test/tommath_include_test.cpp12
-rw-r--r--libs/multiprecision/test/math/high_prec/gamma.ipp505
-rw-r--r--libs/multiprecision/test/math/high_prec/gamma_0.ipp106
-rw-r--r--libs/multiprecision/test/math/high_prec/gamma_1_2.ipp47
-rw-r--r--libs/multiprecision/test/math/high_prec/gamma_neg.ipp42
-rw-r--r--libs/multiprecision/test/math/high_prec/readme.txt3
-rw-r--r--libs/multiprecision/test/math/high_prec/test_gamma.cpp81
-rw-r--r--libs/multiprecision/test/math/high_prec/test_gamma.hpp92
-rw-r--r--libs/multiprecision/test/math/instances/Jamfile.v281
-rw-r--r--libs/multiprecision/test/math/instances/instances.cpp14
-rw-r--r--libs/multiprecision/test/math/log1p_expm1_test.cpp101
-rw-r--r--libs/multiprecision/test/math/powm1_sqrtp1m1_test.cpp97
-rw-r--r--libs/multiprecision/test/math/readme.txt7
-rw-r--r--libs/multiprecision/test/math/setup.hpp143
-rw-r--r--libs/multiprecision/test/math/table_type.hpp39
-rw-r--r--libs/multiprecision/test/math/test_bessel_i.cpp68
-rw-r--r--libs/multiprecision/test/math/test_bessel_j.cpp123
-rw-r--r--libs/multiprecision/test/math/test_bessel_k.cpp95
-rw-r--r--libs/multiprecision/test/math/test_bessel_y.cpp135
-rw-r--r--libs/multiprecision/test/math/test_beta.cpp93
-rw-r--r--libs/multiprecision/test/math/test_binomial_coeff.cpp73
-rw-r--r--libs/multiprecision/test/math/test_carlson.cpp61
-rw-r--r--libs/multiprecision/test/math/test_cbrt.cpp54
-rw-r--r--libs/multiprecision/test/math/test_digamma.cpp66
-rw-r--r--libs/multiprecision/test/math/test_ellint_1.cpp59
-rw-r--r--libs/multiprecision/test/math/test_ellint_2.cpp52
-rw-r--r--libs/multiprecision/test/math/test_ellint_3.cpp82
-rw-r--r--libs/multiprecision/test/math/test_erf.cpp90
-rw-r--r--libs/multiprecision/test/math/test_expint.cpp89
-rw-r--r--libs/multiprecision/test/math/test_gamma.cpp96
-rw-r--r--libs/multiprecision/test/math/test_hermite.cpp61
-rw-r--r--libs/multiprecision/test/math/test_ibeta.cpp92
-rw-r--r--libs/multiprecision/test/math/test_ibeta_2.cpp91
-rw-r--r--libs/multiprecision/test/math/test_ibeta_3.cpp68
-rw-r--r--libs/multiprecision/test/math/test_ibeta_4.cpp76
-rw-r--r--libs/multiprecision/test/math/test_ibeta_inv_1.cpp61
-rw-r--r--libs/multiprecision/test/math/test_ibeta_inv_ab_4.cpp55
-rw-r--r--libs/multiprecision/test/math/test_igamma.cpp58
-rw-r--r--libs/multiprecision/test/math/test_igamma_inv.cpp73
-rw-r--r--libs/multiprecision/test/math/test_igamma_inva.cpp52
-rw-r--r--libs/multiprecision/test/math/test_laguerre.cpp52
-rw-r--r--libs/multiprecision/test/math/test_legendre.cpp52
-rw-r--r--libs/multiprecision/test/math/test_tgamma_ratio.cpp66
-rw-r--r--libs/multiprecision/test/math/test_zeta.cpp69
-rw-r--r--libs/multiprecision/test/sincos.ipp358
-rw-r--r--libs/multiprecision/test/string_data.ipp45
-rw-r--r--libs/multiprecision/test/test.hpp299
-rw-r--r--libs/multiprecision/test/test_acos.cpp148
-rw-r--r--libs/multiprecision/test/test_adapt_serial.cpp163
-rw-r--r--libs/multiprecision/test/test_arithmetic.hpp1844
-rw-r--r--libs/multiprecision/test/test_arithmetic_ab_1.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_ab_2.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_ab_3.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_backend_concept.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp29
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp28
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp28
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_dec_float_1.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_dec_float_2.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_dec_float_3.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp33
-rw-r--r--libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_float_128.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_logged_1.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_logged_2.cpp19
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpf.cpp32
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpf_50.cpp30
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpfi_50.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpfr.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpfr_50.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpfr_50_static.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpq.cpp25
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpz.cpp21
-rw-r--r--libs/multiprecision/test/test_arithmetic_mpz_br.cpp32
-rw-r--r--libs/multiprecision/test/test_arithmetic_tommath.cpp23
-rw-r--r--libs/multiprecision/test/test_arithmetic_tommath_br.cpp32
-rw-r--r--libs/multiprecision/test/test_asin.cpp143
-rw-r--r--libs/multiprecision/test/test_atan.cpp297
-rw-r--r--libs/multiprecision/test/test_checked_cpp_int.cpp116
-rw-r--r--libs/multiprecision/test/test_constants.cpp198
-rw-r--r--libs/multiprecision/test/test_constexpr.cpp61
-rw-r--r--libs/multiprecision/test/test_cos.cpp361
-rw-r--r--libs/multiprecision/test/test_cosh.cpp188
-rw-r--r--libs/multiprecision/test/test_cpp_bin_float.cpp221
-rw-r--r--libs/multiprecision/test/test_cpp_bin_float_io.cpp271
-rw-r--r--libs/multiprecision/test/test_cpp_bin_float_serial.cpp36
-rw-r--r--libs/multiprecision/test/test_cpp_dec_float_conv.cpp42
-rw-r--r--libs/multiprecision/test/test_cpp_dec_float_round.cpp67
-rw-r--r--libs/multiprecision/test/test_cpp_dec_float_serial.cpp36
-rw-r--r--libs/multiprecision/test/test_cpp_int.cpp593
-rw-r--r--libs/multiprecision/test/test_cpp_int_conv.cpp77
-rw-r--r--libs/multiprecision/test/test_cpp_int_deserial.cpp3197
-rw-r--r--libs/multiprecision/test/test_cpp_int_lit.cpp57
-rw-r--r--libs/multiprecision/test/test_cpp_int_serial.cpp177
-rw-r--r--libs/multiprecision/test/test_cpp_rat_serial.cpp163
-rw-r--r--libs/multiprecision/test/test_exp.cpp233
-rw-r--r--libs/multiprecision/test/test_fixed_int.cpp165
-rw-r--r--libs/multiprecision/test/test_float128_serial.cpp26
-rw-r--r--libs/multiprecision/test/test_float_io.cpp336
-rw-r--r--libs/multiprecision/test/test_float_serial.hpp132
-rw-r--r--libs/multiprecision/test/test_fpclassify.cpp342
-rw-r--r--libs/multiprecision/test/test_generic_conv.cpp207
-rw-r--r--libs/multiprecision/test/test_gmp_conversions.cpp158
-rw-r--r--libs/multiprecision/test/test_int_io.cpp169
-rw-r--r--libs/multiprecision/test/test_log.cpp264
-rw-r--r--libs/multiprecision/test/test_miller_rabin.cpp90
-rw-r--r--libs/multiprecision/test/test_mixed_cpp_int.cpp119
-rw-r--r--libs/multiprecision/test/test_mixed_float.cpp57
-rw-r--r--libs/multiprecision/test/test_move.cpp336
-rw-r--r--libs/multiprecision/test/test_mpfi.cpp284
-rw-r--r--libs/multiprecision/test/test_mpfr_conversions.cpp131
-rw-r--r--libs/multiprecision/test/test_native_integer.cpp101
-rw-r--r--libs/multiprecision/test/test_numeric_limits.cpp288
-rw-r--r--libs/multiprecision/test/test_pow.cpp848
-rw-r--r--libs/multiprecision/test/test_rat_float_interconv.cpp260
-rw-r--r--libs/multiprecision/test/test_rational_io.cpp146
-rw-r--r--libs/multiprecision/test/test_round.cpp468
-rw-r--r--libs/multiprecision/test/test_sin.cpp351
-rw-r--r--libs/multiprecision/test/test_sinh.cpp261
-rw-r--r--libs/multiprecision/test/test_sqrt.cpp242
-rw-r--r--libs/multiprecision/test/test_tan.cpp634
-rw-r--r--libs/multiprecision/test/test_tanh.cpp177
-rw-r--r--libs/multiprecision/test/test_test.cpp89
-rw-r--r--libs/multiprecision/test/ublas_interop/common/init.hpp100
-rw-r--r--libs/multiprecision/test/ublas_interop/common/testhelper.hpp74
-rw-r--r--libs/multiprecision/test/ublas_interop/test1.cpp20
-rw-r--r--libs/multiprecision/test/ublas_interop/test1.hpp62
-rw-r--r--libs/multiprecision/test/ublas_interop/test11.cpp265
-rw-r--r--libs/multiprecision/test/ublas_interop/test12.cpp277
-rw-r--r--libs/multiprecision/test/ublas_interop/test13.cpp321
-rw-r--r--libs/multiprecision/test/ublas_interop/test2.cpp87
-rw-r--r--libs/multiprecision/test/ublas_interop/test2.hpp79
-rw-r--r--libs/multiprecision/test/ublas_interop/test21.cpp95
-rw-r--r--libs/multiprecision/test/ublas_interop/test22.cpp147
-rw-r--r--libs/multiprecision/test/ublas_interop/test23.cpp208
-rw-r--r--libs/multiprecision/test/ublas_interop/test3.cpp20
-rw-r--r--libs/multiprecision/test/ublas_interop/test3.hpp67
-rw-r--r--libs/multiprecision/test/ublas_interop/test31.cpp248
-rw-r--r--libs/multiprecision/test/ublas_interop/test32.cpp324
-rw-r--r--libs/multiprecision/test/ublas_interop/test33.cpp347
-rw-r--r--libs/multiprecision/test/ublas_interop/test4.cpp19
-rw-r--r--libs/multiprecision/test/ublas_interop/test4.hpp68
-rw-r--r--libs/multiprecision/test/ublas_interop/test42.cpp361
-rw-r--r--libs/multiprecision/test/ublas_interop/test43.cpp326
-rw-r--r--libs/multiprecision/test/ublas_interop/test5.cpp19
-rw-r--r--libs/multiprecision/test/ublas_interop/test5.hpp64
-rw-r--r--libs/multiprecision/test/ublas_interop/test52.cpp214
-rw-r--r--libs/multiprecision/test/ublas_interop/test53.cpp223
-rw-r--r--libs/multiprecision/test/ublas_interop/test6.cpp19
-rw-r--r--libs/multiprecision/test/ublas_interop/test6.hpp62
-rw-r--r--libs/multiprecision/test/ublas_interop/test62.cpp218
-rw-r--r--libs/multiprecision/test/ublas_interop/test63.cpp223
-rw-r--r--libs/multiprecision/test/ublas_interop/test7.cpp31
-rw-r--r--libs/multiprecision/test/ublas_interop/test7.hpp66
-rw-r--r--libs/multiprecision/test/ublas_interop/test71.cpp174
-rw-r--r--libs/multiprecision/test/ublas_interop/test72.cpp165
-rw-r--r--libs/multiprecision/test/ublas_interop/test73.cpp202
-rw-r--r--libs/multiprecision/tools/sincos.cpp75
419 files changed, 77678 insertions, 0 deletions
diff --git a/libs/multiprecision/config/Jamfile.v2 b/libs/multiprecision/config/Jamfile.v2
new file mode 100644
index 0000000000..563671f25f
--- /dev/null
+++ b/libs/multiprecision/config/Jamfile.v2
@@ -0,0 +1,64 @@
+# copyright John Maddock 2008
+# 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.
+
+import modules ;
+import path ;
+
+local gmp_path = [ modules.peek : GMP_PATH ] ;
+local mpfr_path = [ modules.peek : MPFR_PATH ] ;
+local mpfi_path = [ modules.peek : MPFI_PATH ] ;
+local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
+
+project : requirements
+ <include>$(gmp_path)
+ <include>$(gmp_path)/mpfr
+ <include>$(gmp_path)/gmpfrxx
+ <include>$(mpfr_path)
+ <include>$(mpfi_path)
+ <include>$(mpfi_path)/src
+ <include>$(tommath_path)
+ <include>../../..
+ <search>$(gmp_path)
+ <search>$(mpfr_path)
+ <search>$(mpfr_path)/build.vc10/lib/Win32/Debug
+ <search>$(tommath_path)
+ <search>$(mpfi_path)
+ <search>$(mpfi_path)/src
+ # We set these to make it easier to set up and test GMP and MPFR under Win32:
+ <toolset>msvc:<runtime-link>static
+ <toolset>msvc:<link>static
+ <toolset>intel-win:<runtime-link>static
+ <toolset>intel-win:<link>static
+ <toolset>msvc:<warnings>all
+ <toolset>gcc:<cxxflags>-Wall
+ <toolset>gcc:<cxxflags>-Wextra
+ ;
+
+lib gmp ;
+lib mpfr ;
+lib mpfi ;
+lib quadmath ;
+
+exe has_gmp : has_gmp.cpp gmp :
+ <include>$(gmp_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/gmpfrxx ;
+exe has_mpfr : has_mpfr.cpp mpfr gmp :
+ <include>$(mpfr_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/gmpfrxx <include>$(gmp_path) ;
+exe has_mpfi : has_mpfi.cpp mpfi mpfr gmp :
+ <include>$(mpfr_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/gmpfrxx <include>$(gmp_path) ;
+obj has_tommath : has_tommath.cpp :
+ <include>$(tommath_path) ;
+run has_float128.cpp quadmath : : : : has_float128 ;
+exe has_intel_quad : has_intel_quad.cpp : <cxxflags>-Qoption,cpp,--extended_float_type ;
+
+explicit has_gmp ;
+explicit has_mpfr ;
+explicit has_mpfi ;
+explicit has_tommath ;
+explicit has_float128 ;
+explicit has_intel_quad ;
+
+
+
+
diff --git a/libs/multiprecision/config/has_float128.cpp b/libs/multiprecision/config/has_float128.cpp
new file mode 100644
index 0000000000..38a9fee283
--- /dev/null
+++ b/libs/multiprecision/config/has_float128.cpp
@@ -0,0 +1,18 @@
+// 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)
+
+extern "C" {
+#include <quadmath.h>
+}
+
+int main()
+{
+ __float128 f = -2.0Q;
+ f = fabsq(f);
+ f = expq(f);
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/config/has_gmp.cpp b/libs/multiprecision/config/has_gmp.cpp
new file mode 100644
index 0000000000..8bb1fe7dc7
--- /dev/null
+++ b/libs/multiprecision/config/has_gmp.cpp
@@ -0,0 +1,32 @@
+// Copyright John Maddock 2008.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <gmp.h>
+#include <boost/config.hpp>
+
+#ifdef __GNUC__
+#pragma message "__GNU_MP_VERSION=" BOOST_STRINGIZE(__GNU_MP_VERSION)
+#pragma message "__GNU_MP_VERSION_MINOR=" BOOST_STRINGIZE(__GNU_MP_VERSION_MINOR)
+#endif
+
+#if (__GNU_MP_VERSION < 4) || ((__GNU_MP_VERSION == 4) && (__GNU_MP_VERSION_MINOR < 2))
+#error "Incompatible GMP version"
+#endif
+
+int main()
+{
+ void *(*alloc_func_ptr) (size_t);
+ void *(*realloc_func_ptr) (void *, size_t, size_t);
+ void (*free_func_ptr) (void *, size_t);
+
+ mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
+
+ mpz_t integ;
+ mpz_init (integ);
+ mpz_clear (integ);
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/config/has_intel_quad.cpp b/libs/multiprecision/config/has_intel_quad.cpp
new file mode 100644
index 0000000000..a2db80cc50
--- /dev/null
+++ b/libs/multiprecision/config/has_intel_quad.cpp
@@ -0,0 +1,16 @@
+// 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)
+
+extern "C" _Quad __fabs(_Quad);
+
+int main()
+{
+ _Quad f = -2.0Q;
+ f = __fabsq(f);
+
+ return 0;
+}
+
+
diff --git a/libs/multiprecision/config/has_mpfi.cpp b/libs/multiprecision/config/has_mpfi.cpp
new file mode 100644
index 0000000000..b0e93e50d7
--- /dev/null
+++ b/libs/multiprecision/config/has_mpfi.cpp
@@ -0,0 +1,55 @@
+// Copyright John Maddock 2012.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <mpfi.h>
+#include <boost/config.hpp>
+
+#ifdef __GNUC__
+#pragma message "MPFR_VERSION_STRING=" MPFR_VERSION_STRING
+#endif
+
+#if (__GNU_MP_VERSION < 4) || ((__GNU_MP_VERSION == 4) && (__GNU_MP_VERSION_MINOR < 2))
+#error "Incompatible GMP version"
+#endif
+
+#if (MPFR_VERSION < 3)
+#error "Incompatible MPFR version"
+#endif
+
+#ifdef __GNUC__
+#pragma message "__GNU_MP_VERSION=" BOOST_STRINGIZE(__GNU_MP_VERSION)
+#pragma message "__GNU_MP_VERSION_MINOR=" BOOST_STRINGIZE(__GNU_MP_VERSION_MINOR)
+#endif
+
+#if (__GNU_MP_VERSION < 4) || ((__GNU_MP_VERSION == 4) && (__GNU_MP_VERSION_MINOR < 2))
+#error "Incompatible GMP version"
+#endif
+
+/*
+#ifdef __GNUC__
+#pragma message "MPFI_VERSION_MAJOR=" BOOST_STRINGIZE(MPFI_VERSION_MAJOR)
+#pragma message "MPFI_VERSION_MAJOR=" BOOST_STRINGIZE(MPFI_VERSION_MAJOR)
+#endif
+
+#if MPFI_VERSION_MAJOR < 1
+#error "Incompatible MPFI version"
+#endif
+#if (MPFI_VERSION_MAJOR == 1) && (MPFI_VERSION_MINOR < 5)
+#error "Incompatible MPFI version"
+#endif
+*/
+int main()
+{
+ void *(*alloc_func_ptr) (size_t);
+ void *(*realloc_func_ptr) (void *, size_t, size_t);
+ void (*free_func_ptr) (void *, size_t);
+
+ mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
+
+ mpfr_buildopt_tls_p();
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/config/has_mpfr.cpp b/libs/multiprecision/config/has_mpfr.cpp
new file mode 100644
index 0000000000..86101a3804
--- /dev/null
+++ b/libs/multiprecision/config/has_mpfr.cpp
@@ -0,0 +1,42 @@
+// Copyright John Maddock 2012.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <mpfr.h>
+#include <boost/config.hpp>
+
+#ifdef __GNUC__
+#pragma message "MPFR_VERSION_STRING=" MPFR_VERSION_STRING
+#endif
+
+#if (__GNU_MP_VERSION < 4) || ((__GNU_MP_VERSION == 4) && (__GNU_MP_VERSION_MINOR < 2))
+#error "Incompatible GMP version"
+#endif
+
+#if (MPFR_VERSION < 3)
+#error "Incompatible MPFR version"
+#endif
+
+#ifdef __GNUC__
+#pragma message "__GNU_MP_VERSION=" BOOST_STRINGIZE(__GNU_MP_VERSION)
+#pragma message "__GNU_MP_VERSION_MINOR=" BOOST_STRINGIZE(__GNU_MP_VERSION_MINOR)
+#endif
+
+#if (__GNU_MP_VERSION < 4) || ((__GNU_MP_VERSION == 4) && (__GNU_MP_VERSION_MINOR < 2))
+#error "Incompatible GMP version"
+#endif
+
+int main()
+{
+ void *(*alloc_func_ptr) (size_t);
+ void *(*realloc_func_ptr) (void *, size_t, size_t);
+ void (*free_func_ptr) (void *, size_t);
+
+ mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
+
+ mpfr_buildopt_tls_p();
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/config/has_tommath.cpp b/libs/multiprecision/config/has_tommath.cpp
new file mode 100644
index 0000000000..19f1d80115
--- /dev/null
+++ b/libs/multiprecision/config/has_tommath.cpp
@@ -0,0 +1,15 @@
+// Copyright John Maddock 2011.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <tommath.h>
+
+int main()
+{
+ mp_int v;
+ mp_init(&v);
+ mp_clear(&v);
+ return 0;
+}
+
diff --git a/libs/multiprecision/doc/Jamfile.v2 b/libs/multiprecision/doc/Jamfile.v2
new file mode 100644
index 0000000000..c9479e570e
--- /dev/null
+++ b/libs/multiprecision/doc/Jamfile.v2
@@ -0,0 +1,82 @@
+
+# Copyright John Maddock 2011. 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)
+
+using quickbook ;
+using auto-index ;
+
+path-constant images_location : html ;
+path-constant here : . ;
+
+xml multiprecision : multiprecision.qbk ;
+boostbook standalone
+ :
+ multiprecision
+ :
+ # Path for links to Boost:
+ <xsl:param>boost.root=../../../..
+
+ # Some general style settings:
+ <xsl:param>table.footnote.number.format=1
+ <xsl:param>footnote.number.format=1
+ #<xsl:param>html.stylesheet=../../../../doc/src/boostbook.css
+
+ # HTML options first:
+ # Use graphics not text for navigation:
+ <xsl:param>navig.graphics=1
+ # How far down we chunk nested sections, basically all of them:
+ <xsl:param>chunk.section.depth=10
+ # Don't put the first section on the same page as the TOC:
+ <xsl:param>chunk.first.sections=10
+ # How far down sections get TOC's
+ <xsl:param>toc.section.depth=10
+ # Max depth in each TOC:
+ <xsl:param>toc.max.depth=4
+ # How far down we go with TOC's
+ #<xsl:param>generate.section.toc.level=10
+ # Index on type:
+ <xsl:param>index.on.type=1
+
+ # PDF Options:
+ # TOC Generation: this is needed for FOP-0.9 and later:
+ <xsl:param>fop1.extensions=0
+ <format>pdf:<xsl:param>xep.extensions=1
+ # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
+ <format>pdf:<xsl:param>fop.extensions=0
+ <format>pdf:<xsl:param>fop1.extensions=0
+ # No indent on body text:
+ <format>pdf:<xsl:param>body.start.indent=0pt
+ # Margin size:
+ <format>pdf:<xsl:param>page.margin.inner=0.5in
+ # Margin size:
+ <format>pdf:<xsl:param>page.margin.outer=0.5in
+ # Paper type = A4
+ <format>pdf:<xsl:param>paper.type=A4
+ # Yes, we want graphics for admonishments:
+ <xsl:param>admon.graphics=1
+ # Set this one for PDF generation *only*:
+ # default pnd graphics are awful in PDF form,
+ # better use SVG's instead:
+ <format>pdf:<xsl:param>admon.graphics.extension=".svg"
+ <format>pdf:<xsl:param>use.role.for.mediaobject=1
+ <format>pdf:<xsl:param>preferred.mediaobject.role=print
+ <format>pdf:<xsl:param>img.src.path=$(images_location)/
+ <format>pdf:<xsl:param>draft.mode="no"
+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/math/doc/sf_and_dist/html
+ # Index generation:
+ <auto-index>on
+ <auto-index-script>$(here)/index.idx
+ <auto-index-prefix>$(here)/../../..
+ <auto-index-verbose>on
+ <format>html:<auto-index-internal>on
+ <quickbook-define>enable_index
+ <format>pdf:<xsl:param>index.on.type=1
+ ;
+
+install pdfinstall : standalone : <location>. <install-type>PDF <name>multiprecision.pdf ;
+
+
+
+
+
diff --git a/libs/multiprecision/doc/debugger1.png b/libs/multiprecision/doc/debugger1.png
new file mode 100644
index 0000000000..2b19569772
--- /dev/null
+++ b/libs/multiprecision/doc/debugger1.png
Binary files differ
diff --git a/libs/multiprecision/doc/debugger2.png b/libs/multiprecision/doc/debugger2.png
new file mode 100644
index 0000000000..f85a7ba0f0
--- /dev/null
+++ b/libs/multiprecision/doc/debugger2.png
Binary files differ
diff --git a/libs/multiprecision/doc/debugger3.png b/libs/multiprecision/doc/debugger3.png
new file mode 100644
index 0000000000..c0f6d03456
--- /dev/null
+++ b/libs/multiprecision/doc/debugger3.png
Binary files differ
diff --git a/libs/multiprecision/doc/debugger4.png b/libs/multiprecision/doc/debugger4.png
new file mode 100644
index 0000000000..6db2b3c2f7
--- /dev/null
+++ b/libs/multiprecision/doc/debugger4.png
Binary files differ
diff --git a/libs/multiprecision/doc/debugger5.png b/libs/multiprecision/doc/debugger5.png
new file mode 100644
index 0000000000..59870fcf60
--- /dev/null
+++ b/libs/multiprecision/doc/debugger5.png
Binary files differ
diff --git a/libs/multiprecision/doc/debugger6.png b/libs/multiprecision/doc/debugger6.png
new file mode 100644
index 0000000000..2bab4f7b19
--- /dev/null
+++ b/libs/multiprecision/doc/debugger6.png
Binary files differ
diff --git a/libs/multiprecision/doc/debugger7.png b/libs/multiprecision/doc/debugger7.png
new file mode 100644
index 0000000000..6afeaa50d6
--- /dev/null
+++ b/libs/multiprecision/doc/debugger7.png
Binary files differ
diff --git a/libs/multiprecision/doc/floating_point_eg1.mml b/libs/multiprecision/doc/floating_point_eg1.mml
new file mode 100644
index 0000000000..f98264f18e
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg1.mml
@@ -0,0 +1,154 @@
+<?xml version='1.0'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
+ 'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
+ [<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head><title>floating_point_eg1</title>
+<!-- MathML created with MathCast Equation Editor version 0.89 -->
+</head>
+<body>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+ <mrow>
+ <mfenced>
+ <mrow>
+ <mn>1</mn>
+ </mrow>
+ </mfenced>
+ <mspace width="1em"/>
+ <mspace width="1em"/>
+ <mtable>
+ <mtr>
+ <mtd>
+ <mi>f</mi>
+ <mo>&#x2032;</mo>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ </mtd>
+ <mtd>
+ <mo>&#x2248;</mo>
+ </mtd>
+ <mtd>
+ <msub>
+ <mi>m</mi>
+ <mn>1</mn>
+ </msub>
+ <mo>+</mo>
+ <mi>O</mi>
+ <mfenced>
+ <mrow>
+ <mi>d</mi>
+ <msup>
+ <mi>x</mi>
+ <mn>2</mn>
+ </msup>
+ </mrow>
+ </mfenced>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mi>f</mi>
+ <mo>&#x2032;</mo>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ </mtd>
+ <mtd>
+ <mo>&#x2248;</mo>
+ </mtd>
+ <mtd>
+ <mfrac>
+ <mn>4</mn>
+ <mn>3</mn>
+ </mfrac>
+ <msub>
+ <mi>m</mi>
+ <mn>1</mn>
+ </msub>
+ <mo>&#x2212;</mo>
+ <mfrac>
+ <mn>1</mn>
+ <mn>3</mn>
+ </mfrac>
+ <msub>
+ <mi>m</mi>
+ <mn>2</mn>
+ </msub>
+ <mo>+</mo>
+ <mi>O</mi>
+ <mfenced>
+ <mrow>
+ <mi>d</mi>
+ <msup>
+ <mi>x</mi>
+ <mn>4</mn>
+ </msup>
+ </mrow>
+ </mfenced>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <mi>f</mi>
+ <mo>&#x2032;</mo>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ </mtd>
+ <mtd>
+ <mo>&#x2248;</mo>
+ </mtd>
+ <mtd>
+ <mfrac>
+ <mn>3</mn>
+ <mn>2</mn>
+ </mfrac>
+ <msub>
+ <mi>m</mi>
+ <mn>1</mn>
+ </msub>
+ <mo>&#x2212;</mo>
+ <mfrac>
+ <mn>3</mn>
+ <mn>5</mn>
+ </mfrac>
+ <msub>
+ <mi>m</mi>
+ <mn>2</mn>
+ </msub>
+ <mo>+</mo>
+ <mfrac>
+ <mn>1</mn>
+ <mn>10</mn>
+ </mfrac>
+ <msub>
+ <mi>m</mi>
+ <mn>3</mn>
+ </msub>
+ <mo>+</mo>
+ <mi>O</mi>
+ <mfenced>
+ <mrow>
+ <mi>d</mi>
+ <msup>
+ <mi>x</mi>
+ <mn>6</mn>
+ </msup>
+ </mrow>
+ </mfenced>
+ </mtd>
+ </mtr>
+ </mtable>
+ </mrow>
+</math>
+</body>
+</html>
+
+
diff --git a/libs/multiprecision/doc/floating_point_eg1.png b/libs/multiprecision/doc/floating_point_eg1.png
new file mode 100644
index 0000000000..b250bda458
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg1.png
Binary files differ
diff --git a/libs/multiprecision/doc/floating_point_eg1.svg b/libs/multiprecision/doc/floating_point_eg1.svg
new file mode 100644
index 0000000000..c8383322a1
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg1.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg:svg xmlns="http://www.w3.org/1998/Math/MathML" xmlns:svg="http://www.w3.org/2000/svg" height="54.303540pt" width="220.900425pt" xmlns:svgmath="http://www.grigoriev.ru/svgmath" viewBox="0 -31.136145 220.900425 54.303540"><svg:metadata><svgmath:metrics top="54.3035397296" axis="27.1517698648" baseline="23.1673948648" bottom="0.0"/></svg:metadata><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.998047" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" fill="black">1</svg:text></svg:g><svg:g transform="translate(9.996094, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.998047" font-family="Times New Roman" fill="black">)</svg:text></svg:g><svg:g transform="translate(13.992188, 0.000000)"/><svg:g transform="translate(25.992188, 0.000000)"/><svg:g transform="translate(37.992188, -3.984375)"><svg:g transform="translate(0.000000, -16.012195)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.735352" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text><svg:g transform="translate(9.079426, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.312500" font-family="Times New Roman" fill="black">′</svg:text></svg:g><svg:g transform="translate(11.704426, 0.000000)"><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="12.012889" transform="scale(0.998927, 1)" text-anchor="middle" y="3.981593" x="2.000193" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g><svg:g transform="translate(9.720703, -3.984375)"><svg:text font-size="12.012889" transform="scale(0.998927, 1)" text-anchor="middle" y="3.981593" x="2.000193" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(35.021223, -19.996570)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.292969" font-family="Times New Roman" fill="black">≈</svg:text></svg:g><svg:g transform="translate(87.976738, -16.012195)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">1</svg:text></svg:g><svg:g transform="translate(15.592680, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(25.026922, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">O</svg:text></svg:g><svg:g transform="translate(33.692937, 0.000000)"><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="15.084683" transform="scale(0.795509, 1)" text-anchor="middle" y="3.318638" x="2.511659" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text><svg:g transform="translate(6.492188, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.724609, -5.367188)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(20.472891, -3.984375)"><svg:text font-size="15.084683" transform="scale(0.795509, 1)" text-anchor="middle" y="3.318638" x="2.511659" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(0.000000, 3.397629)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.735352" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text><svg:g transform="translate(9.079426, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.312500" font-family="Times New Roman" fill="black">′</svg:text></svg:g><svg:g transform="translate(11.704426, 0.000000)"><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="12.012889" transform="scale(0.998927, 1)" text-anchor="middle" y="3.981593" x="2.000193" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g><svg:g transform="translate(9.720703, -3.984375)"><svg:text font-size="12.012889" transform="scale(0.998927, 1)" text-anchor="middle" y="3.981593" x="2.000193" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(35.021223, -0.586746)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.292969" font-family="Times New Roman" fill="black">≈</svg:text></svg:g><svg:g transform="translate(69.152496, 3.397629)"><svg:g transform="translate(0.000000, -3.984375)"><svg:g transform="translate(0.585938, -1.599609)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">4</svg:text></svg:g><svg:g transform="translate(0.585938, 7.357266)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="5.431875" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(6.017812, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">1</svg:text></svg:g></svg:g><svg:g transform="translate(21.610492, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(31.630672, -3.984375)"><svg:g transform="translate(0.585938, -1.599609)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">1</svg:text></svg:g><svg:g transform="translate(0.585938, 7.357266)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="5.431875" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(37.648484, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g></svg:g><svg:g transform="translate(53.241164, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(62.675406, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">O</svg:text></svg:g><svg:g transform="translate(71.341422, 0.000000)"><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="15.084683" transform="scale(0.795509, 1)" text-anchor="middle" y="3.318638" x="2.511659" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text><svg:g transform="translate(6.492188, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.724609, -5.367188)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">4</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(20.472891, -3.984375)"><svg:text font-size="15.084683" transform="scale(0.795509, 1)" text-anchor="middle" y="3.318638" x="2.511659" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(0.000000, 23.679035)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.735352" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text><svg:g transform="translate(9.079426, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.312500" font-family="Times New Roman" fill="black">′</svg:text></svg:g><svg:g transform="translate(11.704426, 0.000000)"><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="12.012889" transform="scale(0.998927, 1)" text-anchor="middle" y="3.981593" x="2.000193" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g><svg:g transform="translate(9.720703, -3.984375)"><svg:text font-size="12.012889" transform="scale(0.998927, 1)" text-anchor="middle" y="3.981593" x="2.000193" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(35.021223, 19.694660)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.292969" font-family="Times New Roman" fill="black">≈</svg:text></svg:g><svg:g transform="translate(51.207160, 23.679035)"><svg:g transform="translate(0.000000, -3.984375)"><svg:g transform="translate(0.585938, -1.699453)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:g transform="translate(0.585938, 7.357266)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="5.431875" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(6.017812, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">1</svg:text></svg:g></svg:g><svg:g transform="translate(21.610492, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(31.630672, -3.984375)"><svg:g transform="translate(0.585938, -1.699453)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:g transform="translate(0.585938, 7.240781)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">5</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="5.431875" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(37.648484, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g></svg:g><svg:g transform="translate(53.241164, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(63.261343, -3.984375)"><svg:g transform="translate(2.715937, -1.599609)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">1</svg:text></svg:g><svg:g transform="translate(0.585938, 7.357266)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="4.260000" font-family="Times New Roman" fill="black">10</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="9.691875" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(73.539156, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g></svg:g><svg:g transform="translate(89.131836, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(98.566078, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">O</svg:text></svg:g><svg:g transform="translate(107.232093, 0.000000)"><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="15.084683" transform="scale(0.795509, 1)" text-anchor="middle" y="3.318638" x="2.511659" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text><svg:g transform="translate(6.492188, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.724609, -5.367188)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">6</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(20.472891, -3.984375)"><svg:text font-size="15.084683" transform="scale(0.795509, 1)" text-anchor="middle" y="3.318638" x="2.511659" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g></svg:g></svg:svg> \ No newline at end of file
diff --git a/libs/multiprecision/doc/floating_point_eg2.mml b/libs/multiprecision/doc/floating_point_eg2.mml
new file mode 100644
index 0000000000..9a87f93c59
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg2.mml
@@ -0,0 +1,152 @@
+<?xml version='1.0'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
+ 'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
+ [<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head><title>floating_point_eg2</title>
+<!-- MathML created with MathCast Equation Editor version 0.89 -->
+</head>
+<body>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+ <mrow>
+ <mfenced>
+ <mrow>
+ <mn>2</mn>
+ </mrow>
+ </mfenced>
+ <mspace width="1em"/>
+ <mspace width="1em"/>
+ <mtable>
+ <mtr>
+ <mtd>
+ <msub>
+ <mi>m</mi>
+ <mn>1</mn>
+ </msub>
+ </mtd>
+ <mtd>
+ <mo>=</mo>
+ </mtd>
+ <mtd>
+ <mfrac>
+ <mrow>
+ <mi>f</mi>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ <mo>+</mo>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ <mo>&#x2212;</mo>
+ <mi>f</mi>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ <mo>&#x2212;</mo>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ </mrow>
+ <mrow>
+ <mn>2</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfrac>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <msub>
+ <mi>m</mi>
+ <mn>2</mn>
+ </msub>
+ </mtd>
+ <mtd>
+ <mo>=</mo>
+ </mtd>
+ <mtd>
+ <mfrac>
+ <mrow>
+ <mi>f</mi>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ <mo>+</mo>
+ <mn>2</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ <mo>&#x2212;</mo>
+ <mi>f</mi>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ <mo>&#x2212;</mo>
+ <mn>2</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ </mrow>
+ <mrow>
+ <mn>4</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfrac>
+ </mtd>
+ </mtr>
+ <mtr>
+ <mtd>
+ <msub>
+ <mi>m</mi>
+ <mn>3</mn>
+ </msub>
+ </mtd>
+ <mtd>
+ <mo>=</mo>
+ </mtd>
+ <mtd>
+ <mfrac>
+ <mrow>
+ <mi>f</mi>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ <mo>+</mo>
+ <mn>3</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ <mo>&#x2212;</mo>
+ <mi>f</mi>
+ <mfenced>
+ <mrow>
+ <mi>x</mi>
+ <mo>&#x2212;</mo>
+ <mn>3</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfenced>
+ </mrow>
+ <mrow>
+ <mn>6</mn>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfrac>
+ </mtd>
+ </mtr>
+ </mtable>
+ </mrow>
+</math>
+</body>
+</html>
+
diff --git a/libs/multiprecision/doc/floating_point_eg2.png b/libs/multiprecision/doc/floating_point_eg2.png
new file mode 100644
index 0000000000..cb18e4ac92
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg2.png
Binary files differ
diff --git a/libs/multiprecision/doc/floating_point_eg2.svg b/libs/multiprecision/doc/floating_point_eg2.svg
new file mode 100644
index 0000000000..dd5afb3824
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg2.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg:svg xmlns="http://www.w3.org/1998/Math/MathML" xmlns:svg="http://www.w3.org/2000/svg" height="61.667371pt" width="160.177743pt" xmlns:svgmath="http://www.grigoriev.ru/svgmath" viewBox="0 -34.818060 160.177743 61.667371"><svg:metadata><svgmath:metrics top="61.6673705609" axis="30.8336852804" baseline="26.8493102804" bottom="0.0"/></svg:metadata><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.998047" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" fill="black">2</svg:text></svg:g><svg:g transform="translate(9.996094, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.998047" font-family="Times New Roman" fill="black">)</svg:text></svg:g><svg:g transform="translate(13.992188, 0.000000)"/><svg:g transform="translate(25.992188, 0.000000)"/><svg:g transform="translate(37.992188, -3.984375)"><svg:g transform="translate(0.000000, -17.486840)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">1</svg:text></svg:g></svg:g><svg:g transform="translate(22.526016, -21.471215)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">=</svg:text></svg:g><svg:g transform="translate(43.153594, -21.471215)"><svg:g transform="translate(0.585938, -3.438398)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.652100" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text><svg:g transform="translate(5.499727, 0.000000)"><svg:g transform="translate(0.000000, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(2.837227, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.957804, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(12.656116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(17.265569, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:g transform="translate(24.167268, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g><svg:g transform="translate(34.397553, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(41.095865, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.652100" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text></svg:g><svg:g transform="translate(46.595591, 0.000000)"><svg:g transform="translate(0.000000, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(2.837227, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.957804, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(12.656116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(17.265569, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:g transform="translate(24.167268, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(30.919018, 7.515352)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text><svg:g transform="translate(4.260000, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(8.869453, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="74.771961" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(0.000000, 4.858012)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g></svg:g><svg:g transform="translate(22.526016, 0.873637)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">=</svg:text></svg:g><svg:g transform="translate(38.893594, 0.873637)"><svg:g transform="translate(0.585938, -3.438398)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.652100" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text><svg:g transform="translate(5.499727, 0.000000)"><svg:g transform="translate(0.000000, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(2.837227, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.957804, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(12.656116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g><svg:g transform="translate(16.916116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(21.525569, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:g transform="translate(28.427268, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g><svg:g transform="translate(38.657553, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(45.355865, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.652100" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text></svg:g><svg:g transform="translate(50.855591, 0.000000)"><svg:g transform="translate(0.000000, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(2.837227, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.957804, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(12.656116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">2</svg:text></svg:g><svg:g transform="translate(16.916116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(21.525569, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:g transform="translate(28.427268, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(35.179018, 7.515352)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">4</svg:text><svg:g transform="translate(4.260000, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(8.869453, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="83.291961" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(0.000000, 27.202865)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="4.333008" font-family="Times New Roman" font-style="italic" fill="black">m</svg:text><svg:g transform="translate(8.666016, 2.700996)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g></svg:g><svg:g transform="translate(22.526016, 23.218490)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">=</svg:text></svg:g><svg:g transform="translate(38.893594, 23.218490)"><svg:g transform="translate(0.585938, -3.438398)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.652100" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text><svg:g transform="translate(5.499727, 0.000000)"><svg:g transform="translate(0.000000, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(2.837227, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.957804, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">+</svg:text></svg:g><svg:g transform="translate(12.656116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:g transform="translate(16.916116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(21.525569, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:g transform="translate(28.427268, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g><svg:g transform="translate(38.657553, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(45.355865, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.652100" font-family="Times New Roman" font-style="italic" fill="black">f</svg:text></svg:g><svg:g transform="translate(50.855591, 0.000000)"><svg:g transform="translate(0.000000, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(2.837227, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(5.957804, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">−</svg:text></svg:g><svg:g transform="translate(12.656116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:g transform="translate(16.916116, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(21.525569, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:g transform="translate(28.427268, -2.828906)"><svg:text font-size="8.529151" transform="scale(0.998927, 1)" text-anchor="middle" y="2.826931" x="1.420137" font-family="Times New Roman" fill="black">)</svg:text></svg:g></svg:g></svg:g><svg:g transform="translate(35.179018, 7.515352)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" fill="black">6</svg:text><svg:g transform="translate(4.260000, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.130000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(8.869453, 0.000000)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="83.291961" y2="0.000000" fill="none"/></svg:g></svg:g></svg:svg> \ No newline at end of file
diff --git a/libs/multiprecision/doc/floating_point_eg3.mml b/libs/multiprecision/doc/floating_point_eg3.mml
new file mode 100644
index 0000000000..cdf690d29a
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg3.mml
@@ -0,0 +1,53 @@
+<?xml version='1.0'?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
+ 'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
+ [<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>
+<html xmlns='http://www.w3.org/1999/xhtml'>
+<head><title>floating_point_eg3</title>
+<!-- MathML created with MathCast Equation Editor version 0.89 -->
+</head>
+<body>
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+ <mrow>
+ <mfenced>
+ <mrow>
+ <mn>3</mn>
+ </mrow>
+ </mfenced>
+ <mspace width="1em"/>
+ <mspace width="1em"/>
+ <mfrac>
+ <mi>d</mi>
+ <mrow>
+ <mi>d</mi>
+ <mi>x</mi>
+ </mrow>
+ </mfrac>
+ <mi>sin</mi>
+ <mi>x</mi>
+ <msub>
+ <mo>|</mo>
+ <mrow>
+ <mi>x</mi>
+ <mo>=</mo>
+ <mfrac>
+ <mi>&#x03C0;</mi>
+ <mn>3</mn>
+ </mfrac>
+ </mrow>
+ </msub>
+ <mo>=</mo>
+ <mi>cos</mi>
+ <mfrac>
+ <mi>&#x03C0;</mi>
+ <mn>3</mn>
+ </mfrac>
+ <mo>=</mo>
+ <mfrac>
+ <mn>1</mn>
+ <mn>2</mn>
+ </mfrac>
+ </mrow>
+</math>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/floating_point_eg3.png b/libs/multiprecision/doc/floating_point_eg3.png
new file mode 100644
index 0000000000..2293fd4087
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg3.png
Binary files differ
diff --git a/libs/multiprecision/doc/floating_point_eg3.svg b/libs/multiprecision/doc/floating_point_eg3.svg
new file mode 100644
index 0000000000..aa1f91d301
--- /dev/null
+++ b/libs/multiprecision/doc/floating_point_eg3.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg:svg xmlns="http://www.w3.org/1998/Math/MathML" xmlns:svg="http://www.w3.org/2000/svg" height="21.788697pt" width="148.411782pt" xmlns:svgmath="http://www.grigoriev.ru/svgmath" viewBox="0 -14.078278 148.411782 21.788697"><svg:metadata><svgmath:metrics top="21.7886974437" axis="11.6947942985" baseline="7.71041929854" bottom="0.0"/></svg:metadata><svg:g transform="translate(0.000000, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.998047" font-family="Times New Roman" fill="black">(</svg:text></svg:g><svg:g transform="translate(3.996094, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:g transform="translate(9.996094, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="1.998047" font-family="Times New Roman" fill="black">)</svg:text></svg:g><svg:g transform="translate(13.992188, 0.000000)"/><svg:g transform="translate(25.992188, 0.000000)"/><svg:g transform="translate(38.578125, -3.984375)"><svg:g transform="translate(3.448242, -1.740234)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text></svg:g><svg:g transform="translate(0.585938, 9.931641)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" font-style="italic" fill="black">d</svg:text><svg:g transform="translate(6.492188, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="13.388672" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(52.552734, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="7.001953" font-family="Times New Roman" fill="black">sin</svg:text></svg:g><svg:g transform="translate(66.556641, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.061523" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text></svg:g><svg:g transform="translate(72.281250, -3.984375)"><svg:text font-size="22.156821" transform="scale(0.541594, 1)" text-anchor="middle" y="5.290374" x="2.217846" font-family="Times New Roman" fill="black">|</svg:text><svg:g transform="translate(2.402344, 8.157739)"><svg:text font-size="8.520000" text-anchor="middle" y="0.000000" x="2.173682" font-family="Times New Roman" font-style="italic" fill="black">x</svg:text><svg:g transform="translate(4.064473, -2.828906)"><svg:text font-size="8.520000" text-anchor="middle" y="2.828906" x="2.402490" font-family="Times New Roman" fill="black">=</svg:text></svg:g><svg:g transform="translate(9.285469, -2.828906)"><svg:g transform="translate(0.416016, -0.959712)"><svg:text font-size="8.000000" text-anchor="middle" y="0.000000" x="2.003906" font-family="Times New Roman" font-style="italic" fill="black">Ï€</svg:text></svg:g><svg:g transform="translate(0.544922, 6.272212)"><svg:text font-size="8.000000" text-anchor="middle" y="0.000000" x="2.000000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:line stroke-width="0.416016" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="5.089844" y2="0.000000" fill="none"/></svg:g></svg:g></svg:g><svg:g transform="translate(92.392242, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">=</svg:text></svg:g><svg:g transform="translate(102.493156, 0.000000)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="7.998047" font-family="Times New Roman" fill="black">cos</svg:text></svg:g><svg:g transform="translate(119.075188, -3.984375)"><svg:g transform="translate(0.585938, -1.740234)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.005859" font-family="Times New Roman" font-style="italic" fill="black">Ï€</svg:text></svg:g><svg:g transform="translate(0.779297, 9.708984)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" fill="black">3</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="7.558594" y2="0.000000" fill="none"/></svg:g><svg:g transform="translate(130.553055, -3.984375)"><svg:text font-size="12.000000" text-anchor="middle" y="3.984375" x="3.383789" font-family="Times New Roman" fill="black">=</svg:text></svg:g><svg:g transform="translate(141.239907, -3.984375)"><svg:g transform="translate(0.585938, -1.599609)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" fill="black">1</svg:text></svg:g><svg:g transform="translate(0.585938, 9.708984)"><svg:text font-size="12.000000" text-anchor="middle" y="0.000000" x="3.000000" font-family="Times New Roman" fill="black">2</svg:text></svg:g><svg:line stroke-width="0.585938" x1="0.000000" y1="0.000000" stroke="black" stroke-linecap="butt" stroke-dasharray="none" x2="7.171875" y2="0.000000" fill="none"/></svg:g></svg:svg> \ No newline at end of file
diff --git a/libs/multiprecision/doc/generate.sh b/libs/multiprecision/doc/generate.sh
new file mode 100755
index 0000000000..27d1d5eff1
--- /dev/null
+++ b/libs/multiprecision/doc/generate.sh
@@ -0,0 +1,33 @@
+# Copyright John Maddock 2008.
+# 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)
+#
+# Generates SVG and PNG files from the MML masters.
+#
+# Paths to tools come first, change these to match your system:
+#
+math2svg='m:\download\open\SVGMath-0.3.1\math2svg.py'
+python=/cygdrive/c/Python26/python.exe
+inkscape=/cygdrive/c/progra~1/Inkscape/inkscape
+# Image DPI:
+dpi=120
+
+for mmlfile in $*; do
+ svgfile=$(basename $mmlfile .mml).svg
+ pngfile=$(basename $svgfile .svg).png
+ tempfile=temp.mml
+ # strip html wrappers put in by MathCast:
+ cat $mmlfile | tr -d "\r\n" | sed -e 's/.*\(<math[^>]*>.*<\/math>\).*/\1/' > $tempfile
+
+ echo Generating $svgfile
+ $python $math2svg $tempfile > $svgfile
+ echo Generating $pngfile
+ $inkscape -d $dpi -e $(cygpath -a -w $pngfile) $(cygpath -a -w $svgfile)
+ rm $tempfile
+done
+
+
+
+
+
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes.html
new file mode 100644
index 0000000000..4e16e2c321
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Indexes</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="../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>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</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>
+</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"><a href="indexes/s01.html">Function Index</a></span></dt>
+<dt><span class="section"><a href="indexes/s02.html">Class Index</a></span></dt>
+<dt><span class="section"><a href="indexes/s03.html">Typedef Index</a></span></dt>
+<dt><span class="section"><a href="indexes/s04.html">Index</a></span></dt>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</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>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html
new file mode 100644
index 0000000000..37b47baccf
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s01.html
@@ -0,0 +1,667 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Function Index</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="../indexes.html" title="Indexes">
+<link rel="prev" href="../indexes.html" title="Indexes">
+<link rel="next" href="s02.html" title="Class Index">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s02.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="idm1549766464"></a>Function Index</h3></div></div></div>
+<p><a class="link" href="s01.html#idx_id_0">A</a> <a class="link" href="s01.html#idx_id_1">B</a> <a class="link" href="s01.html#idx_id_2">C</a> <a class="link" href="s01.html#idx_id_3">D</a> <a class="link" href="s01.html#idx_id_4">E</a> <a class="link" href="s01.html#idx_id_5">F</a> <a class="link" href="s01.html#idx_id_7">I</a> <a class="link" href="s01.html#idx_id_8">L</a> <a class="link" href="s01.html#idx_id_9">M</a> <a class="link" href="s01.html#idx_id_11">O</a> <a class="link" href="s01.html#idx_id_12">P</a> <a class="link" href="s01.html#idx_id_13">R</a> <a class="link" href="s01.html#idx_id_14">S</a> <a class="link" href="s01.html#idx_id_15">T</a> <a class="link" href="s01.html#idx_id_17">V</a> <a class="link" href="s01.html#idx_id_18">Z</a></p>
+<div class="variablelist"><dl class="variablelist">
+<dt>
+<a name="idx_id_0"></a><span class="term">A</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">abs</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">add</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/todo.html" title="TODO"><span class="index-entry-level-1">TODO</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">assign</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">assign_components</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_1"></a><span class="term">B</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bits</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/random.html" title="Generating Random Numbers"><span class="index-entry-level-1">Generating Random Numbers</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">Input Output</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rounding.html" title="Rounding Rules for Conversions"><span class="index-entry-level-1">Rounding Rules for Conversions</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_flip</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_set</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_test</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_unset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_2"></a><span class="term">C</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">compare</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_3"></a><span class="term">D</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">data</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">default_precision</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">divide_qr</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_4"></a><span class="term">E</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">empty</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_acos</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_add</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_asin</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan2</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_and</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_or</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_xor</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_flip</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_set</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_test</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_unset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ceil</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_complement</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_convert_to</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cos</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cosh</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_decrement</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_divide</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_eq</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_exp</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fabs</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_floor</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fmod</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_frexp</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gcd</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_get_sign</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_increment</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_integer_sqrt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_is_zero</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lcm</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ldexp</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_left_shift</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log10</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_modulus</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_msb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply_add</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply_subtract</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_pow</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_powm</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_qr</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_right_shift</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_round</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_scalbn</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sin</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sinh</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sqrt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_subtract</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tan</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tanh</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_trunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_5"></a><span class="term">F</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">fpclassify</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_7"></a><span class="term">I</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">if</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">ilogb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">in</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">infinity</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">integer_modulus</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">iround</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isfinite</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isinf</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isnan</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isnormal</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">itrunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_8"></a><span class="term">L</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">llround</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">lltrunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">log_postfix_event</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">log_prefix_event</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">lround</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">lsb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">ltrunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_9"></a><span class="term">M</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">max</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">miller_rabin_test</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">min</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">msb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">multiply</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_11"></a><span class="term">O</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">overlap</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_12"></a><span class="term">P</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">powm</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">precision</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/faq.html" title="FAQ"><span class="index-entry-level-1">FAQ</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../intro.html" title="Introduction"><span class="index-entry-level-1">Introduction</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">proper_subset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_13"></a><span class="term">R</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">r</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/egs/bitops.html" title="Bit Operations"><span class="index-entry-level-1">Bit Operations</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">round</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_14"></a><span class="term">S</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">sign</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">singleton</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">sqrt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">str</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">subset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">subtract</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">swap</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_15"></a><span class="term">T</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">trunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">two</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_17"></a><span class="term">V</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">value</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/cpp_bin_float_ref.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_18"></a><span class="term">Z</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">zero</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">zero_in</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../indexes.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s02.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html
new file mode 100644
index 0000000000..4833265295
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s02.html
@@ -0,0 +1,156 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Class Index</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="../indexes.html" title="Indexes">
+<link rel="prev" href="s01.html" title="Function Index">
+<link rel="next" href="s03.html" title="Typedef Index">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="s01.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s03.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="idm1549437632"></a>Class Index</h3></div></div></div>
+<p><a class="link" href="s02.html#idx_id_21">C</a> <a class="link" href="s02.html#idx_id_22">D</a> <a class="link" href="s02.html#idx_id_23">E</a> <a class="link" href="s02.html#idx_id_24">F</a> <a class="link" href="s02.html#idx_id_25">G</a> <a class="link" href="s02.html#idx_id_26">I</a> <a class="link" href="s02.html#idx_id_27">L</a> <a class="link" href="s02.html#idx_id_28">M</a> <a class="link" href="s02.html#idx_id_29">N</a> <a class="link" href="s02.html#idx_id_34">T</a></p>
+<div class="variablelist"><dl class="variablelist">
+<dt>
+<a name="idx_id_21"></a><span class="term">C</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">component_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-0">cpp_bin_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-0">cpp_dec_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_int_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_22"></a><span class="term">D</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/debug_adaptor.html" title="debug_adaptor"><span class="index-entry-level-0">debug_adaptor</span></a></p></li></ul></div></dd>
+<dt>
+<a name="idx_id_23"></a><span class="term">E</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">expression_template_default</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_24"></a><span class="term">F</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">float128_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_25"></a><span class="term">G</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-0">gmp_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-0">gmp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-0">gmp_rational</span></a></p></li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_26"></a><span class="term">I</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_explicitly_convertible</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_lossy_conversion</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_number_expression</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_restricted_conversion</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_signed_number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_unsigned_number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_27"></a><span class="term">L</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-0">logged_adaptor</span></a></p></li></ul></div></dd>
+<dt>
+<a name="idx_id_28"></a><span class="term">M</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></strong></span></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_29"></a><span class="term">N</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-0">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">number_category</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_34"></a><span class="term">T</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">tommath_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li></ul></div>
+</li></ul></div></dd>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="s01.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s03.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html
new file mode 100644
index 0000000000..071d5bfb4e
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s03.html
@@ -0,0 +1,316 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Typedef Index</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="../indexes.html" title="Indexes">
+<link rel="prev" href="s02.html" title="Class Index">
+<link rel="next" href="s04.html" title="Index">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="s02.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s04.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="idm1549381056"></a>Typedef Index</h3></div></div></div>
+<p><a class="link" href="s03.html#idx_id_40">C</a> <a class="link" href="s03.html#idx_id_43">F</a> <a class="link" href="s03.html#idx_id_45">I</a> <a class="link" href="s03.html#idx_id_46">L</a> <a class="link" href="s03.html#idx_id_47">M</a> <a class="link" href="s03.html#idx_id_52">S</a> <a class="link" href="s03.html#idx_id_53">T</a> <a class="link" href="s03.html#idx_id_54">U</a></p>
+<div class="variablelist"><dl class="variablelist">
+<dt>
+<a name="idx_id_40"></a><span class="term">C</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_cpp_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_cpp_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_cpp_rational_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_double</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_double_extended</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_quad</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_single</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_dec_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_dec_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-0">cpp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></strong></span></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_rational_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_43"></a><span class="term">F</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">float128</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+</ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_45"></a><span class="term">I</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_46"></a><span class="term">L</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">limb_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_47"></a><span class="term">M</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-0">mpfi_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float_1000</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_1000</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_500</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_1000</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_500</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpq_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpz_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mp_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/gi.html" title="Calculating an Integral"><span class="index-entry-level-1">Calculating an Integral</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"><span class="index-entry-level-1">Polynomial Evaluation</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_52"></a><span class="term">S</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">static_mpfr_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">static_mpfr_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_53"></a><span class="term">T</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-0">tommath_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-0">tom_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">tom_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_54"></a><span class="term">U</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="s02.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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="s04.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html
new file mode 100644
index 0000000000..5ed87b4e90
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/indexes/s04.html
@@ -0,0 +1,1370 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Index</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="../indexes.html" title="Indexes">
+<link rel="prev" href="s03.html" title="Typedef Index">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="s03.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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><h3 class="title">
+<a name="idm1549250240"></a>Index</h3></div></div></div>
+<p><a class="link" href="s04.html#idx_id_57">A</a> <a class="link" href="s04.html#idx_id_58">B</a> <a class="link" href="s04.html#idx_id_59">C</a> <a class="link" href="s04.html#idx_id_60">D</a> <a class="link" href="s04.html#idx_id_61">E</a> <a class="link" href="s04.html#idx_id_62">F</a> <a class="link" href="s04.html#idx_id_63">G</a> <a class="link" href="s04.html#idx_id_64">I</a> <a class="link" href="s04.html#idx_id_65">L</a> <a class="link" href="s04.html#idx_id_66">M</a> <a class="link" href="s04.html#idx_id_67">N</a> <a class="link" href="s04.html#idx_id_68">O</a> <a class="link" href="s04.html#idx_id_69">P</a> <a class="link" href="s04.html#idx_id_70">R</a> <a class="link" href="s04.html#idx_id_71">S</a> <a class="link" href="s04.html#idx_id_72">T</a> <a class="link" href="s04.html#idx_id_73">U</a> <a class="link" href="s04.html#idx_id_74">V</a> <a class="link" href="s04.html#idx_id_75">Z</a></p>
+<div class="variablelist"><dl class="variablelist">
+<dt>
+<a name="idx_id_57"></a><span class="term">A</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">abs</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">add</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/todo.html" title="TODO"><span class="index-entry-level-1">TODO</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">assign</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">assign_components</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_58"></a><span class="term">B</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Bit Operations</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/egs/bitops.html" title="Bit Operations"><span class="index-entry-level-1">r</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bits</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/random.html" title="Generating Random Numbers"><span class="index-entry-level-1">Generating Random Numbers</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">Input Output</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rounding.html" title="Rounding Rules for Conversions"><span class="index-entry-level-1">Rounding Rules for Conversions</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_flip</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_set</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_test</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">bit_unset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/lits.html" title="Literal Types and constexpr Support"><span class="index-entry-level-1">Literal Types and constexpr Support</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">BOOST_MP_MIN_EXPONENT_DIGITS</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">Input Output</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">BOOST_MP_USE_FLOAT128</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">BOOST_MP_USE_QUAD</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_59"></a><span class="term">C</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Calculating an Integral</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/gi.html" title="Calculating an Integral"><span class="index-entry-level-1">mp_type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_cpp_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_cpp_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_cpp_rational_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_int512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">checked_uint512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">compare</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">component_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Compulsory Requirements on the Backend type.</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_bitwise_or</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_bitwise_xor</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_ceil</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_complement</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_convert_to</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_divide</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_floor</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_frexp</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_ldexp</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_left_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_modulus</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_right_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_sqrt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">eval_subtract</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_100</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_double</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_double_extended</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_quad</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float_single</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/cpp_bin_float_ref.html" title="cpp_bin_float"><span class="index-entry-level-1">value</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_double</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_double_extended</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_quad</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_bin_float_single</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_dec_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float_100</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float_50</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_dec_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_dec_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float"><span class="index-entry-level-1">cpp_dec_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_cpp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_cpp_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_cpp_rational_backend</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int1024_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int128_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int256_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_int512_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint1024_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint128_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint256_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">checked_uint512_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int_backend</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_rational_backend</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int1024_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int128_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int256_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">int512_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">limb_type</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint1024_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint128_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint256_t</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">uint512_t</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_int_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">cpp_rational_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/cpp_rational.html" title="cpp_rational"><span class="index-entry-level-1">cpp_rational</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_60"></a><span class="term">D</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">data</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/debug_adaptor.html" title="debug_adaptor"><span class="index-entry-level-0">debug_adaptor</span></a></p></li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">default_precision</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">divide_qr</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_61"></a><span class="term">E</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">empty</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_acos</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_add</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_asin</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_atan2</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_and</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_or</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bitwise_xor</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_flip</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_set</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_test</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_bit_unset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ceil</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_complement</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_convert_to</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cos</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_cosh</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_decrement</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_divide</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_eq</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_exp</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fabs</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_floor</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_fmod</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_frexp</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gcd</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_get_sign</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_gt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_increment</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_integer_sqrt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_is_zero</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lcm</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_ldexp</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_left_shift</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_log10</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_lt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_modulus</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_msb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply_add</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_multiply_subtract</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_pow</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_powm</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_qr</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_right_shift</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_round</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_scalbn</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sin</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sinh</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_sqrt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_subtract</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.compulsory_requirements_on_the_b" title="Table&#160;1.8.&#160;Compulsory Requirements on the Backend type."><span class="index-entry-level-1">Compulsory Requirements on the Backend type.</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tan</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_tanh</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">eval_trunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">Optional Requirements on the Backend Type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">expression_template_default</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_62"></a><span class="term">F</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">FAQ</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/faq.html" title="FAQ"><span class="index-entry-level-1">precision</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">float128</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">BOOST_MP_USE_FLOAT128</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">BOOST_MP_USE_QUAD</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">data</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128_backend</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">float128_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/float128.html" title="float128"><span class="index-entry-level-1">float128</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">fpclassify</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_63"></a><span class="term">G</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Generating Random Numbers</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/random.html" title="Generating Random Numbers"><span class="index-entry-level-1">bits</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Generic Integer Operations</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_flip</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_set</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_test</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">bit_unset</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">divide_qr</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">integer_modulus</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">lsb</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">miller_rabin_test</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">msb</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">powm</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">precision</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">sqrt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">subtract</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">gmp_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">data</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_100</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_1000</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">mpf_float_500</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">zero</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">gmp_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">data</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">mpz_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">zero</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">gmp_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">data</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">mpq_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">zero</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_64"></a><span class="term">I</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">if</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">ilogb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">in</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">infinity</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Input Output</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">bits</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/input_output.html" title="Input Output"><span class="index-entry-level-1">BOOST_MP_MIN_EXPONENT_DIGITS</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">integer_modulus</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Internal Support Code</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_explicitly_convertible</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_lossy_conversion</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_restricted_conversion</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_signed_number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">is_unsigned_number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Introduction</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../intro.html" title="Introduction"><span class="index-entry-level-1">precision</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">int_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">iround</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isfinite</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isinf</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isnan</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">isnormal</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_explicitly_convertible</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_lossy_conversion</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_number_expression</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_restricted_conversion</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_signed_number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">is_unsigned_number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/internals.html" title="Internal Support Code"><span class="index-entry-level-1">Internal Support Code</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">itrunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_65"></a><span class="term">L</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">limb_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Literal Types and constexpr Support</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/lits.html" title="Literal Types and constexpr Support"><span class="index-entry-level-1">BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">llround</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">lltrunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">logged_adaptor</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">log_postfix_event</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">log_prefix_event</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">log_postfix_event</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">log_prefix_event</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/misc/logged_adaptor.html" title="logged_adaptor"><span class="index-entry-level-1">logged_adaptor</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">lround</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">lsb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">ltrunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_66"></a><span class="term">M</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">max</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">miller_rabin_test</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">Primality Testing</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">min</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Mixed Precision Arithmetic</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">subtract</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">data</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">empty</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">in</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float_1000</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float_backend</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">overlap</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">proper_subset</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">singleton</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">subset</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">zero_in</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float_1000</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfi_float_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">data</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_100</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_1000</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_500</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">static_mpfr_float_100</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">static_mpfr_float_50</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_1000</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_500</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpfr_float_backend</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_100</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_1000</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_500</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../ref/mpfr_ref.html" title="mpfr_float_backend"><span class="index-entry-level-1">mpfr_float_backend</span></a></strong></span></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_1000</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpf_float_500</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpq_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mpz_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">mp_type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/gi.html" title="Calculating an Integral"><span class="index-entry-level-1">Calculating an Integral</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"><span class="index-entry-level-1">Polynomial Evaluation</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">msb</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">multiply</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_67"></a><span class="term">N</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">number</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">abs</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">assign</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_flip</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_set</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_test</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">bit_unset</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">compare</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">component_type</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">default_precision</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">divide_qr</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">expression_template_default</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">fpclassify</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">ilogb</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">integer_modulus</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">iround</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isfinite</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isinf</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isnan</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">isnormal</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">is_number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">is_number_expression</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">itrunc</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">llround</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">lltrunc</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">lround</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">lsb</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">ltrunc</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">miller_rabin_test</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">msb</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number_category</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">powm</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">precision</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">round</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">sign</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">sqrt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">str</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">subtract</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">swap</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">trunc</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">value</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">number_category</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_68"></a><span class="term">O</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Optional Requirements on the Backend Type</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">assign_components</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_acos</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_asin</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_atan</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_atan2</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_and</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_or</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bitwise_xor</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_flip</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_set</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_test</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_bit_unset</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_cos</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_cosh</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_decrement</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_divide</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_eq</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_exp</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_fabs</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_fmod</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_gcd</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_get_sign</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_gt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_increment</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_integer_sqrt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_is_zero</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_lcm</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_left_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_log</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_log10</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_lt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_modulus</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_msb</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply_add</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_multiply_subtract</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_pow</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_powm</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_qr</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_right_shift</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_round</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_scalbn</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_sin</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_sinh</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_subtract</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_tan</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_tanh</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/backendconc.html#boost_multiprecision.ref.backendconc.optional_requirements_on_the_bac" title="Table&#160;1.9.&#160;Optional Requirements on the Backend Type"><span class="index-entry-level-1">eval_trunc</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">overlap</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_69"></a><span class="term">P</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Polynomial Evaluation</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/fp_eg/poly_eg.html" title="Polynomial Evaluation"><span class="index-entry-level-1">mp_type</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">powm</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">precision</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/faq.html" title="FAQ"><span class="index-entry-level-1">FAQ</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../intro.html" title="Introduction"><span class="index-entry-level-1">Introduction</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Primality Testing</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">if</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">int_type</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/primetest.html" title="Primality Testing"><span class="index-entry-level-1">miller_rabin_test</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">proper_subset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_70"></a><span class="term">R</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">r</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/egs/bitops.html" title="Bit Operations"><span class="index-entry-level-1">Bit Operations</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">round</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">Rounding Rules for Conversions</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rounding.html" title="Rounding Rules for Conversions"><span class="index-entry-level-1">bits</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_71"></a><span class="term">S</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">sign</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">singleton</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">sqrt</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">static_mpfr_float_100</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">static_mpfr_float_50</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float"><span class="index-entry-level-1">mpfr_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">std::numeric_limits&lt;&gt; constants</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">bits</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">cpp_dec_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">float128</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">max</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">two</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">zero</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">std::numeric_limits&lt;&gt; functions</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">cpp_dec_float_50</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">infinity</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">max</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">min</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">sqrt</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">value</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">str</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">subset</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">subtract</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/gen_int.html" title="Generic Integer Operations"><span class="index-entry-level-1">Generic Integer Operations</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/mixed.html" title="Mixed Precision Arithmetic"><span class="index-entry-level-1">Mixed Precision Arithmetic</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">swap</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_72"></a><span class="term">T</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">TODO</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../map/todo.html" title="TODO"><span class="index-entry-level-1">add</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">tommath_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">tommath_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tom_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">zero</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">tom_int</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tommath_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><span class="bold"><strong><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></strong></span></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">zero</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">tom_rational</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">trunc</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">two</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_73"></a><span class="term">U</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint1024_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint128_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint256_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">uint512_t</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/cpp_int.html" title="cpp_int"><span class="index-entry-level-1">cpp_int</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+<dt>
+<a name="idx_id_74"></a><span class="term">V</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">value</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/cpp_bin_float_ref.html" title="cpp_bin_float"><span class="index-entry-level-1">cpp_bin_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../ref/number.html" title="number"><span class="index-entry-level-1">number</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/functions.html" title="std::numeric_limits&lt;&gt; functions"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; functions</span></a></p></li>
+</ul></div>
+</li></ul></div></dd>
+<dt>
+<a name="idx_id_75"></a><span class="term">Z</span>
+</dt>
+<dd><div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">zero</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; ">
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/floats/gmp_float.html" title="gmp_float"><span class="index-entry-level-1">gmp_float</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/gmp_int.html" title="gmp_int"><span class="index-entry-level-1">gmp_int</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational"><span class="index-entry-level-1">gmp_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/limits/constants.html" title="std::numeric_limits&lt;&gt; constants"><span class="index-entry-level-1">std::numeric_limits&lt;&gt; constants</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/rational/tommath_rational.html" title="tommath_rational"><span class="index-entry-level-1">tommath_rational</span></a></p></li>
+<li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/ints/tom_int.html" title="tom_int"><span class="index-entry-level-1">tom_int</span></a></p></li>
+</ul></div>
+</li>
+<li class="listitem" style="list-style-type: none">
+<p><span class="index-entry-level-0">zero_in</span></p>
+<div class="index"><ul class="index" style="list-style-type: none; "><li class="listitem" style="list-style-type: none"><p><a class="link" href="../tut/interval/mpfi.html" title="mpfi_float"><span class="index-entry-level-1">mpfi_float</span></a></p></li></ul></div>
+</li>
+</ul></div></dd>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="s03.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../indexes.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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/intro.html b/libs/multiprecision/doc/html/boost_multiprecision/intro.html
new file mode 100644
index 0000000000..d19421baac
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/intro.html
@@ -0,0 +1,710 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Introduction</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="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="prev" href="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="next" href="tut.html" title="Tutorial">
+</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"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.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="tut.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">
+<a name="boost_multiprecision.intro"></a><a class="link" href="intro.html" title="Introduction">Introduction</a>
+</h2></div></div></div>
+<p>
+ The Multiprecision Library provides <a class="link" href="tut/ints.html" title="Integer Types">integer</a>,
+ <a class="link" href="tut/rational.html" title="Rational Number Types">rational</a> and <a class="link" href="tut/floats.html" title="Floating Point Numbers">floating-point</a> types in C++
+ that have more range and precision than C++'s ordinary built-in types. The
+ big number types in Multiprecision can be used with a wide selection of basic
+ mathematical operations, elementary transcendental functions as well as the
+ functions in Boost.Math. The Multiprecision types can also interoperate with
+ the built-in types in C++ using clearly defined conversion rules. This allows
+ Boost.Multiprecision to be used for all kinds of mathematical calculations
+ involving integer, rational and floating-point types requiring extended range
+ and precision.
+ </p>
+<p>
+ Multiprecision consists of a generic interface to the mathematics of large
+ numbers as well as a selection of big number back ends, with support for integer,
+ rational and floating-point types. Boost.Multiprecision provides a selection
+ of back ends provided off-the-rack in including interfaces to GMP, MPFR, MPIR,
+ TomMath as well as 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 <a class="link" href="ref/backendconc.html" title="Backend Requirements">concepts</a>.
+ </p>
+<p>
+ Depending upon the number type, precision may be arbitrarily large (limited
+ only by available memory), fixed at compile time (for example 50 or 100 decimal
+ digits), or a variable controlled at run-time by member functions. The types
+ are expression-template-enabled for better performance than naive user-defined
+ types.
+ </p>
+<p>
+ The Multiprecision library comes in two distinct parts:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ An expression-template-enabled front-end <code class="computeroutput"><span class="identifier">number</span></code>
+ that handles all the operator overloading, expression evaluation optimization,
+ and code reduction.
+ </li>
+<li class="listitem">
+ A selection of back-ends that implement the actual arithmetic operations,
+ and need conform only to the reduced interface requirements of the front-end.
+ </li>
+</ul></div>
+<p>
+ Separation of front-end and back-end allows use of highly refined, but restricted
+ license libraries where possible, but provides Boost license alternatives for
+ users who must have a portable unconstrained license. Which is to say some
+ back-ends rely on 3rd party libraries, but a header-only Boost license version
+ is always available (if somewhat slower).
+ </p>
+<p>
+ Should you just wish to cut to the chase and use a fully Boost-licensed number
+ type, then skip to <a class="link" href="tut/ints/cpp_int.html" title="cpp_int">cpp_int</a>
+ for multiprecision integers, <a class="link" href="tut/floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a>
+ for multiprecision floating point types and <a class="link" href="tut/rational/cpp_rational.html" title="cpp_rational">cpp_rational</a>
+ for rational types.
+ </p>
+<p>
+ The library is often used via one of the predefined typedefs: for example if
+ you wanted an <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary
+ precision</a> integer type using <a href="http://gmplib.org" target="_top">GMP</a>
+ as the underlying implementation then you could use:
+ </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="comment">// Defines the wrappers around the GMP library's types</span>
+
+<span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">mpz_int</span> <span class="identifier">myint</span><span class="special">;</span> <span class="comment">// Arbitrary precision integer type.</span>
+</pre>
+<p>
+ Alternatively, you can compose your own multiprecision type, by combining
+ <code class="computeroutput"><span class="identifier">number</span></code> with one of the predefined
+ back-end types. For example, suppose you wanted a 300 decimal digit floating-point
+ type based on the <a href="http://www.mpfr.org" target="_top">MPFR</a> library. In
+ this case, there's no predefined typedef with that level of precision, so instead
+ we compose our own:
+ </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="comment">// Defines the Backend type that wraps MPFR</span>
+
+<span class="keyword">namespace</span> <span class="identifier">mp</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="comment">// Reduce the typing a bit later...</span>
+
+<span class="keyword">typedef</span> <span class="identifier">mp</span><span class="special">::</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mp</span><span class="special">::</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">300</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">my_float</span><span class="special">;</span>
+
+<span class="identifier">my_float</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// These variables have 300 decimal digits precision</span>
+</pre>
+<p>
+ We can repeat the above example, but with the expression templates disabled
+ (for faster compile times, but slower runtimes) by passing a second template
+ argument to <code class="computeroutput"><span class="identifier">number</span></code>:
+ </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="comment">// Defines the Backend type that wraps MPFR</span>
+
+<span class="keyword">namespace</span> <span class="identifier">mp</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="comment">// Reduce the typing a bit later...</span>
+
+<span class="keyword">typedef</span> <span class="identifier">mp</span><span class="special">::</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mp</span><span class="special">::</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">300</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">my_float</span><span class="special">;</span>
+
+<span class="identifier">my_float</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// These variables have 300 decimal digits precision</span>
+</pre>
+<p>
+ We can also mix arithmetic operations between different types, provided there
+ is an unambiguous implicit conversion from one type to the other:
+ </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">namespace</span> <span class="identifier">mp</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="comment">// Reduce the typing a bit later...</span>
+
+<span class="identifier">mp</span><span class="special">::</span><span class="identifier">int128_t</span> <span class="identifier">a</span><span class="special">(</span><span class="number">3</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="number">4</span><span class="special">);</span>
+<span class="identifier">mp</span><span class="special">::</span><span class="identifier">int512_t</span> <span class="identifier">c</span><span class="special">(</span><span class="number">50</span><span class="special">),</span> <span class="identifier">d</span><span class="special">;</span>
+
+<span class="identifier">d</span> <span class="special">=</span> <span class="identifier">c</span> <span class="special">*</span> <span class="identifier">a</span><span class="special">;</span> <span class="comment">// OK, result of mixed arithmetic is an int512_t</span>
+</pre>
+<p>
+ Conversions are also allowed:
+ </p>
+<pre class="programlisting"><span class="identifier">d</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span> <span class="comment">// OK, widening conversion.</span>
+<span class="identifier">d</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// OK, can convert from an expression template too.</span>
+</pre>
+<p>
+ However conversions that are inherently lossy are either declared explicit
+ or else forbidden altogether:
+ </p>
+<pre class="programlisting"><span class="identifier">d</span> <span class="special">=</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error implicit conversion from float not allowed.</span>
+<span class="identifier">d</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">mp</span><span class="special">::</span><span class="identifier">int512_t</span><span class="special">&gt;(</span><span class="number">3.14</span><span class="special">);</span> <span class="comment">// OK explicit construction is allowed</span>
+</pre>
+<p>
+ Mixed arithmetic will fail if the conversion is either ambiguous or explicit:
+ </p>
+<pre class="programlisting"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">a</span><span class="special">(</span><span class="number">2</span><span class="special">);</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;,</span> <span class="identifier">et_on</span><span class="special">&gt;</span> <span class="identifier">b</span><span class="special">(</span><span class="number">3</span><span class="special">);</span>
+
+<span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// Error, implicit conversion could go either way.</span>
+<span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="number">3.14</span><span class="special">;</span> <span class="comment">// Error, no operator overload if the conversion would be explicit.</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.intro.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.intro.move_semantics"></a></span><a class="link" href="intro.html#boost_multiprecision.intro.move_semantics">Move
+ Semantics</a>
+ </h5>
+<p>
+ On compilers that support rvalue-references, class <code class="computeroutput"><span class="identifier">number</span></code>
+ is move-enabled if the underlying backend is.
+ </p>
+<p>
+ In addition the non-expression template operator overloads (see below) are
+ move aware and have overloads that look something like:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">B</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="keyword">operator</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">&gt;&amp;&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">B</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">a</span> <span class="special">+=</span> <span class="identifier">b</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ These operator overloads ensure that many expressions can be evaluated without
+ actually generating any temporaries. However, there are still many simple expressions
+ such as:
+ </p>
+<pre class="programlisting"><span class="identifier">a</span> <span class="special">=</span> <span class="identifier">b</span> <span class="special">*</span> <span class="identifier">c</span><span class="special">;</span>
+</pre>
+<p>
+ Which don't noticeably benefit from move support. Therefore, optimal performance
+ comes from having both move-support, and expression templates enabled.
+ </p>
+<p>
+ 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 object's internal state), while maintaining usability in the standard
+ library containers.
+ </p>
+<h5>
+<a name="boost_multiprecision.intro.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.intro.expression_templates"></a></span><a class="link" href="intro.html#boost_multiprecision.intro.expression_templates">Expression
+ Templates</a>
+ </h5>
+<p>
+ Class <code class="computeroutput"><span class="identifier">number</span></code> is expression-template-enabled:
+ that means that rather than having a multiplication operator that looks like
+ this:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span> <span class="keyword">operator</span> <span class="special">*</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</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">Backend</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span> <span class="identifier">result</span><span class="special">(</span><span class="identifier">a</span><span class="special">);</span>
+ <span class="identifier">result</span> <span class="special">*=</span> <span class="identifier">b</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="identifier">result</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Instead the operator looks more like this:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="emphasis"><em>unmentionable-type</em></span> <span class="keyword">operator</span> <span class="special">*</span> <span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</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">Backend</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Where the "unmentionable" return type is an implementation detail
+ that, rather than containing the result of the multiplication, contains instructions
+ on how to compute the result. In effect it's just a pair of references to the
+ arguments of the function, plus some compile-time information that stores what
+ the operation is.
+ </p>
+<p>
+ The great advantage of this method is the <span class="emphasis"><em>elimination of temporaries</em></span>:
+ for example the "naive" implementation of <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code> 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:
+ </p>
+<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">a</span><span class="special">[</span><span class="number">7</span><span class="special">]</span> <span class="special">=</span> <span class="special">{</span> <span class="comment">/* some values */</span> <span class="special">};</span>
+<span class="comment">//....</span>
+<span class="identifier">y</span> <span class="special">=</span> <span class="special">(((((</span><span class="identifier">a</span><span class="special">[</span><span class="number">6</span><span class="special">]</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">5</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">4</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">3</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">2</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">1</span><span class="special">])</span> <span class="special">*</span> <span class="identifier">x</span> <span class="special">+</span> <span class="identifier">a</span><span class="special">[</span><span class="number">0</span><span class="special">];</span>
+</pre>
+<p>
+ If type <code class="computeroutput"><span class="identifier">T</span></code> is a <code class="computeroutput"><span class="identifier">number</span></code>, then this expression is evaluated
+ <span class="emphasis"><em>without creating a single temporary value</em></span>. In contrast,
+ if we were using the <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ C++ wrapper for <a href="http://www.mpfr.org" target="_top">MPFR</a> - then this expression
+ would result in no less than 11 temporaries (this is true even though <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a> does
+ use expression templates to reduce the number of temporaries somewhat). Had
+ we used an even simpler wrapper around <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ like <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a> 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
+ <a href="http://gmplib.org/manual/C_002b_002b-Interface-Floats.html#C_002b_002b-Interface-Floats" target="_top">mpf_class</a>
+ 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. <a href="#ftn.boost_multiprecision.intro.f0" class="footnote" name="boost_multiprecision.intro.f0"><sup class="footnote">[1]</sup></a>
+ </p>
+<div class="important"><table border="0" summary="Important">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../../../doc/src/images/important.png"></td>
+<th align="left">Important</th>
+</tr>
+<tr><td align="left" valign="top">
+<p>
+ Expression templates can radically reorder the operations in an expression,
+ for example:
+ </p>
+<p>
+ a = (b * c) * a;
+ </p>
+<p>
+ Will get transformed into:
+ </p>
+<p>
+ a *= c; a *= b;
+ </p>
+<p>
+ If this is likely to be an issue for a particular application, then they
+ should be disabled.
+ </p>
+</td></tr>
+</table></div>
+<p>
+ This library also extends expression template support to standard library functions
+ like <code class="computeroutput"><span class="identifier">abs</span></code> or <code class="computeroutput"><span class="identifier">sin</span></code>
+ with <code class="computeroutput"><span class="identifier">number</span></code> arguments. This
+ means that an expression such as:
+ </p>
+<pre class="programlisting"><span class="identifier">y</span> <span class="special">=</span> <span class="identifier">abs</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ can be evaluated without a single temporary being calculated. Even expressions
+ like:
+ </p>
+<pre class="programlisting"><span class="identifier">y</span> <span class="special">=</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ get this treatment, so that variable 'y' is used as "working storage"
+ within the implementation of <code class="computeroutput"><span class="identifier">sin</span></code>,
+ thus reducing the number of temporaries used by one. Of course, should you
+ write:
+ </p>
+<pre class="programlisting"><span class="identifier">x</span> <span class="special">=</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ Then we clearly can't use <code class="computeroutput"><span class="identifier">x</span></code>
+ as working storage during the calculation, so then a temporary variable is
+ created in this case.
+ </p>
+<p>
+ Given the comments above, you might be forgiven for thinking that expression-templates
+ are some kind of universal-panacea: sadly though, all tricks like this have
+ their downsides. For one thing, expression template libraries like this one,
+ tend to be slower to compile than their simpler cousins, they're also harder
+ to debug (should you actually want to step through our code!), and rely on
+ compiler optimizations being turned on to give really good performance. Also,
+ since the return type from expressions involving <code class="computeroutput"><span class="identifier">number</span></code>s
+ is an "unmentionable implementation detail", you have to be careful
+ to cast the result of an expression to the actual number type when passing
+ an expression to a template function. For example, given:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">my_proc</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;);</span>
+</pre>
+<p>
+ Then calling:
+ </p>
+<pre class="programlisting"><span class="identifier">my_proc</span><span class="special">(</span><span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Will very likely result in obscure error messages inside the body of <code class="computeroutput"><span class="identifier">my_proc</span></code> - since we've passed it an expression
+ template type, and not a number type. Instead we probably need:
+ </p>
+<pre class="programlisting"><span class="identifier">my_proc</span><span class="special">(</span><span class="identifier">my_number_type</span><span class="special">(</span><span class="identifier">a</span><span class="special">+</span><span class="identifier">b</span><span class="special">));</span>
+</pre>
+<p>
+ Having said that, these situations don't occur that often - or indeed not at
+ all for non-template functions. In addition, all the functions in the Boost.Math
+ library will automatically convert expression-template arguments to the underlying
+ number type without you having to do anything, so:
+ </p>
+<pre class="programlisting"><span class="identifier">mpfr_float_100</span> <span class="identifier">a</span><span class="special">(</span><span class="number">20</span><span class="special">),</span> <span class="identifier">delta</span><span class="special">(</span><span class="number">0.125</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">gamma_p</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">delta</span><span class="special">);</span>
+</pre>
+<p>
+ Will work just fine, with the <code class="computeroutput"><span class="identifier">a</span> <span class="special">+</span> <span class="identifier">delta</span></code> expression
+ template argument getting converted to an <code class="computeroutput"><span class="identifier">mpfr_float_100</span></code>
+ internally by the Boost.Math library.
+ </p>
+<p>
+ One other potential pitfall that's only possible in C++11: you should never
+ store an expression template using:
+ </p>
+<pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">my_expression</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span> <span class="special">-</span> <span class="identifier">c</span><span class="special">;</span>
+</pre>
+<p>
+ unless you're absolutely sure that the lifetimes of <code class="computeroutput"><span class="identifier">a</span></code>,
+ <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">c</span></code>
+ will outlive that of <code class="computeroutput"><span class="identifier">my_expression</span></code>.
+ </p>
+<p>
+ 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 <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ and <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>, with
+ all three using the underlying <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ library at 50 decimal digits precision then we see the following typical results
+ 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>
+<div class="table-contents"><table class="table" summary="Evaluation of Order 6 Polynomial.">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Library
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Time
+ </p>
+ </th>
+<th>
+ <p>
+ Relative number of memory allocations
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ number
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (0.00957s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (2996 total)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (0.0102s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.3 (12976 total)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.6 (0.0151s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.3 (27947 total)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ 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:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The cost of extended-precision multiplication and division is so great,
+ that the times taken for these tend to swamp everything else.
+ </li>
+<li class="listitem">
+ The cost of an in-place multiplication (using <code class="computeroutput"><span class="keyword">operator</span><span class="special">*=</span></code>) tends to be more than an out-of-place
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code>
+ (typically <code class="computeroutput"><span class="keyword">operator</span> <span class="special">*=</span></code>
+ has to create a temporary workspace to carry out the multiplication, where
+ as <code class="computeroutput"><span class="keyword">operator</span><span class="special">*</span></code>
+ can use the target variable as workspace). Since the expression templates
+ carry out their magic by converting out-of-place operators to in-place
+ ones, we necessarily take this hit. Even so the transformation is more
+ efficient than creating the extra temporary variable, just not by as much
+ as one would hope.
+ </li>
+</ul></div>
+<p>
+ Finally, note that <code class="computeroutput"><span class="identifier">number</span></code> takes
+ a second template argument, which, when set to <code class="computeroutput"><span class="identifier">et_off</span></code>
+ disables all the expression template machinery. The result is much faster to
+ compile, but slower at runtime.
+ </p>
+<p>
+ We'll conclude this section by providing some more performance comparisons
+ between these three libraries, again, all are using <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ to carry out the underlying arithmetic, and all are operating at the same precision
+ (50 decimal digits):
+ </p>
+<div class="table">
+<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>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Library
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Time
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Number of Memory Allocations
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mpfr_float_50
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (5.78s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (1611963)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ number&lt;mpfr_float_backend&lt;50&gt;, et_off&gt;<br> (but with
+ rvalue reference support)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (6.29s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.64 (4260868)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (6.28s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.45 (3948316)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.65 (9.54s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.21 (13226029)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Library
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Time
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Number of Memory Allocations
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ number
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (263s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (127710873)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ number&lt;mpfr_float_backend&lt;50&gt;, et_off&gt;<br> (but with
+ rvalue reference support)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (260s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (156797871)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (287s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.1 (268336640)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.5 (389s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.6 (466960653)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ The above results were generated on Win32 compiling with Visual C++ 2010, all
+ optimizations on (/Ox), with MPFR 3.0 and MPIR 2.3.0.
+ </p>
+<div class="footnotes">
+<br><hr style="width:100; text-align:left;margin-left: 0">
+<div id="ftn.boost_multiprecision.intro.f0" class="footnote"><p><a href="#boost_multiprecision.intro.f0" class="para"><sup class="para">[1] </sup></a>
+ The actual number generated will depend on the compiler, how well it optimises
+ the code, and whether it supports rvalue references. The number of 11 temporaries
+ was generated with Visual C++ 10
+ </p></div>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.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="tut.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map.html b/libs/multiprecision/doc/html/boost_multiprecision/map.html
new file mode 100644
index 0000000000..f5e451c61d
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/map.html
@@ -0,0 +1,49 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Roadmap</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="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="prev" href="perf/rational_performance.html" title="Rational Type Performance">
+<link rel="next" href="map/hist.html" title="History">
+</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"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="perf/rational_performance.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="map/hist.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">
+<a name="boost_multiprecision.map"></a><a class="link" href="map.html" title="Roadmap">Roadmap</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="map/hist.html">History</a></span></dt>
+<dt><span class="section"><a href="map/todo.html">TODO</a></span></dt>
+<dt><span class="section"><a href="map/faq.html">FAQ</a></span></dt>
+<dt><span class="section"><a href="map/ack.html">Acknowledgements</a></span></dt>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="perf/rational_performance.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="map/hist.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html b/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html
new file mode 100644
index 0000000000..23a4f32240
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/map/ack.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Acknowledgements</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="../map.html" title="Roadmap">
+<link rel="prev" href="faq.html" title="FAQ">
+<link rel="next" href="../indexes.html" title="Indexes">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="faq.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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.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.map.ack"></a><a class="link" href="ack.html" title="Acknowledgements">Acknowledgements</a>
+</h3></div></div></div>
+<p>
+ This library would not have happened without:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Christopher Kormanyos' C++ decimal number code.
+ </li>
+<li class="listitem">
+ Paul Bristow for patiently testing, and commenting on the library.
+ </li>
+<li class="listitem">
+ All the folks at GMP, MPFR and libtommath, for providing the "guts"
+ that makes this library work.
+ </li>
+<li class="listitem">
+ <a href="http://www-cs-faculty.stanford.edu/~uno/taocp.html" target="_top">"The
+ Art Of Computer Programming"</a>, Donald E. Knuth, Volume 2:
+ Seminumerical Algorithms, Third Edition (Reading, Massachusetts: Addison-Wesley,
+ 1997), xiv+762pp. ISBN 0-201-89684-2
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="faq.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html b/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html
new file mode 100644
index 0000000000..3eb2ac3528
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/map/faq.html
@@ -0,0 +1,120 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>FAQ</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="../map.html" title="Roadmap">
+<link rel="prev" href="todo.html" title="TODO">
+<link rel="next" href="ack.html" title="Acknowledgements">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="todo.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="ack.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.map.faq"></a><a class="link" href="faq.html" title="FAQ">FAQ</a>
+</h3></div></div></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Why do I get compiler errors when passing a <code class="computeroutput"><span class="identifier">number</span></code>
+ to a template function?</span></dt>
+<dd><p>
+ Most likely you are actually passing an expression template type to
+ the function and template-argument-deduction deduces the "wrong"
+ type. Try casting the arguments involving expressions to the actual
+ number type, or as a last resort turning off expression template support
+ in the number type you are using.
+ </p></dd>
+<dt><span class="term">When is expression template support a performance gain?</span></dt>
+<dd><p>
+ As a general rule, expression template support adds a small runtime
+ overhead creating and unpacking the expression templates, but greatly
+ reduces the number of temporaries created. So it's most effective in
+ improving performance when the cost of creating a temporary is high:
+ for example when creating a temporary involves a memory allocation.
+ It is least effective (and may even be a dis-optimisation) when temporaries
+ are cheap: for example if the number type is basically a thin wrapper
+ around a native arithmetic type. In addition, since the library makes
+ extensive use of thin inline wrapper functions, turning on compiler
+ optimization is essential to achieving high performance.
+ </p></dd>
+<dt><span class="term">Do expression templates reorder operations?</span></dt>
+<dd><p>
+ Yes they do, sometimes quite radically so, if this is a concern then
+ they should be turned off for the number type you are using.
+ </p></dd>
+<dt><span class="term">I can't construct my number type from <span class="emphasis"><em>some other type</em></span>,
+ but the docs indicate that the conversion should be allowed, what's up?</span></dt>
+<dd><p>
+ Some conversions are <span class="emphasis"><em>explicit</em></span>, that includes construction
+ from a string, or constructing from any type that may result in loss
+ of precision (for example constructing an integer type from a float).
+ </p></dd>
+<dt><span class="term">Why do I get an exception thrown (or the program crash due to an
+ uncaught exception) when using the bitwise operators on a checked <code class="computeroutput"><span class="identifier">cpp_int</span></code>?</span></dt>
+<dd><p>
+ 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 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> being thrown.
+ </p></dd>
+<dt><span class="term">Why do I get compiler errors when trying to use the complement operator?</span></dt>
+<dd><p>
+ 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 <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s.
+ Unchecked <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s
+ give the same valued result as a 2's complement type would, but not
+ the same bit-pattern.
+ </p></dd>
+<dt><span class="term">Why can't I negate an unsigned type?</span></dt>
+<dd><p>
+ The unary negation operator is deliberately disabled for unsigned integer
+ types as its use would almost always be a programming error.
+ </p></dd>
+<dt><span class="term">Why doesn't the library use proto?</span></dt>
+<dd><p>
+ A very early version of the library did use proto, but compile times
+ became too slow for the library to be usable. Since the library only
+ required a tiny fraction of what proto has to offer anyway, a lightweight
+ expression template mechanism was used instead. Compile times are still
+ too slow...
+ </p></dd>
+<dt><span class="term">Why not abstract out addition/multiplication algorithms?</span></dt>
+<dd><p>
+ This was deemed not to be practical: these algorithms are intimately
+ tied to the actual data representation used.
+ </p></dd>
+</dl>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="todo.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="ack.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html b/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html
new file mode 100644
index 0000000000..c8469f448b
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/map/hist.html
@@ -0,0 +1,295 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>History</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="../map.html" title="Roadmap">
+<link rel="prev" href="../map.html" title="Roadmap">
+<link rel="next" href="todo.html" title="TODO">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../map.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="todo.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.map.hist"></a><a class="link" href="hist.html" title="History">History</a>
+</h3></div></div></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_3_boost_1_57"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_3_boost_1_57">Multiprecision-2.2.3
+ (Boost-1.57)</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Changed rational to float conversions to exactly round to nearest, see
+ [https://svn.boost.org/trac/boost/ticket/10085 10085].
+ </li>
+<li class="listitem">
+ Added improved generic float to rational conversions.
+ </li>
+<li class="listitem">
+ Fixed rare bug in exponent function for <a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a>.
+ </li>
+<li class="listitem">
+ Fixed various minor documentation issues.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_2_boost_1_56"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_2_boost_1_56">Multiprecision-2.2.2
+ (Boost-1.56)</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Change floating point to rational conversions to be implicit, see <a href="https://svn.boost.org/trac/boost/ticket/10082" target="_top">10082</a>.
+ </li>
+<li class="listitem">
+ Fix definition of checked_cpp_rational typedef.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h2"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_1"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_1">Multiprecision-2.2.1</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
+ Fix bug in assignment from string in cpp_int, see <a href="https://svn.boost.org/trac/boost/ticket/9936" target="_top">9936</a>.
+ </li></ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h3"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.hist.multiprecision_2_2_0"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.multiprecision_2_2_0">Multiprecision-2.2.0</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Moved to Boost.Multiprecision specific version number - we have one breaking
+ change in Boost-1.54 which makes this major version 2, plus two releases
+ with new features since then.
+ </li>
+<li class="listitem">
+ Added new <a class="link" href="../tut/floats/cpp_bin_float.html" title="cpp_bin_float">cpp_bin_float</a>
+ backend for binary floating point.
+ </li>
+<li class="listitem">
+ Added MSVC-specific #include for compiler intrinsics, see <a href="https://svn.boost.org/trac/boost/ticket/9336" target="_top">9336</a>.
+ </li>
+<li class="listitem">
+ Fixed various typos in docs, see <a href="https://svn.boost.org/trac/boost/ticket/9432" target="_top">9432</a>.
+ </li>
+<li class="listitem">
+ Fixed <a class="link" href="../tut/rational/gmp_rational.html" title="gmp_rational">gmp_rational</a>
+ to allow move-copy from an already copied-from object, see <a href="https://svn.boost.org/trac/boost/ticket/9497" target="_top">9497</a>.
+ </li>
+<li class="listitem">
+ Added list of values for numeric_limits.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h4"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.hist.boost_1_55"></a></span><a class="link" href="hist.html#boost_multiprecision.map.hist.boost_1_55">Boost-1.55</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Added support for Boost.Serialization.
+ </li>
+<li class="listitem">
+ Suppressed some GCC warnings. See <a href="https://svn.boost.org/trac/boost/ticket/8872" target="_top">8872</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in pow for large integer arguments. See <a href="https://svn.boost.org/trac/boost/ticket/8809" target="_top">8809</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in pow for calculation of 0<sup>N</sup>. See <a href="https://svn.boost.org/trac/boost/ticket/8798" target="_top">8798</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in fixed precision cpp_int IO code that causes conversion to
+ string to fail when the bit count is very small (less than CHAR_BIT).
+ See <a href="https://svn.boost.org/trac/boost/ticket/8745" target="_top">8745</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in cpp_int that causes left shift to fail when a fixed precision
+ type would overflow. See <a href="https://svn.boost.org/trac/boost/ticket/8741" target="_top">8741</a>.
+ </li>
+<li class="listitem">
+ Fixed some cosmetic warnings from cpp_int. See <a href="https://svn.boost.org/trac/boost/ticket/8748" target="_top">8748</a>.
+ </li>
+<li class="listitem">
+ Fixed calls to functions which are required to be macros in C99. See
+ <a href="https://svn.boost.org/trac/boost/ticket/8732" target="_top">8732</a>.
+ </li>
+<li class="listitem">
+ Fixed bug that causes construction from INT_MIN, LONG_MIN etc to fail
+ in cpp_int. See <a href="https://svn.boost.org/trac/boost/ticket/8711" target="_top">8711</a>.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h5"></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; ">
+<li class="listitem">
+ <span class="bold"><strong>Breaking change</strong></span> renamed <code class="computeroutput"><span class="identifier">rational_adapter</span></code> to <code class="computeroutput"><span class="identifier">rational_adaptor</span></code>.
+ </li>
+<li class="listitem">
+ Add support for <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>.
+ </li>
+<li class="listitem">
+ Add logged_adaptor.
+ </li>
+<li class="listitem">
+ Add support for 128-bit floats via GCC's <code class="computeroutput"><a class="link" href="../tut/floats/float128.html" title="float128">float128</a></code>
+ or Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> data
+ types.
+ </li>
+<li class="listitem">
+ Add support for user-defined literals in cpp_int, improve <code class="computeroutput"><span class="keyword">constexpr</span></code> support.
+ </li>
+<li class="listitem">
+ Fixed bug in integer division of <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ that results in incorrect sign of <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ when both arguments are small enough to fit in a <code class="computeroutput"><span class="identifier">double_limb_type</span></code>.
+ See <a href="https://svn.boost.org/trac/boost/ticket/8126" target="_top">8126</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in subtraction of a single limb in <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ that results in incorrect value when the result should have a 0 in the
+ last limb: <a href="https://svn.boost.org/trac/boost/ticket/8133" target="_top">8133</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ where division of 0 by something doesn't get zero in the result: <a href="https://svn.boost.org/trac/boost/ticket/8160" target="_top">8160</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in some transcendental functions that caused incorrect return
+ values when variables are reused, for example with <code class="computeroutput"><span class="identifier">a</span>
+ <span class="special">=</span> <span class="identifier">pow</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span></code>. See <a href="https://svn.boost.org/trac/boost/ticket/8326" target="_top">8326</a>.
+ </li>
+<li class="listitem">
+ Fixed some assignment operations in the mpfr and gmp backends to be safe
+ if the target has been moved from: <a href="https://svn.boost.org/trac/boost/ticket/8326" target="_top">8667</a>.
+ </li>
+<li class="listitem">
+ Fixed bug in <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ that gives incorrect answer for 0%N for large N: <a href="https://svn.boost.org/trac/boost/ticket/8670" target="_top">8670</a>.
+ </li>
+<li class="listitem">
+ Fixed set_precision in mpfr backend so it doesn't trample over an existing
+ value: <a href="https://svn.boost.org/trac/boost/ticket/8692" target="_top">8692</a>.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h6"></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; ">
+<li class="listitem">
+ First Release.
+ </li>
+<li class="listitem">
+ Fix bug in <a href="https://svn.boost.org/trac/boost/ticket/7878" target="_top">cpp_int
+ division</a>.
+ </li>
+<li class="listitem">
+ Fix issue <a href="https://svn.boost.org/trac/boost/ticket/7806" target="_top">#7806</a>.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h7"></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>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Non-expression template operators further optimised with rvalue reference
+ support.
+ </li>
+<li class="listitem">
+ Many functions made <code class="computeroutput"><span class="identifier">constexp</span></code>.
+ </li>
+<li class="listitem">
+ Differentiate between explicit and implicit conversions in the number
+ constructor.
+ </li>
+<li class="listitem">
+ Removed "mp_" prefix from types.
+ </li>
+<li class="listitem">
+ Allowed mixed precision arithmetic.
+ </li>
+<li class="listitem">
+ Changed ExpressionTemplates parameter to class <code class="computeroutput"><span class="identifier">number</span></code>
+ to use enumerated values rather than true/false.
+ </li>
+<li class="listitem">
+ Changed ExpressionTemplate parameter default value to use a traits class
+ so that the default value depends on the backend used.
+ </li>
+<li class="listitem">
+ Added support for fused-multiply-add/subtract with GMP support.
+ </li>
+<li class="listitem">
+ Tweaked expression template unpacking to use fewer temporaries when the
+ LHS also appears in the RHS.
+ </li>
+<li class="listitem">
+ Refactored <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>
+ based on review comments with new template parameter structure.
+ </li>
+<li class="listitem">
+ Added additional template parameter to <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>
+ to allow stack-based allocation.
+ </li>
+<li class="listitem">
+ Added section on mixed precision arithmetic, and added support for operations
+ yielding a higher precision result than either of the arguments.
+ </li>
+<li class="listitem">
+ Added overloads of integer-specific functions for built in integer types.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.hist.h8"></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>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ 2011-2012, John Maddock adds an expression template enabled front end
+ to Christopher's code, and adds support for other backends.
+ </li>
+<li class="listitem">
+ 2011, Christopher Kormanyos publishes the decimal floating point code
+ under the Boost Software Licence. The code is published as: <a href="http://doi.acm.org/10.1145/1916461.1916469" target="_top">"Algorithm
+ 910: A Portable C++ Multiple-Precision System for Special-Function Calculations"</a>,
+ in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011.
+ </li>
+<li class="listitem">
+ 2002-2011, Christopher Kormanyos develops the all C++ decimal arithmetic
+ floating point code.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../map.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="todo.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html b/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html
new file mode 100644
index 0000000000..067af586b0
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/map/todo.html
@@ -0,0 +1,229 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>TODO</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="../map.html" title="Roadmap">
+<link rel="prev" href="hist.html" title="History">
+<link rel="next" href="faq.html" title="FAQ">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="hist.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="faq.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.map.todo"></a><a class="link" href="todo.html" title="TODO">TODO</a>
+</h3></div></div></div>
+<p>
+ More a list of what <span class="emphasis"><em>could</em></span> be done, rather than what
+ <span class="emphasis"><em>should</em></span> be done (which may be a much smaller list!).
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Add back-end support for libdecNumber.
+ </li>
+<li class="listitem">
+ Add an adaptor back-end for complex number types.
+ </li>
+<li class="listitem">
+ Add better multiplication routines (Karatsuba, FFT etc) to cpp_int_backend.
+ </li>
+<li class="listitem">
+ Add assembly level routines to cpp_int_backend.
+ </li>
+<li class="listitem">
+ 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.
+ </li>
+<li class="listitem">
+ Should there be a choice of rounding mode (probably MPFR specific)?
+ </li>
+<li class="listitem">
+ We can reuse temporaries in multiple subtrees (temporary caching).
+ </li>
+<li class="listitem">
+ cpp_dec_float should round to nearest.
+ </li>
+<li class="listitem">
+ A 2's complement fixed precision int that uses exactly N bits and no
+ more.
+ </li>
+</ul></div>
+<p>
+ Things requested in review:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The performances of mp_number&lt;a_trivial_adaptor&lt;float&gt;, false&gt;respect
+ to float and mp_number&lt;a_trivial_adaptor&lt;int&gt;, false&gt; 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).
+ </li>
+<li class="listitem">
+ Should we provide min/max overloads for expression templates? (Not done
+ - we can't overload functions declared in the std namespace :-( ).
+ </li>
+<li class="listitem">
+ The rounding applied when converting must be documented (Done).
+ </li>
+<li class="listitem">
+ Document why we don't abstract out addition/multiplication algorithms
+ etc. (done - FAQ)
+ </li>
+<li class="listitem">
+ Document why we don't use proto (compile times) (Done).
+ </li>
+<li class="listitem">
+ We can reuse temporaries in multiple subtrees (temporary caching) Moved
+ to TODO list.
+ </li>
+<li class="listitem">
+ Emphasise in the docs that ET's may reorder operations (done 2012/10/31).
+ </li>
+<li class="listitem">
+ Document what happens to small fixed precision cpp_int's (done 2012/10/31).
+ </li>
+<li class="listitem">
+ The use of bool in template parameters could be improved by the use of
+ an enum class which will be more explicit. E.g <code class="computeroutput"><span class="keyword">enum</span>
+ <span class="keyword">class</span> <span class="identifier">expression_template</span>
+ <span class="special">{</span><span class="identifier">disabled</span><span class="special">,</span> <span class="identifier">enabled</span><span class="special">};</span> <span class="keyword">enum</span> <span class="keyword">class</span> <span class="identifier">sign</span>
+ <span class="special">{</span><span class="keyword">unsigned</span><span class="special">,</span> <span class="keyword">signed</span><span class="special">};</span></code> (Partly done 2012/09/15, done 2012/10/31).
+ </li>
+<li class="listitem">
+ Each back-end should document the requirements it satisfies (not currently
+ scheduled for inclusion: it's deliberately an implementation detail,
+ and "optional" requirements are optimisations which can't be
+ detected 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.
+ </li>
+<li class="listitem">
+ A backend for an overflow aware integers (done 2012/10/31).
+ </li>
+<li class="listitem">
+ 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).
+ </li>
+<li class="listitem">
+ The front-end should make the differences between implicit and explicit
+ construction (Done 2012/09/15).
+ </li>
+<li class="listitem">
+ The tutorial should add more examples concerning implicit or explicit
+ conversions. (Done 2012/09/15).
+ </li>
+<li class="listitem">
+ 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).
+ </li>
+<li class="listitem">
+ The documentation should contain Throws specification on the mp_number
+ and backend requirements operations. (Done 2012/09/15).
+ </li>
+<li class="listitem">
+ The library interface should use the noexcept (BOOST_NOEXCEPT, ...) facilities
+ (Done 2012/09/15).
+ </li>
+<li class="listitem">
+ 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).
+ </li>
+<li class="listitem">
+ 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).
+ </li>
+<li class="listitem">
+ The ExpresionTemplate parameter could be defaulted to a traits class
+ for more sensible defaults (done 2012/09/20).
+ </li>
+<li class="listitem">
+ 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).
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.map.todo.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.map.todo.pre_review_comments"></a></span><a class="link" href="todo.html#boost_multiprecision.map.todo.pre_review_comments">Pre-Review
+ Comments</a>
+ </h5>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ 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.
+ </li>
+<li class="listitem">
+ Can ring types (exact floating point types) be supported? The answer
+ should be yes, but someone needs to write it (Moved to TODO list).
+ </li>
+<li class="listitem">
+ Should there be a choice of rounding mode (probably MPFR specific)? Moved
+ to TODO list.
+ </li>
+<li class="listitem">
+ Make the exponent type for cpp_dec_float a template parameter, maybe
+ include support for big-integer exponents. Open question - what should
+ be the default - int32_t or int64_t? (done 2012/09/06)
+ </li>
+<li class="listitem">
+ Document the size requirements of fixed precision ints (done 2012/09/15).
+ </li>
+<li class="listitem">
+ Document std lib function accuracy (done 2012/09/15).
+ </li>
+<li class="listitem">
+ Be a bit clearer on the effects of sign-magnitude representation of cpp_int
+ - min == -max etc - done.
+ </li>
+<li class="listitem">
+ Document cpp_dec_float precision, rounding, and exponent size (done 2012/09/06).
+ </li>
+<li class="listitem">
+ Can we be clearer in the docs that mixed arithmetic doesn't work (no
+ longer applicable as of 2012/09/06)?
+ </li>
+<li class="listitem">
+ Document round functions behaviour better (they behave as in C++11) (added
+ note 2012/09/06).
+ </li>
+<li class="listitem">
+ Document limits on size of cpp_dec_float (done 2012/09/06).
+ </li>
+<li class="listitem">
+ Add support for fused multiply add (and subtract). GMP mpz_t could use
+ this (done 2012/09/20).
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="hist.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../map.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="faq.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf.html b/libs/multiprecision/doc/html/boost_multiprecision/perf.html
new file mode 100644
index 0000000000..f4cd63d2e0
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf.html
@@ -0,0 +1,57 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Performance Comparison</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="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="prev" href="ref/headers.html" title="Header File Structure">
+<link rel="next" href="perf/overhead.html" title="The Overhead in the Number Class Wrapper">
+</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"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ref/headers.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="perf/overhead.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">
+<a name="boost_multiprecision.perf"></a><a class="link" href="perf.html" title="Performance Comparison">Performance Comparison</a>
+</h2></div></div></div>
+<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
+ World Tests</a></span></dt>
+<dt><span class="section"><a href="perf/int_real_world.html">Integer Real
+ World Tests</a></span></dt>
+<dt><span class="section"><a href="perf/float_performance.html">Float Algorithm
+ Performance</a></span></dt>
+<dt><span class="section"><a href="perf/integer_performance.html">Integer
+ Algorithm Performance</a></span></dt>
+<dt><span class="section"><a href="perf/rational_performance.html">Rational
+ Type Performance</a></span></dt>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ref/headers.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="perf/overhead.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html
new file mode 100644
index 0000000000..4c0a963759
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/float_performance.html
@@ -0,0 +1,2078 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Float Algorithm Performance</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="../perf.html" title="Performance Comparison">
+<link rel="prev" href="int_real_world.html" title="Integer Real World Tests">
+<link rel="next" href="integer_performance.html" title="Integer Algorithm Performance">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="int_real_world.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="integer_performance.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.perf.float_performance"></a><a class="link" href="float_performance.html" title="Float Algorithm Performance">Float Algorithm
+ Performance</a>
+</h3></div></div></div>
+<p>
+ Note that these tests are carefully designed to test performance of the underlying
+ algorithms and not memory allocation or variable copying. As usual, performance
+ results should be taken with a healthy dose of scepticism, and real-world
+ performance may vary widely depending upon the specifics of the program.
+ In each table relative times are given first, with the best performer given
+ a score of 1. Total actual times are given in brackets, measured in seconds
+ for 500000 operations.
+ </p>
+<div class="table">
+<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>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0575156s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0740086s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.219073s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.45065 (0.14095s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.01398 (0.149052s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09608 (0.240122s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.6001 (0.149546s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.12079 (0.156957s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09078 (0.23896s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.15.&#160;Operator +(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.46115 (0.0855392s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.60353 (0.114398s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.62562 (0.264905s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0585424s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0439398s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0730648s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.40441 (0.14076s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.2877 (0.144461s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.40379 (0.175632s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.16.&#160;Operator +(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.118146s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.144714s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.315639s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 4.5555 (0.538213s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.83096 (0.554395s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.95079 (0.615745s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 5.74477 (0.678719s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.85295 (0.702291s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.70354 (0.853342s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.17.&#160;Operator +=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.101188s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.122394s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.251975s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 5.199 (0.526079s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.39327 (0.537712s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.42151 (0.610159s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 6.08318 (0.615547s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.18525 (0.634645s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.1022 (0.781677s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.18.&#160;Operator -</b></p>
+<div class="table-contents"><table class="table" summary="Operator -">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0895163s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.129248s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.5088 (0.374512s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.72566 (0.154474s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.22567 (0.158415s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.248219s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.83764 (0.164499s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.34284 (0.173559s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.00226 (0.248781s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.19.&#160;Operator -(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.105285s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.142741s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.278718s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.34437 (0.246828s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.28814 (0.183871s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.00731 (0.280754s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.8032 (0.295136s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.09178 (0.298582s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.25213 (0.34899s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.20.&#160;Operator -(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.13719s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.184428s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.344212s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 4.0804 (0.559791s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.06776 (0.565781s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.07736 (0.715053s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 5.10114 (0.699828s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.88684 (0.716843s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.50074 (0.860784s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.21.&#160;Operator -=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.100984s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.123148s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.246181s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 5.68353 (0.573944s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.68636 (0.577116s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.6958 (0.663655s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 6.19738 (0.625834s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.18544 (0.638577s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.18738 (0.784673s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.22.&#160;Operator *</b></p>
+<div class="table-contents"><table class="table" summary="Operator *">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.03667 (0.284251s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.30576 (0.536527s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.44686 (4.81057s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.274196s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.410891s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (3.32484s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24537 (0.341477s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.15785 (0.475749s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1796 (3.92199s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.23.&#160;Operator *(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 3.97453 (0.240262s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.91222 (0.463473s)
+ </p>
+ </td>
+<td>
+ <p>
+ 50.7926 (4.36527s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0604505s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0467577s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0859431s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.56974 (0.155342s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.56312 (0.166603s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.22964 (0.277565s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.24.&#160;Operator *(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.331877s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01058 (0.586122s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.688 (4.7931s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.72433 (0.572266s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.579987s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.716672s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.5553 (0.848047s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.74987 (1.0149s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.80403 (1.2929s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.25.&#160;Operator *=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.321397s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.00772 (0.574887s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.65946 (4.7468s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77419 (0.570218s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.570482s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.712791s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.62172 (0.842611s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77691 (1.01369s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77511 (1.26528s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.26.&#160;Operator /</b></p>
+<div class="table-contents"><table class="table" summary="Operator /">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.96096 (4.00777s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.53244 (7.86435s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.11936 (51.5509s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.35354s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.73512s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (8.42422s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.30002 (1.75963s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.39045 (2.41261s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.66762 (14.0484s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.27.&#160;Operator /(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 8.60726 (1.8181s)
+ </p>
+ </td>
+<td>
+ <p>
+ 15.4122 (3.67479s)
+ </p>
+ </td>
+<td>
+ <p>
+ 34.5119 (24.729s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24394 (0.262756s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.238433s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.716536s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.211229s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.12178 (0.26747s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.02237 (0.732562s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.28.&#160;Operator /(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.10976 (1.97569s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.73601 (3.9133s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.3085 (25.4533s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.936452s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.04746s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.25081s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3423 (1.257s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.51575 (1.58768s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.31513 (7.46175s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.17401 (1.96883s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.79591 (3.8965s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.2328 (25.2606s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.905621s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.0265s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.24882s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.37953 (1.24933s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.53073 (1.57129s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.30546 (7.43339s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.30.&#160;Operator construct</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00929804s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0268321s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0310685s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 30.8781 (0.287106s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.59969 (0.203916s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.51873 (0.202527s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 23.5296 (0.218779s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.11058 (0.217624s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.16325 (0.222552s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.31.&#160;Operator construct(unsigned)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0603971s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0735485s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.116464s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 3.91573 (0.236498s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.88171 (0.211945s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.81075 (0.210887s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 4.90052 (0.295977s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.01118 (0.295017s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.62005 (0.305141s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0610288s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0759005s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.118511s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ 8.26247 (0.504249s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.69042 (0.507806s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.32819 (0.51294s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 10.1593 (0.620013s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.45884 (0.64203s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.51472 (0.653557s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.33.&#160;Operator str</b></p>
+<div class="table-contents"><table class="table" summary="Operator str">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 500 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 2.95848 (0.0223061s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.33461 (0.033471s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.0159 (0.132732s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00753971s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0100374s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0440106s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.25424 (0.00945658s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24943 (0.012541s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09428 (0.0481601s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+ turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0.
+ The tests were run on 32-bit Windows Vista machine.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="int_real_world.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="integer_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html
new file mode 100644
index 0000000000..7c8946099c
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/int_real_world.html
@@ -0,0 +1,381 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Integer 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">
+<link rel="up" href="../perf.html" title="Performance Comparison">
+<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">
+<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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="realworld.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="float_performance.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.perf.int_real_world"></a><a class="link" href="int_real_world.html" title="Integer Real World Tests">Integer Real
+ World Tests</a>
+</h3></div></div></div>
+<p>
+ The first set of <a href="../../../../performance/voronoi_performance.cpp" target="_top">tests</a>
+ measure the times taken to execute the multiprecision part of the Voronoi-diagram
+ builder from Boost.Polygon. The tests mainly create a large number of temporaries
+ "just in case" multiprecision arithmetic is required, for comparison,
+ also included in the tests is Boost.Polygon's own partial-multiprecision
+ integer type which was custom written for this specific task:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Integer Type
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Performance (Actual time in parenthesis)
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ polygon::detail::extended_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1(0.138831s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int256_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19247(0.165551s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int512_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.23301(0.17118s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.21463(0.168628s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int256_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31711(0.182855s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int512_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.57413(0.218538s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 1.36992(0.190187s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.63244(0.226632s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpz_int
+ </p>
+ </td>
+<td>
+ <p>
+ 5.42511(0.753172s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tom_int
+ </p>
+ </td>
+<td>
+ <p>
+ 29.0793(4.03709s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ Note how for this use case, any dynamic allocation is a performance killer.
+ </p>
+<p>
+ The next <a href="../../../../performance/miller_rabin_performance.cpp" target="_top">tests</a>
+ 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:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Integer Type
+ </p>
+ </th>
+<th>
+ <p>
+ Relative Performance (Actual time in parenthesis)
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 5.25827(0.379597s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int (no Expression templates)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.15675(0.372268s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int (128-bit cache)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.10882(0.368808s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int (256-bit cache)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.50623(0.397497s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int (512-bit cache)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.82257(0.348144s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int (1024-bit cache)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.00053(0.360991s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 4.37589(0.315897s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ checked_int1024_t
+ </p>
+ </td>
+<td>
+ <p>
+ 4.52396(0.326587s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpz_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1(0.0721905s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpz_int (no Expression templates)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0248(0.0739806s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tom_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.60673(0.188181s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tom_int (no Expression templates)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.64997(0.191303s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ It's interesting to note that expression templates have little effect here
+ - perhaps because the actual expressions involved are relatively trivial
+ in this case - so the time taken for multiplication and division tends to
+ dominate. Also note how increasing the internal cache size used by <code class="computeroutput"><span class="identifier">cpp_int</span></code> is quite effective in this case
+ in cutting out memory allocations altogether - cutting about a third off
+ the total runtime. Finally the much quicker times from GMP and tommath are
+ down to their much better modular-exponentiation algorithms (GMP's is about
+ 5x faster). That's an issue which needs to be addressed in a future release
+ for <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">cpp_int</a>.
+ </p>
+<p>
+ Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+ turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0.
+ The tests were run on 32-bit Windows Vista machine.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="realworld.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="float_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html
new file mode 100644
index 0000000000..dbc6f2a63a
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/integer_performance.html
@@ -0,0 +1,4830 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Integer Algorithm Performance</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="../perf.html" title="Performance Comparison">
+<link rel="prev" href="float_performance.html" title="Float Algorithm Performance">
+<link rel="next" href="rational_performance.html" title="Rational Type Performance">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="float_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="rational_performance.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.perf.integer_performance"></a><a class="link" href="integer_performance.html" title="Integer Algorithm Performance">Integer
+ Algorithm Performance</a>
+</h3></div></div></div>
+<p>
+ Note that these tests are carefully designed to test performance of the underlying
+ algorithms and not memory allocation or variable copying. As usual, performance
+ results should be taken with a healthy dose of scepticism, and real-world
+ performance may vary widely depending upon the specifics of the program.
+ In each table relative times are given first, with the best performer given
+ a score of 1. Total actual times are given in brackets, measured in seconds
+ for 500000 operations.
+ </p>
+<div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.23704 (0.0274266s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09358 (0.0383278s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.26645 (0.0558828s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32188 (0.0916899s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.62044 (0.0359271s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.5277 (0.053543s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.73059 (0.076363s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.71537 (0.118983s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.87515 (0.0415741s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.21699 (0.042653s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.15599 (0.0510088s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0693631s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0221711s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.035048s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0441255s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.04441 (0.0724435s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.35.&#160;Operator +(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0155377s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0209523s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0306377s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.043125s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31904 (0.0204948s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.76211 (0.0369203s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.52941 (0.0468577s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.60412 (0.0691778s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.96204 (0.0304855s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.02569 (0.0424428s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.11505 (0.0648002s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.65993 (0.114709s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 14.0654 (0.218543s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.8239 (0.226786s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.76691 (0.23796s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.10039 (0.263079s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.36.&#160;Operator +(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.026624s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0291407s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0373209s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0464919s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31378 (0.034978s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.54897 (0.045138s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.53649 (0.0573431s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.27833 (0.0594319s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 25.5775 (0.680974s)
+ </p>
+ </td>
+<td>
+ <p>
+ 24.0117 (0.699717s)
+ </p>
+ </td>
+<td>
+ <p>
+ 19.5633 (0.730121s)
+ </p>
+ </td>
+<td>
+ <p>
+ 16.8939 (0.785432s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 19.4694 (0.518354s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.4246 (0.536907s)
+ </p>
+ </td>
+<td>
+ <p>
+ 14.7715 (0.551288s)
+ </p>
+ </td>
+<td>
+ <p>
+ 12.3637 (0.574812s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.37.&#160;Operator +=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.18405 (0.0196905s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.22304 (0.0206476s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.25861 (0.0217397s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.29525 (0.0220829s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0166298s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0168822s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0172728s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0170492s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 39.9082 (0.663668s)
+ </p>
+ </td>
+<td>
+ <p>
+ 39.4584 (0.666147s)
+ </p>
+ </td>
+<td>
+ <p>
+ 38.5504 (0.665873s)
+ </p>
+ </td>
+<td>
+ <p>
+ 39.2231 (0.668722s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 30.6219 (0.509238s)
+ </p>
+ </td>
+<td>
+ <p>
+ 30.4135 (0.513447s)
+ </p>
+ </td>
+<td>
+ <p>
+ 30.9077 (0.533863s)
+ </p>
+ </td>
+<td>
+ <p>
+ 32.3086 (0.550835s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.38.&#160;Operator -</b></p>
+<div class="table-contents"><table class="table" summary="Operator -">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.06986 (0.0296064s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0381508s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05932 (0.053186s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1766 (0.0844721s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3304 (0.0368163s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.44506 (0.0551303s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.4431 (0.0724545s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.57255 (0.112898s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.48072 (0.0409761s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19003 (0.0454007s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0794 (0.0541942s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0717934s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0276731s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.10891 (0.0423057s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0502076s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.08479 (0.0778811s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.39.&#160;Operator -(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0147372s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0170001s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0232882s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0310734s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.4267 (0.0210256s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.98887 (0.0338109s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.83788 (0.0428009s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.81269 (0.0563264s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.07504 (0.0305803s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.40928 (0.0409579s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.58711 (0.0602493s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.26438 (0.101435s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5424 (0.199577s)
+ </p>
+ </td>
+<td>
+ <p>
+ 12.1793 (0.207048s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.28855 (0.216314s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.49327 (0.232842s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.40.&#160;Operator -(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0277377s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0296807s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0372392s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0455855s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.19867 (0.0332484s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.48639 (0.0441169s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.43253 (0.0533464s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.27697 (0.0582111s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 24.1794 (0.670683s)
+ </p>
+ </td>
+<td>
+ <p>
+ 22.9073 (0.679904s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.8758 (0.702922s)
+ </p>
+ </td>
+<td>
+ <p>
+ 16.5837 (0.755975s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 18.149 (0.503413s)
+ </p>
+ </td>
+<td>
+ <p>
+ 17.4116 (0.516787s)
+ </p>
+ </td>
+<td>
+ <p>
+ 14.0411 (0.52288s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.8237 (0.538987s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.41.&#160;Operator -=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.26896 (0.0203467s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.25722 (0.0206147s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.36108 (0.0225485s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.18351 (0.0226161s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0160342s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0163971s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0165667s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0191094s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 41.1339 (0.659547s)
+ </p>
+ </td>
+<td>
+ <p>
+ 40.3982 (0.662411s)
+ </p>
+ </td>
+<td>
+ <p>
+ 39.925 (0.661425s)
+ </p>
+ </td>
+<td>
+ <p>
+ 34.636 (0.661874s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 31.1543 (0.499533s)
+ </p>
+ </td>
+<td>
+ <p>
+ 31.0303 (0.508806s)
+ </p>
+ </td>
+<td>
+ <p>
+ 30.7699 (0.509756s)
+ </p>
+ </td>
+<td>
+ <p>
+ 27.7054 (0.529434s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.42.&#160;Operator *</b></p>
+<div class="table-contents"><table class="table" summary="Operator *">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.11839 (0.0757577s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.61061 (0.207951s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.4501 (0.696912s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.72796 (2.64108s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01115 (0.0684934s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.28687 (0.166152s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.480595s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.52844s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0677384s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.129113s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09011 (0.523902s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.03374 (1.58s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.6322 (0.110562s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.71751 (0.350866s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.05222 (0.986288s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.0644 (3.15531s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.43.&#160;Operator *(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01611 (0.0229536s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.12175 (0.0298152s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16413 (0.0416439s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31747 (0.0666043s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.30215 (0.0294152s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.669 (0.0443606s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.72395 (0.0616701s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.88315 (0.095202s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0225897s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0265791s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0357725s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0505547s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 10.8281 (0.244603s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.1516 (0.26982s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.76424 (0.313519s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.04364 (0.406644s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.44.&#160;Operator *(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0570721s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0856141s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.143279s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.252785s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.10857 (0.0632686s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2951 (0.110878s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.20827 (0.173121s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.18463 (0.299456s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 12.0605 (0.68832s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.13434 (0.696415s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.21762 (0.747577s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.11601 (0.787681s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 10.0524 (0.57371s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.33116 (0.627651s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.85202 (0.695193s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.35808 (0.848871s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.45.&#160;Operator *=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 111.27 (7.43118s)
+ </p>
+ </td>
+<td>
+ <p>
+ 67.7078 (7.34138s)
+ </p>
+ </td>
+<td>
+ <p>
+ 43.3851 (7.4075s)
+ </p>
+ </td>
+<td>
+ <p>
+ 25.3089 (7.55455s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0667848s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.108427s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.170738s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.298493s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 46.3718 (3.09693s)
+ </p>
+ </td>
+<td>
+ <p>
+ 28.4639 (3.08626s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.1719 (3.10264s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.5223 (3.14083s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 276.674 (18.4776s)
+ </p>
+ </td>
+<td>
+ <p>
+ 169.146 (18.34s)
+ </p>
+ </td>
+<td>
+ <p>
+ 108.491 (18.5236s)
+ </p>
+ </td>
+<td>
+ <p>
+ 63.3261 (18.9024s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.46.&#160;Operator /</b></p>
+<div class="table-contents"><table class="table" summary="Operator /">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.68035 (0.595251s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.04702 (0.707471s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.62314 (0.921536s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.43112 (1.38811s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.222079s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.34561s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.567748s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.969945s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 3.79283 (0.842308s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.73668 (0.945824s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.86649 (1.05969s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32141 (1.2817s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 13.2531 (2.94324s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.2054 (3.87271s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.83293 (5.58262s)
+ </p>
+ </td>
+<td>
+ <p>
+ 13.0164 (12.6252s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.47.&#160;Operator /(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.06026 (0.225473s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.45732 (0.340049s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.00195 (0.547957s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.80587 (0.978029s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.43766 (0.135367s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.56264 (0.252052s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.44011 (0.445402s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.38009 (0.829617s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0555316s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0983563s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.182534s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.348566s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 35.9988 (1.99907s)
+ </p>
+ </td>
+<td>
+ <p>
+ 27.1024 (2.66569s)
+ </p>
+ </td>
+<td>
+ <p>
+ 21.8333 (3.98531s)
+ </p>
+ </td>
+<td>
+ <p>
+ 25.8066 (8.99528s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.48.&#160;Operator /(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.50505 (0.705756s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.39347 (1.58556s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.63348 (3.57438s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.75451 (8.52733s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.468925s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.12378 (1.27869s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.29966 (3.12128s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.4844 (8.04288s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.17234 (1.01866s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.13785s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.35728s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.79352s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.74612 (2.22557s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.70088 (3.07319s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.65634 (4.96268s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.79408 (12.1853s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.76281 (0.0574966s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.76471 (0.0604224s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.56085 (0.0716403s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31422 (0.124043s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0326164s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0342393s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0458981s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0943852s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 20.2862 (0.661664s)
+ </p>
+ </td>
+<td>
+ <p>
+ 19.4043 (0.664389s)
+ </p>
+ </td>
+<td>
+ <p>
+ 14.4881 (0.664976s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.14238 (0.674135s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 32.9555 (1.07489s)
+ </p>
+ </td>
+<td>
+ <p>
+ 30.1525 (1.0324s)
+ </p>
+ </td>
+<td>
+ <p>
+ 22.8324 (1.04796s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.7456 (1.10861s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.50.&#160;Operator %</b></p>
+<div class="table-contents"><table class="table" summary="Operator %">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.8501 (0.364131s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.46527 (0.476653s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.27509 (0.689738s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.20064 (1.11769s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.196817s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.325301s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.540932s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.930916s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 3.2533 (0.640305s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.15441 (0.700832s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.47898 (0.800029s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.07439 (1.00016s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 15.3501 (3.02116s)
+ </p>
+ </td>
+<td>
+ <p>
+ 12.1106 (3.9396s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.0689 (5.98752s)
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5535 (12.6172s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.51.&#160;Operator %(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator %(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.82761 (0.104331s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.01496 (0.202512s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.10004 (0.389523s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.17252 (0.768097s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.78851 (0.102099s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.96844 (0.197838s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.02956 (0.376451s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.07257 (0.73276s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.057086s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.100505s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.185483s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.353552s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 36.3018 (2.07233s)
+ </p>
+ </td>
+<td>
+ <p>
+ 26.3075 (2.64402s)
+ </p>
+ </td>
+<td>
+ <p>
+ 21.9525 (4.07183s)
+ </p>
+ </td>
+<td>
+ <p>
+ 25.6759 (9.07775s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.52.&#160;Operator construct</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.40211 (0.0026854s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00278639s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00322813s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0027185s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00191526s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.40721 (0.00392103s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.90346 (0.00614463s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.14621 (0.00583447s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 98.705 (0.189046s)
+ </p>
+ </td>
+<td>
+ <p>
+ 68.9726 (0.192184s)
+ </p>
+ </td>
+<td>
+ <p>
+ 58.8994 (0.190135s)
+ </p>
+ </td>
+<td>
+ <p>
+ 70.0525 (0.190438s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 105.602 (0.202255s)
+ </p>
+ </td>
+<td>
+ <p>
+ 74.1994 (0.206748s)
+ </p>
+ </td>
+<td>
+ <p>
+ 63.6455 (0.205456s)
+ </p>
+ </td>
+<td>
+ <p>
+ 76.8935 (0.209035s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.53.&#160;Operator construct(unsigned)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.73436 (0.00348927s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00263476s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0027009s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00318651s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00201185s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.36851 (0.0036057s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.07362 (0.00560064s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.66856 (0.00531688s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 97.2414 (0.195635s)
+ </p>
+ </td>
+<td>
+ <p>
+ 76.3759 (0.201232s)
+ </p>
+ </td>
+<td>
+ <p>
+ 72.7396 (0.196462s)
+ </p>
+ </td>
+<td>
+ <p>
+ 63.8129 (0.20334s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 210.112 (0.422713s)
+ </p>
+ </td>
+<td>
+ <p>
+ 162.652 (0.42855s)
+ </p>
+ </td>
+<td>
+ <p>
+ 158.33 (0.427634s)
+ </p>
+ </td>
+<td>
+ <p>
+ 134.626 (0.428987s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.34403 (0.00739542s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.66376 (0.00713834s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.22989 (0.0074969s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.23708 (0.00711417s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00315501s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00429049s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00609561s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0057508s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 222.866 (0.703144s)
+ </p>
+ </td>
+<td>
+ <p>
+ 164.331 (0.705059s)
+ </p>
+ </td>
+<td>
+ <p>
+ 115.363 (0.70321s)
+ </p>
+ </td>
+<td>
+ <p>
+ 122.347 (0.703596s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 218.681 (0.689941s)
+ </p>
+ </td>
+<td>
+ <p>
+ 163.796 (0.702765s)
+ </p>
+ </td>
+<td>
+ <p>
+ 114.57 (0.698376s)
+ </p>
+ </td>
+<td>
+ <p>
+ 122.422 (0.704027s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.55.&#160;Operator gcd</b></p>
+<div class="table-contents"><table class="table" summary="Operator gcd">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16358 (2.74442s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.39847 (8.11559s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.64677 (22.2518s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.95096 (64.4961s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.35859s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.30986 (7.60133s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.67681 (22.6577s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.0895 (69.0758s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.03392 (2.4386s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (5.80319s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (13.5124s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (33.0586s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 5.25978 (12.4057s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.4619 (25.8932s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.15577 (56.1542s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.91192 (129.323s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.56.&#160;Operator powm</b></p>
+<div class="table-contents"><table class="table" summary="Operator powm">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 2.50722 (2.91621s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.5561 (13.406s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.37066 (73.483s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.88831 (473.91s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.93385 (2.24931s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.18107 (11.9922s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.20753 (70.7403s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.8158 (466.88s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.16313s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (3.76986s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (16.8128s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (96.9476s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.44081 (1.67584s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.8794 (7.08507s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.19115 (36.8394s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.17186 (210.557s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.57.&#160;Operator str</b></p>
+<div class="table-contents"><table class="table" summary="Operator str">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.17175 (0.00160006s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.41999 (0.00329476s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.40856 (0.00813784s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.52964 (0.0229767s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00136554s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00232027s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00577741s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.14754 (0.0172372s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.50501 (0.00205515s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.52968 (0.00354926s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01989 (0.0058923s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.015021s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 12.2161 (0.0166816s)
+ </p>
+ </td>
+<td>
+ <p>
+ 16.9577 (0.0393463s)
+ </p>
+ </td>
+<td>
+ <p>
+ 18.7474 (0.108311s)
+ </p>
+ </td>
+<td>
+ <p>
+ 22.7368 (0.341528s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.58.&#160;Operator |</b></p>
+<div class="table-contents"><table class="table" summary="Operator |">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0301617s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0423404s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0522358s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0813156s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0638 (0.0320861s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.22566 (0.0518951s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.28515 (0.0671305s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16118 (0.094422s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.76553 (0.0532514s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.51489 (0.0641408s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.70708 (0.0891706s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.77346 (0.14421s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.37637 (0.131999s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.46212 (0.146587s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.91875 (0.152463s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.19621 (0.341217s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.59.&#160;Operator |(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator |(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0289129s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0351119s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0406779s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0525891s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.06091 (0.030674s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.25979 (0.0442336s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.36194 (0.0554009s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.37438 (0.0722772s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.92854 (0.142498s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.34687 (0.152627s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.71442 (0.151095s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.981 (0.156768s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 10.9847 (0.317598s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.37065 (0.329021s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.53651 (0.347248s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.2155 (0.589813s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.60.&#160;Operator ^</b></p>
+<div class="table-contents"><table class="table" summary="Operator ^">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0305149s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.04217s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0525977s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0816632s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01544 (0.0309861s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24872 (0.0526585s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.26661 (0.066621s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.15965 (0.0947007s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.64675 (0.0502505s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.47181 (0.0620663s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.66038 (0.0873322s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.67895 (0.137108s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.30668 (0.131418s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.45859 (0.145849s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.91462 (0.153303s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.15538 (0.339342s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.61.&#160;Operator ^(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator ^(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.01566 (0.0296088s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0356634s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0401898s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0514097s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0291524s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2393 (0.0441976s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.38556 (0.0556856s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.38899 (0.0714075s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.68027 (0.136441s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.15243 (0.14809s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.74237 (0.150405s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.0483 (0.156712s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 10.919 (0.318314s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.16311 (0.326788s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.62554 (0.346659s)
+ </p>
+ </td>
+<td>
+ <p>
+ 11.6212 (0.597442s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.62.&#160;Operator &amp;</b></p>
+<div class="table-contents"><table class="table" summary="Operator &amp;">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0346 (0.0303431s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0427309s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0535587s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.06945 (0.0828084s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0293284s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.10435 (0.04719s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05262 (0.0563769s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0774309s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.86057 (0.0545675s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.58432 (0.0676995s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.69164 (0.0906018s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.86625 (0.144505s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 4.4157 (0.129506s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.60396 (0.154s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.95985 (0.158525s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.4032 (0.340944s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.63.&#160;Operator &amp;(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator &amp;(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05874 (0.038946s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0483903s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.063842s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.100361s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0367853s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05827 (0.0512099s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09114 (0.0696605s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09432 (0.109826s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 3.92298 (0.144308s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.99447 (0.144903s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.228 (0.14224s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.42296 (0.142809s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 8.79208 (0.323419s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.02288 (0.339839s)
+ </p>
+ </td>
+<td>
+ <p>
+ 5.65271 (0.36088s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.27104 (0.629365s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.64.&#160;Operator &lt;&lt;</b></p>
+<div class="table-contents"><table class="table" summary="Operator &lt;&lt;">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0248801s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.23196 (0.04s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0424149s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.060157s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.08931 (0.027102s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.40572 (0.0456418s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3475 (0.0571542s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.24573 (0.0749397s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05561 (0.0262636s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0324686s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.09914 (0.0466199s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16315 (0.0699719s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.60497 (0.0399319s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.13048 (0.0691737s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.31219 (0.0980712s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.74695 (0.165248s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0213349s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.02127 (0.0295019s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0327116s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13168 (0.0433804s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int(fixed)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.13514 (0.0242181s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16938 (0.0337803s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.46999 (0.0480859s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.60077 (0.061362s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp_int
+ </p>
+ </td>
+<td>
+ <p>
+ 1.26614 (0.0270129s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0288873s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.42219 (0.0465221s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0383329s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath_int
+ </p>
+ </td>
+<td>
+ <p>
+ 12.0066 (0.25616s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.2837 (0.297067s)
+ </p>
+ </td>
+<td>
+ <p>
+ 9.99696 (0.327017s)
+ </p>
+ </td>
+<td>
+ <p>
+ 16.0943 (0.616942s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+ turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0.
+ The tests were run on 32-bit Windows Vista machine.
+ </p>
+<p>
+ Linux x86_64 results are broadly similar, except that libtommath performs
+ much better there.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="float_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="rational_performance.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html
new file mode 100644
index 0000000000..0bda9c57c6
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/overhead.html
@@ -0,0 +1,200 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>The Overhead in the Number Class Wrapper</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="../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">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../perf.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="realworld.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.perf.overhead"></a><a class="link" href="overhead.html" title="The Overhead in the Number Class Wrapper">The Overhead in the
+ Number Class Wrapper</a>
+</h3></div></div></div>
+<p>
+ Using a simple <a href="../../../../performance/arithmetic_backend.hpp" target="_top">backend
+ class</a> that wraps any built in arithmetic type we can measure the
+ overhead involved in wrapping a type inside the <code class="computeroutput"><span class="identifier">number</span></code>
+ frontend, and the effect that turning on expression templates has. The following
+ table compares the performance between <code class="computeroutput"><span class="keyword">double</span></code>
+ and a <code class="computeroutput"><span class="keyword">double</span></code> wrapped inside
+ class <code class="computeroutput"><span class="identifier">number</span></code>:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Bessel Function Evaluation
+ </p>
+ </th>
+<th>
+ <p>
+ Non-Central T Evaluation
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">double</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0 (0.016s)</strong></span>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span> (0.46s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">arithmetic_backend</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;,</span>
+ <span class="identifier">et_off</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (0.019s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span>(0.46s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">arithmetic_backend</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;,</span>
+ <span class="identifier">et_on</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (0.019s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.7 (0.79s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ 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 "trivial" backend like this, saving temporaries
+ has no benefit, but for larger types it becomes a bigger win.
+ </p>
+<p>
+ The following table compares arithmetic using either <code class="computeroutput"><span class="keyword">long</span>
+ <span class="keyword">long</span></code> or <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">arithmetic_backend</span><span class="special">&lt;</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">&gt;</span> <span class="special">&gt;</span></code> for the <a href="../../../../performance/voronoi_performance.cpp" target="_top">voronoi-diagram
+ builder test</a>:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Relative time
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span>(0.0823s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">arithmetic_backend</span><span class="special">&lt;</span><span class="keyword">long</span> <span class="keyword">long</span><span class="special">&gt;,</span> <span class="identifier">et_off</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05 (0.0875s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ This test involves mainly creating a lot of temporaries and performing a
+ small amount of arithmetic on them, with very little difference in performance
+ between the native and "wrapped" types.
+ </p>
+<p>
+ The test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+ turned on (/Ox), and used MPIR-2.3.0 and <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>-0.42.0.
+ The tests were run on 32-bit Windows Vista machine.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../perf.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="realworld.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html
new file mode 100644
index 0000000000..00c65564ce
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/rational_performance.html
@@ -0,0 +1,1958 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Rational Type Performance</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="../perf.html" title="Performance Comparison">
+<link rel="prev" href="integer_performance.html" title="Integer Algorithm Performance">
+<link rel="next" href="../map.html" title="Roadmap">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="integer_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="../map.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.perf.rational_performance"></a><a class="link" href="rational_performance.html" title="Rational Type Performance">Rational
+ Type Performance</a>
+</h3></div></div></div>
+<p>
+ Note that these tests are carefully designed to test performance of the underlying
+ algorithms and not memory allocation or variable copying. As usual, performance
+ results should be taken with a healthy dose of scepticism, and real-world
+ performance may vary widely depending upon the specifics of the program.
+ In each table relative times are given first, with the best performer given
+ a score of 1. Total actual times are given in brackets, measured in seconds
+ for 500000 operations.
+ </p>
+<div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 5.89417 (18.4116s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.87256 (47.4698s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.65008 (107.715s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.53801 (256.244s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (3.1237s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (6.90715s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (16.1975s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (39.1929s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.67.&#160;Operator +(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 3.62367 (2.46488s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.18291 (2.94603s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.726 (3.74866s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.1388 (5.56817s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.680215s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.704303s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.7932s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.907046s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.68.&#160;Operator +(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1527 (2.6378s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.31751 (3.09863s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.58996 (4.00714s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.15642 (5.75702s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.28837s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.35189s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.52028s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.66971s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.69.&#160;Operator +=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator +=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.18436 (2.7059s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32279 (3.11099s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.61398 (4.05389s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.20048 (5.84623s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.2847s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.35183s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.51174s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.6568s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.70.&#160;Operator -</b></p>
+<div class="table-contents"><table class="table" summary="Operator -">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 5.81893 (18.3457s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.82209 (47.1928s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.64143 (107.498s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.51362 (255.137s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (3.15277s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (6.91765s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (16.1859s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (39.1698s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.71.&#160;Operator -(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 3.72441 (2.48756s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.27663 (2.98713s)
+ </p>
+ </td>
+<td>
+ <p>
+ 4.62109 (3.72114s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.17605 (5.56503s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.667908s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.698479s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.805252s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.901066s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.72.&#160;Operator -(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.15627 (2.63239s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32096 (3.12092s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.61044 (4.00106s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.19378 (5.7644s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.27663s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.36262s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.48445s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.62761s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.73.&#160;Operator -=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator -=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1984 (2.73444s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.34141 (3.15698s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.64159 (4.06997s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.23017 (5.88108s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.28174s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.35348s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.47929s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (2.63706s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.74.&#160;Operator *</b></p>
+<div class="table-contents"><table class="table" summary="Operator *">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 5.4306 (32.5882s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.91805 (89.9436s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.94556 (207.307s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.88704 (492.151s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (6.00084s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (13.0013s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (29.8475s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (71.4604s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.75.&#160;Operator *(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 2.12892 (2.51376s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.47245 (3.07841s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.86832 (3.93619s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.94086 (6.02565s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.18077s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.24508s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.3723s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.52902s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.76.&#160;Operator *(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.32254 (5.43565s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.56078 (6.73163s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.97701 (9.32522s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.85404 (15.1573s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.11002s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.313s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.71682s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (5.31082s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.77.&#160;Operator *=(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator *=(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 6.29806 (58.1188s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.30556 (59.5076s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.3385 (62.1007s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.55345 (67.6905s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.22804s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.43733s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.79739s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (10.329s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.78.&#160;Operator /</b></p>
+<div class="table-contents"><table class="table" summary="Operator /">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 4.4269 (66.8031s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.40103 (173.527s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.32347 (348.193s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.61148 (824.063s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (15.0903s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (27.1093s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (55.0637s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (124.641s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.79.&#160;Operator /(int)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(int)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.78772 (2.50984s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.10623 (3.10606s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.46986 (3.99358s)
+ </p>
+ </td>
+<td>
+ <p>
+ 3.37428 (5.96678s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.40393s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.4747s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.61693s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (1.76831s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.80.&#160;Operator /(unsigned long long)</b></p>
+<div class="table-contents"><table class="table" summary="Operator /(unsigned long long)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 1.29695 (5.45454s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.55248 (6.85353s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.93237 (9.28765s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.75211 (14.8541s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.20568s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.41458s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (4.80635s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (5.39734s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 6.19401 (58.4278s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.20135 (59.643s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.21327 (62.0338s)
+ </p>
+ </td>
+<td>
+ <p>
+ 6.40576 (67.6778s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.43295s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.61774s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (9.98407s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (10.5652s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.82.&#160;Operator construct</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00978288s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0100574s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0101393s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0101847s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 39.1516 (0.383015s)
+ </p>
+ </td>
+<td>
+ <p>
+ 38.3523 (0.385725s)
+ </p>
+ </td>
+<td>
+ <p>
+ 37.5812 (0.381048s)
+ </p>
+ </td>
+<td>
+ <p>
+ 37.6007 (0.382953s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.83.&#160;Operator construct(unsigned)</b></p>
+<div class="table-contents"><table class="table" summary="Operator construct(unsigned)">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0548151s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0557542s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.055825s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0552808s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 7.21073 (0.395257s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.1016 (0.395944s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.02046 (0.391917s)
+ </p>
+ </td>
+<td>
+ <p>
+ 7.16881 (0.396297s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0605156s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0616657s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0592056s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0603081s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 35.1604 (2.12775s)
+ </p>
+ </td>
+<td>
+ <p>
+ 34.7575 (2.14335s)
+ </p>
+ </td>
+<td>
+ <p>
+ 35.7232 (2.11502s)
+ </p>
+ </td>
+<td>
+ <p>
+ 35.0437 (2.11342s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.85.&#160;Operator str</b></p>
+<div class="table-contents"><table class="table" summary="Operator str">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ 128 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 256 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 512 Bits
+ </p>
+ </th>
+<th>
+ <p>
+ 1024 Bits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_rational
+ </p>
+ </td>
+<td>
+ <p>
+ 5.48898 (0.0208949s)
+ </p>
+ </td>
+<td>
+ <p>
+ 8.49668 (0.0546688s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.107 (0.121897s)
+ </p>
+ </td>
+<td>
+ <p>
+ 10.5339 (0.310584s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpq_rational
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0038067s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.00643413s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0120606s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1</strong></span> (0.0294843s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+ turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0.
+ The tests were run on 32-bit Windows Vista machine.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="integer_performance.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="../map.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html b/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html
new file mode 100644
index 0000000000..a847792299
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/perf/realworld.html
@@ -0,0 +1,284 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<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">
+<link rel="up" href="../perf.html" title="Performance Comparison">
+<link rel="prev" href="overhead.html" title="The Overhead in the Number Class Wrapper">
+<link rel="next" href="int_real_world.html" title="Integer Real World Tests">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="overhead.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="int_real_world.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.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>
+ 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 given in brackets. The
+ first three libraries listed are the various floating point types provided
+ by this library, while for comparison, two popular C++ front-ends to <a href="http://www.mpfr.org" target="_top">MPFR</a> ( <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ and <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>) are
+ also shown.
+ </p>
+<div class="table">
+<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>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Library
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Decimal Digits
+ </p>
+ </th>
+<th>
+ <p>
+ 100 Decimal Digits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (5.78s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (9.56s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ static_mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (5.47s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.1 (9.09s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpf_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span> (4.82s)
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span>(8.07s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.8 (8.54s)
+ </p>
+ </td>
+<td>
+ <p>
+ 2.6 (20.66s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3 (6.28s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2(10.06s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 2.0 (9.54s)
+ </p>
+ </td>
+<td>
+ <p>
+ 1.7 (14.08s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Library
+ </p>
+ </th>
+<th>
+ <p>
+ 50 Decimal Digits
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.3 (263.27s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ static_mpfr_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.2 (232.88s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpf_float
+ </p>
+ </td>
+<td>
+ <p>
+ <span class="bold"><strong>1.0</strong></span> (195.73s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_dec_float
+ </p>
+ </td>
+<td>
+ <p>
+ 1.9 (366.38s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://math.berkeley.edu/~wilken/code/gmpfrxx/" target="_top">mpfr_class</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.5 (286.94s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a href="http://www.holoborodko.com/pavel/mpfr/" target="_top">mpreal</a>
+ </p>
+ </td>
+<td>
+ <p>
+ 2.0 (388.70s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+ turned on (/Ox), and used MPIR-2.3.0 and <a href="http://www.mpfr.org" target="_top">MPFR</a>-3.0.0.
+ The tests were run on 32-bit Windows Vista machine.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="overhead.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../perf.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="int_real_world.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref.html
new file mode 100644
index 0000000000..0c1bc8b179
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref.html
@@ -0,0 +1,57 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Reference</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="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<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">
+<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"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<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">
+<a name="boost_multiprecision.ref"></a><a class="link" href="ref.html" title="Reference">Reference</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="ref/number.html">number</a></span></dt>
+<dt><span class="section"><a href="ref/cpp_int_ref.html">cpp_int</a></span></dt>
+<dt><span class="section"><a href="ref/gmp_int_ref.html">gmp_int</a></span></dt>
+<dt><span class="section"><a href="ref/tom_int_ref.html">tom_int</a></span></dt>
+<dt><span class="section"><a href="ref/mpf_ref.html">gmp_float</a></span></dt>
+<dt><span class="section"><a href="ref/mpfr_ref.html">mpfr_float_backend</a></span></dt>
+<dt><span class="section"><a href="ref/cpp_bin_float_ref.html">cpp_bin_float</a></span></dt>
+<dt><span class="section"><a href="ref/cpp_dec_ref.html">cpp_dec_float</a></span></dt>
+<dt><span class="section"><a href="ref/internals.html">Internal Support
+ Code</a></span></dt>
+<dt><span class="section"><a href="ref/backendconc.html">Backend Requirements</a></span></dt>
+<dt><span class="section"><a href="ref/headers.html">Header File Structure</a></span></dt>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
new file mode 100644
index 0000000000..ff86a64dde
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/backendconc.html
@@ -0,0 +1,3970 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Backend Requirements</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="internals.html" title="Internal Support Code">
+<link rel="next" href="headers.html" title="Header File Structure">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="internals.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="headers.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.backendconc"></a><a class="link" href="backendconc.html" title="Backend Requirements">Backend Requirements</a>
+</h3></div></div></div>
+<p>
+ The requirements on the <code class="computeroutput"><span class="identifier">Backend</span></code>
+ template argument to <code class="computeroutput"><span class="identifier">number</span></code>
+ are split up into sections: compulsory and optional.
+ </p>
+<p>
+ Compulsory requirements have no default implementation in the library, therefore
+ if the feature they implement is to be supported at all, then they must be
+ implemented by the backend.
+ </p>
+<p>
+ Optional requirements have default implementations that are called if the
+ backend doesn't provide it's own. Typically the backend will implement these
+ to improve performance.
+ </p>
+<p>
+ In the following tables, type B is the <code class="computeroutput"><span class="identifier">Backend</span></code>
+ template argument to <code class="computeroutput"><span class="identifier">number</span></code>,
+ <code class="computeroutput"><span class="identifier">b</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code>
+ are a variables of type B, <code class="computeroutput"><span class="identifier">cb</span></code>,
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">cb3</span></code>
+ are constant variables of type <code class="computeroutput"><span class="keyword">const</span>
+ <span class="identifier">B</span></code>, <code class="computeroutput"><span class="identifier">rb</span></code>
+ is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;&amp;</span></code>,
+ <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">a2</span></code>
+ are variables of Arithmetic type, <code class="computeroutput"><span class="identifier">s</span></code>
+ is a variable of type <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>, <code class="computeroutput"><span class="identifier">ui</span></code> is a variable of type <code class="computeroutput"><span class="keyword">unsigned</span></code>, <code class="computeroutput"><span class="identifier">bb</span></code>
+ is a variable of type <code class="computeroutput"><span class="keyword">bool</span></code>,
+ <code class="computeroutput"><span class="identifier">pa</span></code> is a variable of type
+ pointer-to-arithmetic-type, <code class="computeroutput"><span class="identifier">exp</span></code>
+ is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exp_type</span></code>, <code class="computeroutput"><span class="identifier">pexp</span></code>
+ is a variable of type <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exp_type</span><span class="special">*</span></code>,
+ <code class="computeroutput"><span class="identifier">i</span></code> is a variable of type
+ <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="identifier">pi</span></code>
+ pointer to a variable of type <code class="computeroutput"><span class="keyword">int</span></code>,
+ B2 is another type that meets these requirements, b2 is a variable of type
+ B2, <code class="computeroutput"><span class="identifier">ss</span></code> is variable of type
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">streamsize</span></code> and <code class="computeroutput"><span class="identifier">ff</span></code>
+ 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_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>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Return Type
+ </p>
+ </th>
+<th>
+ <p>
+ Comments
+ </p>
+ </th>
+<th>
+ <p>
+ Throws
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A list of signed integral types that can be assigned to type B.
+ The types shall be listed in order of size, smallest first, and
+ shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A list of unsigned integral types that can be assigned to type
+ B. The types shall be listed in order of size, smallest first,
+ and shall terminate in the type that is <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">list</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A list of floating-point types that can be assigned to type B.The
+ types shall be listed in order of size, smallest first, and shall
+ terminate in type <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A signed integral type.
+ </p>
+ </td>
+<td>
+ <p>
+ The type of the exponent of type B. This type is required only
+ for floating point types.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Default constructor.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+<td>
+ <p>
+ Copy Constructor.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">b</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Assignment operator.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">a</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Assignment from an Arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">s</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Assignment from a string.
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the string could
+ not be interpreted as a valid number.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Swaps the contents of its arguments.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">str</span><span class="special">(</span><span class="identifier">ss</span><span class="special">,</span>
+ <span class="identifier">ff</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the string representation of <code class="computeroutput"><span class="identifier">b</span></code>
+ with <code class="computeroutput"><span class="identifier">ss</span></code> digits
+ and formatted according to the flags set in <code class="computeroutput"><span class="identifier">ff</span></code>.
+ If <code class="computeroutput"><span class="identifier">ss</span></code> is zero,
+ then returns as many digits as are required to reconstruct the
+ original value.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Negates <code class="computeroutput"><span class="identifier">b</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Compares <code class="computeroutput"><span class="identifier">cb</span></code> and
+ <code class="computeroutput"><span class="identifier">cb2</span></code>, returns a
+ value less than zero if <code class="computeroutput"><span class="identifier">cb</span>
+ <span class="special">&lt;</span> <span class="identifier">cb2</span></code>,
+ a value greater than zero if <code class="computeroutput"><span class="identifier">cb</span>
+ <span class="special">&gt;</span> <span class="identifier">cb2</span></code>
+ and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">cb2</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Compares <code class="computeroutput"><span class="identifier">cb</span></code> and
+ <code class="computeroutput"><span class="identifier">a</span></code>, returns a value
+ less than zero if <code class="computeroutput"><span class="identifier">cb</span>
+ <span class="special">&lt;</span> <span class="identifier">a</span></code>,
+ a value greater than zero if <code class="computeroutput"><span class="identifier">cb</span>
+ <span class="special">&gt;</span> <span class="identifier">a</span></code>
+ and zero if <code class="computeroutput"><span class="identifier">cb</span> <span class="special">==</span> <span class="identifier">a</span></code>.
+ The type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Adds <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from
+ <code class="computeroutput"><span class="identifier">b</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
+ value zero, and <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">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">has_infinity</span> <span class="special">==</span>
+ <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
+ value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&amp;=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_complement</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes the ones-complement of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>,
+ only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&lt;&lt;=</span>
+ <span class="identifier">ui</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&gt;&gt;=</span>
+ <span class="identifier">ui</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_convert_to</span><span class="special">(</span><span class="identifier">pa</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Converts <code class="computeroutput"><span class="identifier">cb</span></code> to
+ the type of <code class="computeroutput"><span class="special">*</span><span class="identifier">pa</span></code>
+ and store the result in <code class="computeroutput"><span class="special">*</span><span class="identifier">pa</span></code>. Type <code class="computeroutput"><span class="identifier">B</span></code>
+ shall support conversion to at least types <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">intmax_t</span></code>,
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uintmax_t</span></code> and <code class="computeroutput"><span class="keyword">long</span>
+ <span class="keyword">long</span></code>. Conversion to other
+ arithmetic types can then be synthesised using other operations.
+ Conversions to other types are entirely optional.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_frexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">pexp</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores values in <code class="computeroutput"><span class="identifier">b</span></code>
+ and <code class="computeroutput"><span class="special">*</span><span class="identifier">pexp</span></code>
+ such that the value of <code class="computeroutput"><span class="identifier">cb</span></code>
+ is b * 2<sup>*pexp</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is a floating-point type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_ldexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">exp</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores a value in <code class="computeroutput"><span class="identifier">b</span></code>
+ that is cb * 2<sup>exp</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is a floating-point type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_frexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">pi</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores values in <code class="computeroutput"><span class="identifier">b</span></code>
+ and <code class="computeroutput"><span class="special">*</span><span class="identifier">pi</span></code>
+ such that the value of <code class="computeroutput"><span class="identifier">cb</span></code>
+ is b * 2<sup>*pi</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is a floating-point type.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> if the exponent
+ of cb is too large to be stored in an <code class="computeroutput"><span class="keyword">int</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_ldexp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">i</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores a value in <code class="computeroutput"><span class="identifier">b</span></code>
+ that is cb * 2<sup>i</sup>, only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is a floating-point type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_floor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores the floor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_ceil</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores the ceiling of <code class="computeroutput"><span class="identifier">cb</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_sqrt</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Stores the square root of <code class="computeroutput"><span class="identifier">cb</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is a floating-point
+ type.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">number_category</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <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">N</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">N</span></code> is one of the
+ values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>,
+ <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>,
+ <code class="computeroutput"><span class="identifier">number_kind_rational</span></code>
+ or <code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>.
+ Defaults to <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><div class="table">
+<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>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Expression
+ </p>
+ </th>
+<th>
+ <p>
+ Returns
+ </p>
+ </th>
+<th>
+ <p>
+ Comments
+ </p>
+ </th>
+<th>
+ <p>
+ Throws
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Construct and assign:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">rb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Move constructor. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ shall be in sane state, albeit with unspecified value. Only destruction
+ and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ need be supported after the operation.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">rb</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Move-assign. Afterwards variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ shall be in sane state, albeit with unspecified value. Only destruction
+ and assignment to the moved-from variable <code class="computeroutput"><span class="identifier">rb</span></code>
+ need be supported after the operation.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Direct construction from an arithmetic type. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ this operation is simulated using default-construction followed
+ by assignment.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">(</span><span class="identifier">b2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Copy constructor from a different back-end type. When not provided,
+ a generic interconversion routine is used. This constructor may
+ be <code class="computeroutput"><span class="keyword">explicit</span></code> if the
+ corresponding frontend constructor should also be <code class="computeroutput"><span class="keyword">explicit</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span> <span class="special">=</span>
+ <span class="identifier">b2</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">b</span><span class="special">&amp;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Assignment operator from a different back-end type. When not provided,
+ a generic interconversion routine is used.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Assigns to <code class="computeroutput"><span class="identifier">b</span></code> 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.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">assign_components</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Assigns to <code class="computeroutput"><span class="identifier">b</span></code> 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.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Comparisons:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">cb2</span></code>
+ are equal in value. When not provided, the default implementation
+ returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span>
+ <span class="special">==</span> <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>
+ are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ return the equivalent of <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> and <code class="computeroutput"><span class="identifier">a</span></code>
+ are equal in value. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version returns <code class="computeroutput"><span class="identifier">eval_eq</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special">&lt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is less than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is less than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">cb2</span></code> in value. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">cb2</span><span class="special">)</span> <span class="special">&gt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">noexcept</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is greater than <code class="computeroutput"><span class="identifier">a</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gt</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> is greater than <code class="computeroutput"><span class="identifier">cb</span></code> in value. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default implementation returns <code class="computeroutput"><span class="identifier">eval_lt</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_is_zero</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">cb</span></code> is zero, otherwise <code class="computeroutput"><span class="keyword">false</span></code>. The default version of this
+ function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span> <span class="special">==</span>
+ <span class="number">0</span></code>, where <code class="computeroutput"><span class="identifier">ui_type</span></code>
+ is <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns a value &lt; zero if <code class="computeroutput"><span class="identifier">cb</span></code>
+ is negative, a value &gt; zero if <code class="computeroutput"><span class="identifier">cb</span></code>
+ is positive, and zero if <code class="computeroutput"><span class="identifier">cb</span></code>
+ is zero. The default version of this function returns <code class="computeroutput"><span class="identifier">cb</span><span class="special">.</span><span class="identifier">compare</span><span class="special">(</span><span class="identifier">ui_type</span><span class="special">(</span><span class="number">0</span><span class="special">))</span></code>,
+ where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="identifier">ui_type</span></code> is <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Basic arithmetic:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Adds <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_add</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">cb2</span></code> and stores the result in
+ <code class="computeroutput"><span class="identifier">b</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Add <code class="computeroutput"><span class="identifier">cb</span></code> to <code class="computeroutput"><span class="identifier">a</span></code> and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Add <code class="computeroutput"><span class="identifier">a</span></code> to <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
+ <code class="computeroutput"><span class="identifier">b</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
+ <code class="computeroutput"><span class="identifier">b</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_subtract</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">cb2</span></code> from
+ <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. When
+ not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">a</span></code> from
+ <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Subtracts <code class="computeroutput"><span class="identifier">cb</span></code> from
+ <code class="computeroutput"><span class="identifier">a</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span> <span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">();</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">b</span></code> by
+ <code class="computeroutput"><span class="identifier">a</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_multiply</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">a</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and adds the
+ result to <code class="computeroutput"><span class="identifier">b</span></code>. When
+ not provided does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span> <span class="identifier">t</span></code>
+ and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code> and adds the
+ result to <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
+ does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span>
+ <span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code> and adds the
+ result to <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and subtracts
+ the result from <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided does the equivalent of creating a temporary
+ <code class="computeroutput"><span class="identifier">B</span> <span class="identifier">t</span></code>
+ and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code> and subtracts
+ the result from <code class="computeroutput"><span class="identifier">b</span></code>.
+ The type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
+ does the equivalent of creating a temporary <code class="computeroutput"><span class="identifier">B</span>
+ <span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">t</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">a</span></code> by
+ <code class="computeroutput"><span class="identifier">cb</span></code> and subtracts
+ the result from <code class="computeroutput"><span class="identifier">b</span></code>.
+ The type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and adds the
+ result to <code class="computeroutput"><span class="identifier">cb3</span></code> storing
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>. For brevity, only a version showing
+ all arguments of type <code class="computeroutput"><span class="identifier">B</span></code>
+ is shown here, but you can replace up to any 2 of <code class="computeroutput"><span class="identifier">cb</span></code>, <code class="computeroutput"><span class="identifier">cb2</span></code>
+ and <code class="computeroutput"><span class="identifier">cb3</span></code> with any
+ type listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_multiply_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Multiplies <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and subtracts
+ from the result <code class="computeroutput"><span class="identifier">cb3</span></code>
+ storing the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided does the equivalent of <code class="computeroutput"><span class="identifier">eval_multiply</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code> followed by <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb3</span><span class="special">)</span></code>. For brevity, only a version showing
+ all arguments of type <code class="computeroutput"><span class="identifier">B</span></code>
+ is shown here, but you can replace up to any 2 of <code class="computeroutput"><span class="identifier">cb</span></code>, <code class="computeroutput"><span class="identifier">cb2</span></code>
+ and <code class="computeroutput"><span class="identifier">cb3</span></code> with any
+ type listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">b</span></code> by <code class="computeroutput"><span class="identifier">a</span></code>. The type of <code class="computeroutput"><span class="identifier">a</span></code> shall be listed in one of the
+ type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>, <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>
+ or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_divide</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <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">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">cb2</span></code> and stores
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">cb2</span></code> has the value zero, and
+ <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">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">cb</span></code> by
+ <code class="computeroutput"><span class="identifier">a</span></code> and stores the
+ result in <code class="computeroutput"><span class="identifier">b</span></code>. The
+ type of <code class="computeroutput"><span class="identifier">a</span></code> shall
+ be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero, and <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">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span>
+ <span class="special">&gt;::</span><span class="identifier">has_infinity</span>
+ <span class="special">==</span> <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_divide</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Divides <code class="computeroutput"><span class="identifier">a</span></code> by <code class="computeroutput"><span class="identifier">cb</span></code> and stores the result in
+ <code class="computeroutput"><span class="identifier">b</span></code>. The type of
+ <code class="computeroutput"><span class="identifier">a</span></code> shall be listed
+ in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_divide</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="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if cb has the
+ value zero, and <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">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">has_infinity</span> <span class="special">==</span>
+ <span class="keyword">false</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_increment</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Increments the value of <code class="computeroutput"><span class="identifier">b</span></code>
+ by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_add</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">ui_type</span><span class="special">&gt;(</span><span class="number">1u</span><span class="special">))</span></code>.
+ Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_decrement</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ void
+ </p>
+ </td>
+<td>
+ <p>
+ Decrements the value of <code class="computeroutput"><span class="identifier">b</span></code>
+ by one. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">eval_subtract</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">ui_type</span><span class="special">&gt;(</span><span class="number">1u</span><span class="special">))</span></code>.
+ Where <code class="computeroutput"><span class="identifier">ui_type</span></code> is
+ <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Integer specific operations:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">%=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_modulus</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_modulus</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_modulus</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="identifier">a</span><span class="special">),</span> <span class="identifier">cb</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">&amp;=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_and</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&amp;</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_and</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">|=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_or</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">|</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_or</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">b</span> <span class="special">^=</span>
+ <span class="identifier">cb</span></code>, only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ the default version calls <code class="computeroutput"><span class="identifier">eval_bitwise_xor</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="identifier">a</span><span class="special">))</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
+ <span class="identifier">cb2</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb2</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">^</span>
+ <span class="identifier">a</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">a</span> <span class="special">^</span>
+ <span class="identifier">cb</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. When not provided,
+ does the equivalent of <code class="computeroutput"><span class="identifier">eval_bitwise_xor</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&lt;&lt;</span>
+ <span class="identifier">ui</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_left_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Computes <code class="computeroutput"><span class="identifier">cb</span> <span class="special">&gt;&gt;</span>
+ <span class="identifier">ui</span></code> and stores the result
+ in <code class="computeroutput"><span class="identifier">b</span></code>, only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. When not provided, does the equivalent of <code class="computeroutput"><span class="identifier">b</span>
+ <span class="special">=</span> <span class="identifier">cb</span><span class="special">;</span> <span class="identifier">eval_right_shift</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">a</span><span class="special">);</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_qr</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">,</span>
+ <span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">b2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">/</span>
+ <span class="identifier">cb2</span></code> and <code class="computeroutput"><span class="identifier">b2</span></code> to the result of <code class="computeroutput"><span class="identifier">cb</span> <span class="special">%</span>
+ <span class="identifier">cb2</span></code>. Only required when
+ <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_integer_modulus</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">unsigned</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the result of <code class="computeroutput"><span class="identifier">cb</span>
+ <span class="special">%</span> <span class="identifier">ui</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code> if <code class="computeroutput"><span class="identifier">a</span></code> has the value zero.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lsb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">unsigned</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the index of the least significant bit that is set. Only
+ required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_msb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">unsigned</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the index of the most significant bit that is set. Only
+ required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bit_test</span><span class="special">(</span><span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">bool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns true if <code class="computeroutput"><span class="identifier">cb</span></code>
+ has bit <code class="computeroutput"><span class="identifier">ui</span></code> set.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an integer type. The default version of this function is synthesised
+ from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bit_set</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bit_unset</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Unsets the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_bit_flip</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">ui</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Flips the bit at index <code class="computeroutput"><span class="identifier">ui</span></code>
+ in <code class="computeroutput"><span class="identifier">b</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
+ common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
+ common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The default version of this function is synthesised from
+ other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
+ common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
+ common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">B</span><span class="special">(</span><span class="identifier">a</span><span class="special">))</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the greatest
+ common divisor of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">a</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_gcd</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the least
+ common multiple of <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">a</span></code>. Only required
+ when <code class="computeroutput"><span class="identifier">B</span></code> is an integer
+ type. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code> or <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">float_types</span></code>. The default version
+ of this function calls <code class="computeroutput"><span class="identifier">eval_lcm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">,</span>
+ <span class="identifier">cb3</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^cb2)%cb3</em></span>. The default version of this
+ function is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^cb2)%a</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
+ of this function is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^a)%cb2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
+ of this function is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_powm</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">a</span><span class="special">,</span>
+ <span class="identifier">a2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the result
+ of <span class="emphasis"><em>(cb^a)%a2</em></span>. The type of <code class="computeroutput"><span class="identifier">a</span></code>
+ shall be listed in one of the type lists <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">signed_types</span></code>,
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">unsigned_types</span></code>. The default version
+ of this function is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_integer_sqrt</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span> <span class="identifier">cb</span><span class="special">,</span> <span class="identifier">b2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the largest
+ integer which when squared is less than <code class="computeroutput"><span class="identifier">cb</span></code>,
+ also sets <code class="computeroutput"><span class="identifier">b2</span></code> to
+ the remainder, ie to <span class="emphasis"><em>cb - b<sup>2</sup></em></span>. The default
+ version of this function is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Sign manipulation:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_abs</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute
+ value of <code class="computeroutput"><span class="identifier">cb</span></code>. The
+ default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code>
+ to <code class="computeroutput"><span class="identifier">b</span></code>, and then
+ calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
+ if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special">&lt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_fabs</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Set <code class="computeroutput"><span class="identifier">b</span></code> to the absolute
+ value of <code class="computeroutput"><span class="identifier">cb</span></code>. The
+ default version of this functions assigns <code class="computeroutput"><span class="identifier">cb</span></code>
+ to <code class="computeroutput"><span class="identifier">b</span></code>, and then
+ calls <code class="computeroutput"><span class="identifier">b</span><span class="special">.</span><span class="identifier">negate</span><span class="special">()</span></code>
+ if <code class="computeroutput"><span class="identifier">eval_get_sign</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span> <span class="special">&lt;</span>
+ <span class="number">0</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <span class="emphasis"><em>Floating point functions:</em></span>
+ </p>
+ </td>
+<td class="auto-generated">&#160;</td>
+<td class="auto-generated">&#160;</td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_fpclassify</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns one of the same values returned by <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fpclassify</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ will only test for zero <code class="computeroutput"><span class="identifier">cb</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_trunc</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">trunc</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_round</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">round</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_exp</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_log</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_log10</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">log10</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_sin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_cos</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cos</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_tan</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exp</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_asin</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">asin</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_acos</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">acos</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_atan</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_sinh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sinh</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_cosh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">cosh</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_tanh</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">tanh</span></code>
+ on argument <code class="computeroutput"><span class="identifier">cb</span></code>
+ and stores the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_fmod</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">fmod</span></code>
+ on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_pow</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code>
+ on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_atan2</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">cb2</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Performs the equivalent operation to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">atan</span></code>
+ on arguments <code class="computeroutput"><span class="identifier">cb</span></code>
+ and <code class="computeroutput"><span class="identifier">cb2</span></code>, and store
+ the result in <code class="computeroutput"><span class="identifier">b</span></code>.
+ Only required when <code class="computeroutput"><span class="identifier">B</span></code>
+ is an floating-point type. The default version of this function
+ is synthesised from other operations above.
+ </p>
+ </td>
+<td>
+ <p>
+ &#160;
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_scalbn</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">,</span>
+ <span class="identifier">e</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">void</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Scales value <code class="computeroutput"><span class="identifier">cb</span></code>
+ by <span class="emphasis"><em>r<sup>e</sup></em></span>, where <span class="emphasis"><em>r</em></span> is the
+ radix of the type. The default version of this function is implemented
+ in terms of eval_ldexp, consequently this function must be provided
+ for types with a radix other than 2.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_ilogb</span><span class="special">(</span><span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Returns the exponent <span class="emphasis"><em>e</em></span> of value <code class="computeroutput"><span class="identifier">cb</span></code> such that <span class="emphasis"><em>1 &lt;=
+ cb*r<sup>-e</sup> &lt; r</em></span>, where <span class="emphasis"><em>r</em></span> is the radix
+ of type B. The default version of this function is implemented
+ in terms of eval_frexp, consequently this function must be provided
+ for types with a radix other than 2.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">eval_logb</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span>
+ <span class="identifier">cb</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">exponent_type</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Sets <code class="computeroutput"><span class="identifier">b</span></code> to the exponent
+ <span class="emphasis"><em>e</em></span> of value <code class="computeroutput"><span class="identifier">cb</span></code>
+ such that <span class="emphasis"><em>1 &lt;= cb*r<sup>-b</sup> &lt; r</em></span>, where <span class="emphasis"><em>r</em></span>
+ is the radix of type B. The default version of this function is
+ implemented in terms of <code class="computeroutput"><span class="identifier">eval_ilogb</span></code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<br class="table-break"><p>
+ When the tables above place no <span class="emphasis"><em>throws</em></span> requirements on
+ an operation, then it is up to each type modelling this concept to decide
+ when or whether throwing an exception is desirable. However, thrown exceptions
+ should always either be the type, or inherit from the type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>.
+ For example, a floating point type might choose to throw <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ whenever the result of an operation would be infinite, and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">underflow_error</span></code>
+ whenever it would round to zero.
+ </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>
+ 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.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="internals.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="headers.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html
new file mode 100644
index 0000000000..315c32ec7f
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_bin_float_ref.html
@@ -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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></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
+ expressed 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 limited 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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html
new file mode 100644
index 0000000000..f786543b92
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_dec_ref.html
@@ -0,0 +1,92 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_dec_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="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">
+<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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<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">
+<a name="boost_multiprecision.ref.cpp_dec_ref"></a><a class="link" href="cpp_dec_ref.html" title="cpp_dec_float">cpp_dec_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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExponentType</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int32_t</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">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">cpp_dec_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_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="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">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_dec_float_100</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_dec_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 three template parameters:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Digits10</span></dt>
+<dd><p>
+ The number of decimal digits precision the type should support. Note
+ that this type does not normally perform any dynamic memory allocation,
+ and as a result the <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ template argument should not be set too high or the class's size will
+ grow unreasonably large.
+ </p></dd>
+<dt><span class="term">ExponentType</span></dt>
+<dd><p>
+ A signed integer type that represents the exponent of the number
+ </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>
+</dl>
+</div>
+<p>
+ 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>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html
new file mode 100644
index 0000000000..c16b92223b
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/cpp_int_ref.html
@@ -0,0 +1,157 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_int</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="number.html" title="number">
+<link rel="next" href="gmp_int_ref.html" title="gmp_int">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="number.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="gmp_int_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_int_ref"></a><a class="link" href="cpp_int_ref.html" title="cpp_int">cpp_int</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">typedef</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">limb_type</span><span class="special">;</span>
+
+<span class="keyword">enum</span> <span class="identifier">cpp_integer_type</span> <span class="special">{</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span> <span class="special">};</span>
+<span class="keyword">enum</span> <span class="identifier">cpp_int_check_type</span> <span class="special">{</span> <span class="identifier">checked</span><span class="special">,</span> <span class="identifier">unchecked</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">MinDigits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span>
+ <span class="keyword">unsigned</span> <span class="identifier">MaxDits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span>
+ <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span> <span class="special">=</span> <span class="identifier">signed_magnitude</span><span class="special">,</span>
+ <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span> <span class="special">=</span> <span class="identifier">unchecked</span><span class="special">,</span>
+ <span class="keyword">class</span> <span class="identifier">Allocator</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="identifier">limb_type</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">cpp_int_backend</span><span class="special">;</span>
+<span class="comment">//</span>
+<span class="comment">// Expression templates default to et_off if there is no allocator:</span>
+<span class="comment">//</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">MinDigits</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">MaxDigits</span><span class="special">,</span> <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">expression_template_default</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="identifier">MinDigits</span><span class="special">,</span> <span class="identifier">MaxDigits</span><span class="special">,</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">Checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_off</span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_int</span><span class="special">;</span> <span class="comment">// arbitrary precision integer</span>
+<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_rational_backend</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_rational_backend</span><span class="special">&gt;</span> <span class="identifier">cpp_rational</span><span class="special">;</span> <span class="comment">// arbitrary precision rational number</span>
+
+<span class="comment">// Fixed precision unsigned types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint1024_t</span><span class="special">;</span>
+
+<span class="comment">// Fixed precision signed types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int1024_t</span><span class="special">;</span>
+
+<span class="comment">// Over again, but with checking enabled this time:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_cpp_int</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_cpp_rational_backend</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_rational_backend</span><span class="special">&gt;</span> <span class="identifier">checked_cpp_rational</span><span class="special">;</span>
+
+<span class="comment">// Checked fixed precision unsigned types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint1024_t</span><span class="special">;</span>
+
+<span class="comment">// Fixed precision signed types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int1024_t</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_int_backend</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 template arguments are:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">MinBits</span></dt>
+<dd><p>
+ Determines the number of Bits to store directly within the object before
+ resorting to dynamic memory allocation. When zero, this field is determined
+ automatically based on how many bits can be stored in union with the
+ dynamic storage header: setting a larger value may improve performance
+ as larger integer values will be stored internally before memory allocation
+ is required.
+ </p></dd>
+<dt><span class="term">MaxBits</span></dt>
+<dd><p>
+ Determines the maximum number of bits to be stored in the type: resulting
+ in a fixed precision type. When this value is the same as MinBits,
+ then the Allocator parameter is ignored, as no dynamic memory allocation
+ will ever be performed: in this situation the Allocator parameter should
+ be set to type <code class="computeroutput"><span class="keyword">void</span></code>. 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.
+ </p></dd>
+<dt><span class="term">SignType</span></dt>
+<dd><p>
+ Determines whether the resulting type is signed or not. Note that for
+ <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary
+ precision</a> types this parameter must be <code class="computeroutput"><span class="identifier">signed_magnitude</span></code>.
+ For fixed precision types then this type may be either <code class="computeroutput"><span class="identifier">signed_magnitude</span></code> or <code class="computeroutput"><span class="identifier">unsigned_magnitude</span></code>.
+ </p></dd>
+<dt><span class="term">Checked</span></dt>
+<dd><p>
+ This parameter has two values: <code class="computeroutput"><span class="identifier">checked</span></code>
+ or <code class="computeroutput"><span class="identifier">unchecked</span></code>. See the
+ <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">tutorial</a>
+ for more information.
+ </p></dd>
+<dt><span class="term">Allocator</span></dt>
+<dd><p>
+ The allocator to use for dynamic memory allocation, or type <code class="computeroutput"><span class="keyword">void</span></code> if MaxBits == MinBits.
+ </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_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_integer</span><span class="special">&gt;</span></code>.
+ </p>
+<p>
+ More information on this type can be found in the <a class="link" href="../tut/ints/cpp_int.html" title="cpp_int">tutorial</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="number.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="gmp_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html
new file mode 100644
index 0000000000..adb1ecea4e
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/gmp_int_ref.html
@@ -0,0 +1,63 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>gmp_int</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="cpp_int_ref.html" title="cpp_int">
+<link rel="next" href="tom_int_ref.html" title="tom_int">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_int_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="tom_int_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.gmp_int_ref"></a><a class="link" href="gmp_int_ref.html" title="gmp_int">gmp_int</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">class</span> <span class="identifier">gmp_int</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_int</span> <span class="special">&gt;</span> <span class="identifier">mpz_int</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ Class template <code class="computeroutput"><span class="identifier">gmp_int</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 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_integer</span><span class="special">&gt;</span></code>.
+ </p>
+<p>
+ More information on this type can be found in the <a class="link" href="../tut/ints/gmp_int.html" title="gmp_int">tutorial</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_int_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="tom_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html
new file mode 100644
index 0000000000..d8ff404fe3
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/headers.html
@@ -0,0 +1,424 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Header File Structure</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="backendconc.html" title="Backend Requirements">
+<link rel="next" href="../perf.html" title="Performance Comparison">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="backendconc.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="../perf.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.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.10.&#160;Top level headers</b></p>
+<div class="table-contents"><table class="table" summary="Top level headers">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Header
+ </p>
+ </th>
+<th>
+ <p>
+ Contains
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ The <code class="computeroutput"><span class="identifier">cpp_int</span></code> backend
+ type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ gmp.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines all <a href="http://gmplib.org" target="_top">GMP</a> related
+ backends.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ miller_rabin.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Miller Rabin primality testing code.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ number.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines the <code class="computeroutput"><span class="identifier">number</span></code>
+ backend, is included by all the backend headers.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ mpfr.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines the mpfr_float_backend backend.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ random.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines code to interoperate with Boost.Random.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ rational_adaptor.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines the <code class="computeroutput"><span class="identifier">rational_adaptor</span></code>
+ backend.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_dec_float.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines the <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
+ backend.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tommath.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines the <code class="computeroutput"><span class="identifier">tommath_int</span></code>
+ backend.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ concepts/number_archetypes.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines a backend concept archetypes for testing use.
+ </p>
+ </td>
+</tr>
+</tbody>
+</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.11.&#160;Implementation Headers</b></p>
+<div class="table-contents"><table class="table" summary="Implementation Headers">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Header
+ </p>
+ </th>
+<th>
+ <p>
+ Contains
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ cpp_int/add.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Add and subtract operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/bitwise.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Bitwise operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/checked.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Helper functions for checked arithmetic for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/comparison.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Comparison operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/cpp_int_config.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Basic setup and configuration for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/divide.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Division and modulus operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/limits.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/misc.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Miscellaneous operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cpp_int/multiply.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Multiply operators for <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/big_lanczos.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Lanczos support for Boost.Math integration.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/default_ops.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Default versions of the optional backend non-member functions.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/generic_interconvert.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Generic interconversion routines.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/number_base.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ All the expression template code, metaprogramming, and operator
+ overloads for <code class="computeroutput"><span class="identifier">number</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/no_et_ops.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ The non-expression template operators.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/functions/constants.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines constants used by the floating point functions.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/functions/pow.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines default versions of the power and exponential related floating
+ point functions.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ detail/functions/trig.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ Defines default versions of the trigonometric related floating
+ point functions.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="backendconc.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="../perf.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html
new file mode 100644
index 0000000000..02a514eade
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/internals.html
@@ -0,0 +1,114 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Internal Support Code</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="cpp_dec_ref.html" title="cpp_dec_float">
+<link rel="next" href="backendconc.html" title="Backend Requirements">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_dec_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="backendconc.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.internals"></a><a class="link" href="internals.html" title="Internal Support Code">Internal Support
+ Code</a>
+</h3></div></div></div>
+<p>
+ There are some traits classes which authors of new backends should be aware
+ of:
+ </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">namespace</span> <span class="identifier">detail</span><span class="special">{</span>
+
+<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">To</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_explicitly_convertible</span><span class="special">;</span>
+
+<span class="special">}}}</span>
+</pre>
+<p>
+ Inherits from <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">bool</span><span class="special">,</span><span class="keyword">true</span><span class="special">&gt;</span></code> if type <code class="computeroutput"><span class="identifier">From</span></code>
+ has an explicit conversion from <code class="computeroutput"><span class="identifier">To</span></code>.
+ </p>
+<p>
+ For compilers that support C++11 SFINAE-expressions this trait should "just
+ work". Otherwise it inherits from <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special">&lt;</span><span class="identifier">From</span><span class="special">,</span> <span class="identifier">To</span><span class="special">&gt;::</span><span class="identifier">type</span></code>, and will need to be specialised for
+ Backends that have constructors marked as <code class="computeroutput"><span class="keyword">explicit</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">To</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_lossy_conversion</span>
+<span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">see</span> <span class="identifier">below</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Member <code class="computeroutput"><span class="identifier">value</span></code> is true if the
+ conversion from <code class="computeroutput"><span class="identifier">From</span></code> to
+ <code class="computeroutput"><span class="identifier">To</span></code> would result in a loss
+ of precision, and <code class="computeroutput"><span class="keyword">false</span></code> otherwise.
+ </p>
+<p>
+ The default version of this trait simply checks whether the <span class="emphasis"><em>kind</em></span>
+ of conversion (for example from a floating point to an integer type) is inherently
+ lossy. Note that if either of the types <code class="computeroutput"><span class="identifier">From</span></code>
+ or <code class="computeroutput"><span class="identifier">To</span></code> are of an unknown number
+ category (because <code class="computeroutput"><span class="identifier">number_category</span></code>
+ is not specialised for that type) then this trait will be <code class="computeroutput"><span class="keyword">true</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">To</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_restricted_conversion</span>
+<span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">see</span> <span class="identifier">below</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Member <code class="computeroutput"><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">From</span></code>
+ is only explicitly convertible to <code class="computeroutput"><span class="identifier">To</span></code>
+ and not implicitly convertible, or if <code class="computeroutput"><span class="identifier">is_lossy_conversion</span><span class="special">&lt;</span><span class="identifier">From</span><span class="special">,</span> <span class="identifier">To</span><span class="special">&gt;::</span><span class="identifier">value</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>.
+ Otherwise <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p>
+<p>
+ Note that while this trait is the ultimate arbiter of which constructors
+ are marked as <code class="computeroutput"><span class="keyword">explicit</span></code> in class
+ <code class="computeroutput"><span class="identifier">number</span></code>, authors of backend
+ types should generally specialise one of the traits above, rather than this
+ one directly.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="identifier">is_signed_number</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="identifier">is_unsigned_number</span><span class="special">;</span>
+</pre>
+<p>
+ These two traits inherit from either <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>
+ or <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>, by default types are assumed to
+ be signed unless <code class="computeroutput"><span class="identifier">is_unsigned_number</span></code>
+ is specialized for that type.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_dec_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="backendconc.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html
new file mode 100644
index 0000000000..cdfa14f097
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpf_ref.html
@@ -0,0 +1,79 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>gmp_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="tom_int_ref.html" title="tom_int">
+<link rel="next" href="mpfr_ref.html" title="mpfr_float_backend">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tom_int_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="mpfr_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.mpf_ref"></a><a class="link" href="mpf_ref.html" title="gmp_float">gmp_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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">gmp_float</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_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">mpf_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">gmp_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">mpf_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">gmp_float</span><span class="special">&lt;</span><span class="number">500</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpf_float_500</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_float</span><span class="special">&lt;</span><span class="number">1000</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpf_float_1000</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_float</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpf_float</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ Class template <code class="computeroutput"><span class="identifier">gmp_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 a single template parameter - <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ - which is the number of decimal digits precision the type should support.
+ When this parameter is zero, then the precision can be set at runtime via
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">default_precision</span></code> and <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">precision</span></code>.
+ Note that this type does not in any way change the GMP library's global state
+ (for example it does not change the default precision of the mpf_t data type),
+ therefore you can safely mix this type with existing code that uses GMP,
+ and also mix <code class="computeroutput"><span class="identifier">gmp_float</span></code>s of
+ differing precision.
+ </p>
+<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>.
+ </p>
+<p>
+ More information on this type can be found in the <a class="link" href="../tut/floats/gmp_float.html" title="gmp_float">tutorial</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tom_int_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="mpfr_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html
new file mode 100644
index 0000000000..72ace3a62b
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/mpfr_ref.html
@@ -0,0 +1,79 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>mpfr_float_backend</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="mpf_ref.html" title="gmp_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>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</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_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">
+<a name="boost_multiprecision.ref.mpfr_ref"></a><a class="link" href="mpfr_ref.html" title="mpfr_float_backend">mpfr_float_backend</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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">mpfr_float_backend</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_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">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_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">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">500</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_float_500</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">1000</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_float_1000</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_float</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ Class template <code class="computeroutput"><span class="identifier">mpfr_float_backend</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 a single template parameter - <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ - which is the number of decimal digits precision the type should support.
+ When this parameter is zero, then the precision can be set at runtime via
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">default_precision</span></code> and <code class="computeroutput"><span class="identifier">number</span><span class="special">::</span><span class="identifier">precision</span></code>.
+ Note that this type does not in any way change the GMP or MPFR library's
+ global state (for example it does not change the default precision of the
+ mpfr_t data type), therefore you can safely mix this type with existing code
+ that uses GMP or MPFR, and also mix <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>s
+ of differing precision.
+ </p>
+<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>.
+ </p>
+<p>
+ More information on this type can be found in the <a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float">tutorial</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</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_bin_float_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html
new file mode 100644
index 0000000000..b272c7d984
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/number.html
@@ -0,0 +1,1330 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>number</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="../ref.html" title="Reference">
+<link rel="next" href="cpp_int_ref.html" title="cpp_int">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../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_int_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.number"></a><a class="link" href="number.html" title="number">number</a>
+</h3></div></div></div>
+<h5>
+<a name="boost_multiprecision.ref.number.h0"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.synopsis"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.synopsis">Synopsis</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">multiprecision</span><span class="special">{</span>
+
+<span class="keyword">enum</span> <span class="identifier">expression_template_option</span> <span class="special">{</span> <span class="identifier">et_on</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">et_off</span> <span class="special">=</span> <span class="number">0</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">expression_template_default</span>
+<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_on</span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="identifier">expression_template_default</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">number</span>
+<span class="special">{</span>
+ <span class="identifier">number</span><span class="special">();</span>
+ <span class="identifier">number</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
+
+ <span class="comment">// Member operators</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">--();</span>
+ <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+ <span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
+
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&amp;=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+ <span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&gt;&gt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+
+ <span class="comment">// Use in Boolean context:</span>
+ <span class="keyword">operator</span> <span class="emphasis"><em>convertible-to-bool-type</em></span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="comment">// swap:</span>
+ <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+ <span class="comment">// Sign:</span>
+ <span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="comment">// string conversion:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="comment">// Generic conversion mechanism</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="identifier">T</span> <span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="comment">// precision control:</span>
+ <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span>
+ <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">default_precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
+ <span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">void</span> <span class="identifier">precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
+ <span class="comment">// Comparison:</span>
+ <span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;&amp;</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">is_convertible</span><span class="special">&lt;</span><span class="identifier">V</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span> <span class="special">&gt;,</span> <span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">V</span><span class="special">&amp;</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
+ <span class="comment">// Access to the underlying implementation:</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="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>
+<span class="special">};</span>
+
+<span class="comment">// Non member operators:</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="comment">// Integer only operations:</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&amp;(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+<span class="comment">// Comparison operators:</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+
+<span class="comment">// Swap:</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+
+<span class="comment">// iostream support:</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</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">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="emphasis"><em>unmentionable-expression-template-type</em></span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</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">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">&gt;&gt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+
+<span class="comment">// Arithmetic with a higher precision result:</span>
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+
+<span class="comment">// Non-member function standard library support:</span>
+<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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fabs</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">floor</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ceil</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">trunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">itrunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ltrunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lltrunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">round</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">iround</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lround</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">llround</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log10</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cos</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sin</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tan</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">acos</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">asin</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cosh</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sinh</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tanh</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>
+
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ldexp</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> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">frexp</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> <span class="emphasis"><em>integer-type</em></span><span class="special">*);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmod</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan2</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbn</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> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">logb</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>
+<span class="emphasis"><em>integer-type</em></span> <span class="identifier">ilogb</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>
+
+<span class="comment">// Traits support:</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span>
+
+<span class="comment">// Integer specific functions:</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">gcd</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lcm</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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> <span class="keyword">unsigned</span><span class="special">);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">powm</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> <span class="identifier">b</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> <span class="identifier">p</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> <span class="identifier">m</span><span class="special">);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</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">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">&gt;</span> <span class="identifier">sqrt</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> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">&gt;&amp;);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">divide_qr</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> <span class="identifier">x</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> <span class="identifier">y</span><span class="special">,</span>
+ <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span> <span class="identifier">integer_modulus</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> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span> <span class="identifier">val</span><span class="special">);</span>
+<span class="keyword">unsigned</span> <span class="identifier">lsb</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> <span class="identifier">x</span><span class="special">);</span>
+<span class="keyword">unsigned</span> <span class="identifier">msb</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> <span class="identifier">x</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&amp;</span> <span class="identifier">gen</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span>
+
+<span class="comment">// Rational number support:</span>
+<span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special">&lt;</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">numerator</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>
+<span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special">&lt;</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">denominator</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>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+
+<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>
+
+<span class="comment">// Boost.Math interoperability functions:</span>
+<span class="keyword">int</span> <span class="identifier">fpclassify</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isfinite</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isnan</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isinf</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isnormal</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> <span class="keyword">int</span><span class="special">);</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+
+<span class="comment">// numeric_limits support:</span>
+<span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">/* Usual members here */</span>
+<span class="special">};</span>
+
+<span class="special">}</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.ref.number.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.description"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.description">Description</a>
+ </h5>
+<pre class="programlisting"><span class="keyword">enum</span> <span class="identifier">expression_template_option</span> <span class="special">{</span> <span class="identifier">et_on</span> <span class="special">=</span> <span class="number">1</span><span class="special">,</span> <span class="identifier">et_off</span> <span class="special">=</span> <span class="number">0</span> <span class="special">};</span>
+</pre>
+<p>
+ This enumerated type is used to specify whether expression templates are
+ turned on (et_on) or turned off (et_off).
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">expression_template_default</span>
+<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_on</span><span class="special">;</span> <span class="special">};</span>
+</pre>
+<p>
+ This traits class specifies the default expression template option to be
+ used with a particular Backend type. It defaults to <code class="computeroutput"><span class="identifier">et_on</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span> <span class="special">=</span> <span class="identifier">expression_template_default</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">number</span><span class="special">;</span>
+</pre>
+<p>
+ Class <code class="computeroutput"><span class="identifier">number</span></code> has two template
+ arguments:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Backend</span></dt>
+<dd><p>
+ The actual arithmetic back-end that does all the work.
+ </p></dd>
+<dt><span class="term">ExpressionTemplates</span></dt>
+<dd><p>
+ A Boolean value: when <code class="computeroutput"><span class="identifier">et_on</span></code>,
+ then expression templates are enabled, otherwise when set to <code class="computeroutput"><span class="identifier">et_off</span></code> they are disabled. The default
+ for this parameter is computed via the traits class <code class="computeroutput"><span class="identifier">expression_template_default</span></code>
+ whose member <code class="computeroutput"><span class="identifier">value</span></code>
+ defaults to <code class="computeroutput"><span class="identifier">et_on</span></code> unless
+ the traits class is specialized for a particular backend.
+ </p></dd>
+</dl>
+</div>
+<pre class="programlisting"><span class="identifier">number</span><span class="special">();</span>
+<span class="identifier">number</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="identifier">assign</span><span class="special">(</span><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span><span class="special">);</span>
+</pre>
+<p>
+ Type <code class="computeroutput"><span class="identifier">number</span></code> is default constructible,
+ and both copy constructible and assignable from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Itself.
+ </li>
+<li class="listitem">
+ An expression template which is the result of one of the arithmetic operators.
+ </li>
+<li class="listitem">
+ Any builtin arithmetic type, as long as the result would not be lossy
+ (for example float to integer conversion).
+ </li>
+<li class="listitem">
+ Any type that the Backend is implicitly constructible or assignable from.
+ </li>
+<li class="listitem">
+ An rvalue reference to another <code class="computeroutput"><span class="identifier">number</span></code>.
+ Move-semantics are used for construction if the backend also supports
+ rvalue reference construction. In the case of assignment, move semantics
+ are always supported when the argument is an rvalue reference irrespective
+ of the backend.
+ </li>
+<li class="listitem">
+ Any type in the same family, as long as no loss of precision is involved.
+ For example from <code class="computeroutput"><span class="identifier">int128_t</span></code>
+ to <code class="computeroutput"><span class="identifier">int256_t</span></code>, or <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code> to <code class="computeroutput"><span class="identifier">cpp_dec_float_100</span></code>.
+ </li>
+</ul></div>
+<p>
+ Type <code class="computeroutput"><span class="identifier">number</span></code> is explicitly
+ constructible from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Any type mentioned above.
+ </li>
+<li class="listitem">
+ A <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code> or any type which is convertible
+ to <code class="computeroutput"><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span></code>.
+ </li>
+<li class="listitem">
+ Any arithmetic type (including those that would result in lossy conversions).
+ </li>
+<li class="listitem">
+ Any type in the same family, including those that result in loss of precision.
+ </li>
+<li class="listitem">
+ Any type that the Backend is explicitly constructible from.
+ </li>
+<li class="listitem">
+ Any pair of types for which a generic interconversion exists: that is
+ from integer to integer, integer to rational, integer to float, rational
+ to rational, rational to float, or float to float.
+ </li>
+</ul></div>
+<p>
+ The assign member function is available for any type for which an explicit
+ converting constructor exists. It is intended to be used where a temporary
+ generated from an explicit assignment would be expensive, for example:
+ </p>
+<pre class="programlisting"><span class="identifier">mpfr_float_50</span> <span class="identifier">f50</span><span class="special">;</span>
+<span class="identifier">mpfr_float_100</span> <span class="identifier">f100</span><span class="special">;</span>
+
+<span class="identifier">f50</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">mpfr_float_50</span><span class="special">&gt;(</span><span class="identifier">f100</span><span class="special">);</span> <span class="comment">// explicit cast create a temporary</span>
+<span class="identifier">f50</span><span class="special">.</span><span class="identifier">assign</span><span class="special">(</span><span class="identifier">f100</span><span class="special">);</span> <span class="comment">// explicit call to assign create no temporary</span>
+</pre>
+<p>
+ In addition, if the type has multiple components (for example rational or
+ complex number types), then there is a two argument constructor:
+ </p>
+<pre class="programlisting"><span class="identifier">number</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
+</pre>
+<p>
+ Where the two args must either be arithmetic types, or types that are convertible
+ to the two components of <code class="computeroutput"><span class="keyword">this</span></code>.
+ </p>
+<pre class="programlisting"><span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">--();</span>
+<span class="identifier">number</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
+<span class="identifier">number</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">);</span>
+<span class="comment">// Integer only operations:</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&amp;=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&lt;&lt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+<span class="identifier">number</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">&gt;&gt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+</pre>
+<p>
+ These operators all take their usual arithmetic meanings.
+ </p>
+<p>
+ The arguments to these operators is either:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Another <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span>
+ <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span></code>.
+ </li>
+<li class="listitem">
+ An expression template derived from <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span></code>.
+ </li>
+<li class="listitem">
+ Any type implicitly convertible to <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span></code>, including some other instance of
+ class <code class="computeroutput"><span class="identifier">number</span></code>.
+ </li>
+</ul></div>
+<p>
+ For the left and right shift operations, the argument must be a builtin integer
+ type with a positive value (negative values result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
+ being thrown).
+ </p>
+<pre class="programlisting"><span class="keyword">operator</span> <span class="emphasis"><em>convertible-to-bool-type</em></span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ Returns an <span class="emphasis"><em>unmentionable-type</em></span> that is usable in Boolean
+ contexts (this allows <code class="computeroutput"><span class="identifier">number</span></code>
+ to be used in any Boolean context - if statements, conditional statements,
+ or as an argument to a logical operator - without type <code class="computeroutput"><span class="identifier">number</span></code>
+ being convertible to type <code class="computeroutput"><span class="keyword">bool</span></code>.
+ </p>
+<p>
+ This operator also enables the use of <code class="computeroutput"><span class="identifier">number</span></code>
+ with any of the following operators: <code class="computeroutput"><span class="special">!</span></code>,
+ <code class="computeroutput"><span class="special">||</span></code>, <code class="computeroutput"><span class="special">&amp;&amp;</span></code>
+ and <code class="computeroutput"><span class="special">?:</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+</pre>
+<p>
+ Swaps <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ with <code class="computeroutput"><span class="identifier">other</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_zero</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> is <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is zero,
+ otherwise <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">sign</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ Returns a value less than zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> is negative, a value greater than zero
+ if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ is positive, and zero if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ is zero.
+ </p>
+<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">,</span> <span class="keyword">bool</span> <span class="identifier">scientific</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ Returns the number formatted as a string, with at least <span class="emphasis"><em>precision</em></span>
+ digits, and in scientific format if <span class="emphasis"><em>scientific</em></span> is true.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="identifier">T</span> <span class="identifier">convert_to</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="identifier">T</span> <span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ Provides a generic conversion mechanism to convert <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> to type <code class="computeroutput"><span class="identifier">T</span></code>.
+ Type <code class="computeroutput"><span class="identifier">T</span></code> may be any arithmetic
+ type. Optionally other types may also be supported by specific <code class="computeroutput"><span class="identifier">Backend</span></code> types.
+ </p>
+<pre class="programlisting"><span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">default_precision</span><span class="special">();</span>
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">default_precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
+<span class="keyword">unsigned</span> <span class="identifier">precision</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">void</span> <span class="identifier">precision</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">digits10</span><span class="special">);</span>
+</pre>
+<p>
+ These functions are only available if the Backend template parameter supports
+ runtime changes to precision. They get and set the default precision and
+ the precision of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>
+ respectively.
+ </p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">o</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">V</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">is_convertible</span><span class="special">&lt;</span><span class="identifier">V</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span> <span class="special">&gt;,</span> <span class="keyword">int</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">compare</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">V</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
+</pre>
+<p>
+ Returns:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ A value less that 0 for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">&lt;</span> <span class="identifier">other</span></code>
+ </li>
+<li class="listitem">
+ A value greater that 0 for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">&gt;</span> <span class="identifier">other</span></code>
+ </li>
+<li class="listitem">
+<p class="simpara">
+ Zero for <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span>
+ <span class="special">==</span> <span class="identifier">other</span></code>
+ </p>
+<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>
+<h5>
+<a name="boost_multiprecision.ref.number.h2"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.non_member_operators"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.non_member_operators">Non-member
+ operators</a>
+ </h5>
+<pre class="programlisting"><span class="comment">// Non member operators:</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="comment">// Integer only operations:</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&amp;(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>integer-type</em></span><span class="special">&amp;);</span>
+<span class="comment">// Comparison operators:</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;</span> <span class="special">(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+<span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="emphasis"><em>see-below</em></span><span class="special">&amp;);</span>
+</pre>
+<p>
+ These operators all take their usual arithmetic meanings.
+ </p>
+<p>
+ The arguments to these functions must contain at least one of the following:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ A <code class="computeroutput"><span class="identifier">number</span></code>.
+ </li>
+<li class="listitem">
+ An expression template type derived from <code class="computeroutput"><span class="identifier">number</span></code>.
+ </li>
+<li class="listitem">
+ Any type for which <code class="computeroutput"><span class="identifier">number</span></code>
+ has an implicit constructor - for example a builtin arithmetic type.
+ </li>
+</ul></div>
+<p>
+ The return type of these operators is either:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ An <span class="emphasis"><em>unmentionable-type</em></span> expression template type when
+ <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code> is
+ <code class="computeroutput"><span class="keyword">true</span></code>.
+ </li>
+<li class="listitem">
+ Type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span>
+ <span class="identifier">et_off</span><span class="special">&gt;</span></code>
+ when <code class="computeroutput"><span class="identifier">ExpressionTemplates</span></code>
+ is <code class="computeroutput"><span class="keyword">false</span></code>.
+ </li>
+<li class="listitem">
+ Type <code class="computeroutput"><span class="keyword">bool</span></code> if the operator
+ is a comparison operator.
+ </li>
+</ul></div>
+<p>
+ 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 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
+ being thrown).
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h3"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.swap"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.swap">swap</a>
+ </h5>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Swaps <code class="computeroutput"><span class="identifier">a</span></code> and <code class="computeroutput"><span class="identifier">b</span></code>.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h4"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.iostream_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.iostream_support">Iostream
+ Support</a>
+ </h5>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</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">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Unspecified</span><span class="special">...&gt;</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">ostream</span><span class="special">&amp;</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">unmentionable</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&amp;</span> <span class="keyword">operator</span> <span class="special">&gt;&gt;</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&amp;</span> <span class="identifier">is</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">)</span>
+</pre>
+<p>
+ These operators provided formatted input-output operations on <code class="computeroutput"><span class="identifier">number</span></code> types, and expression templates
+ derived from them.
+ </p>
+<p>
+ It's down to the back-end type to actually implement string conversion. However,
+ the back-ends provided with this library support all of the iostream formatting
+ flags, field width and precision settings.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h5"></a>
+ <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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ These functions apply the named operator to the arguments <span class="emphasis"><em>a</em></span>
+ and <span class="emphasis"><em>b</em></span> and store the result in <span class="emphasis"><em>result</em></span>,
+ returning <span class="emphasis"><em>result</em></span>. In all cases they behave "as
+ if" arguments <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> were
+ first promoted to type <code class="computeroutput"><span class="identifier">ResultType</span></code>
+ before applying the operator, though particular backends may well avoid that
+ step by way of an optimization.
+ </p>
+<p>
+ The type <code class="computeroutput"><span class="identifier">ResultType</span></code> must
+ be an instance of class <code class="computeroutput"><span class="identifier">number</span></code>,
+ and the types <code class="computeroutput"><span class="identifier">Source1</span></code> and
+ <code class="computeroutput"><span class="identifier">Source2</span></code> may be either instances
+ of class <code class="computeroutput"><span class="identifier">number</span></code> or native
+ integer types. The latter is an optimization that allows arithmetic to be
+ performed on native integer types producing an extended precision result.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h6"></a>
+ <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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fabs</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">floor</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ceil</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">trunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">itrunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ltrunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lltrunc</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">round</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">iround</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lround</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">llround</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">exp</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">log10</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cos</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sin</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tan</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">acos</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">asin</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">cosh</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sinh</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>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">tanh</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>
+
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">ldexp</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> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">frexp</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> <span class="emphasis"><em>integer-type</em></span><span class="special">*);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">fmod</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">atan2</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> <span class="keyword">const</span> <span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&amp;);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">scalbn</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> <span class="emphasis"><em>integer-type</em></span><span class="special">);</span>
+<span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">logb</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>
+<span class="emphasis"><em>integer-type</em></span> <span class="identifier">ilogb</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>
+</pre>
+<p>
+ These functions all behave exactly as their standard library C++11 counterparts
+ do: their argument is either an instance of <code class="computeroutput"><span class="identifier">number</span></code>
+ or an expression template derived from it; If the argument is of type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">&gt;</span></code>
+ then that is also the return type, otherwise the return type is an expression
+ template.
+ </p>
+<p>
+ The integer type arguments to <code class="computeroutput"><span class="identifier">ldexp</span></code>,
+ <code class="computeroutput"><span class="identifier">frexp</span></code>, <code class="computeroutput"><span class="identifier">scalbn</span></code>
+ and <code class="computeroutput"><span class="identifier">ilogb</span></code> may be either type
+ <code class="computeroutput"><span class="keyword">int</span></code>, or the actual type of the
+ exponent of the number type.
+ </p>
+<p>
+ 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 <a href="http://gmplib.org" target="_top">GMP</a> MPF Backend will
+ not work with these functions when that type is used at variable precision.
+ </p>
+<p>
+ Also note that with the exception of <code class="computeroutput"><span class="identifier">abs</span></code>
+ that these functions can only be used with floating-point Backend types (if
+ any other types such as fixed precision or complex types are added to the
+ library later, then these functions may be extended to support those number
+ types).
+ </p>
+<p>
+ The precision of these functions is generally determined by the backend implementation.
+ For example the precision of these functions when used with <a class="link" href="../tut/floats/mpfr_float.html" title="mpfr_float">mpfr_float</a>
+ is determined entirely by <a href="http://www.mpfr.org" target="_top">MPFR</a>.
+ When these functions use our own implementations, the accuracy of the transcendental
+ functions is generally a few epsilon. Note however, that the trigonometrical
+ functions incur the usual accuracy loss when reducing arguments by large
+ multiples of &#960;. Also note that both <a class="link" href="../tut/floats/gmp_float.html" title="gmp_float">gmp_float</a>
+ and <a class="link" href="../tut/floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a>
+ have a number of guard digits beyond their stated precision, so the error
+ rates listed for these are in some sense artificially low.
+ </p>
+<p>
+ The following table shows the error rates we observe for these functions
+ with various backend types, functions not listed here are exact (tested on
+ Win32 with VC++10, MPFR-3.0.0, MPIR-2.1.1):
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Function
+ </p>
+ </th>
+<th>
+ <p>
+ mpfr_float_50
+ </p>
+ </th>
+<th>
+ <p>
+ mpf_float_50
+ </p>
+ </th>
+<th>
+ <p>
+ cpp_dec_float_50
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ sqrt
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ exp
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ log
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ log10
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cos
+ </p>
+ </td>
+<td>
+ <p>
+ 700eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ sin
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tan
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ acos
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ asin
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ atan
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ cosh
+ </p>
+ </td>
+<td>
+ <p>
+ 1045eps<a href="#ftn.boost_multiprecision.ref.number.f0" class="footnote" name="boost_multiprecision.ref.number.f0"><sup class="footnote">[1]</sup></a>
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ sinh
+ </p>
+ </td>
+<td>
+ <p>
+ 2eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ tanh
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ pow
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 4eps
+ </p>
+ </td>
+<td>
+ <p>
+ 3eps
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ atan2
+ </p>
+ </td>
+<td>
+ <p>
+ 1eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+<td>
+ <p>
+ 0eps
+ </p>
+ </td>
+</tr>
+</tbody>
+<tbody class="footnotes"><tr><td colspan="4"><div id="ftn.boost_multiprecision.ref.number.f0" class="footnote"><p><a href="#boost_multiprecision.ref.number.f0" class="para"><sup class="para">[1] </sup></a>
+ It's likely that the inherent error in the input values to our
+ test cases are to blame here.
+ </p></div></td></tr></tbody>
+</table></div>
+<h5>
+<a name="boost_multiprecision.ref.number.h7"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.traits_class_support"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.traits_class_support">Traits Class
+ Support</a>
+ </h5>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">component_type</span><span class="special">;</span>
+</pre>
+<p>
+ If this is a type with multiple components (for example rational or complex
+ types), then this trait has a single member <code class="computeroutput"><span class="identifier">type</span></code>
+ that is the type of those components.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">number_category</span><span class="special">;</span>
+</pre>
+<p>
+ A traits class that inherits from <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">N</span><span class="special">&gt;</span></code>
+ where <code class="computeroutput"><span class="identifier">N</span></code> is one of the enumerated
+ values <code class="computeroutput"><span class="identifier">number_kind_integer</span></code>,
+ <code class="computeroutput"><span class="identifier">number_kind_floating_point</span></code>,
+ <code class="computeroutput"><span class="identifier">number_kind_rational</span></code>, <code class="computeroutput"><span class="identifier">number_kind_fixed_point</span></code>, or <code class="computeroutput"><span class="identifier">number_kind_unknown</span></code>. This traits class
+ is specialized for any type that has <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
+ support as well as for classes in this library: which means it can be used
+ for generic code that must work with built in arithmetic types as well as
+ multiprecision ones.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_number</span><span class="special">;</span>
+</pre>
+<p>
+ A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>
+ if T is an instance of <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;&gt;</span></code>, otherwise from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_number_expression</span><span class="special">;</span>
+</pre>
+<p>
+ A traits class that inherits from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>
+ if T is an expression template type derived from <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;&gt;</span></code>, otherwise from <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span></code>.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h8"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.integer_functions"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.integer_functions">Integer
+ functions</a>
+ </h5>
+<p>
+ In addition to functioning with types from this library, these functions
+ are also overloaded for built in integer types if you include <code class="computeroutput"><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">integer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>.
+ 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 template.
+ </p>
+<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">gcd</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> <span class="identifier">a</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> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code>
+ that divides both <code class="computeroutput"><span class="identifier">a</span></code> and
+ <code class="computeroutput"><span class="identifier">b</span></code>.
+ </p>
+<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">lcm</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> <span class="identifier">a</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> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the smallest integer <code class="computeroutput"><span class="identifier">x</span></code>
+ that is divisible by both <code class="computeroutput"><span class="identifier">a</span></code>
+ and <code class="computeroutput"><span class="identifier">b</span></code>.
+ </p>
+<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">pow</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> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">p</span><span class="special">);</span>
+</pre>
+<p>
+ Returns <span class="emphasis"><em>b<sup>p</sup></em></span> 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 <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s
+ either.
+ </p>
+<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">powm</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> <span class="identifier">b</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> <span class="identifier">p</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> <span class="identifier">m</span><span class="special">);</span>
+</pre>
+<p>
+ Returns <span class="emphasis"><em>b<sup>p</sup> mod m</em></span> as an expression template. Fixed precision
+ types are promoted internally to ensure accuracy.
+ </p>
+<pre class="programlisting"><span class="emphasis"><em>unmentionable-expression-template-type</em></span> <span class="identifier">sqrt</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> <span class="identifier">a</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code>
+ such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span>
+ <span class="identifier">x</span> <span class="special">&lt;</span>
+ <span class="identifier">a</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</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">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">&gt;</span> <span class="identifier">sqrt</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> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">EXpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the largest integer <code class="computeroutput"><span class="identifier">x</span></code>
+ such that <code class="computeroutput"><span class="identifier">x</span> <span class="special">*</span>
+ <span class="identifier">x</span> <span class="special">&lt;</span>
+ <span class="identifier">a</span></code>, and sets the remainder <code class="computeroutput"><span class="identifier">r</span></code> such that <code class="computeroutput"><span class="identifier">r</span>
+ <span class="special">=</span> <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">x</span> <span class="special">*</span>
+ <span class="identifier">x</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">divide_qr</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> <span class="identifier">x</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> <span class="identifier">y</span><span class="special">,</span>
+ <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+</pre>
+<p>
+ Divides x by y and returns both the quotient and remainder. After the call
+ <code class="computeroutput"><span class="identifier">q</span> <span class="special">=</span>
+ <span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code> and <code class="computeroutput"><span class="identifier">r</span>
+ <span class="special">=</span> <span class="identifier">x</span> <span class="special">%</span> <span class="identifier">y</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span> <span class="identifier">integer_modulus</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> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span> <span class="identifier">val</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the absolute value of <code class="computeroutput"><span class="identifier">x</span>
+ <span class="special">%</span> <span class="identifier">val</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">lsb</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> <span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the (zero-based) index of the least significant bit that is set to
+ 1.
+ </p>
+<p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> if the argument is &lt;= 0.
+ </p>
+<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">msb</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> <span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the (zero-based) index of the most significant bit.
+ </p>
+<p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> if the argument is &lt;= 0.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if the bit at
+ <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span> is set.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Sets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>, and
+ returns <span class="emphasis"><em>val</em></span>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Unsets the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>,
+ and returns <span class="emphasis"><em>val</em></span>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Flips the bit at <span class="emphasis"><em>index</em></span> in <span class="emphasis"><em>val</em></span>,
+ and returns <span class="emphasis"><em>val</em></span>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&amp;</span> <span class="identifier">gen</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</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> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span>
+</pre>
+<p>
+ Tests to see if the number <span class="emphasis"><em>n</em></span> is probably prime - the
+ test excludes the vast majority of composite numbers by excluding small prime
+ factors and performing a single Fermat test. Then performs <span class="emphasis"><em>trials</em></span>
+ Miller-Rabin tests. Returns <code class="computeroutput"><span class="keyword">false</span></code>
+ if <span class="emphasis"><em>n</em></span> is definitely composite, or <code class="computeroutput"><span class="keyword">true</span></code>
+ if <span class="emphasis"><em>n</em></span> is probably prime with the probability of it being
+ composite less than 0.25^trials. Fixed precision types are promoted internally
+ to ensure accuracy.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h9"></a>
+ <span class="phrase"><a name="boost_multiprecision.ref.number.rational_number_functions"></a></span><a class="link" href="number.html#boost_multiprecision.ref.number.rational_number_functions">Rational
+ Number Functions</a>
+ </h5>
+<pre class="programlisting"><span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special">&lt;</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">numerator</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>
+<span class="keyword">typename</span> <span class="identifier">component_type</span><span class="special">&lt;</span><span class="emphasis"><em>number-or-expression-template-type</em></span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">denominator</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>
+</pre>
+<p>
+ These functions return the numerator and denominator of a rational number
+ respectively.
+ </p>
+<h5>
+<a name="boost_multiprecision.ref.number.h10"></a>
+ <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>
+
+<span class="keyword">int</span> <span class="identifier">fpclassify</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isfinite</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isnan</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isinf</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> <span class="keyword">int</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">isnormal</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> <span class="keyword">int</span><span class="special">);</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ These floating-point classification functions behave exactly as their Boost.Math
+ equivalents.
+ </p>
+<p>
+ Other Boost.Math functions and templates may also be specialized or overloaded
+ to ensure interoperability.
+ </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
+ support</a>
+ </h5>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span>
+ <span class="comment">/* Usual members here */</span>
+<span class="special">};</span>
+
+<span class="special">}</span>
+</pre>
+<p>
+ Class template <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> is specialized for all instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> whose precision
+ is known at compile time, plus those types whose precision is unlimited (though
+ it is much less useful in those cases). It is not specialized for types whose
+ precision can vary at compile time (such as <code class="computeroutput"><span class="identifier">mpf_float</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../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_int_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html b/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html
new file mode 100644
index 0000000000..bd48e112a7
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/ref/tom_int_ref.html
@@ -0,0 +1,63 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>tom_int</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="gmp_int_ref.html" title="gmp_int">
+<link rel="next" href="mpf_ref.html" title="gmp_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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_int_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="mpf_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.tom_int_ref"></a><a class="link" href="tom_int_ref.html" title="tom_int">tom_int</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">class</span> <span class="identifier">tommath_int</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">tommath_int</span> <span class="special">&gt;</span> <span class="identifier">tom_int</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ Class template <code class="computeroutput"><span class="identifier">tommath_int</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 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_integer</span><span class="special">&gt;</span></code>.
+ </p>
+<p>
+ More information on this type can be found in the <a class="link" href="../tut/ints/tom_int.html" title="tom_int">tutorial</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_int_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="mpf_ref.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut.html b/libs/multiprecision/doc/html/boost_multiprecision/tut.html
new file mode 100644
index 0000000000..6c79552511
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut.html
@@ -0,0 +1,131 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Tutorial</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="../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="prev" href="intro.html" title="Introduction">
+<link rel="next" href="tut/ints.html" title="Integer Types">
+</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"><a href="../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intro.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="tut/ints.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">
+<a name="boost_multiprecision.tut"></a><a class="link" href="tut.html" title="Tutorial">Tutorial</a>
+</h2></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="tut/ints.html">Integer Types</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/ints/cpp_int.html">cpp_int</a></span></dt>
+<dt><span class="section"><a href="tut/ints/gmp_int.html">gmp_int</a></span></dt>
+<dt><span class="section"><a href="tut/ints/tom_int.html">tom_int</a></span></dt>
+<dt><span class="section"><a href="tut/ints/egs.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/ints/egs/factorials.html">Factorials</a></span></dt>
+<dt><span class="section"><a href="tut/ints/egs/bitops.html">Bit Operations</a></span></dt>
+</dl></dd>
+</dl></dd>
+<dt><span class="section"><a href="tut/floats.html">Floating Point Numbers</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/floats/cpp_bin_float.html">cpp_bin_float</a></span></dt>
+<dt><span class="section"><a href="tut/floats/cpp_dec_float.html">cpp_dec_float</a></span></dt>
+<dt><span class="section"><a href="tut/floats/gmp_float.html">gmp_float</a></span></dt>
+<dt><span class="section"><a href="tut/floats/mpfr_float.html">mpfr_float</a></span></dt>
+<dt><span class="section"><a href="tut/floats/float128.html">float128</a></span></dt>
+<dt><span class="section"><a href="tut/floats/fp_eg.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/floats/fp_eg/aos.html">Area of
+ Circle</a></span></dt>
+<dt><span class="section"><a href="tut/floats/fp_eg/jel.html">Defining
+ a Special Function.</a></span></dt>
+<dt><span class="section"><a href="tut/floats/fp_eg/nd.html">Calculating
+ a Derivative</a></span></dt>
+<dt><span class="section"><a href="tut/floats/fp_eg/gi.html">Calculating
+ an Integral</a></span></dt>
+<dt><span class="section"><a href="tut/floats/fp_eg/poly_eg.html">Polynomial
+ Evaluation</a></span></dt>
+</dl></dd>
+</dl></dd>
+<dt><span class="section"><a href="tut/interval.html">Interval Number Types</a></span></dt>
+<dd><dl><dt><span class="section"><a href="tut/interval/mpfi.html">mpfi_float</a></span></dt></dl></dd>
+<dt><span class="section"><a href="tut/rational.html">Rational Number Types</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/rational/cpp_rational.html">cpp_rational</a></span></dt>
+<dt><span class="section"><a href="tut/rational/gmp_rational.html">gmp_rational</a></span></dt>
+<dt><span class="section"><a href="tut/rational/tommath_rational.html">tommath_rational</a></span></dt>
+<dt><span class="section"><a href="tut/rational/br.html">Use With Boost.Rational</a></span></dt>
+<dt><span class="section"><a href="tut/rational/rational_adaptor.html">rational_adaptor</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="tut/misc.html">Miscellaneous Number Types.</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="tut/misc/logged_adaptor.html">logged_adaptor</a></span></dt>
+<dt><span class="section"><a href="tut/misc/debug_adaptor.html">debug_adaptor</a></span></dt>
+<dt><span class="section"><a href="tut/misc/visualizers.html">Visual C++
+ Debugger Visualizers</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="tut/conversions.html">Constructing and
+ Interconverting Between Number Types</a></span></dt>
+<dt><span class="section"><a href="tut/random.html">Generating Random Numbers</a></span></dt>
+<dt><span class="section"><a href="tut/primetest.html">Primality Testing</a></span></dt>
+<dt><span class="section"><a href="tut/lits.html">Literal Types and <code class="computeroutput"><span class="keyword">constexpr</span></code> Support</a></span></dt>
+<dt><span class="section"><a href="tut/rounding.html">Rounding Rules for
+ Conversions</a></span></dt>
+<dt><span class="section"><a href="tut/mixed.html">Mixed Precision Arithmetic</a></span></dt>
+<dt><span class="section"><a href="tut/gen_int.html">Generic Integer Operations</a></span></dt>
+<dt><span class="section"><a href="tut/serial.html">Boost.Serialization
+ Support</a></span></dt>
+<dt><span class="section"><a href="tut/limits.html">Numeric Limits</a></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"><a href="tut/input_output.html">Input Output</a></span></dt>
+</dl></div>
+<p>
+ In order to use this library you need to make two choices:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ What kind of number do I want (<a class="link" href="tut/ints.html" title="Integer Types">integer</a>,
+ <a class="link" href="tut/floats.html" title="Floating Point Numbers">floating point</a> or
+ <a class="link" href="tut/rational.html" title="Rational Number Types">rational</a>).
+ </li>
+<li class="listitem">
+ Which back-end do I want to perform the actual arithmetic (Boost-supplied,
+ GMP, MPFR, Tommath etc)?
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="intro.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="tut/ints.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html
new file mode 100644
index 0000000000..1550ecef0a
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/conversions.html
@@ -0,0 +1,216 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Constructing and Interconverting Between Number Types</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="misc/visualizers.html" title="Visual C++ Debugger Visualizers">
+<link rel="next" href="random.html" title="Generating Random Numbers">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="misc/visualizers.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="random.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.conversions"></a><a class="link" href="conversions.html" title="Constructing and Interconverting Between Number Types">Constructing and
+ Interconverting Between Number Types</a>
+</h3></div></div></div>
+<p>
+ 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">
+<p class="simpara">
+ 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):
+ </p>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ A number can be explicitly constructed from an arithmetic type, even
+ when the conversion is lossy:
+ </p>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ 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:
+ </p>
+<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>
+<li class="listitem">
+ Conversions to rational numbers from floating point ones are always allowed,
+ and are exact and implicit as long as the rational number uses an unbounded
+ integer type. Please be aware that constructing a rational number from
+ an extended precision floating point type with a large exponent range
+ can effectively run the system out of memory, as in the extreme case
+ <span class="emphasis"><em>2<sup>max_exponent</sup> / CHAR_BITS</em></span> bytes of storage may be
+ required. This does not represent a problem for built in floating point
+ types however, as the exponent range for these is rather limited.
+ </li>
+<li class="listitem">
+ Conversions to floating point numbers from rational ones are rounded
+ to nearest (less than 0.5ulp error) as long as the floating point number
+ is binary, and the integer type used by the rational number is unbounded.
+ </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">
+<p class="simpara">
+ 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.
+ </p>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ 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>:
+ </p>
+<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>
+<span class="identifier">cpp_int</span> <span class="identifier">i</span><span class="special">(</span><span class="string">"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000"</span><span class="special">);</span>
+<span class="comment">// Invalid input always results in a std::runtime_error being thrown:</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="string">"3.14"</span><span class="special">);</span>
+<span class="comment">// implicit conversions from strings are not allowed:</span>
+<span class="identifier">i</span> <span class="special">=</span> <span class="string">"23"</span><span class="special">;</span> <span class="comment">// Error, no assignment operator for implicit conversion from string</span>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ Any number type will interoperate with the builtin types in arithmetic
+ expressions as long as the conversions are not lossy:
+ </p>
+<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>
+<span class="comment">// than constructing a temporary:</span>
+<span class="identifier">df</span> <span class="special">*=</span> <span class="number">2</span><span class="special">;</span>
+
+<span class="comment">// You can't mix integer types with floats though:</span>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ Any number type can be streamed to and from the C++ iostreams:
+ </p>
+<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>
+ <span class="special">&lt;&lt;</span> <span class="identifier">df</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span>
+<span class="identifier">cpp_int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+<span class="identifier">i</span> <span class="special">&lt;&lt;=</span> <span class="number">256</span><span class="special">;</span>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ 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:
+ </p>
+<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>
+<span class="identifier">i128_t</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">&gt;(</span><span class="identifier">i256</span><span class="special">);</span> <span class="comment">// OK, explicit narrowing conversion</span>
+
+<span class="identifier">mpz_int</span> <span class="identifier">z</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+<span class="identifier">mpf_float</span> <span class="identifier">f</span> <span class="special">=</span> <span class="identifier">z</span><span class="special">;</span> <span class="comment">// OK, GMP handles this conversion natively, and it's not lossy and therefore implicit</span>
+
+<span class="identifier">mpf_float_50</span> <span class="identifier">f50</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ Some interconversions between number types are completely generic, and
+ are always available, albeit the conversions are always <span class="emphasis"><em>explicit</em></span>:
+ </p>
+<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">// 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>
+<span class="comment">// We can always promote from int to rational, int to float, or rational to float:</span>
+<span class="identifier">cpp_rational</span> <span class="identifier">cppr</span><span class="special">(</span><span class="identifier">cppi</span><span class="special">);</span> <span class="comment">// OK, int to rational</span>
+<span class="identifier">cpp_dec_float_50</span> <span class="identifier">df</span><span class="special">(</span><span class="identifier">cppi</span><span class="special">);</span> <span class="comment">// OK, int to float</span>
+<span class="identifier">df</span> <span class="special">=</span> <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;(</span><span class="identifier">cppr</span><span class="special">);</span> <span class="comment">// OK, explicit rational to float conversion</span>
+<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>
+</li>
+<li class="listitem">
+<p class="simpara">
+ Other interconversions may be allowed as special cases, whenever the
+ backend allows it:
+ </p>
+<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
+ will be implicit if the backend's converting constructor is also implicit,
+ and explicit if the backends converting constructor is also explicit.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="misc/visualizers.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="random.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html
new file mode 100644
index 0000000000..e99ebb1d42
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats.html
@@ -0,0 +1,277 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Floating Point Numbers</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="ints/egs/bitops.html" title="Bit Operations">
+<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>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</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_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"><a href="floats/cpp_bin_float.html">cpp_bin_float</a></span></dt>
+<dt><span class="section"><a href="floats/cpp_dec_float.html">cpp_dec_float</a></span></dt>
+<dt><span class="section"><a href="floats/gmp_float.html">gmp_float</a></span></dt>
+<dt><span class="section"><a href="floats/mpfr_float.html">mpfr_float</a></span></dt>
+<dt><span class="section"><a href="floats/float128.html">float128</a></span></dt>
+<dt><span class="section"><a href="floats/fp_eg.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="floats/fp_eg/aos.html">Area of
+ Circle</a></span></dt>
+<dt><span class="section"><a href="floats/fp_eg/jel.html">Defining
+ a Special Function.</a></span></dt>
+<dt><span class="section"><a href="floats/fp_eg/nd.html">Calculating
+ a Derivative</a></span></dt>
+<dt><span class="section"><a href="floats/fp_eg/gi.html">Calculating
+ an Integral</a></span></dt>
+<dt><span class="section"><a href="floats/fp_eg/poly_eg.html">Polynomial
+ Evaluation</a></span></dt>
+</dl></dd>
+</dl></div>
+<p>
+ The following back-ends provide floating point arithmetic:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend Type
+ </p>
+ </th>
+<th>
+ <p>
+ Header
+ </p>
+ </th>
+<th>
+ <p>
+ Radix
+ </p>
+ </th>
+<th>
+ <p>
+ Dependencies
+ </p>
+ </th>
+<th>
+ <p>
+ Pros
+ </p>
+ </th>
+<th>
+ <p>
+ Cons
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<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 <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ or <a href="http://gmplib.org" target="_top">GMP</a> 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>
+<td>
+ <p>
+ boost/multiprecision/cpp_dec_float.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 10
+ </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 <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ or <a href="http://gmplib.org" target="_top">GMP</a> libraries.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">mpf_float</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/gmp.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ <a href="http://gmplib.org" target="_top">GMP</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Very fast and efficient back-end.
+ </p>
+ </td>
+<td>
+ <p>
+ Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a>
+ library.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">mpfr_float</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/mpfr.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ <a href="http://gmplib.org" target="_top">GMP</a> and <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Very fast and efficient back-end, with its own standard library
+ implementation.
+ </p>
+ </td>
+<td>
+ <p>
+ Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a>
+ and <a href="http://www.mpfr.org" target="_top">MPFR</a> libraries.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">float128</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/float128.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ Either <a href="http://gcc.gnu.org/onlinedocs/libquadmath/" target="_top">libquadmath</a>
+ or the Intel C++ Math library.
+ </p>
+ </td>
+<td>
+ <p>
+ Very fast and efficient back-end for 128-bit floating point values
+ (113-bit mantissa, equivalent to FORTRAN's QUAD real)
+ </p>
+ </td>
+<td>
+ <p>
+ Depends on the compiler being either recent GCC or Intel C++ versions.
+ </p>
+ </td>
+</tr>
+</tbody>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</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_bin_float.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html
new file mode 100644
index 0000000000..ea235149e7
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_bin_float.html
@@ -0,0 +1,198 @@
+<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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></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 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 headroom 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
+ conversions 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="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">gamma</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html
new file mode 100644
index 0000000000..09f5c827d0
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html
@@ -0,0 +1,176 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_dec_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="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">
+<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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<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">
+<a name="boost_multiprecision.tut.floats.cpp_dec_float"></a><a class="link" href="cpp_dec_float.html" title="cpp_dec_float">cpp_dec_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_dec_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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ExponentType</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">int32_t</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">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">cpp_dec_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_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="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">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_dec_float_100</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">cpp_dec_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_dec_float</span></code> can
+ be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ template parameter. The typedefs <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code>
+ and <code class="computeroutput"><span class="identifier">cpp_dec_float_100</span></code> 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 <code class="computeroutput"><span class="keyword">long</span>
+ <span class="keyword">long</span></code> 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 and 16-bits wide.
+ </p>
+<p>
+ Normally <code class="computeroutput"><span class="identifier">cpp_dec_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 the final template parameter causes <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
+ to dynamically allocate the memory it needs: this significantly reduces
+ the size of <code class="computeroutput"><span class="identifier">cpp_dec_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.
+ </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_dec_float</span></code>s
+ have a value of zero.
+ </li>
+<li class="listitem">
+ The radix of this type is 10. As a result it can behave subtly differently
+ from base-2 types.
+ </li>
+<li class="listitem">
+ The type has a number of internal guard digits over and above those
+ specified in the template argument. Normally these should not be visible
+ to the user.
+ </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_dec_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_dec_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 are truncating and <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">
+ The actual precision of a <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
+ 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 digits.
+ </li>
+<li class="listitem">
+ Operations involving <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
+ 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.
+ </li>
+</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
+ 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_dec_float</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">math</span><span class="special">/</span><span class="identifier">special_functions</span><span class="special">/</span><span class="identifier">gamma</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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_dec_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_dec_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="comment">// Note that digits10 is the same as digits, since we're base 10! :</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_dec_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_dec_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_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>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html
new file mode 100644
index 0000000000..e4ba6f389b
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html
@@ -0,0 +1,166 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>float128</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="mpfr_float.html" title="mpfr_float">
+<link rel="next" href="fp_eg.html" title="Examples">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="mpfr_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="fp_eg.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.float128"></a><a class="link" href="float128.html" title="float128">float128</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">float128</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">class</span> <span class="identifier">float128_backend</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">float128_backend</span><span class="special">,</span> <span class="identifier">et_off</span><span class="special">&gt;</span> <span class="identifier">float128</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">float128</span></code> number type
+ is a very thin wrapper around GCC's <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code>
+ or Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> data types
+ 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.
+ </p>
+<p>
+ All the usual standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support are available, performance should be equivalent to the underlying
+ native types: for example the LINPACK benchmarks for GCC's <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code>
+ and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">float128</span></code> both achieved 5.6 MFLOPS<a href="#ftn.boost_multiprecision.tut.floats.float128.f0" class="footnote" name="boost_multiprecision.tut.floats.float128.f0"><sup class="footnote">[3]</sup></a>.
+ </p>
+<p>
+ As well as the usual conversions from arithmetic and string types, instances
+ of <code class="computeroutput"><span class="identifier">float128</span></code> are copy constructible
+ and assignable from GCC's <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code>
+ and Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code> data
+ types.
+ </p>
+<p>
+ It's also possible to access the underlying <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code>
+ or <code class="computeroutput"><span class="identifier">_Quad</span></code> type via the
+ <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code>
+ member function of <code class="computeroutput"><span class="identifier">float128_backend</span></code>.
+ </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">float128</span></code>s
+ have the value zero.
+ </li>
+<li class="listitem">
+ This backend supports rvalue-references and is move-aware, making instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> on this backend
+ move aware.
+ </li>
+<li class="listitem">
+ It is not possible to round-trip objects of this type to and from a
+ string and get back exactly the same value when compiled with Intel's
+ C++ compiler and using <code class="computeroutput"><span class="identifier">_Quad</span></code>
+ as the underlying type: this is a current limitation of our code. Round
+ tripping when using <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code>
+ as the underlying type is possible (both for GCC and Intel).
+ </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">
+ Division by zero results in an infinity being produced.
+ </li>
+<li class="listitem">
+ Type <code class="computeroutput"><span class="identifier">float128</span></code> can be
+ used as a literal type (constexpr support).
+ </li>
+<li class="listitem">
+ When using the Intel compiler, the underlying type defaults to <code class="computeroutput"><a class="link" href="float128.html" title="float128">float128</a></code>
+ if it's available and <code class="computeroutput"><span class="identifier">_Quad</span></code>
+ if not. You can override the default by defining either <code class="computeroutput"><span class="identifier">BOOST_MP_USE_FLOAT128</span></code> or <code class="computeroutput"><span class="identifier">BOOST_MP_USE_QUAD</span></code>.
+ </li>
+<li class="listitem">
+ When the underlying type is Intel's <code class="computeroutput"><span class="identifier">_Quad</span></code>
+ type, the code must be compiled with the compiler option <code class="computeroutput"><span class="special">-</span><span class="identifier">Qoption</span><span class="special">,</span><span class="identifier">cpp</span><span class="special">,--</span><span class="identifier">extended_float_type</span></code>.
+ </li>
+</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
+ 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">float128</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">math</span><span class="special">/</span><span class="identifier">special_functions</span><span class="special">/</span><span class="identifier">gamma</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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 128-bit precision and full numeric_limits support:</span>
+ <span class="identifier">float128</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+ <span class="comment">// There are 113-bits of 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">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">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+ <span class="comment">// Or 34 decimal places:</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">float128</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">float128</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) = 0.693147180559945309417232121458176575</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">// And since we have an extended exponent range we can generate some really large </span>
+ <span class="comment">// numbers here (4.02387260077093773543702433923004111e+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">float128</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>
+ <span class="comment">//</span>
+ <span class="comment">// We can declare constants using GCC or Intel's native types, and the Q suffix,</span>
+ <span class="comment">// these can be declared constexpr if required:</span>
+
+ <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>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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><a href="#boost_multiprecision.tut.floats.float128.f0" class="para"><sup class="para">[3] </sup></a>
+ On 64-bit Ubuntu 11.10, GCC-4.8.0, Intel Core 2 Duo T5800.
+ </p></div>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="mpfr_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="fp_eg.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html
new file mode 100644
index 0000000000..f3f3aa33ca
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg.html
@@ -0,0 +1,55 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Examples</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="float128.html" title="float128">
+<link rel="next" href="fp_eg/aos.html" title="Area of Circle">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="float128.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="fp_eg/aos.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.fp_eg"></a><a class="link" href="fp_eg.html" title="Examples">Examples</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="fp_eg/aos.html">Area of
+ Circle</a></span></dt>
+<dt><span class="section"><a href="fp_eg/jel.html">Defining
+ a Special Function.</a></span></dt>
+<dt><span class="section"><a href="fp_eg/nd.html">Calculating
+ a Derivative</a></span></dt>
+<dt><span class="section"><a href="fp_eg/gi.html">Calculating
+ an Integral</a></span></dt>
+<dt><span class="section"><a href="fp_eg/poly_eg.html">Polynomial
+ Evaluation</a></span></dt>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="float128.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="fp_eg/aos.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html
new file mode 100644
index 0000000000..563ea65f07
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/aos.html
@@ -0,0 +1,119 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Area of Circle</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="../fp_eg.html" title="Examples">
+<link rel="prev" href="../fp_eg.html" title="Examples">
+<link rel="next" href="jel.html" title="Defining a Special Function.">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../fp_eg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="jel.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.floats.fp_eg.aos"></a><a class="link" href="aos.html" title="Area of Circle">Area of
+ Circle</a>
+</h5></div></div></div>
+<p>
+ Generic numeric programming employs templates to use the same code for
+ different floating-point types and functions. Consider the area of a
+ circle a of radius r, given by
+ </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="emphasis"><em>a = &#960; * r<sup>2</sup></em></span>
+ </p></blockquote></div>
+<p>
+ The area of a circle can be computed in generic programming using Boost.Math
+ for the constant &#960; as shown below:
+ </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>
+<span class="keyword">inline</span> <span class="identifier">T</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">r</span><span class="special">)</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">constants</span><span class="special">::</span><span class="identifier">pi</span><span class="special">;</span>
+ <span class="keyword">return</span> <span class="identifier">pi</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;()</span> <span class="special">*</span> <span class="identifier">r</span> <span class="special">*</span> <span class="identifier">r</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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
+ double and also the <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code>
+ data type from Boost.Multiprecision with 50 decimal digits of precision.
+ </p>
+<p>
+ We can compute and print the approximate area of a circle with radius
+ 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>
+<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>
+
+<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="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>
+ <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">r_f</span><span class="special">(</span><span class="keyword">float</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="keyword">const</span> <span class="keyword">float</span> <span class="identifier">a_f</span> <span class="special">=</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">r_f</span><span class="special">);</span>
+
+ <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">r_d</span><span class="special">(</span><span class="keyword">double</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="keyword">const</span> <span class="keyword">double</span> <span class="identifier">a_d</span> <span class="special">=</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">r_d</span><span class="special">);</span>
+
+ <span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span> <span class="identifier">r_mp</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</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="keyword">const</span> <span class="identifier">cpp_dec_float_50</span> <span class="identifier">a_mp</span> <span class="special">=</span> <span class="identifier">area_of_a_circle</span><span class="special">(</span><span class="identifier">r_mp</span><span class="special">);</span>
+
+ <span class="comment">// 4.75292</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">float</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">a_f</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.752915525616</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">a_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.7529155256159981904701331745635599135018975843146</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">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">a_mp</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>
+ 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
+ types.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../fp_eg.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="jel.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html
new file mode 100644
index 0000000000..73a46081dd
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/gi.html
@@ -0,0 +1,158 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Calculating an Integral</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="../fp_eg.html" title="Examples">
+<link rel="prev" href="nd.html" title="Calculating a Derivative">
+<link rel="next" href="poly_eg.html" title="Polynomial Evaluation">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nd.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="poly_eg.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.floats.fp_eg.gi"></a><a class="link" href="gi.html" title="Calculating an Integral">Calculating
+ an Integral</a>
+</h5></div></div></div>
+<p>
+ Similar to the generic derivative example, we can calculate integrals
+ in a similar manner:
+ </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>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">tol</span><span class="special">,</span>
+ <span class="identifier">function_type</span> <span class="identifier">func</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">unsigned</span> <span class="identifier">n</span> <span class="special">=</span> <span class="number">1U</span><span class="special">;</span>
+
+ <span class="identifier">value_type</span> <span class="identifier">h</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">b</span> <span class="special">-</span> <span class="identifier">a</span><span class="special">);</span>
+ <span class="identifier">value_type</span> <span class="identifier">I</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">b</span><span class="special">))</span> <span class="special">*</span> <span class="special">(</span><span class="identifier">h</span> <span class="special">/</span> <span class="number">2</span><span class="special">);</span>
+
+ <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">k</span> <span class="special">=</span> <span class="number">0U</span><span class="special">;</span> <span class="identifier">k</span> <span class="special">&lt;</span> <span class="number">8U</span><span class="special">;</span> <span class="identifier">k</span><span class="special">++)</span>
+ <span class="special">{</span>
+ <span class="identifier">h</span> <span class="special">/=</span> <span class="number">2</span><span class="special">;</span>
+
+ <span class="identifier">value_type</span> <span class="identifier">sum</span><span class="special">(</span><span class="number">0</span><span class="special">);</span>
+ <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">1U</span><span class="special">;</span> <span class="identifier">j</span> <span class="special">&lt;=</span> <span class="identifier">n</span><span class="special">;</span> <span class="identifier">j</span><span class="special">++)</span>
+ <span class="special">{</span>
+ <span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">a</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">value_type</span><span class="special">((</span><span class="identifier">j</span> <span class="special">*</span> <span class="number">2</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special">*</span> <span class="identifier">h</span><span class="special">));</span>
+ <span class="special">}</span>
+
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">I0</span> <span class="special">=</span> <span class="identifier">I</span><span class="special">;</span>
+ <span class="identifier">I</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">I</span> <span class="special">/</span> <span class="number">2</span><span class="special">)</span> <span class="special">+</span> <span class="special">(</span><span class="identifier">h</span> <span class="special">*</span> <span class="identifier">sum</span><span class="special">);</span>
+
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">ratio</span> <span class="special">=</span> <span class="identifier">I0</span> <span class="special">/</span> <span class="identifier">I</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">delta</span> <span class="special">=</span> <span class="identifier">ratio</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">delta_abs</span> <span class="special">=</span> <span class="special">((</span><span class="identifier">delta</span> <span class="special">&lt;</span> <span class="number">0</span><span class="special">)</span> <span class="special">?</span> <span class="special">-</span><span class="identifier">delta</span> <span class="special">:</span> <span class="identifier">delta</span><span class="special">);</span>
+
+ <span class="keyword">if</span><span class="special">((</span><span class="identifier">k</span> <span class="special">&gt;</span> <span class="number">1U</span><span class="special">)</span> <span class="special">&amp;&amp;</span> <span class="special">(</span><span class="identifier">delta_abs</span> <span class="special">&lt;</span> <span class="identifier">tol</span><span class="special">))</span>
+ <span class="special">{</span>
+ <span class="keyword">break</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="identifier">n</span> <span class="special">*=</span> <span class="number">2U</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">return</span> <span class="identifier">I</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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>
+<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>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="identifier">N</span><span class="special">,</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span> <span class="identifier">X</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">n</span><span class="special">(</span><span class="identifier">N</span><span class="special">),</span> <span class="identifier">x</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span> <span class="special">{</span> <span class="special">}</span>
+
+ <span class="identifier">value_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">)</span> <span class="keyword">const</span>
+ <span class="special">{</span>
+ <span class="comment">// pi * Jn(x) = Int_0^pi [cos(x * sin(t) - n*t) dt]</span>
+ <span class="keyword">return</span> <span class="identifier">cos</span><span class="special">(</span><span class="identifier">x</span> <span class="special">*</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span> <span class="special">-</span> <span class="special">(</span><span class="identifier">n</span> <span class="special">*</span> <span class="identifier">t</span><span class="special">));</span>
+ <span class="special">}</span>
+
+<span class="keyword">private</span><span class="special">:</span>
+ <span class="keyword">const</span> <span class="keyword">unsigned</span> <span class="identifier">n</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="special">};</span>
+</pre>
+<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>
+ <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">constants</span><span class="special">::</span><span class="identifier">pi</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">cpp_dec_float_50</span> <span class="identifier">mp_type</span><span class="special">;</span>
+
+ <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">j2_f</span> <span class="special">=</span>
+ <span class="identifier">integral</span><span class="special">(</span><span class="number">0.0F</span><span class="special">,</span>
+ <span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;(),</span>
+ <span class="number">0.01F</span><span class="special">,</span>
+ <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;(</span><span class="number">2U</span><span class="special">,</span> <span class="number">1.23F</span><span class="special">))</span> <span class="special">/</span> <span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;();</span>
+
+ <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">j2_d</span> <span class="special">=</span>
+ <span class="identifier">integral</span><span class="special">(</span><span class="number">0.0</span><span class="special">,</span>
+ <span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;(),</span>
+ <span class="number">0.0001</span><span class="special">,</span>
+ <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;(</span><span class="number">2U</span><span class="special">,</span> <span class="number">1.23</span><span class="special">))</span> <span class="special">/</span> <span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;();</span>
+
+ <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">j2_mp</span> <span class="special">=</span>
+ <span class="identifier">integral</span><span class="special">(</span><span class="identifier">mp_type</span><span class="special">(</span><span class="number">0</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="identifier">mp_type</span><span class="special">(</span><span class="number">1.0E-20</span><span class="special">),</span>
+ <span class="identifier">cyl_bessel_j_integral_rep</span><span class="special">&lt;</span><span class="identifier">mp_type</span><span class="special">&gt;(</span><span class="number">2U</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">/</span> <span class="identifier">pi</span><span class="special">&lt;</span><span class="identifier">mp_type</span><span class="special">&gt;();</span>
+
+ <span class="comment">// 0.166369</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">float</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">j2_f</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.166369383786814</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">j2_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.16636938378681407351267852431513159437103348245333</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">mp_type</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">j2_mp</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="comment">// Print true value for comparison:</span>
+ <span class="comment">// 0.166369383786814073512678524315131594371033482453329</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">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>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="nd.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="poly_eg.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html
new file mode 100644
index 0000000000..ce943eed69
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/jel.html
@@ -0,0 +1,215 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Defining a Special Function.</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="../fp_eg.html" title="Examples">
+<link rel="prev" href="aos.html" title="Area of Circle">
+<link rel="next" href="nd.html" title="Calculating a Derivative">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="aos.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="nd.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.floats.fp_eg.jel"></a><a class="link" href="jel.html" title="Defining a Special Function.">Defining
+ a Special Function.</a>
+</h5></div></div></div>
+<p>
+ In this example we'll show several implementations of the <a href="http://mathworld.wolfram.com/LambdaFunction.html" target="_top">Jahnke
+ and Emden Lambda function</a>, each implementation a little more
+ sophisticated than the last.
+ </p>
+<p>
+ The Jahnke-Emden Lambda function is defined by the equation:
+ </p>
+<div class="blockquote"><blockquote class="blockquote"><p>
+ <span class="emphasis"><em>JahnkeEmden(v, z) = &#915;(v+1) * J<sub>v</sub>(z) / (z / 2)<sup>v</sup></em></span>
+ </p></blockquote></div>
+<p>
+ 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>
+<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>
+ 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>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">JEL1</span><span class="special">(</span><span class="number">2.5</span><span class="special">,</span> <span class="number">0.5</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>
+ Yields the output:
+ </p>
+<pre class="programlisting">9.822663964796047e-001</pre>
+<p>
+ Now let's implement the function again, but this time using the multiprecision
+ type <code class="computeroutput"><span class="identifier">cpp_dec_float_50</span></code>
+ as the argument type:
+ </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>
+ <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">boost</span><span class="special">::</span><span class="identifier">multiprecision</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>
+ 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>
+ namespace. In point of fact, we could have omitted the namespace prefix
+ on the call to <code class="computeroutput"><span class="identifier">pow</span></code> since
+ the right overload would have been found via <a href="http://en.wikipedia.org/wiki/Argument-dependent_name_lookup" target="_top">argument
+ dependent lookup</a> in any case.
+ </p>
+<p>
+ Note also that the first argument to <code class="computeroutput"><span class="identifier">pow</span></code>
+ along with the argument to <code class="computeroutput"><span class="identifier">tgamma</span></code>
+ in the above code are actually expression templates. The <code class="computeroutput"><span class="identifier">pow</span></code> and <code class="computeroutput"><span class="identifier">tgamma</span></code>
+ functions will handle these arguments just fine.
+ </p>
+<p>
+ Here's an example of how the function may be called:
+ </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="identifier">cpp_dec_float_50</span><span class="special">&gt;::</span><span class="identifier">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">JEL2</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2.5</span><span class="special">),</span> <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">0.5</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>
+ Which outputs:
+ </p>
+<pre class="programlisting">9.82266396479604757017335009796882833995903762577173e-01</pre>
+<p>
+ Now that we've seen some non-template examples, lets repeat the code
+ again, but this time as a template that can be called either with a builtin
+ 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>
+<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>
+ <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</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">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>
+ 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>
+ (when the argument is a multiprecision type). We do that by making the
+ call unqualified so that versions of <code class="computeroutput"><span class="identifier">pow</span></code>
+ defined in the same namespace as type <code class="computeroutput"><span class="identifier">Float</span></code>
+ are found via argument dependent lookup, while the <code class="computeroutput"><span class="keyword">using</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span></code> directive makes the standard library
+ versions visible for builtin floating point types.
+ </p>
+<p>
+ Let's call the function with both <code class="computeroutput"><span class="keyword">double</span></code>
+ and multiprecision arguments:
+ </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>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">JEL3</span><span class="special">(</span><span class="number">2.5</span><span class="special">,</span> <span class="number">0.5</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">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="identifier">cpp_dec_float_50</span><span class="special">&gt;::</span><span class="identifier">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">JEL3</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">2.5</span><span class="special">),</span> <span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="number">0.5</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>
+ Which outputs:
+ </p>
+<pre class="programlisting">9.822663964796047e-001
+9.82266396479604757017335009796882833995903762577173e-01
+</pre>
+<p>
+ Unfortunately there is a problem with this version: if we were to call
+ it like this:
+ </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">v</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">z</span><span class="special">(</span><span class="number">0.5</span><span class="special">);</span>
+<span class="identifier">JEL3</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">0.5</span><span class="special">,</span> <span class="identifier">z</span><span class="special">);</span>
+</pre>
+<p>
+ Then we would get a long and inscrutable error message from the compiler:
+ the problem here is that the first argument to <code class="computeroutput"><span class="identifier">JEL3</span></code>
+ is not a number type, but an expression template. We could obviously
+ add a typecast to fix the issue:
+ </p>
+<pre class="programlisting"><span class="identifier">JEL</span><span class="special">(</span><span class="identifier">cpp_dec_float_50</span><span class="special">(</span><span class="identifier">v</span> <span class="special">+</span> <span class="number">0.5</span><span class="special">),</span> <span class="identifier">z</span><span class="special">);</span>
+</pre>
+<p>
+ However, if we want the function JEL to be truly reusable, then a better
+ solution might be preferred. To achieve this we can borrow some code
+ from Boost.Math which calculates the return type of mixed-argument functions,
+ here's how the new code looks now:
+ </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>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</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">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>
+ 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.
+ </p>
+<p>
+ Now we can call:
+ </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="identifier">cpp_dec_float_100</span><span class="special">&gt;::</span><span class="identifier">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">JEL4</span><span class="special">(</span><span class="identifier">cpp_dec_float_100</span><span class="special">(</span><span class="number">2</span><span class="special">)</span> <span class="special">+</span> <span class="number">0.5</span><span class="special">,</span> <span class="identifier">cpp_dec_float_100</span><span class="special">(</span><span class="number">0.5</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>
+ And get 100 digits of output:
+ </p>
+<pre class="programlisting">9.8226639647960475701733500979688283399590376257717309069410413822165082248153638454147004236848917775e-01</pre>
+<p>
+ As a bonus, we can now call the function not just with expression templates,
+ but with other mixed types as well: for example <code class="computeroutput"><span class="keyword">float</span></code>
+ and <code class="computeroutput"><span class="keyword">double</span></code> or <code class="computeroutput"><span class="keyword">int</span></code> and <code class="computeroutput"><span class="keyword">double</span></code>,
+ and the correct return type will be computed in each case.
+ </p>
+<p>
+ Note that while in this case we didn't have to change the body of the
+ function, in the general case any function like this which creates local
+ variables internally would have to use <code class="computeroutput"><span class="identifier">promote_args</span></code>
+ to work out what type those variables should be, for example:
+ </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">JEL5</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>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">;</span>
+ <span class="keyword">typedef</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">variable_type</span><span class="special">;</span>
+ <span class="identifier">variable_type</span> <span class="identifier">t</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="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">t</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="aos.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="nd.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html
new file mode 100644
index 0000000000..373dc97e74
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/nd.html
@@ -0,0 +1,199 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Calculating a Derivative</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="../fp_eg.html" title="Examples">
+<link rel="prev" href="jel.html" title="Defining a Special Function.">
+<link rel="next" href="gi.html" title="Calculating an Integral">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="jel.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="gi.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.floats.fp_eg.nd"></a><a class="link" href="nd.html" title="Calculating a Derivative">Calculating
+ a Derivative</a>
+</h5></div></div></div>
+<p>
+ In this example we'll add even more power to generic numeric programming
+ using not only different floating-point types but also function objects
+ as template parameters. Consider some well-known central difference rules
+ for numerically computing the first derivative of a function <span class="emphasis"><em>f&#8242;(x)</em></span>
+ with <span class="emphasis"><em>x &#8712; &#8476;</em></span>:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../../floating_point_eg1.png"></span>
+ </p>
+<p>
+ Where the difference terms <span class="emphasis"><em>m<sub>n</sub></em></span> are given by:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../../floating_point_eg2.png"></span>
+ </p>
+<p>
+ and <span class="emphasis"><em>dx</em></span> is the step-size of the derivative.
+ </p>
+<p>
+ The third formula in Equation 1 is a three-point central difference rule.
+ It calculates the first derivative of <span class="emphasis"><em>f&#8242;(x)</em></span> to <span class="emphasis"><em>O(dx<sup>6</sup>)</em></span>,
+ where <span class="emphasis"><em>dx</em></span> is the given step-size. For example, if
+ the step-size is 0.01 this derivative calculation has about 6 decimal
+ digits of precision - just about right for the 7 decimal digits of single-precision
+ float. Let's make a generic template subroutine using this three-point
+ central difference rule. In particular:
+ </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>
+ <span class="comment">// Compute d/dx[func(*first)] using a three-point</span>
+ <span class="comment">// central difference rule of O(dx^6).</span>
+
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx1</span> <span class="special">=</span> <span class="identifier">dx</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx2</span> <span class="special">=</span> <span class="identifier">dx1</span> <span class="special">*</span> <span class="number">2</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">dx3</span> <span class="special">=</span> <span class="identifier">dx1</span> <span class="special">*</span> <span class="number">3</span><span class="special">;</span>
+
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">m1</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">dx1</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">dx1</span><span class="special">))</span> <span class="special">/</span> <span class="number">2</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">m2</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">dx2</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">dx2</span><span class="special">))</span> <span class="special">/</span> <span class="number">4</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">m3</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">+</span> <span class="identifier">dx3</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">func</span><span class="special">(</span><span class="identifier">x</span> <span class="special">-</span> <span class="identifier">dx3</span><span class="special">))</span> <span class="special">/</span> <span class="number">6</span><span class="special">;</span>
+
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">fifteen_m1</span> <span class="special">=</span> <span class="number">15</span> <span class="special">*</span> <span class="identifier">m1</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">six_m2</span> <span class="special">=</span> <span class="number">6</span> <span class="special">*</span> <span class="identifier">m2</span><span class="special">;</span>
+ <span class="keyword">const</span> <span class="identifier">value_type</span> <span class="identifier">ten_dx1</span> <span class="special">=</span> <span class="number">10</span> <span class="special">*</span> <span class="identifier">dx1</span><span class="special">;</span>
+
+ <span class="keyword">return</span> <span class="special">((</span><span class="identifier">fifteen_m1</span> <span class="special">-</span> <span class="identifier">six_m2</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">m3</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">ten_dx1</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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
+ derivative of <span class="emphasis"><em>sin(x)</em></span> evaluated at <span class="emphasis"><em>x =
+ &#960;/3</em></span>. In other words,
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../../floating_point_eg3.png"></span>
+ </p>
+<p>
+ The code below computes the derivative in Equation 3 for float, double
+ and boost's multiple-precision type cpp_dec_float_50.
+ </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>
+<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">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>
+ <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">constants</span><span class="special">::</span><span class="identifier">pi</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_50</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// We'll pass a function pointer for the function object passed to derivative,</span>
+ <span class="comment">// the typecast is needed to select the correct overload of std::sin:</span>
+ <span class="comment">//</span>
+ <span class="keyword">const</span> <span class="keyword">float</span> <span class="identifier">d_f</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span>
+ <span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">&gt;()</span> <span class="special">/</span> <span class="number">3</span><span class="special">,</span>
+ <span class="number">0.01F</span><span class="special">,</span>
+ <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">float</span><span class="special">(*)(</span><span class="keyword">float</span><span class="special">)&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span><span class="special">)</span>
+ <span class="special">);</span>
+
+ <span class="keyword">const</span> <span class="keyword">double</span> <span class="identifier">d_d</span> <span class="special">=</span> <span class="identifier">derivative</span><span class="special">(</span>
+ <span class="identifier">pi</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;()</span> <span class="special">/</span> <span class="number">3</span><span class="special">,</span>
+ <span class="number">0.001</span><span class="special">,</span>
+ <span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">(*)(</span><span class="keyword">double</span><span class="special">)&gt;(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">sin</span><span class="special">)</span>
+ <span class="special">);</span>
+ <span class="comment">//</span>
+ <span class="comment">// In the cpp_dec_float_50 case, the sin function is multiply overloaded</span>
+ <span class="comment">// to handle expression templates etc. As a result it's hard to take its</span>
+ <span class="comment">// address without knowing about its implementation details. We'll use a </span>
+ <span class="comment">// C++11 lambda expression to capture the call.</span>
+ <span class="comment">// We also need a typecast on the first argument so we don't accidentally pass</span>
+ <span class="comment">// an expression template to a template function:</span>
+ <span class="comment">//</span>
+ <span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span> <span class="identifier">d_mp</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="identifier">pi</span><span class="special">&lt;</span><span class="identifier">cpp_dec_float_50</span><span class="special">&gt;()</span> <span class="special">/</span> <span class="number">3</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>
+ <span class="special">[](</span><span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">-&gt;</span> <span class="identifier">cpp_dec_float_50</span>
+ <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">sin</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">);</span>
+
+ <span class="comment">// 5.000029e-001</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">float</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">d_f</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.999999999998876e-001</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">d_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.99999999999999999999999999999999999999999999999999e-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">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">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">d_mp</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 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
+ value of 0.5.
+ </p>
+<p>
+ We can take this a step further and use our derivative function to compute
+ a partial derivative. For example if we take the incomplete gamma function
+ <span class="emphasis"><em>P(a, z)</em></span>, and take the derivative with respect to
+ <span class="emphasis"><em>z</em></span> at <span class="emphasis"><em>(2,2)</em></span> then we can calculate
+ the result as shown below, for good measure we'll compare with the "correct"
+ result obtained from a call to <span class="emphasis"><em>gamma_p_derivative</em></span>,
+ the results agree to approximately 44 digits:
+ </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>
+ <span class="special">[](</span><span class="keyword">const</span> <span class="identifier">cpp_dec_float_50</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">-&gt;</span><span class="identifier">cpp_dec_float_50</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">gamma_p</span><span class="special">(</span><span class="number">2</span><span class="special">,</span> <span class="identifier">x</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">);</span>
+<span class="comment">// 2.70670566473225383787998989944968806815263091819151e-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">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">digits10</span><span class="special">)</span>
+ <span class="special">&lt;&lt;</span> <span class="identifier">gd</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.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>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="jel.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="gi.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html
new file mode 100644
index 0000000000..fd8b5ca300
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/fp_eg/poly_eg.html
@@ -0,0 +1,152 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Polynomial Evaluation</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="../fp_eg.html" title="Examples">
+<link rel="prev" href="gi.html" title="Calculating an Integral">
+<link rel="next" href="../../interval.html" title="Interval Number Types">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gi.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="../../interval.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.floats.fp_eg.poly_eg"></a><a class="link" href="poly_eg.html" title="Polynomial Evaluation">Polynomial
+ Evaluation</a>
+</h5></div></div></div>
+<p>
+ In this example we'll look at polynomial evaluation, this is not only
+ an important use case, but it's one that <code class="computeroutput"><span class="identifier">number</span></code>
+ performs particularly well at because the expression templates <span class="emphasis"><em>completely
+ eliminate all temporaries</em></span> from a <a href="http://en.wikipedia.org/wiki/Horner%27s_method" target="_top">Horner
+ polynomial evaluation scheme</a>.
+ </p>
+<p>
+ 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>
+<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>
+
+<span class="identifier">mp_type</span> <span class="identifier">mysin</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mp_type</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// Approximation of sin(x * pi/2) for -1 &lt;= x &lt;= 1, using an order 63 polynomial.</span>
+ <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span><span class="special">&lt;</span><span class="identifier">mp_type</span><span class="special">,</span> <span class="number">32U</span><span class="special">&gt;</span> <span class="identifier">coefs</span> <span class="special">=</span>
+ <span class="special">{{</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+1.5707963267948966192313216916397514420985846996875529104874722961539082031431044993140174126711"</span><span class="special">),</span> <span class="comment">//"),</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-0.64596409750624625365575656389794573337969351178927307696134454382929989411386887578263960484"</span><span class="special">),</span> <span class="comment">// ^3</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+0.07969262624616704512050554949047802252091164235106119545663865720995702920146198554317279"</span><span class="special">),</span> <span class="comment">// ^5</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-0.0046817541353186881006854639339534378594950280185010575749538605102665157913157426229824"</span><span class="special">),</span> <span class="comment">// ^7</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+0.00016044118478735982187266087016347332970280754062061156858775174056686380286868007443"</span><span class="special">),</span> <span class="comment">// ^9</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-3.598843235212085340458540018208389404888495232432127661083907575106196374913134E-6"</span><span class="special">),</span> <span class="comment">// ^11</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.692172921967926811775255303592184372902829756054598109818158853197797542565E-8"</span><span class="special">),</span> <span class="comment">// ^13</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-6.688035109811467232478226335783138689956270985704278659373558497256423498E-10"</span><span class="special">),</span> <span class="comment">// ^15</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+6.066935731106195667101445665327140070166203261129845646380005577490472E-12"</span><span class="special">),</span> <span class="comment">// ^17</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-4.377065467313742277184271313776319094862897030084226361576452003432E-14"</span><span class="special">),</span> <span class="comment">// ^19</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+2.571422892860473866153865950420487369167895373255729246889168337E-16"</span><span class="special">),</span> <span class="comment">// ^21</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.253899540535457665340073300390626396596970180355253776711660E-18"</span><span class="special">),</span> <span class="comment">// ^23</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.15645517658028233395375998562329055050964428219501277474E-21"</span><span class="special">),</span> <span class="comment">// ^25</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.812399312848887477410034071087545686586497030654642705E-23"</span><span class="special">),</span> <span class="comment">// ^27</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.50728578652238583570585513920522536675023562254864E-26"</span><span class="special">),</span> <span class="comment">// ^29</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.461148710664467988723468673933026649943084902958E-28"</span><span class="special">),</span> <span class="comment">// ^31</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+3.41405297003316172502972039913417222912445427E-31"</span><span class="special">),</span> <span class="comment">// ^33</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-7.07885550810745570069916712806856538290251E-34"</span><span class="special">),</span> <span class="comment">// ^35</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+1.31128947968267628970845439024155655665E-36"</span><span class="special">),</span> <span class="comment">// ^37</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-2.18318293181145698535113946654065918E-39"</span><span class="special">),</span> <span class="comment">// ^39</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+3.28462680978498856345937578502923E-42"</span><span class="special">),</span> <span class="comment">// ^41</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-4.48753699028101089490067137298E-45"</span><span class="special">),</span> <span class="comment">// ^43</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.59219884208696457859353716E-48"</span><span class="special">),</span> <span class="comment">// ^45</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-6.38214503973500471720565E-51"</span><span class="special">),</span> <span class="comment">// ^47</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+6.69528558381794452556E-54"</span><span class="special">),</span> <span class="comment">// ^49</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-6.47841373182350206E-57"</span><span class="special">),</span> <span class="comment">// ^51</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+5.800016389666445E-60"</span><span class="special">),</span> <span class="comment">// ^53</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-4.818507347289E-63"</span><span class="special">),</span> <span class="comment">// ^55</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+3.724683686E-66"</span><span class="special">),</span> <span class="comment">// ^57</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-2.6856479E-69"</span><span class="special">),</span> <span class="comment">// ^59</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"+1.81046E-72"</span><span class="special">),</span> <span class="comment">// ^61</span>
+ <span class="identifier">mp_type</span><span class="special">(</span><span class="string">"-1.133E-75"</span><span class="special">),</span> <span class="comment">// ^63</span>
+ <span class="special">}};</span>
+
+ <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">v</span> <span class="special">=</span> <span class="identifier">x</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">mp_type</span><span class="special">&gt;();</span>
+ <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">x2</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">v</span> <span class="special">*</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="comment">//</span>
+ <span class="comment">// Polynomial evaluation follows, if mp_type allocates memory then</span>
+ <span class="comment">// just one such allocation occurs - to initialize the variable "sum" -</span>
+ <span class="comment">// and no temporaries are created at all.</span>
+ <span class="comment">//</span>
+ <span class="keyword">const</span> <span class="identifier">mp_type</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="special">(((((((((((((((((((((((((((((((</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">31U</span><span class="special">]</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">30U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">29U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">28U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">27U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">26U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">25U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">24U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">23U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">22U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">21U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">20U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">19U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">18U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">17U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">16U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">15U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">14U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">13U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">12U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">11U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">10U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">9U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">8U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">7U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">6U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">5U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">4U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">3U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">2U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">1U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">x2</span> <span class="special">+</span> <span class="identifier">coefs</span><span class="special">[</span><span class="number">0U</span><span class="special">])</span>
+ <span class="special">*</span> <span class="identifier">v</span><span class="special">;</span>
+
+ <span class="keyword">return</span> <span class="identifier">sum</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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>
+<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="special">::</span><span class="identifier">mp_type</span><span class="special">&gt;::</span><span class="identifier">digits10</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">scientific</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">mysin</span><span class="special">(</span><span class="identifier">pid4</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>
+ Yields the expected output:
+ </p>
+<pre class="programlisting">7.0710678118654752440084436210484903928483593768847403658833986900e-01</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gi.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../fp_eg.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="../../interval.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html
new file mode 100644
index 0000000000..748ab6ff86
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/gmp_float.html
@@ -0,0 +1,194 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>gmp_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="cpp_dec_float.html" title="cpp_dec_float">
+<link rel="next" href="mpfr_float.html" title="mpfr_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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_dec_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="mpfr_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.gmp_float"></a><a class="link" href="gmp_float.html" title="gmp_float">gmp_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">gmp</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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">gmp_float</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_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">mpf_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">gmp_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">mpf_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">gmp_float</span><span class="special">&lt;</span><span class="number">500</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpf_float_500</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_float</span><span class="special">&lt;</span><span class="number">1000</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpf_float_1000</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_float</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpf_float</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">gmp_float</span></code> back-end
+ is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>
+ : it acts as a thin wrapper around the <a href="http://gmplib.org" target="_top">GMP</a>
+ <code class="computeroutput"><span class="identifier">mpf_t</span></code> to provide an real-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">gmp_float</span></code> can be used
+ at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ template parameter, or at variable precision by setting the template argument
+ to zero. The typedefs mpf_float_50, mpf_float_100, mpf_float_500, mpf_float_1000
+ provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision
+ respectively. The typedef mpf_float provides a variable precision type
+ whose precision can be controlled via the <code class="computeroutput"><span class="identifier">number</span></code>s
+ member functions.
+ </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>
+ This type only provides standard library and <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support when the precision is fixed at compile time.
+ </p></td></tr>
+</table></div>
+<p>
+ As well as the usual conversions from arithmetic and string types, instances
+ of <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpf_float</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span> <span class="special">&gt;</span></code> are copy constructible and assignable
+ from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The <a href="http://gmplib.org" target="_top">GMP</a> native types <code class="computeroutput"><span class="identifier">mpf_t</span></code>, <code class="computeroutput"><span class="identifier">mpz_t</span></code>,
+ <code class="computeroutput"><span class="identifier">mpq_t</span></code>.
+ </li>
+<li class="listitem">
+ The <code class="computeroutput"><span class="identifier">number</span></code> wrappers
+ around those types: <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpf_float</span><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>,
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_int</span><span class="special">&gt;</span></code>,
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span><span class="special">&gt;</span></code>.
+ </li>
+</ul></div>
+<p>
+ It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpf_t</span></code>
+ via the <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code>
+ member function of <code class="computeroutput"><span class="identifier">gmp_float</span></code>.
+ </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">gmp_float</span></code>s
+ have the value zero (this is the <a href="http://gmplib.org" target="_top">GMP</a>
+ library's default behavior).
+ </li>
+<li class="listitem">
+ No changes are made to the <a href="http://gmplib.org" target="_top">GMP</a>
+ library's global settings, so this type can be safely mixed with existing
+ <a href="http://gmplib.org" target="_top">GMP</a> code.
+ </li>
+<li class="listitem">
+ This backend supports rvalue-references and is move-aware, making instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> on this backend
+ move aware.
+ </li>
+<li class="listitem">
+ 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 <a href="http://gmplib.org" target="_top">GMP</a>.
+ </li>
+<li class="listitem">
+ Since the underlying <a href="http://gmplib.org" target="_top">GMP</a> 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, while generating excessively large
+ exponents may result in instability of the underlying <a href="http://gmplib.org" target="_top">GMP</a>
+ library (in testing, converting a number with an excessively large
+ or small exponent to a string caused <a href="http://gmplib.org" target="_top">GMP</a>
+ to segfault).
+ </li>
+<li class="listitem">
+ This type can equally be used with <a href="http://mpir.org/" target="_top">MPIR</a>
+ as the underlying implementation - indeed that is the recommended option
+ on Win32.
+ </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">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </li>
+</ul></div>
+<h6>
+<a name="boost_multiprecision.tut.floats.gmp_float.h0"></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>
+<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">math</span><span class="special">/</span><span class="identifier">special_functions</span><span class="special">/</span><span class="identifier">gamma</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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 variable precision and limited standard library support:</span>
+ <span class="identifier">mpf_float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+ <span class="identifier">mpf_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">(</span><span class="number">1000</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">mpf_float</span><span class="special">::</span><span class="identifier">default_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="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">a</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 root-2</span>
+
+ <span class="comment">// Operations at fixed precision and full standard library support:</span>
+ <span class="identifier">mpf_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">mpf_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="comment">// We can use any C++ std lib function:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">// Access the underlying representation:</span>
+ <span class="identifier">mpf_t</span> <span class="identifier">f</span><span class="special">;</span>
+ <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>
+ <span class="identifier">mpf_clear</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_dec_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="mpfr_float.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html
new file mode 100644
index 0000000000..3acd47f141
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/mpfr_float.html
@@ -0,0 +1,283 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>mpfr_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="gmp_float.html" title="gmp_float">
+<link rel="next" href="float128.html" title="float128">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_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="float128.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.mpfr_float"></a><a class="link" href="mpfr_float.html" title="mpfr_float">mpfr_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">mpfr</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">mpfr_allocation_type</span>
+<span class="special">{</span>
+ <span class="identifier">allocate_stack</span><span class="special">,</span>
+ <span class="identifier">allocate_dynamic</span>
+<span class="special">};</span>
+
+<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">mpfr_allocation_type</span> <span class="identifier">AllocateType</span> <span class="special">=</span> <span class="identifier">allocate_dynamic</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">mpfr_float_backend</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_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">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_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">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">500</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_float_500</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">1000</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_float_1000</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfr_float</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_stack</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">static_mpfr_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">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">100</span><span class="special">,</span> <span class="identifier">allocate_stack</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">static_mpfr_float_100</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>
+ type is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>:
+ It acts as a thin wrapper around the <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ <code class="computeroutput"><span class="identifier">mpfr_t</span></code> to provide an real-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">mpfr_float_backend</span></code>
+ can be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ template parameter, or at variable precision by setting the template argument
+ to zero. The typedefs mpfr_float_50, mpfr_float_100, mpfr_float_500, mpfr_float_1000
+ provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision
+ respectively. The typedef mpfr_float provides a variable precision type
+ whose precision can be controlled via the <code class="computeroutput"><span class="identifier">number</span></code>s
+ member functions.
+ </p>
+<p>
+ In addition the second template parameter lets you choose between dynamic
+ allocation (the default, and uses MPFR's normal allocation routines), or
+ stack allocation (where all the memory required for the underlying data
+ types is stored within <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>).
+ The latter option can result in significantly faster code, at the expense
+ of growing the size of <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>.
+ 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 <code class="computeroutput"><span class="identifier">allocate_stack</span></code>
+ 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 precision<a href="#ftn.boost_multiprecision.tut.floats.mpfr_float.f0" class="footnote" name="boost_multiprecision.tut.floats.mpfr_float.f0"><sup class="footnote">[2]</sup></a>:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Type
+ </p>
+ </th>
+<th>
+ <p>
+ Bessel function evaluation, relative times
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_static</span><span class="special">&gt;,</span>
+ <span class="identifier">et_on</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.0 (5.5s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_static</span><span class="special">&gt;,</span>
+ <span class="identifier">et_off</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05 (5.8s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_dynamic</span><span class="special">&gt;,</span>
+ <span class="identifier">et_on</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.05 (5.8s)
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="number">50</span><span class="special">,</span> <span class="identifier">allocate_dynamic</span><span class="special">&gt;,</span>
+ <span class="identifier">et_off</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 1.16 (6.4s)
+ </p>
+ </td>
+</tr>
+</tbody>
+</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>
+ This type only provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support when the precision is fixed at compile time.
+ </p></td></tr>
+</table></div>
+<p>
+ As well as the usual conversions from arithmetic and string types, instances
+ of <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span> <span class="special">&gt;</span></code> are copy constructible and assignable
+ from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The <a href="http://gmplib.org" target="_top">GMP</a> native types <code class="computeroutput"><span class="identifier">mpf_t</span></code>, <code class="computeroutput"><span class="identifier">mpz_t</span></code>,
+ <code class="computeroutput"><span class="identifier">mpq_t</span></code>.
+ </li>
+<li class="listitem">
+ The <a href="http://www.mpfr.org" target="_top">MPFR</a> native type <code class="computeroutput"><span class="identifier">mpfr_t</span></code>.
+ </li>
+<li class="listitem">
+ The <code class="computeroutput"><span class="identifier">number</span></code> wrappers
+ around those types: <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>,
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpf_float</span><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>, <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_int</span><span class="special">&gt;</span></code>, <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span><span class="special">&gt;</span></code>.
+ </li>
+</ul></div>
+<p>
+ It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpfr_t</span></code>
+ via the data() member function of <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>.
+ </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">
+ A default constructed <code class="computeroutput"><span class="identifier">mpfr_float_backend</span></code>
+ is set to a NaN (this is the default <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ behavior).
+ </li>
+<li class="listitem">
+ All operations use round to nearest.
+ </li>
+<li class="listitem">
+ No changes are made to <a href="http://gmplib.org" target="_top">GMP</a> or
+ <a href="http://www.mpfr.org" target="_top">MPFR</a> global settings, so this
+ type can coexist with existing <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ or <a href="http://gmplib.org" target="_top">GMP</a> code.
+ </li>
+<li class="listitem">
+ The code can equally use <a href="http://mpir.org/" target="_top">MPIR</a>
+ in place of <a href="http://gmplib.org" target="_top">GMP</a> - indeed that
+ is the preferred option on Win32.
+ </li>
+<li class="listitem">
+ This backend supports rvalue-references and is move-aware, making instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> on this backend
+ move aware.
+ </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">
+ Division by zero results in an infinity.
+ </li>
+</ul></div>
+<h6>
+<a name="boost_multiprecision.tut.floats.mpfr_float.h0"></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>
+<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="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">gamma</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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 variable precision and no numeric_limits support:</span>
+ <span class="identifier">mpfr_float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+ <span class="identifier">mpfr_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">(</span><span class="number">1000</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">mpfr_float</span><span class="special">::</span><span class="identifier">default_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="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">a</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 root-2</span>
+
+ <span class="comment">// Operations at fixed precision and full numeric_limits support:</span>
+ <span class="identifier">mpfr_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">mpfr_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="comment">// We can use any C++ std lib function:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">// Access the underlying data:</span>
+ <span class="identifier">mpfr_t</span> <span class="identifier">r</span><span class="special">;</span>
+ <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>
+ <span class="identifier">mpfr_clear</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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><a href="#boost_multiprecision.tut.floats.mpfr_float.f0" class="para"><sup class="para">[2] </sup></a>
+ Compiled with VC++10 and /Ox, with MPFR-3.0.0 and MPIR-2.3.0
+ </p></div>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_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="float128.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html
new file mode 100644
index 0000000000..75effaa47f
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/gen_int.html
@@ -0,0 +1,180 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Generic Integer Operations</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="mixed.html" title="Mixed Precision Arithmetic">
+<link rel="next" href="serial.html" title="Boost.Serialization Support">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="mixed.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="serial.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.gen_int"></a><a class="link" href="gen_int.html" title="Generic Integer Operations">Generic Integer Operations</a>
+</h3></div></div></div>
+<p>
+ All of the <a class="link" href="../ref/number.html#boost_multiprecision.ref.number.integer_functions">non-member
+ integer operations</a> are overloaded for the built in integer types in
+ <code class="computeroutput"><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">integer</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>.
+ Where these operations require a temporary increase in precision (such as
+ for powm), then if no built in type is available, a <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>
+ of appropriate precision will be used.
+ </p>
+<p>
+ Some of these functions are trivial, others use compiler intrinsics (where
+ available) to ensure optimal evaluation.
+ </p>
+<p>
+ The overloaded functions are:
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Multiplies two <code class="computeroutput"><span class="identifier">I2</span></code> values,
+ to produce a wider <code class="computeroutput"><span class="identifier">Integer</span></code>
+ result.
+ </p>
+<p>
+ Returns <code class="computeroutput"><span class="identifier">result</span> <span class="special">=</span>
+ <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">b</span></code> without overflow or loss of precision
+ in the multiplication.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Adds two <code class="computeroutput"><span class="identifier">I2</span></code> values, to produce
+ a wider <code class="computeroutput"><span class="identifier">Integer</span></code> result.
+ </p>
+<p>
+ Returns <code class="computeroutput"><span class="identifier">result</span> <span class="special">=</span>
+ <span class="identifier">a</span> <span class="special">+</span> <span class="identifier">b</span></code> without overflow or loss of precision
+ in the addition.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">I2</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">I2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Subtracts two <code class="computeroutput"><span class="identifier">I2</span></code> values,
+ to produce a wider <code class="computeroutput"><span class="identifier">Integer</span></code>
+ result.
+ </p>
+<p>
+ Returns <code class="computeroutput"><span class="identifier">result</span> <span class="special">=</span>
+ <span class="identifier">a</span> <span class="special">-</span> <span class="identifier">b</span></code> without overflow or loss of precision
+ in the subtraction.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span> <span class="identifier">powm</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">m</span><span class="special">);</span>
+</pre>
+<p>
+ Returns b<sup>p</sup> % m.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">divide_qr</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">y</span><span class="special">,</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">q</span><span class="special">,</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+</pre>
+<p>
+ Sets <code class="computeroutput"><span class="identifier">q</span> <span class="special">=</span>
+ <span class="identifier">x</span> <span class="special">/</span> <span class="identifier">y</span></code> and <code class="computeroutput"><span class="identifier">r</span>
+ <span class="special">=</span> <span class="identifier">x</span> <span class="special">%</span> <span class="identifier">y</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Integer2</span><span class="special">&gt;</span>
+<span class="identifier">Integer2</span> <span class="identifier">integer_modulus</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer1</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer2</span> <span class="identifier">val</span><span class="special">);</span>
+</pre>
+<p>
+ Returns x % val;
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="keyword">unsigned</span> <span class="identifier">lsb</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the (zero-based) index of the least significant bit of <code class="computeroutput"><span class="identifier">x</span></code>.
+ </p>
+<p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code> if <code class="computeroutput"><span class="identifier">x</span>
+ <span class="special">&lt;=</span> <span class="number">0</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="keyword">unsigned</span> <span class="identifier">msb</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the (zero-based) index of the most significant bit of <code class="computeroutput"><span class="identifier">x</span></code>.
+ </p>
+<p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">domain_error</span></code> if <code class="computeroutput"><span class="identifier">x</span>
+ <span class="special">&lt;=</span> <span class="number">0</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">bit_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if bit <code class="computeroutput"><span class="identifier">index</span></code> is set in <code class="computeroutput"><span class="identifier">val</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Sets the <code class="computeroutput"><span class="identifier">index</span></code> bit in <code class="computeroutput"><span class="identifier">val</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">bit_unset</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Unsets the <code class="computeroutput"><span class="identifier">index</span></code> bit in
+ <code class="computeroutput"><span class="identifier">val</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">bit_flip</span><span class="special">(</span><span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">index</span><span class="special">);</span>
+</pre>
+<p>
+ Flips the <code class="computeroutput"><span class="identifier">index</span></code> bit in <code class="computeroutput"><span class="identifier">val</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Integer</span><span class="special">&gt;</span>
+<span class="identifier">Integer</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">Integer</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the integer square root <code class="computeroutput"><span class="identifier">s</span></code>
+ of x and sets <code class="computeroutput"><span class="identifier">r</span></code> to the remainder
+ <span class="emphasis"><em>x - s<sup>2</sup></em></span>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">-</span><span class="keyword">or</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">-</span><span class="identifier">type</span><span class="special">&amp;</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&amp;</span> <span class="identifier">gen</span><span class="special">);</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">-</span><span class="keyword">or</span><span class="special">-</span><span class="identifier">expression</span><span class="special">-</span><span class="keyword">template</span><span class="special">-</span><span class="identifier">type</span><span class="special">&amp;</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span>
+</pre>
+<p>
+ The regular Miller-Rabin functions in <code class="computeroutput"><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></code>
+ are defined in terms of the above generic operations, and so function equally
+ well for built in and multiprecision types.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="mixed.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="serial.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html
new file mode 100644
index 0000000000..d58ffe908c
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/input_output.html
@@ -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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></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 <a href="../../../../test/test_cpp_bin_float_io.cpp" target="_top">test_cpp_bin_float_io.cpp</a>
+ 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 <a href="../../../../test/string_data.ipp" target="_top">stringdata</a> 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> recommended 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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html
new file mode 100644
index 0000000000..8e38ca6072
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Interval Number Types</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="floats/fp_eg/poly_eg.html" title="Polynomial Evaluation">
+<link rel="next" href="interval/mpfi.html" title="mpfi_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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="floats/fp_eg/poly_eg.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="interval/mpfi.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.interval"></a><a class="link" href="interval.html" title="Interval Number Types">Interval Number Types</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc"><dt><span class="section"><a href="interval/mpfi.html">mpfi_float</a></span></dt></dl></div>
+<p>
+ There is one currently only one interval number type supported - <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="floats/fp_eg/poly_eg.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="interval/mpfi.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html
new file mode 100644
index 0000000000..fcd2aea9d3
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/interval/mpfi.html
@@ -0,0 +1,286 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>mpfi_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="../interval.html" title="Interval Number Types">
+<link rel="prev" href="../interval.html" title="Interval Number Types">
+<link rel="next" href="../rational.html" title="Rational Number Types">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../interval.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interval.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="../rational.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.interval.mpfi"></a><a class="link" href="mpfi.html" title="mpfi_float">mpfi_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">mpfi</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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">Digits10</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">mpfi_float_backend</span><span class="special">;</span>
+
+<span class="keyword">typedef</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="number">50</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfi_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">mpfi_float_backend</span><span class="special">&lt;</span><span class="number">100</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfifloat_100</span><span class="special">;</span>
+<span class="keyword">typedef</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="number">500</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfifloat_500</span><span class="special">;</span>
+<span class="keyword">typedef</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="number">1000</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfi_float_1000</span><span class="special">;</span>
+<span class="keyword">typedef</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="number">0</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">mpfi_float</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code>
+ type is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>:
+ It acts as a thin wrapper around the <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>
+ <code class="computeroutput"><span class="identifier">mpfi_t</span></code> 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.
+ </p>
+<p>
+ Type <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code>
+ can be used at fixed precision by specifying a non-zero <code class="computeroutput"><span class="identifier">Digits10</span></code>
+ template parameter, or at variable precision by setting the template argument
+ to zero. The typedefs mpfi_float_50, mpfi_float_100, mpfi_float_500, mpfi_float_1000
+ provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision
+ respectively. The typedef mpfi_float provides a variable precision type
+ whose precision can be controlled via the <code class="computeroutput"><span class="identifier">number</span></code>s
+ member functions.
+ </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>
+ This type only provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support when the precision is fixed at compile time.
+ </p></td></tr>
+</table></div>
+<p>
+ As well as the usual conversions from arithmetic and string types, instances
+ of <code class="computeroutput"><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">N</span><span class="special">&gt;</span> <span class="special">&gt;</span></code> are copy constructible and assignable
+ from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>
+ native type <code class="computeroutput"><span class="identifier">mpfi_t</span></code>.
+ </li>
+<li class="listitem">
+ The <code class="computeroutput"><span class="identifier">number</span></code> wrappers
+ around <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>
+ or <a href="http://www.mpfr.org" target="_top">MPFR</a>: <code class="computeroutput"><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">M</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>
+ and <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float</span><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>.
+ </li>
+<li class="listitem">
+ There is a two argument constructor taking two <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float</span><span class="special">&lt;</span><span class="identifier">M</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>
+ arguments specifying the interval.
+ </li>
+</ul></div>
+<p>
+ It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpfi_t</span></code>
+ via the data() member function of <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code>.
+ </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">
+ A default constructed <code class="computeroutput"><span class="identifier">mpfi_float_backend</span></code>
+ is set to a NaN (this is the default <a href="http://perso.ens-lyon.fr/nathalie.revol/software.html" target="_top">MPFI</a>
+ behavior).
+ </li>
+<li class="listitem">
+ No changes are made to <a href="http://gmplib.org" target="_top">GMP</a> or
+ <a href="http://www.mpfr.org" target="_top">MPFR</a> global settings, so this
+ type can coexist with existing <a href="http://www.mpfr.org" target="_top">MPFR</a>
+ or <a href="http://gmplib.org" target="_top">GMP</a> code.
+ </li>
+<li class="listitem">
+ The code can equally use <a href="http://mpir.org/" target="_top">MPIR</a>
+ in place of <a href="http://gmplib.org" target="_top">GMP</a> - indeed that
+ is the preferred option on Win32.
+ </li>
+<li class="listitem">
+ This backend supports rvalue-references and is move-aware, making instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> on this backend
+ move aware.
+ </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">
+ Division by zero results in an infinity.
+ </li>
+</ul></div>
+<p>
+ There are some additional non member functions for working on intervals:
+ </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">mpfr_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">lower</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">val</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the lower end of the interval.
+ </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">mpfr_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">upper</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">val</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the upper end of the interval.
+ </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">mpfr_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">median</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">val</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the mid point of the interval.
+ </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">mpfr_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">width</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">val</span><span class="special">);</span>
+</pre>
+<p>
+ Returns the absolute width of the interval.
+ </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>
+</pre>
+<p>
+ Returns the interval which is the intersection of the <span class="emphasis"><em>a</em></span>
+ and <span class="emphasis"><em>b</em></span>. Returns an unspecified empty interval if there
+ is no such intersection.
+ </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>
+</pre>
+<p>
+ Returns the interval which is the union of <span class="emphasis"><em>a</em></span> and
+ <span class="emphasis"><em>b</em></span>.
+ </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="keyword">bool</span> <span class="identifier">overlap</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 <code class="computeroutput"><span class="keyword">true</span></code> only if the intervals
+ <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> overlap.
+ </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">ExpressionTemplates1</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates2</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">in</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="identifier">Digits10</span><span class="special">&gt;,</span> <span class="identifier">ExpressionTemplates1</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">ExpressionTemplates2</span><span class="special">&gt;&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> only if point
+ <span class="emphasis"><em>a</em></span> is contained within the interval <span class="emphasis"><em>b</em></span>.
+ </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="keyword">bool</span> <span class="identifier">zero_in</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>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> only if the interval
+ <span class="emphasis"><em>a</em></span> contains the value zero.
+ </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="keyword">bool</span> <span class="identifier">subset</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 <code class="computeroutput"><span class="keyword">true</span></code> only if <span class="emphasis"><em>a</em></span>
+ is a subset of <span class="emphasis"><em>b</em></span>.
+ </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="keyword">bool</span> <span class="identifier">proper_subset</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 <code class="computeroutput"><span class="keyword">true</span></code> only if <span class="emphasis"><em>a</em></span>
+ is a proper subset of <span class="emphasis"><em>b</em></span>.
+ </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="keyword">bool</span> <span class="identifier">empty</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>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> only if <span class="emphasis"><em>a</em></span>
+ is an empty interval, equivalent to <code class="computeroutput"><span class="identifier">upper</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span>
+ <span class="special">&lt;</span> <span class="identifier">lower</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>.
+ </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="keyword">bool</span> <span class="identifier">singleton</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>
+</pre>
+<p>
+ Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">lower</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span> <span class="special">==</span>
+ <span class="identifier">upper</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>.
+ </p>
+<h6>
+<a name="boost_multiprecision.tut.interval.mpfi.h0"></a>
+ <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>
+<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">math</span><span class="special">/</span><span class="identifier">special_functions</span><span class="special">/</span><span class="identifier">gamma</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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 variable precision and no numeric_limits support:</span>
+ <span class="identifier">mpfi_float</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+ <span class="identifier">mpfi_float</span><span class="special">::</span><span class="identifier">default_precision</span><span class="special">(</span><span class="number">1000</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">mpfi_float</span><span class="special">::</span><span class="identifier">default_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="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">sqrt</span><span class="special">(</span><span class="identifier">a</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 root-2</span>
+
+ <span class="comment">// Operations at fixed precision and full numeric_limits support:</span>
+ <span class="identifier">mpfi_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">mpfi_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="comment">// We can use any C++ std lib function:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</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">// Access the underlying data:</span>
+ <span class="identifier">mpfi_t</span> <span class="identifier">r</span><span class="special">;</span>
+ <span class="identifier">mpfi_init</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+ <span class="identifier">mpfi_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="comment">// Construct some explicit intervals and perform set operations:</span>
+ <span class="identifier">mpfi_float_50</span> <span class="identifier">i1</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">),</span> <span class="identifier">i2</span><span class="special">(</span><span class="number">1.5</span><span class="special">,</span> <span class="number">2.5</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">intersect</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">hull</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">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>
+ <span class="identifier">mpfi_clear</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../interval.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../interval.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="../rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html
new file mode 100644
index 0000000000..1c606ab903
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints.html
@@ -0,0 +1,200 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Integer Types</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="../tut.html" title="Tutorial">
+<link rel="next" href="ints/cpp_int.html" title="cpp_int">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../tut.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="ints/cpp_int.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.ints"></a><a class="link" href="ints.html" title="Integer Types">Integer Types</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="ints/cpp_int.html">cpp_int</a></span></dt>
+<dt><span class="section"><a href="ints/gmp_int.html">gmp_int</a></span></dt>
+<dt><span class="section"><a href="ints/tom_int.html">tom_int</a></span></dt>
+<dt><span class="section"><a href="ints/egs.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ints/egs/factorials.html">Factorials</a></span></dt>
+<dt><span class="section"><a href="ints/egs/bitops.html">Bit Operations</a></span></dt>
+</dl></dd>
+</dl></div>
+<p>
+ The following back-ends provide integer arithmetic:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend Type
+ </p>
+ </th>
+<th>
+ <p>
+ Header
+ </p>
+ </th>
+<th>
+ <p>
+ Radix
+ </p>
+ </th>
+<th>
+ <p>
+ Dependencies
+ </p>
+ </th>
+<th>
+ <p>
+ Pros
+ </p>
+ </th>
+<th>
+ <p>
+ Cons
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">cpp_int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/cpp_int.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ Very versatile, Boost licensed, all C++ integer type which support
+ both <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary
+ precision</a> and fixed precision integer types.
+ </p>
+ </td>
+<td>
+ <p>
+ Slower than <a href="http://gmplib.org" target="_top">GMP</a>, though
+ typically not as slow as <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">gmp_int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/gmp.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ <a href="http://gmplib.org" target="_top">GMP</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Very fast and efficient back-end.
+ </p>
+ </td>
+<td>
+ <p>
+ Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a>
+ library.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">tom_int</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/tommath.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Public domain back-end with no licence restrictions.
+ </p>
+ </td>
+<td>
+ <p>
+ Slower than <a href="http://gmplib.org" target="_top">GMP</a>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../tut.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="ints/cpp_int.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html
new file mode 100644
index 0000000000..ab836530fc
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/cpp_int.html
@@ -0,0 +1,385 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_int</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="../ints.html" title="Integer Types">
+<link rel="prev" href="../ints.html" title="Integer Types">
+<link rel="next" href="gmp_int.html" title="gmp_int">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../ints.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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_int.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.ints.cpp_int"></a><a class="link" href="cpp_int.html" title="cpp_int">cpp_int</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_int</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">typedef</span> <span class="identifier">unspecified</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">limb_type</span><span class="special">;</span>
+
+<span class="keyword">enum</span> <span class="identifier">cpp_integer_type</span> <span class="special">{</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span> <span class="special">};</span>
+<span class="keyword">enum</span> <span class="identifier">cpp_int_check_type</span> <span class="special">{</span> <span class="identifier">checked</span><span class="special">,</span> <span class="identifier">unchecked</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">MinBits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span>
+ <span class="keyword">unsigned</span> <span class="identifier">MaxBits</span> <span class="special">=</span> <span class="number">0</span><span class="special">,</span>
+ <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span> <span class="special">=</span> <span class="identifier">signed_magnitude</span><span class="special">,</span>
+ <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span> <span class="special">=</span> <span class="identifier">unchecked</span><span class="special">,</span>
+ <span class="keyword">class</span> <span class="identifier">Allocator</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="identifier">limb_type</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">cpp_int_backend</span><span class="special">;</span>
+<span class="comment">//</span>
+<span class="comment">// Expression templates default to et_off if there is no allocator:</span>
+<span class="comment">//</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">MinBits</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">MaxBits</span><span class="special">,</span> <span class="identifier">cpp_integer_type</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">cpp_int_check_type</span> <span class="identifier">Checked</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">expression_template_default</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="identifier">MinBits</span><span class="special">,</span> <span class="identifier">MaxBits</span><span class="special">,</span> <span class="identifier">SignType</span><span class="special">,</span> <span class="identifier">Checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+<span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">expression_template_option</span> <span class="identifier">value</span> <span class="special">=</span> <span class="identifier">et_off</span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_int</span><span class="special">;</span> <span class="comment">// arbitrary precision integer</span>
+<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_rational_backend</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_rational_backend</span><span class="special">&gt;</span> <span class="identifier">cpp_rational</span><span class="special">;</span> <span class="comment">// arbitrary precision rational number</span>
+
+<span class="comment">// Fixed precision unsigned types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">uint1024_t</span><span class="special">;</span>
+
+<span class="comment">// Fixed precision signed types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">unchecked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">int1024_t</span><span class="special">;</span>
+
+<span class="comment">// Over again, but with checking enabled this time:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_cpp_int</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_cpp_rational_backend</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_rational_backend</span><span class="special">&gt;</span> <span class="identifier">checked_cpp_rational</span><span class="special">;</span>
+
+<span class="comment">// Checked fixed precision unsigned types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">unsigned_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_uint1024_t</span><span class="special">;</span>
+
+<span class="comment">// Fixed precision signed types:</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">128</span><span class="special">,</span> <span class="number">128</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int128_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">256</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int256_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">512</span><span class="special">,</span> <span class="number">512</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int512_t</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="number">1024</span><span class="special">,</span> <span class="number">1024</span><span class="special">,</span> <span class="identifier">signed_magnitude</span><span class="special">,</span> <span class="identifier">checked</span><span class="special">,</span> <span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">checked_int1024_t</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> type
+ is normally used via one of the convenience typedefs given above.
+ </p>
+<p>
+ This back-end is the "Swiss Army Knife" of integer types as it
+ can represent both fixed and <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary
+ precision</a> integer types, and both signed and unsigned types. There
+ are five template arguments:
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">MinBits</span></dt>
+<dd><p>
+ Determines the number of Bits to store directly within the object
+ before resorting to dynamic memory allocation. When zero, this field
+ is determined automatically based on how many bits can be stored
+ in union with the dynamic storage header: setting a larger value
+ may improve performance as larger integer values will be stored internally
+ before memory allocation is required.
+ </p></dd>
+<dt><span class="term">MaxBits</span></dt>
+<dd><p>
+ Determines the maximum number of bits to be stored in the type: resulting
+ in a fixed precision type. When this value is the same as MinBits,
+ then the Allocator parameter is ignored, as no dynamic memory allocation
+ will ever be performed: in this situation the Allocator parameter
+ should be set to type <code class="computeroutput"><span class="keyword">void</span></code>.
+ 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.
+ </p></dd>
+<dt><span class="term">SignType</span></dt>
+<dd><p>
+ Determines whether the resulting type is signed or not. Note that
+ for <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary
+ precision</a> types this parameter must be <code class="computeroutput"><span class="identifier">signed_magnitude</span></code>.
+ For fixed precision types then this type may be either <code class="computeroutput"><span class="identifier">signed_magnitude</span></code> or <code class="computeroutput"><span class="identifier">unsigned_magnitude</span></code>.
+ </p></dd>
+<dt><span class="term">Checked</span></dt>
+<dd><p>
+ This parameter has two values: <code class="computeroutput"><span class="identifier">checked</span></code>
+ or <code class="computeroutput"><span class="identifier">unchecked</span></code>. See
+ below.
+ </p></dd>
+<dt><span class="term">Allocator</span></dt>
+<dd><p>
+ The allocator to use for dynamic memory allocation, or type <code class="computeroutput"><span class="keyword">void</span></code> if MaxBits == MinBits.
+ </p></dd>
+</dl>
+</div>
+<p>
+ When the template parameter Checked is set to <code class="computeroutput"><span class="identifier">checked</span></code>
+ then the result is a <span class="emphasis"><em>checked-integer</em></span>, checked and
+ unchecked integers have the following properties:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Condition
+ </p>
+ </th>
+<th>
+ <p>
+ Checked-Integer
+ </p>
+ </th>
+<th>
+ <p>
+ Unchecked-Integer
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Numeric overflow in fixed precision arithmetic
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ Performs arithmetic modulo 2<sup>MaxBits</sup>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Constructing an integer from a value that can not be represented
+ in the target type
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ Converts the value modulo 2<sup>MaxBits</sup>, signed to unsigned conversions
+ extract the last MaxBits bits of the 2's complement representation
+ of the input value.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Unsigned subtraction yielding a negative value.
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code>.
+ </p>
+ </td>
+<td>
+ <p>
+ Yields the value that would result from treating the unsigned
+ type as a 2's complement signed type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Attempting a bitwise operation on a negative value.
+ </p>
+ </td>
+<td>
+ <p>
+ Throws a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Yields the value, but not the bit pattern, that would result
+ from performing the operation on a 2's complement integer type.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<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_int_backend</span></code>s
+ have the value zero.
+ </li>
+<li class="listitem">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </li>
+<li class="listitem">
+ Construction from a string that contains invalid non-numeric characters
+ results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code> being thrown.
+ </li>
+<li class="listitem">
+ Since the precision of <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>
+ 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.
+ </li>
+<li class="listitem">
+ The type uses a sign-magnitude representation internally, so type
+ <code class="computeroutput"><span class="identifier">int128_t</span></code> has 128-bits
+ of precision plus an extra sign bit. In this respect the behaviour
+ of these types differs from built-in 2's complement types. In might
+ be tempting to use a 127-bit type instead, and indeed this does work,
+ but behaviour is still slightly different from a 2's complement built-in
+ type as the min and max values are identical (apart from the sign),
+ where as they differ by one for a true 2's complement type. That said
+ it should be noted that there's no requirement for built-in types to
+ be 2's complement either - it's simply that this is the most common
+ format by far.
+ </li>
+<li class="listitem">
+ Attempting to print negative values as either an Octal or Hexadecimal
+ 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, this is a direct consequence of the sign-magnitude representation.
+ </li>
+<li class="listitem">
+ The fixed precision types <code class="computeroutput"><span class="special">[</span><span class="identifier">checked_</span><span class="special">][</span><span class="identifier">u</span><span class="special">]</span><span class="identifier">intXXX_t</span></code> 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.
+ </li>
+<li class="listitem">
+ Unsigned types support subtraction - the result is "as if"
+ a 2's complement operation had been performed as long as they are not
+ <span class="emphasis"><em>checked-integers</em></span> (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 <code class="computeroutput"><span class="identifier">uint128_t</span></code>
+ then <code class="computeroutput"><span class="identifier">uint128_t</span><span class="special">(</span><span class="number">1</span><span class="special">)-</span><span class="number">4</span></code>
+ would result in the value <code class="computeroutput"><span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD</span></code>
+ of type <code class="computeroutput"><span class="identifier">uint128_t</span></code>.
+ However, had this operation been performed on <code class="computeroutput"><span class="identifier">checked_uint128_t</span></code>
+ then a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">range_error</span></code> would have been thrown.
+ </li>
+<li class="listitem">
+ Unary negation of unsigned types results in a compiler error (static
+ assertion).
+ </li>
+<li class="listitem">
+ This backend supports rvalue-references and is move-aware, making instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> on this backend
+ move aware.
+ </li>
+<li class="listitem">
+ 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). Typically this means you can
+ use an integer type wide enough for the "worst case scenario"
+ with only minor performance degradation even if most of the time the
+ arithmetic could in fact be done with a narrower type.
+ </li>
+<li class="listitem">
+ When used at fixed precision and MaxBits is smaller than the number
+ of bits in the largest native integer type, then internally <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code> 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 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.
+ </li>
+<li class="listitem">
+ Fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s
+ have some support for <code class="computeroutput"><span class="keyword">constexpr</span></code>
+ values and user-defined literals, see <a class="link" href="../lits.html" title="Literal Types and constexpr Support">here</a>
+ for the full description. For example <code class="computeroutput"><span class="number">0xfffff</span><span class="identifier">_cppi1024</span></code> specifies a 1024-bit integer
+ with the value 0xffff. This can be used to generate compile time constants
+ that are too large to fit into any built in number type.
+ </li>
+</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>
+ </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_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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="identifier">int128_t</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="comment">// Do some fixed precision arithmetic:</span>
+ <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">1</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">v</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">v</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 20!</span>
+
+ <span class="comment">// Repeat at arbitrary precision:</span>
+ <span class="identifier">cpp_int</span> <span class="identifier">u</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+ <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">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="number">100</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="identifier">u</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">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>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../ints.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html
new file mode 100644
index 0000000000..f53916fe46
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs.html
@@ -0,0 +1,47 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Examples</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="../ints.html" title="Integer Types">
+<link rel="prev" href="tom_int.html" title="tom_int">
+<link rel="next" href="egs/factorials.html" title="Factorials">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tom_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs/factorials.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.ints.egs"></a><a class="link" href="egs.html" title="Examples">Examples</a>
+</h4></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="egs/factorials.html">Factorials</a></span></dt>
+<dt><span class="section"><a href="egs/bitops.html">Bit Operations</a></span></dt>
+</dl></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tom_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs/factorials.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html
new file mode 100644
index 0000000000..7b8cf2d5b8
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/bitops.html
@@ -0,0 +1,95 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Bit Operations</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="../egs.html" title="Examples">
+<link rel="prev" href="factorials.html" title="Factorials">
+<link rel="next" href="../../floats.html" title="Floating Point Numbers">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="factorials.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.ints.egs.bitops"></a><a class="link" href="bitops.html" title="Bit Operations">Bit Operations</a>
+</h5></div></div></div>
+<p>
+ In this example we'll show how individual bits within an integer may
+ 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>
+<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>
+<span class="special">{</span>
+ <span class="identifier">cpp_int</span> <span class="identifier">r</span><span class="special">(</span><span class="number">1</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="special">(</span><span class="identifier">r</span> <span class="special">&lt;&lt;</span> <span class="identifier">n</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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>
+</pre>
+<p>
+ Yields as expected:
+ </p>
+<pre class="programlisting">0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF</pre>
+<p>
+ However, we could equally just set the n'th bit in the result, like this:
+ </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>
+ <span class="keyword">return</span> <span class="special">--</span><span class="identifier">bit_set</span><span class="special">(</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">n</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<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
+ call to <code class="computeroutput"><span class="identifier">b2</span></code> is the same
+ as that to <code class="computeroutput"><span class="identifier">b1</span></code>.
+ </p>
+<p>
+ We can equally test bits, so for example the n'th bit of the result returned
+ from <code class="computeroutput"><span class="identifier">b2</span></code> shouldn't be
+ set unless we increment it first:
+ </p>
+<pre class="programlisting"><span class="identifier">assert</span><span class="special">(!</span><span class="identifier">bit_test</span><span class="special">(</span><span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">),</span> <span class="number">200</span><span class="special">));</span> <span class="comment">// OK</span>
+<span class="identifier">assert</span><span class="special">(</span><span class="identifier">bit_test</span><span class="special">(++</span><span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">),</span> <span class="number">200</span><span class="special">));</span> <span class="comment">// OK</span>
+</pre>
+<p>
+ And of course if we flip the n'th bit after increment, then we should
+ get back to zero:
+ </p>
+<pre class="programlisting"><span class="identifier">assert</span><span class="special">(!</span><span class="identifier">bit_flip</span><span class="special">(++</span><span class="identifier">b1</span><span class="special">(</span><span class="number">200</span><span class="special">),</span> <span class="number">200</span><span class="special">));</span> <span class="comment">// OK</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="factorials.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html
new file mode 100644
index 0000000000..7566f7e4aa
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/egs/factorials.html
@@ -0,0 +1,149 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Factorials</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="../egs.html" title="Examples">
+<link rel="prev" href="../egs.html" title="Examples">
+<link rel="next" href="bitops.html" title="Bit Operations">
+</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"><a href="../../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../egs.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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="bitops.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost_multiprecision.tut.ints.egs.factorials"></a><a class="link" href="factorials.html" title="Factorials">Factorials</a>
+</h5></div></div></div>
+<p>
+ In this simple example, we'll write a routine to print out all of the
+ 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>
+<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>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
+
+
+<span class="keyword">void</span> <span class="identifier">print_factorials</span><span class="special">()</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_int</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Print all the factorials that will fit inside a 128-bit integer.</span>
+ <span class="comment">//</span>
+ <span class="comment">// Begin by building a big table of factorials, once we know just how </span>
+ <span class="comment">// large the largest is, we'll be able to "pretty format" the results.</span>
+ <span class="comment">//</span>
+ <span class="comment">// Calculate the largest number that will fit inside 128 bits, we could</span>
+ <span class="comment">// also have used numeric_limits&lt;int128_t&gt;::max() for this value:</span>
+ <span class="identifier">cpp_int</span> <span class="identifier">limit</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">128</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">;</span>
+ <span class="comment">// </span>
+ <span class="comment">// Our table of values:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">cpp_int</span><span class="special">&gt;</span> <span class="identifier">results</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Initial values:</span>
+ <span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+ <span class="identifier">cpp_int</span> <span class="identifier">factorial</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Cycle through the factorials till we reach the limit:</span>
+ <span class="keyword">while</span><span class="special">(</span><span class="identifier">factorial</span> <span class="special">&lt;</span> <span class="identifier">limit</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">results</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">factorial</span><span class="special">);</span>
+ <span class="special">++</span><span class="identifier">i</span><span class="special">;</span>
+ <span class="identifier">factorial</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="comment">//</span>
+ <span class="comment">// Lets see how many digits the largest factorial was:</span>
+ <span class="keyword">unsigned</span> <span class="identifier">digits</span> <span class="special">=</span> <span class="identifier">results</span><span class="special">.</span><span class="identifier">back</span><span class="special">().</span><span class="identifier">str</span><span class="special">().</span><span class="identifier">size</span><span class="special">();</span>
+ <span class="comment">//</span>
+ <span class="comment">// Now print them out, using right justification, while we're at it</span>
+ <span class="comment">// we'll indicate the limit of each integer type, so begin by defining</span>
+ <span class="comment">// the limits for 16, 32, 64 etc bit integers:</span>
+ <span class="identifier">cpp_int</span> <span class="identifier">limits</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span>
+ <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">16</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span>
+ <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">32</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span>
+ <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">64</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span>
+ <span class="special">(</span><span class="identifier">cpp_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">128</span><span class="special">)</span> <span class="special">-</span> <span class="number">1</span><span class="special">,</span>
+ <span class="special">};</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">bit_counts</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="string">"16"</span><span class="special">,</span> <span class="string">"32"</span><span class="special">,</span> <span class="string">"64"</span><span class="special">,</span> <span class="string">"128"</span> <span class="special">};</span>
+ <span class="keyword">unsigned</span> <span class="identifier">current_limit</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
+ <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">j</span> <span class="special">&lt;</span> <span class="identifier">results</span><span class="special">.</span><span class="identifier">size</span><span class="special">();</span> <span class="special">++</span><span class="identifier">j</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">limits</span><span class="special">[</span><span class="identifier">current_limit</span><span class="special">]</span> <span class="special">&lt;</span> <span class="identifier">results</span><span class="special">[</span><span class="identifier">j</span><span class="special">])</span>
+ <span class="special">{</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">message</span> <span class="special">=</span> <span class="string">"Limit of "</span> <span class="special">+</span> <span class="identifier">bit_counts</span><span class="special">[</span><span class="identifier">current_limit</span><span class="special">]</span> <span class="special">+</span> <span class="string">" bit integers"</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">setfill</span><span class="special">(</span><span class="char">'.'</span><span class="special">)</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">digits</span><span class="special">+</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">right</span> <span class="special">&lt;&lt;</span> <span class="identifier">message</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setfill</span><span class="special">(</span><span class="char">' '</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><span class="identifier">current_limit</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">setw</span><span class="special">(</span><span class="identifier">digits</span> <span class="special">+</span> <span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">right</span> <span class="special">&lt;&lt;</span> <span class="identifier">results</span><span class="special">[</span><span class="identifier">j</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>
+<span class="special">}</span>
+</pre>
+<p>
+ The output from this routine is:
+ </p>
+<pre class="programlisting"> 1
+ 2
+ 6
+ 24
+ 120
+ 720
+ 5040
+ 40320
+................Limit of 16 bit integers
+ 362880
+ 3628800
+ 39916800
+ 479001600
+................Limit of 32 bit integers
+ 6227020800
+ 87178291200
+ 1307674368000
+ 20922789888000
+ 355687428096000
+ 6402373705728000
+ 121645100408832000
+ 2432902008176640000
+................Limit of 64 bit integers
+ 51090942171709440000
+ 1124000727777607680000
+ 25852016738884976640000
+ 620448401733239439360000
+ 15511210043330985984000000
+ 403291461126605635584000000
+ 10888869450418352160768000000
+ 304888344611713860501504000000
+ 8841761993739701954543616000000
+ 265252859812191058636308480000000
+ 8222838654177922817725562880000000
+ 263130836933693530167218012160000000
+ 8683317618811886495518194401280000000
+ 295232799039604140847618609643520000000
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../egs.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../egs.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="bitops.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html
new file mode 100644
index 0000000000..e27cdf7c59
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/gmp_int.html
@@ -0,0 +1,148 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>gmp_int</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="../ints.html" title="Integer Types">
+<link rel="prev" href="cpp_int.html" title="cpp_int">
+<link rel="next" href="tom_int.html" title="tom_int">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="tom_int.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.ints.gmp_int"></a><a class="link" href="gmp_int.html" title="gmp_int">gmp_int</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">gmp</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">class</span> <span class="identifier">gmp_int</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_int</span> <span class="special">&gt;</span> <span class="identifier">mpz_int</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">gmp_int</span></code> back-end is
+ used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">mpz_int</span></code>.
+ It acts as a thin wrapper around the <a href="http://gmplib.org" target="_top">GMP</a>
+ <code class="computeroutput"><span class="identifier">mpz_t</span></code> to provide an integer
+ type that is a drop-in replacement for the native C++ integer types, but
+ with unlimited precision.
+ </p>
+<p>
+ As well as the usual conversions from arithmetic and string types, type
+ <code class="computeroutput"><span class="identifier">mpz_int</span></code> is copy constructible
+ and assignable from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The <a href="http://gmplib.org" target="_top">GMP</a> native types: <code class="computeroutput"><span class="identifier">mpf_t</span></code>, <code class="computeroutput"><span class="identifier">mpz_t</span></code>,
+ <code class="computeroutput"><span class="identifier">mpq_t</span></code>.
+ </li>
+<li class="listitem">
+ Instances of <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code> that are wrappers around those
+ types: <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_float</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>, <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span><span class="special">&gt;</span></code>.
+ </li>
+</ul></div>
+<p>
+ It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpz_t</span></code>
+ via the <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code>
+ member function of <code class="computeroutput"><span class="identifier">gmp_int</span></code>.
+ </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">
+ No changes are made to the GMP library's global settings - so you can
+ safely mix this type with existing code that uses <a href="http://gmplib.org" target="_top">GMP</a>.
+ </li>
+<li class="listitem">
+ Default constructed <code class="computeroutput"><span class="identifier">gmp_int</span></code>s
+ have the value zero (this is GMP's default behavior).
+ </li>
+<li class="listitem">
+ 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 <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">oct</span></code> or <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">hex</span></code>
+ are set, will result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
+ will be thrown.
+ </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 integer.
+ </li>
+<li class="listitem">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </li>
+<li class="listitem">
+ Although this type is a wrapper around <a href="http://gmplib.org" target="_top">GMP</a>
+ it will work equally well with <a href="http://mpir.org/" target="_top">MPIR</a>.
+ Indeed use of <a href="http://mpir.org/" target="_top">MPIR</a> is recommended
+ on Win32.
+ </li>
+<li class="listitem">
+ This backend supports rvalue-references and is move-aware, making instantiations
+ of <code class="computeroutput"><span class="identifier">number</span></code> on this backend
+ move aware.
+ </li>
+</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>
+ </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">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">iostream</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="identifier">mpz_int</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="comment">// Do some arithmetic:</span>
+ <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">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="identifier">v</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">v</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 1000!</span>
+
+ <span class="comment">// Access the underlying representation:</span>
+ <span class="identifier">mpz_t</span> <span class="identifier">z</span><span class="special">;</span>
+ <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>
+ <span class="identifier">mpz_clear</span><span class="special">(</span><span class="identifier">z</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="tom_int.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html
new file mode 100644
index 0000000000..265acbde50
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/ints/tom_int.html
@@ -0,0 +1,134 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>tom_int</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="../ints.html" title="Integer Types">
+<link rel="prev" href="gmp_int.html" title="gmp_int">
+<link rel="next" href="egs.html" title="Examples">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs.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.ints.tom_int"></a><a class="link" href="tom_int.html" title="tom_int">tom_int</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">tommath</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">class</span> <span class="identifier">tommath_int</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">tommath_int</span> <span class="special">&gt;</span> <span class="identifier">tom_int</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">tommath_int</span></code> back-end
+ is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">tom_int</span></code>.
+ It acts as a thin wrapper around the <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>
+ <code class="computeroutput"><span class="identifier">tom_int</span></code> to provide an integer
+ type that is a drop-in replacement for the native C++ integer types, but
+ with unlimited precision.
+ </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 objects have the value zero (this is <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>'s
+ default behavior).
+ </li>
+<li class="listitem">
+ Although <code class="computeroutput"><span class="identifier">tom_int</span></code> is
+ mostly a drop in replacement for the builtin integer types, it should
+ be noted that it is a rather strange beast as it's a signed type that
+ is not a 2's complement type. As a result the bitwise operations <code class="computeroutput"><span class="special">|</span> <span class="special">&amp;</span> <span class="special">^</span></code> will throw a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
+ exception if either of the arguments is negative. Similarly the complement
+ operator<code class="computeroutput"><span class="special">~</span></code> is deliberately
+ not implemented for this type.
+ </li>
+<li class="listitem">
+ 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 <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">oct</span></code> or <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">hex</span></code>
+ are set, will result in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
+ will be thrown.
+ </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 integer.
+ </li>
+<li class="listitem">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </li>
+</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>
+ </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">tommath</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</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">tom_int</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="comment">// Do some arithmetic:</span>
+ <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">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="identifier">v</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">v</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 1000!</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">v</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 1000! in hex format</span>
+
+ <span class="keyword">try</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">hex</span> <span class="special">&lt;&lt;</span> <span class="special">-</span><span class="identifier">v</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">// Ooops! can't print a negative value in hex format!</span>
+ <span class="special">}</span>
+ <span class="keyword">catch</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">&amp;</span> <span class="identifier">e</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">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>
+
+ <span class="keyword">try</span><span class="special">{</span>
+ <span class="comment">// v is not a 2's complement type, bitwise operations are only supported</span>
+ <span class="comment">// on positive values:</span>
+ <span class="identifier">v</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">v</span> <span class="special">&amp;</span> <span class="number">2</span><span class="special">;</span>
+ <span class="special">}</span>
+ <span class="keyword">catch</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">&amp;</span> <span class="identifier">e</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">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>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_int.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ints.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="egs.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html
new file mode 100644
index 0000000000..5cd48aaced
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits.html
@@ -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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html
new file mode 100644
index 0000000000..2a085c9ad8
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/constants.html
@@ -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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></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>
+ <a href="http://en.wikipedia.org/wiki/Rational_number" target="_top">Rational</a>
+ 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 identical 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 <a href="http://en.wikipedia.org/wiki/Denormalization" target="_top">denormalization</a>
+ 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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html
new file mode 100644
index 0000000000..7e8cbc7c67
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/functions.html
@@ -0,0 +1,534 @@
+<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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></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 <a href="http://en.wikipedia.org/wiki/Unit_in_the_last_place" target="_top">ULP</a>)
+ 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 example, 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="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="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>
+<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>
+ <a href="http://en.wikipedia.org/wiki/NaN" target="_top">NaNs</a> 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 <a href="http://en.wikipedia.org/wiki/NaN" target="_top">Not-A-Number</a>
+ 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="comment">// Comparisons of NaN's always fail:</span>
+ <span class="keyword">bool</span> <span class="identifier">b</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">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">b</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">BOOST_CHECK_NE</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">BOOST_CHECK_NE</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="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 <a href="../../../../../../../libs/math/example/nonfinite_facet_sstream.cpp" target="_top">boost:/libs/math/example/nonfinite_facet_sstream.cpp</a>
+ 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">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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html
new file mode 100644
index 0000000000..6efd4f80af
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/how_to_tell.html
@@ -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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></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 essence 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 <a href="http://en.wikipedia.org/wiki/Field_%28mathematics%29" target="_top">field</a>
+ 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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html
new file mode 100644
index 0000000000..40d4570d5d
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/limits/limits32.html
@@ -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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></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 class="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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html
new file mode 100644
index 0000000000..6971ffc88d
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html
@@ -0,0 +1,210 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Literal Types and constexpr 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="primetest.html" title="Primality Testing">
+<link rel="next" href="rounding.html" title="Rounding Rules for Conversions">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="primetest.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="rounding.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.lits"></a><a class="link" href="lits.html" title="Literal Types and constexpr Support">Literal Types and <code class="computeroutput"><span class="keyword">constexpr</span></code> Support</a>
+</h3></div></div></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>
+ 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.
+ </p></td></tr>
+</table></div>
+<p>
+ There is limited support for <code class="computeroutput"><span class="keyword">constexpr</span></code>
+ and user-defined literals in the library, currently the <code class="computeroutput"><span class="identifier">number</span></code>
+ front end supports <code class="computeroutput"><span class="keyword">constexpr</span></code>
+ on default construction and all forwarding constructors, but not on any of
+ the non-member operators. So if some type <code class="computeroutput"><span class="identifier">B</span></code>
+ is a literal type, then <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">B</span><span class="special">&gt;</span></code>
+ is also a literal type, and you will be able to compile-time-construct such
+ a type from any literal that <code class="computeroutput"><span class="identifier">B</span></code>
+ is compile-time-constructible from. However, you will not be able to perform
+ compile-time arithmetic on such types.
+ </p>
+<p>
+ Currently the only backend type provided by the library that is also a literal
+ type are instantiations of <code class="computeroutput"><span class="identifier">cpp_int_backend</span></code>
+ where the Allocator parameter is type <code class="computeroutput"><span class="keyword">void</span></code>,
+ and the Checked parameter is <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">unchecked</span></code>.
+ </p>
+<p>
+ For example:
+ </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">constexpr</span> <span class="identifier">int128_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="comment">// OK, fixed precision int128_t has no allocator.</span>
+<span class="keyword">constexpr</span> <span class="identifier">uint1024_t</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">xFFFFFFFF00000000uLL</span><span class="special">;</span> <span class="comment">// OK, fixed precision uint1024_t has no allocator.</span>
+
+<span class="keyword">constexpr</span> <span class="identifier">checked_uint128_t</span> <span class="identifier">k</span> <span class="special">=</span> <span class="special">-</span><span class="number">1</span><span class="special">;</span> <span class="comment">// Error, checked type is not a literal type as we need runtime error checking.</span>
+<span class="keyword">constexpr</span> <span class="identifier">cpp_int</span> <span class="identifier">l</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> <span class="comment">// Error, type is not a literal as it performs memory management.</span>
+</pre>
+<p>
+ There is also limited support for user defined-literals - these are limited
+ to unchecked, fixed precision <code class="computeroutput"><span class="identifier">cpp_int</span></code>'s
+ which are specified in hexadecimal notation. The suffixes supported are:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Suffix
+ </p>
+ </th>
+<th>
+ <p>
+ Meaning
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ _cppi
+ </p>
+ </td>
+<td>
+ <p>
+ Specifies a value of type: <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">signed_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>,
+ where N is chosen to contain just enough digits to hold the number
+ specified.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ _cppui
+ </p>
+ </td>
+<td>
+ <p>
+ Specifies a value of type: <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">unsigned_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>,
+ where N is chosen to contain just enough digits to hold the number
+ specified.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ _cppi<span class="emphasis"><em>N</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ Specifies a value of type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">signed_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ _cppui<span class="emphasis"><em>N</em></span>
+ </p>
+ </td>
+<td>
+ <p>
+ Specifies a value of type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">N</span><span class="special">,</span><span class="identifier">signed_magnitude</span><span class="special">,</span><span class="identifier">unchecked</span><span class="special">,</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<p>
+ In each case, use of these suffixes with hexadecimal values produces a <code class="computeroutput"><span class="keyword">constexpr</span></code> result.
+ </p>
+<p>
+ Examples:
+ </p>
+<pre class="programlisting"><span class="comment">//</span>
+<span class="comment">// Any use of user defined literals requires that we import the literal-operators</span>
+<span class="comment">// into current scope first:</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="identifier">literals</span><span class="special">;</span>
+<span class="comment">//</span>
+<span class="comment">// To keep things simple in the example, we'll make our types used visible to this scope as well:</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">//</span>
+<span class="comment">// The value zero as a number&lt;cpp_int_backend&lt;4,4,signed_magnitude,unchecked,void&gt; &gt;:</span>
+<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0x0</span><span class="identifier">_cppi</span><span class="special">;</span>
+<span class="comment">// The type of each constant has 4 bits per hexadecimal digit,</span>
+<span class="comment">// so this is of type uint256_t (ie number&lt;cpp_int_backend&lt;256,256,unsigned_magnitude,unchecked,void&gt; &gt;):</span>
+<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui</span><span class="special">;</span>
+<span class="comment">//</span>
+<span class="comment">// Smaller values can be assigned to larger values:</span>
+<span class="identifier">int256_t</span> <span class="identifier">c</span> <span class="special">=</span> <span class="number">0x1234</span><span class="identifier">_cppi</span><span class="special">;</span> <span class="comment">// OK</span>
+<span class="comment">//</span>
+<span class="comment">// However, this does not currently work in constexpr contexts:</span>
+<span class="keyword">constexpr</span> <span class="identifier">int256_t</span> <span class="identifier">d</span> <span class="special">=</span> <span class="number">0x1</span><span class="identifier">_cppi</span><span class="special">;</span> <span class="comment">// Compiler error</span>
+<span class="comment">//</span>
+<span class="comment">// Constants can be padded out with leading zeros to generate wider types:</span>
+<span class="keyword">constexpr</span> <span class="identifier">uint256_t</span> <span class="identifier">e</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">x0000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFF_cppui</span><span class="special">;</span> <span class="comment">// OK</span>
+<span class="comment">//</span>
+<span class="comment">// However, specific width types are best produced with specific-width suffixes,</span>
+<span class="comment">// ones supported by default are `_cpp[u]i128`, `_cpp[u]i256`, `_cpp[u]i512`, `_cpp[u]i1024`.</span>
+<span class="comment">//</span>
+<span class="keyword">constexpr</span> <span class="identifier">int128_t</span> <span class="identifier">f</span> <span class="special">=</span> <span class="number">0x1234</span><span class="identifier">_cppi128</span><span class="special">;</span> <span class="comment">// OK, always produces an int128_t as the result.</span>
+<span class="keyword">constexpr</span> <span class="identifier">uint1024_t</span> <span class="identifier">g</span> <span class="special">=</span> <span class="number">0</span><span class="identifier">xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccc_cppui1024</span><span class="special">;</span>
+<span class="comment">//</span>
+<span class="comment">// If other specific width types are required, then there is a macro for generating the operators</span>
+<span class="comment">// for these. The macro can be used at namespace scope only:</span>
+<span class="comment">//</span>
+<span class="identifier">BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL</span><span class="special">(</span><span class="number">2048</span><span class="special">);</span>
+<span class="comment">//</span>
+<span class="comment">// Now we can create 2048-bit literals as well:</span>
+<span class="keyword">constexpr</span> <span class="keyword">auto</span> <span class="identifier">h</span> <span class="special">=</span> <span class="number">0xff</span><span class="identifier">_cppi2048</span><span class="special">;</span> <span class="comment">// h is of type number&lt;cpp_int_backend&lt;2048,2048,signed_magnitude,unchecked,void&gt; &gt;</span>
+<span class="comment">//</span>
+<span class="comment">// Finally negative values are handled via the unary minus operator:</span>
+<span class="comment">//</span>
+<span class="keyword">constexpr</span> <span class="identifier">int1024_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="special">-</span><span class="number">0</span><span class="identifier">xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui1024</span><span class="special">;</span>
+<span class="comment">//</span>
+<span class="comment">// Which means this also works:</span>
+<span class="keyword">constexpr</span> <span class="identifier">int1024_t</span> <span class="identifier">j</span> <span class="special">=</span> <span class="special">-</span><span class="identifier">g</span><span class="special">;</span> <span class="comment">// OK: unary minus operator is constexpr.</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="primetest.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="rounding.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html
new file mode 100644
index 0000000000..7438ba6ea1
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc.html
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Miscellaneous Number Types.</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="rational/rational_adaptor.html" title="rational_adaptor">
+<link rel="next" href="misc/logged_adaptor.html" title="logged_adaptor">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rational/rational_adaptor.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="misc/logged_adaptor.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.misc"></a><a class="link" href="misc.html" title="Miscellaneous Number Types.">Miscellaneous Number Types.</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="misc/logged_adaptor.html">logged_adaptor</a></span></dt>
+<dt><span class="section"><a href="misc/debug_adaptor.html">debug_adaptor</a></span></dt>
+<dt><span class="section"><a href="misc/visualizers.html">Visual C++
+ Debugger Visualizers</a></span></dt>
+</dl></div>
+<p>
+ Backend types listed in this section are predominantly designed to aid debugging.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rational/rational_adaptor.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="misc/logged_adaptor.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html
new file mode 100644
index 0000000000..5b7f0c3972
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/debug_adaptor.html
@@ -0,0 +1,99 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>debug_adaptor</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="../misc.html" title="Miscellaneous Number Types.">
+<link rel="prev" href="logged_adaptor.html" title="logged_adaptor">
+<link rel="next" href="visualizers.html" title="Visual C++ Debugger Visualizers">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="logged_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="visualizers.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.misc.debug_adaptor"></a><a class="link" href="debug_adaptor.html" title="debug_adaptor">debug_adaptor</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">debug_adaptor</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">template</span> <span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">debug_adaptor</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">debug_adaptor</span></code> type
+ is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>
+ and some other backend type: it acts as a thin wrapper around some other
+ backend to class <code class="computeroutput"><span class="identifier">number</span></code>
+ and intercepts all operations on that object storing the result as a string
+ within itself.
+ </p>
+<p>
+ This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support whenever the template argument Backend does so.
+ </p>
+<p>
+ This type is particularly useful when your debugger provides a good view
+ of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span></code>: when this is the case multiprecision
+ values can easily be inspected in the debugger by looking at the <code class="computeroutput"><span class="identifier">debug_value</span></code> member of <code class="computeroutput"><span class="identifier">debug_adaptor</span></code>.
+ The down side of this approach is that runtimes are much slower when using
+ this type. Set against that it can make debugging very much easier, certainly
+ much easier than sprinkling code with <code class="computeroutput"><span class="identifier">printf</span></code>
+ statements.
+ </p>
+<p>
+ When used in conjunction with the Visual C++ debugger visualisers, the
+ value of a multiprecision type that uses this backend is displayed in the
+ debugger just a builtin value would be, here we're inspecting a value of
+ type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">debug_adaptor</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="special">&gt;</span></code>:
+ </p>
+<p>
+ <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"></span>
+ </p>
+<p>
+ It works for all the backend types equally too, here it is inspecting a
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">debug_adaptor</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span></code>:
+ </p>
+<p>
+ <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-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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="logged_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="visualizers.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html
new file mode 100644
index 0000000000..91b44abd6f
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adapter.html
@@ -0,0 +1,223 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>logged_adaptor</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../misc.html" title="Miscellaneous Number Types.">
+<link rel="prev" href="../misc.html" title="Miscellaneous Number Types.">
+<link rel="next" href="../conversions.html" title="Constructing and Interconverting Between Number Types">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section boost_multiprecision_tut_misc_logged_adaptor">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.misc.logged_adaptor"></a><a class="link" href="logged_adaptor.html" title="logged_adaptor">logged_adaptor</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">logged_adaptor</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">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">result1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">result2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&amp;</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">V</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&amp;</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">V</span><span class="special">&amp;</span> <span class="identifier">arg4</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">logged_adaptor</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">logged_adaptor</span></code> type
+ is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>
+ and some other backend type: it acts as a thin wrapper around some other
+ backend to class <code class="computeroutput"><span class="identifier">number</span></code>
+ and logs all the events that take place on that object. Before any number
+ operation takes place, it calls <code class="computeroutput"><span class="identifier">log_prefix_event</span></code>
+ with the arguments to the operation (up to 4), plus a string describing
+ the operation. Then after the operation it calls <code class="computeroutput"><span class="identifier">log_postfix_event</span></code>
+ with the result of the operation, plus a string describing the operation.
+ Optionally, <code class="computeroutput"><span class="identifier">log_postfix_event</span></code>
+ takes a second result argument: this occurs when the result of the operation
+ is not a <code class="computeroutput"><span class="identifier">number</span></code>, for example
+ when <code class="computeroutput"><span class="identifier">fpclassify</span></code> is called,
+ <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> will
+ be called with <code class="computeroutput"><span class="identifier">result1</span></code>
+ being the argument to the function, and <code class="computeroutput"><span class="identifier">result2</span></code>
+ being the integer result of <code class="computeroutput"><span class="identifier">fpclassify</span></code>.
+ </p>
+<p>
+ The default versions of <code class="computeroutput"><span class="identifier">log_prefix_event</span></code>
+ and <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> do
+ nothing, it is therefore up to the user to overload these for the particular
+ backend being observed.
+ </p>
+<p>
+ This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support whenever the template argument Backend does so.
+ </p>
+<p>
+ This type is particularly useful when combined with an interval number
+ type - in this case we can use <code class="computeroutput"><span class="identifier">log_postfix_event</span></code>
+ to monitor the error accumulated after each operation. We could either
+ set some kind of trap whenever the accumulated error exceeds some threshold,
+ or simply print out diagnostic information. Using this technique we can
+ quickly locate the cause of numerical instability in a particular routine.
+ 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>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
+<span class="comment">//</span>
+<span class="comment">// Begin by overloading log_postfix_event so we can capture each arithmetic event as it happens:</span>
+<span class="comment">//</span>
+<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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// Print out the (relative) diameter of the interval:</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="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">diam</span><span class="special">;</span>
+ <span class="identifier">mpfi_diam</span><span class="special">(</span><span class="identifier">diam</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">val</span><span class="special">.</span><span class="identifier">data</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">"Diameter was "</span> <span class="special">&lt;&lt;</span> <span class="identifier">diam</span> <span class="special">&lt;&lt;</span> <span class="string">" after operation: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">event_description</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>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// This version is never called in this example.</span>
+<span class="special">}</span>
+
+<span class="special">}}</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">logged_adaptor</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="number">17</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">logged_type</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Test case deliberately introduces cancellation error, relative size of interval</span>
+ <span class="comment">// gradually gets larger after each operation:</span>
+ <span class="comment">//</span>
+ <span class="identifier">logged_type</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+ <span class="identifier">a</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span>
+
+ <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">13</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">logged_type</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="number">9</span><span class="special">;</span>
+ <span class="identifier">b</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span>
+ <span class="identifier">a</span> <span class="special">-=</span> <span class="identifier">b</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">"Final value was: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">a</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">return</span> <span class="number">0</span><span class="special">;</span>
+<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>
+<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">7.70988e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.63735e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.38537e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54863e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84221e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19966e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<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>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html
new file mode 100644
index 0000000000..278e2ab068
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/logged_adaptor.html
@@ -0,0 +1,215 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>logged_adaptor</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="../misc.html" title="Miscellaneous Number Types.">
+<link rel="prev" href="../misc.html" title="Miscellaneous Number Types.">
+<link rel="next" href="debug_adaptor.html" title="debug_adaptor">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="debug_adaptor.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.misc.logged_adaptor"></a><a class="link" href="logged_adaptor.html" title="logged_adaptor">logged_adaptor</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">logged_adaptor</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">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">result1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">result2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&amp;</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">V</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">log_prefix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Backend</span><span class="special">&amp;</span> <span class="identifier">arg1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">arg2</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">U</span><span class="special">&amp;</span> <span class="identifier">arg3</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">V</span><span class="special">&amp;</span> <span class="identifier">arg4</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">logged_adaptor</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">logged_adaptor</span></code> type
+ is used in conjunction with <code class="computeroutput"><span class="identifier">number</span></code>
+ and some other backend type: it acts as a thin wrapper around some other
+ backend to class <code class="computeroutput"><span class="identifier">number</span></code>
+ and logs all the events that take place on that object. Before any number
+ operation takes place, it calls <code class="computeroutput"><span class="identifier">log_prefix_event</span></code>
+ with the arguments to the operation (up to 4), plus a string describing
+ the operation. Then after the operation it calls <code class="computeroutput"><span class="identifier">log_postfix_event</span></code>
+ with the result of the operation, plus a string describing the operation.
+ Optionally, <code class="computeroutput"><span class="identifier">log_postfix_event</span></code>
+ takes a second result argument: this occurs when the result of the operation
+ is not a <code class="computeroutput"><span class="identifier">number</span></code>, for example
+ when <code class="computeroutput"><span class="identifier">fpclassify</span></code> is called,
+ <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> will
+ be called with <code class="computeroutput"><span class="identifier">result1</span></code>
+ being the argument to the function, and <code class="computeroutput"><span class="identifier">result2</span></code>
+ being the integer result of <code class="computeroutput"><span class="identifier">fpclassify</span></code>.
+ </p>
+<p>
+ The default versions of <code class="computeroutput"><span class="identifier">log_prefix_event</span></code>
+ and <code class="computeroutput"><span class="identifier">log_postfix_event</span></code> do
+ nothing, it is therefore up to the user to overload these for the particular
+ backend being observed.
+ </p>
+<p>
+ This type provides <code class="computeroutput"><span class="identifier">numeric_limits</span></code>
+ support whenever the template argument Backend does so.
+ </p>
+<p>
+ This type is particularly useful when combined with an interval number
+ type - in this case we can use <code class="computeroutput"><span class="identifier">log_postfix_event</span></code>
+ to monitor the error accumulated after each operation. We could either
+ set some kind of trap whenever the accumulated error exceeds some threshold,
+ or simply print out diagnostic information. Using this technique we can
+ quickly locate the cause of numerical instability in a particular routine.
+ The following example demonstrates this technique in a trivial algorithm
+ that deliberately introduces cancellation error:
+ </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>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
+<span class="comment">//</span>
+<span class="comment">// Begin by overloading log_postfix_event so we can capture each arithmetic event as it happens:</span>
+<span class="comment">//</span>
+<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">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;&amp;</span> <span class="identifier">val</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// Print out the (relative) diameter of the interval:</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="identifier">number</span><span class="special">&lt;</span><span class="identifier">mpfr_float_backend</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">diam</span><span class="special">;</span>
+ <span class="identifier">mpfi_diam</span><span class="special">(</span><span class="identifier">diam</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">val</span><span class="special">.</span><span class="identifier">data</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">"Diameter was "</span> <span class="special">&lt;&lt;</span> <span class="identifier">diam</span> <span class="special">&lt;&lt;</span> <span class="string">" after operation: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">event_description</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>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">unsigned</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">inline</span> <span class="keyword">void</span> <span class="identifier">log_postfix_event</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">event_description</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="comment">// This version is never called in this example.</span>
+<span class="special">}</span>
+
+<span class="special">}}</span>
+
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">logged_adaptor</span><span class="special">&lt;</span><span class="identifier">mpfi_float_backend</span><span class="special">&lt;</span><span class="number">17</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">logged_type</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Test case deliberately introduces cancellation error, relative size of interval</span>
+ <span class="comment">// gradually gets larger after each operation:</span>
+ <span class="comment">//</span>
+ <span class="identifier">logged_type</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+ <span class="identifier">a</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span>
+
+ <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">13</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">logged_type</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="number">9</span><span class="special">;</span>
+ <span class="identifier">b</span> <span class="special">/=</span> <span class="number">10</span><span class="special">;</span>
+ <span class="identifier">a</span> <span class="special">-=</span> <span class="identifier">b</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">"Final value was: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">a</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">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ When we examine program output we can clearly see that the diameter of
+ the interval increases after each subtraction:
+ </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>
+<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">7.70988e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.63735e-18</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">1.30104e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.38537e-16</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">2.54788e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.54863e-15</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">4.84164e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.84221e-14</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">9.19962e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">9.19966e-13</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.74793e-11</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">3.32107e-10</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">6.31003e-09</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">1.19891e-07</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">2.27792e-06</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">4.32805e-05</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.00082233</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">-=</span>
+<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.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">*</span>
+<span class="identifier">Diameter</span> <span class="identifier">was</span> <span class="number">0.0156243</span> <span class="identifier">after</span> <span class="identifier">operation</span><span class="special">:</span> <span class="special">/=</span>
+<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>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../misc.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="debug_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html
new file mode 100644
index 0000000000..8b77d657b3
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/misc/visualizers.html
@@ -0,0 +1,106 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Visual C++ Debugger Visualizers</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="../misc.html" title="Miscellaneous Number Types.">
+<link rel="prev" href="debug_adaptor.html" title="debug_adaptor">
+<link rel="next" href="../conversions.html" title="Constructing and Interconverting Between Number Types">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.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.misc.visualizers"></a><a class="link" href="visualizers.html" title="Visual C++ Debugger Visualizers">Visual C++
+ Debugger Visualizers</a>
+</h4></div></div></div>
+<p>
+ 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 <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>
+ directory of your Visual Studio installation. The actual visualizer code
+ is in the sandbox <a href="https://svn.boost.org/svn/boost/sandbox/boost_docs/subprojects/DebuggerVisualizers/multiprecision.vis.txt" target="_top">here</a>
+ - 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>
+ file.
+ </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>
+ These visualizers have only been tested with VC10, also given the ability
+ of buggy visualizers to crash your Visual C++ debugger, make sure you
+ back up <code class="computeroutput"><span class="identifier">autoexp</span><span class="special">.</span><span class="identifier">dat</span></code> file before using these!!
+ </p></td></tr>
+</table></div>
+<p>
+ 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"></span>
+ </p>
+<p>
+ 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.
+ </p>
+<p>
+ Here's what it looks like for small values:
+ </p>
+<p>
+ <span class="inlinemediaobject"><img src="../../../../debugger4.png"></span>
+ </p>
+<p>
+ And for larger values:
+ </p>
+<p>
+ <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"></span>
+ </p>
+<p>
+ The visualizer for <code class="computeroutput"><span class="identifier">cpp_dec_float</span></code>
+ shows the first few digits of the value in the preview field, and the full
+ array of digits when you expand the view. As before the <code class="computeroutput"><span class="special">~</span><span class="identifier">raw</span></code> child gives you access to the actual
+ data members:
+ </p>
+<p>
+ <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-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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="debug_adaptor.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../misc.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="../conversions.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html
new file mode 100644
index 0000000000..4eb40a8c7f
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/mixed.html
@@ -0,0 +1,177 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Mixed Precision Arithmetic</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="rounding.html" title="Rounding Rules for Conversions">
+<link rel="next" href="gen_int.html" title="Generic Integer Operations">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rounding.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="gen_int.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.mixed"></a><a class="link" href="mixed.html" title="Mixed Precision Arithmetic">Mixed Precision Arithmetic</a>
+</h3></div></div></div>
+<p>
+ Mixed precision arithmetic is fully supported by the library.
+ </p>
+<p>
+ There are two different forms:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Where the operands are of different precision.
+ </li>
+<li class="listitem">
+ Where the operands are of the same precision, but yield a higher precision
+ result.
+ </li>
+</ul></div>
+<h5>
+<a name="boost_multiprecision.tut.mixed.h0"></a>
+ <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>
+ If the arguments to a binary operator are of different precision, then the
+ operation is allowed as long as there is an unambiguous implicit conversion
+ from one argument type to the other. In all cases the arithmetic is performed
+ "as if" the lower precision type is promoted to the higher precision
+ type before applying the operator. However, particular backends may optimise
+ this and avoid actually creating a temporary if they are able to do so.
+ </p>
+<p>
+ For example:
+ </p>
+<pre class="programlisting"><span class="identifier">mpfr_float_50</span> <span class="identifier">a</span><span class="special">(</span><span class="number">2</span><span class="special">),</span> <span class="identifier">b</span><span class="special">;</span>
+<span class="identifier">mpfr_float_100</span> <span class="identifier">c</span><span class="special">(</span><span class="number">3</span><span class="special">),</span> <span class="identifier">d</span><span class="special">;</span>
+<span class="identifier">static_mpfr_float_50</span> <span class="identifier">e</span><span class="special">(</span><span class="number">5</span><span class="special">),</span> <span class="identifier">f</span><span class="special">;</span>
+<span class="identifier">mpz_int</span> <span class="identifier">i</span><span class="special">(</span><span class="number">20</span><span class="special">);</span>
+
+<span class="identifier">d</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// OK, result of operand is an mpfr_float_100.</span>
+<span class="identifier">b</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">c</span><span class="special">;</span> <span class="comment">// Error, can't convert the result to an mpfr_float_50 as it will lose digits.</span>
+<span class="identifier">f</span> <span class="special">=</span> <span class="identifier">a</span> <span class="special">*</span> <span class="identifier">e</span><span class="special">;</span> <span class="comment">// Error, operator is ambiguous, result could be of either type.</span>
+<span class="identifier">f</span> <span class="special">=</span> <span class="identifier">e</span> <span class="special">*</span> <span class="identifier">i</span><span class="special">;</span> <span class="comment">// OK, unambiguous conversion from mpz_int to static_mpfr_float_50</span>
+</pre>
+<h5>
+<a name="boost_multiprecision.tut.mixed.h1"></a>
+ <span class="phrase"><a name="boost_multiprecision.tut.mixed.operands_of_the_same_precision"></a></span><a class="link" href="mixed.html#boost_multiprecision.tut.mixed.operands_of_the_same_precision">Operands
+ of the Same Precision</a>
+ </h5>
+<p>
+ 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 free functions:
+ </p>
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">add</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">subtract</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+
+<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>
+<span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">multiply</span><span class="special">(</span><span class="identifier">ResultType</span><span class="special">&amp;</span> <span class="identifier">result</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source1</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Source2</span><span class="special">&amp;</span> <span class="identifier">b</span><span class="special">);</span>
+</pre>
+<p>
+ These functions apply the named operator to the arguments <span class="emphasis"><em>a</em></span>
+ and <span class="emphasis"><em>b</em></span> and store the result in <span class="emphasis"><em>result</em></span>,
+ returning <span class="emphasis"><em>result</em></span>. In all cases they behave "as
+ if" arguments <span class="emphasis"><em>a</em></span> and <span class="emphasis"><em>b</em></span> were
+ first promoted to type <code class="computeroutput"><span class="identifier">ResultType</span></code>
+ before applying the operator, though particular backends may well avoid that
+ step by way of an optimization.
+ </p>
+<p>
+ The type <code class="computeroutput"><span class="identifier">ResultType</span></code> must
+ be an instance of class <code class="computeroutput"><span class="identifier">number</span></code>,
+ and the types <code class="computeroutput"><span class="identifier">Source1</span></code> and
+ <code class="computeroutput"><span class="identifier">Source2</span></code> may be either instances
+ of class <code class="computeroutput"><span class="identifier">number</span></code> or native
+ integer types. The latter is an optimization that allows arithmetic to be
+ performed on native integer types producing an extended precision result.
+ </p>
+<p>
+ For example:
+ </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">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="identifier">boost</span><span class="special">::</span><span class="identifier">uint64_t</span> <span class="identifier">i</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">boost</span><span class="special">::</span><span class="identifier">uint64_t</span><span class="special">&gt;::</span><span class="identifier">max</span><span class="special">)();</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">uint64_t</span> <span class="identifier">j</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="identifier">uint128_t</span> <span class="identifier">ui128</span><span class="special">;</span>
+ <span class="identifier">uint256_t</span> <span class="identifier">ui256</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Start by performing arithmetic on 64-bit integers to yield 128-bit results:</span>
+ <span class="comment">//</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>
+ <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">add</span><span class="special">(</span><span class="identifier">ui128</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">j</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">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">ui128</span><span class="special">,</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">i</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">//</span>
+ <span class="comment">// The try squaring a 128-bit integer to yield a 256-bit result:</span>
+ <span class="comment">//</span>
+ <span class="identifier">ui128</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">uint128_t</span><span class="special">&gt;::</span><span class="identifier">max</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">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>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Produces the output:
+ </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>
+<h5>
+<a name="boost_multiprecision.tut.mixed.h2"></a>
+ <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>
+ 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, than it is to explicitly cast the operands
+ to the result type:
+ </p>
+<p>
+ <a class="link" href="floats/mpfr_float.html" title="mpfr_float">mpfr_float</a>,
+ <a class="link" href="floats/gmp_float.html" title="gmp_float">gmp_float</a>,
+ <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>.
+ </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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rounding.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="gen_int.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html
new file mode 100644
index 0000000000..a4186e6bb4
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/primetest.html
@@ -0,0 +1,116 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Primality Testing</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="random.html" title="Generating Random Numbers">
+<link rel="next" href="lits.html" title="Literal Types and constexpr Support">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="random.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="lits.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.primetest"></a><a class="link" href="primetest.html" title="Primality Testing">Primality Testing</a>
+</h3></div></div></div>
+<p>
+ The library implements a Miller-Rabin test for primality:
+ </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">miller_rabin</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">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="identifier">Engine</span><span class="special">&amp;</span> <span class="identifier">gen</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">expression_template_option</span> <span class="identifier">ExpressionTemplates</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Engine</span><span class="special">&gt;</span>
+<span class="keyword">bool</span> <span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">Backend</span><span class="special">,</span> <span class="identifier">ExpressionTemplates</span><span class="special">&gt;&amp;</span> <span class="identifier">n</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">);</span>
+</pre>
+<p>
+ These functions perform a Miller-Rabin test for primality, if the result
+ is <code class="computeroutput"><span class="keyword">false</span></code> then <span class="emphasis"><em>n</em></span>
+ is definitely composite, while if the result is true then n is probably prime.
+ The probability to declare a composite n as probable prime is at most 0.25<sup>trials</sup>.
+ Note that this does not allow a statement about the probability of n being
+ actually prime (for that, the prior probability would have to be known).
+ The algorithm used performs some trial divisions to exclude small prime factors,
+ does one Fermat test to exclude many more composites, and then uses the Miller-Rabin
+ algorithm straight out of Knuth Vol 2, which recommends 25 trials for a pretty
+ strong likelihood that <span class="emphasis"><em>n</em></span> is prime.
+ </p>
+<p>
+ The third optional argument is for a Uniform Random Number Generator from
+ Boost.Random. When not provided the <code class="computeroutput"><span class="identifier">mt19937</span></code>
+ 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 <code class="computeroutput"><span class="identifier">miller_rabin_test</span></code>
+ for determining whether the value is prime. It also helps of course to seed
+ the generators with some source of randomness.
+ </p>
+<p>
+ 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>
+<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>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</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="keyword">typedef</span> <span class="identifier">cpp_int</span> <span class="identifier">int_type</span><span class="special">;</span>
+ <span class="identifier">mt11213b</span> <span class="identifier">base_gen</span><span class="special">(</span><span class="identifier">clock</span><span class="special">());</span>
+ <span class="identifier">independent_bits_engine</span><span class="special">&lt;</span><span class="identifier">mt11213b</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">int_type</span><span class="special">&gt;</span> <span class="identifier">gen</span><span class="special">(</span><span class="identifier">base_gen</span><span class="special">);</span>
+ <span class="comment">//</span>
+ <span class="comment">// We must use a different generator for the tests and number generation, otherwise</span>
+ <span class="comment">// we get false positives.</span>
+ <span class="comment">//</span>
+ <span class="identifier">mt19937</span> <span class="identifier">gen2</span><span class="special">(</span><span class="identifier">clock</span><span class="special">());</span>
+
+ <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">100000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="special">{</span>
+ <span class="identifier">int_type</span> <span class="identifier">n</span> <span class="special">=</span> <span class="identifier">gen</span><span class="special">();</span>
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">miller_rabin_test</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="number">25</span><span class="special">,</span> <span class="identifier">gen2</span><span class="special">))</span>
+ <span class="special">{</span>
+ <span class="comment">// Value n is probably prime, see if (n-1)/2 is also prime:</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"We have a probable prime with value: "</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">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="keyword">if</span><span class="special">(</span><span class="identifier">miller_rabin_test</span><span class="special">((</span><span class="identifier">n</span><span class="special">-</span><span class="number">1</span><span class="special">)/</span><span class="number">2</span><span class="special">,</span> <span class="number">25</span><span class="special">,</span> <span class="identifier">gen2</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">"We have a safe prime with value: "</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">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="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+ <span class="special">}</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">"Ooops, no safe primes were found"</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">return</span> <span class="number">1</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="random.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="lits.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html
new file mode 100644
index 0000000000..fa113f9669
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/random.html
@@ -0,0 +1,167 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Generating Random Numbers</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="conversions.html" title="Constructing and Interconverting Between Number Types">
+<link rel="next" href="primetest.html" title="Primality Testing">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="conversions.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="primetest.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.random"></a><a class="link" href="random.html" title="Generating Random Numbers">Generating Random Numbers</a>
+</h3></div></div></div>
+<p>
+ Random numbers are generated in conjunction with Boost.Random. However, since
+ Boost.Random is unaware of <a href="http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic" target="_top">arbitrary
+ precision</a> numbers, it's necessary to include the header:
+ </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">random</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+</pre>
+<p>
+ In order to act as a bridge between the two libraries.
+ </p>
+<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>
+<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>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span>
+
+ <span class="comment">//</span>
+ <span class="comment">// Declare our random number generator type, the underlying generator</span>
+ <span class="comment">// is the Mersenne twister mt19937 engine, and 256 bits are generated:</span>
+ <span class="comment">//</span>
+ <span class="keyword">typedef</span> <span class="identifier">independent_bits_engine</span><span class="special">&lt;</span><span class="identifier">mt19937</span><span class="special">,</span> <span class="number">256</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">&gt;</span> <span class="identifier">generator_type</span><span class="special">;</span>
+ <span class="identifier">generator_type</span> <span class="identifier">gen</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Generate some values:</span>
+ <span class="comment">//</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">;</span>
+ <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">10</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">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>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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>
+<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>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span>
+
+ <span class="comment">//</span>
+ <span class="comment">// Generate integers in a given range using uniform_int,</span>
+ <span class="comment">// the underlying generator is invoked multiple times</span>
+ <span class="comment">// to generate enough bits:</span>
+ <span class="comment">//</span>
+ <span class="identifier">mt19937</span> <span class="identifier">mt</span><span class="special">;</span>
+ <span class="identifier">uniform_int_distribution</span><span class="special">&lt;</span><span class="identifier">mpz_int</span><span class="special">&gt;</span> <span class="identifier">ui</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">256</span><span class="special">);</span>
+ <span class="comment">//</span>
+ <span class="comment">// Generate the numbers:</span>
+ <span class="comment">//</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">;</span>
+ <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">10</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">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>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<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>
+<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>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// We need an underlying generator with at least as many bits as the</span>
+ <span class="comment">// floating point type to generate numbers in [0, 1) with all the bits</span>
+ <span class="comment">// in the floating point type randomly filled:</span>
+ <span class="comment">//</span>
+ <span class="identifier">uniform_01</span><span class="special">&lt;</span><span class="identifier">mpf_float_50</span><span class="special">&gt;</span> <span class="identifier">uf</span><span class="special">;</span>
+ <span class="identifier">independent_bits_engine</span><span class="special">&lt;</span><span class="identifier">mt19937</span><span class="special">,</span> <span class="number">50L</span><span class="special">*</span><span class="number">1000L</span><span class="special">/</span><span class="number">301L</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">&gt;</span> <span class="identifier">gen</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Generate the values:</span>
+ <span class="comment">//</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="number">50</span><span class="special">);</span>
+ <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">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>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Finally, we can modify the above example to produce numbers distributed according
+ to some distribution:
+ </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>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">random</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// We can repeat the above example, with other distributions:</span>
+ <span class="comment">//</span>
+ <span class="identifier">uniform_real_distribution</span><span class="special">&lt;</span><span class="identifier">mpf_float_50</span><span class="special">&gt;</span> <span class="identifier">ur</span><span class="special">(-</span><span class="number">20</span><span class="special">,</span> <span class="number">20</span><span class="special">);</span>
+ <span class="identifier">gamma_distribution</span><span class="special">&lt;</span><span class="identifier">mpf_float_50</span><span class="special">&gt;</span> <span class="identifier">gd</span><span class="special">(</span><span class="number">20</span><span class="special">);</span>
+ <span class="identifier">independent_bits_engine</span><span class="special">&lt;</span><span class="identifier">mt19937</span><span class="special">,</span> <span class="number">50L</span><span class="special">*</span><span class="number">1000L</span><span class="special">/</span><span class="number">301L</span><span class="special">,</span> <span class="identifier">mpz_int</span><span class="special">&gt;</span> <span class="identifier">gen</span><span class="special">;</span>
+ <span class="comment">//</span>
+ <span class="comment">// Generate some values:</span>
+ <span class="comment">//</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="number">50</span><span class="special">);</span>
+ <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">ur</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>
+ <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>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="conversions.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="primetest.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html
new file mode 100644
index 0000000000..f29486d993
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational.html
@@ -0,0 +1,261 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Rational Number Types</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="interval/mpfi.html" title="mpfi_float">
+<link rel="next" href="rational/cpp_rational.html" title="cpp_rational">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="interval/mpfi.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="rational/cpp_rational.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.rational"></a><a class="link" href="rational.html" title="Rational Number Types">Rational Number Types</a>
+</h3></div></div></div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="rational/cpp_rational.html">cpp_rational</a></span></dt>
+<dt><span class="section"><a href="rational/gmp_rational.html">gmp_rational</a></span></dt>
+<dt><span class="section"><a href="rational/tommath_rational.html">tommath_rational</a></span></dt>
+<dt><span class="section"><a href="rational/br.html">Use With Boost.Rational</a></span></dt>
+<dt><span class="section"><a href="rational/rational_adaptor.html">rational_adaptor</a></span></dt>
+</dl></div>
+<p>
+ The following back-ends provide rational number arithmetic:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend Type
+ </p>
+ </th>
+<th>
+ <p>
+ Header
+ </p>
+ </th>
+<th>
+ <p>
+ Radix
+ </p>
+ </th>
+<th>
+ <p>
+ Dependencies
+ </p>
+ </th>
+<th>
+ <p>
+ Pros
+ </p>
+ </th>
+<th>
+ <p>
+ Cons
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">cpp_rational</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/cpp_int.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ An all C++ Boost-licensed implementation.
+ </p>
+ </td>
+<td>
+ <p>
+ Slower than <a href="http://gmplib.org" target="_top">GMP</a>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">gmp_rational</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/gmp.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ <a href="http://gmplib.org" target="_top">GMP</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Very fast and efficient back-end.
+ </p>
+ </td>
+<td>
+ <p>
+ Dependency on GNU licensed <a href="http://gmplib.org" target="_top">GMP</a>
+ library.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">tommath_rational</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/tommath.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ 2
+ </p>
+ </td>
+<td>
+ <p>
+ <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>
+ </p>
+ </td>
+<td>
+ <p>
+ All C/C++ implementation that's Boost Software Licence compatible.
+ </p>
+ </td>
+<td>
+ <p>
+ Slower than <a href="http://gmplib.org" target="_top">GMP</a>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">rational_adaptor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/multiprecision/rational_adaptor.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+<td>
+ <p>
+ none
+ </p>
+ </td>
+<td>
+ <p>
+ All C++ adaptor that allows any integer back-end type to be used
+ as a rational type.
+ </p>
+ </td>
+<td>
+ <p>
+ Requires an underlying integer back-end type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ boost/rational.hpp
+ </p>
+ </td>
+<td>
+ <p>
+ N/A
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ A C++ rational number type that can used with any <code class="computeroutput"><span class="identifier">number</span></code> integer type.
+ </p>
+ </td>
+<td>
+ <p>
+ The expression templates used by <code class="computeroutput"><span class="identifier">number</span></code>
+ end up being "hidden" inside <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span></code>:
+ performance may well suffer as a result.
+ </p>
+ </td>
+</tr>
+</tbody>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="interval/mpfi.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="rational/cpp_rational.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html
new file mode 100644
index 0000000000..2f331f6f9b
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/br.html
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Use With Boost.Rational</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="../rational.html" title="Rational Number Types">
+<link rel="prev" href="tommath_rational.html" title="tommath_rational">
+<link rel="next" href="rational_adaptor.html" title="rational_adaptor">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tommath_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="rational_adaptor.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.rational.br"></a><a class="link" href="br.html" title="Use With Boost.Rational">Use With Boost.Rational</a>
+</h4></div></div></div>
+<p>
+ All of the integer types in this library can be used as template arguments
+ to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span><span class="special">&lt;</span><span class="identifier">IntType</span><span class="special">&gt;</span></code>.
+ </p>
+<p>
+ Note that using the library in this way largely negates the effect of the
+ expression templates in <code class="computeroutput"><span class="identifier">number</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tommath_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="rational_adaptor.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html
new file mode 100644
index 0000000000..6a5756867a
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/cpp_rational.html
@@ -0,0 +1,123 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>cpp_rational</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="../rational.html" title="Rational Number Types">
+<link rel="prev" href="../rational.html" title="Rational Number Types">
+<link rel="next" href="gmp_rational.html" title="gmp_rational">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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_rational.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.rational.cpp_rational"></a><a class="link" href="cpp_rational.html" title="cpp_rational">cpp_rational</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_int</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">typedef</span> <span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">cpp_int_backend</span><span class="special">&lt;&gt;</span> <span class="special">&gt;</span> <span class="identifier">cpp_rational_backend</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">cpp_rational_backend</span><span class="special">&gt;</span> <span class="identifier">cpp_rational</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">cpp_rational_backend</span></code>
+ type is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">cpp_rational</span></code>.
+ It provides a rational number type that is a drop-in replacement for the
+ native C++ number types, but with unlimited precision.
+ </p>
+<p>
+ As well as the usual conversions from arithmetic and string types, instances
+ of <code class="computeroutput"><span class="identifier">cpp_rational</span></code> are copy
+ constructible and assignable from type <code class="computeroutput"><span class="identifier">cpp_int</span></code>.
+ </p>
+<p>
+ There is also a two argument constructor that accepts a numerator and denominator:
+ both of type <code class="computeroutput"><span class="identifier">cpp_int</span></code>.
+ </p>
+<p>
+ There are also non-member functions:
+ </p>
+<pre class="programlisting"><span class="identifier">cpp_int</span> <span class="identifier">numerator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">cpp_rational</span><span class="special">&amp;);</span>
+<span class="identifier">cpp_int</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">cpp_rational</span><span class="special">&amp;);</span>
+</pre>
+<p>
+ which return the numerator and denominator of the number.
+ </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_rational</span></code>s
+ have the value zero.
+ </li>
+<li class="listitem">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </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 rational
+ number.
+ </li>
+</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>
+ </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_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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="identifier">cpp_rational</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="comment">// Do some arithmetic:</span>
+ <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">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span>
+ <span class="identifier">v</span> <span class="special">/=</span> <span class="number">10</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">v</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 1000! / 10</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">v</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">denominator</span><span class="special">(</span><span class="identifier">v</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">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>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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_rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html
new file mode 100644
index 0000000000..6800cc4264
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/gmp_rational.html
@@ -0,0 +1,156 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>gmp_rational</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="../rational.html" title="Rational Number Types">
+<link rel="prev" href="cpp_rational.html" title="cpp_rational">
+<link rel="next" href="tommath_rational.html" title="tommath_rational">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="tommath_rational.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.rational.gmp_rational"></a><a class="link" href="gmp_rational.html" title="gmp_rational">gmp_rational</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">gmp</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">class</span> <span class="identifier">gmp_rational</span><span class="special">;</span>
+
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span> <span class="special">&gt;</span> <span class="identifier">mpq_rational</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">gmp_rational</span></code> back-end
+ is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">mpq_rational</span></code>.
+ It acts as a thin wrapper around the <a href="http://gmplib.org" target="_top">GMP</a>
+ <code class="computeroutput"><span class="identifier">mpq_t</span></code> to provide a rational
+ number type that is a drop-in replacement for the native C++ number types,
+ but with unlimited precision.
+ </p>
+<p>
+ As well as the usual conversions from arithmetic and string types, instances
+ of <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_rational</span><span class="special">&gt;</span></code>
+ are copy constructible and assignable from:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ The <a href="http://gmplib.org" target="_top">GMP</a> native types: <code class="computeroutput"><span class="identifier">mpz_t</span></code>, <code class="computeroutput"><span class="identifier">mpq_t</span></code>.
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_int</span><span class="special">&gt;</span></code>.
+ </li>
+</ul></div>
+<p>
+ There is also a two-argument constructor that accepts a numerator and denominator
+ (both of type <code class="computeroutput"><span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">gmp_int</span><span class="special">&gt;</span></code>).
+ </p>
+<p>
+ There are also non-member functions:
+ </p>
+<pre class="programlisting"><span class="identifier">mpz_int</span> <span class="identifier">numerator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpq_rational</span><span class="special">&amp;);</span>
+<span class="identifier">mpz_int</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">mpq_rational</span><span class="special">&amp;);</span>
+</pre>
+<p>
+ which return the numerator and denominator of the number.
+ </p>
+<p>
+ It's also possible to access the underlying <code class="computeroutput"><span class="identifier">mpq_t</span></code>
+ via the <code class="computeroutput"><span class="identifier">data</span><span class="special">()</span></code>
+ member function of <code class="computeroutput"><span class="identifier">mpq_rational</span></code>.
+ </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">mpq_rational</span></code>s
+ have the value zero (this is the <a href="http://gmplib.org" target="_top">GMP</a>
+ default behavior).
+ </li>
+<li class="listitem">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </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 rational
+ number.
+ </li>
+<li class="listitem">
+ No changes are made to the <a href="http://gmplib.org" target="_top">GMP</a>
+ library's global settings, so this type can coexist with existing
+ <a href="http://gmplib.org" target="_top">GMP</a> code.
+ </li>
+<li class="listitem">
+ The code can equally be used with <a href="http://mpir.org/" target="_top">MPIR</a>
+ as the underlying library - indeed that is the preferred option on
+ Win32.
+ </li>
+</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>
+ </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">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">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">iostream</span><span class="special">&gt;</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="identifier">mpq_rational</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="comment">// Do some arithmetic:</span>
+ <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">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span>
+ <span class="identifier">v</span> <span class="special">/=</span> <span class="number">10</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">v</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 1000! / 10</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">v</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">denominator</span><span class="special">(</span><span class="identifier">v</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">mpq_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>
+
+ <span class="comment">// Access the underlying data:</span>
+ <span class="identifier">mpq_t</span> <span class="identifier">q</span><span class="special">;</span>
+ <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>
+ <span class="identifier">mpq_clear</span><span class="special">(</span><span class="identifier">q</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="cpp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="tommath_rational.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html
new file mode 100644
index 0000000000..8ef5da4274
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adapter.html
@@ -0,0 +1,67 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>rational_adaptor</title>
+<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
+<link rel="home" href="../../../index.html" title="Chapter&#160;1.&#160;Boost.Multiprecision">
+<link rel="up" href="../rational.html" title="Rational Number Types">
+<link rel="prev" href="br.html" title="Use With Boost.Rational">
+<link rel="next" href="../misc.html" title="Miscellaneous Number Types.">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+<div class="section boost_multiprecision_tut_rational_rational_adaptor">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_multiprecision.tut.rational.rational_adaptor"></a><a class="link" href="rational_adaptor.html" title="rational_adaptor">rational_adaptor</a>
+</h4></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">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">IntBackend</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">rational_adpater</span><span class="special">;</span>
+
+<span class="special">}}</span>
+</pre>
+<p>
+ The class template <code class="computeroutput"><span class="identifier">rational_adaptor</span></code>
+ is a back-end for <code class="computeroutput"><span class="identifier">number</span></code>
+ which converts any existing integer back-end into a rational-number back-end.
+ </p>
+<p>
+ So for example, given an integer back-end type <code class="computeroutput"><span class="identifier">MyIntegerBackend</span></code>,
+ the use would be something like:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">MyIntegerBackend</span><span class="special">&gt;</span> <span class="identifier">MyInt</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">MyIntegerBackend</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">MyRational</span><span class="special">;</span>
+
+<span class="identifier">MyRational</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+<span class="identifier">r</span> <span class="special">/=</span> <span class="number">3</span><span class="special">;</span>
+<span class="identifier">MyInt</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+<span class="identifier">assert</span><span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">2</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-2012 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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html
new file mode 100644
index 0000000000..26623160ee
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/rational_adaptor.html
@@ -0,0 +1,67 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>rational_adaptor</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="../rational.html" title="Rational Number Types">
+<link rel="prev" href="br.html" title="Use With Boost.Rational">
+<link rel="next" href="../misc.html" title="Miscellaneous Number Types.">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.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.rational.rational_adaptor"></a><a class="link" href="rational_adaptor.html" title="rational_adaptor">rational_adaptor</a>
+</h4></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">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">IntBackend</span><span class="special">&gt;</span>
+<span class="keyword">class</span> <span class="identifier">rational_adpater</span><span class="special">;</span>
+
+<span class="special">}}</span>
+</pre>
+<p>
+ The class template <code class="computeroutput"><span class="identifier">rational_adaptor</span></code>
+ is a back-end for <code class="computeroutput"><span class="identifier">number</span></code>
+ which converts any existing integer back-end into a rational-number back-end.
+ </p>
+<p>
+ So for example, given an integer back-end type <code class="computeroutput"><span class="identifier">MyIntegerBackend</span></code>,
+ the use would be something like:
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">MyIntegerBackend</span><span class="special">&gt;</span> <span class="identifier">MyInt</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">rational_adaptor</span><span class="special">&lt;</span><span class="identifier">MyIntegerBackend</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">MyRational</span><span class="special">;</span>
+
+<span class="identifier">MyRational</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
+<span class="identifier">r</span> <span class="special">/=</span> <span class="number">3</span><span class="special">;</span>
+<span class="identifier">MyInt</span> <span class="identifier">i</span> <span class="special">=</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">r</span><span class="special">);</span>
+<span class="identifier">assert</span><span class="special">(</span><span class="identifier">i</span> <span class="special">==</span> <span class="number">2</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="br.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="../misc.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html
new file mode 100644
index 0000000000..5df03879e5
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rational/tommath_rational.html
@@ -0,0 +1,130 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>tommath_rational</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="../rational.html" title="Rational Number Types">
+<link rel="prev" href="gmp_rational.html" title="gmp_rational">
+<link rel="next" href="br.html" title="Use With Boost.Rational">
+</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"><a href="../../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="br.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.rational.tommath_rational"></a><a class="link" href="tommath_rational.html" title="tommath_rational">tommath_rational</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">tommath</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">typedef</span> <span class="identifier">rational_adpater</span><span class="special">&lt;</span><span class="identifier">tommath_int</span><span class="special">&gt;</span> <span class="identifier">tommath_rational</span><span class="special">;</span>
+<span class="keyword">typedef</span> <span class="identifier">number</span><span class="special">&lt;</span><span class="identifier">tommath_rational</span> <span class="special">&gt;</span> <span class="identifier">tom_rational</span><span class="special">;</span>
+
+<span class="special">}}</span> <span class="comment">// namespaces</span>
+</pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">tommath_rational</span></code> back-end
+ is used via the typedef <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">multiprecision</span><span class="special">::</span><span class="identifier">tom_rational</span></code>.
+ It acts as a thin wrapper around <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span><span class="special">&lt;</span><span class="identifier">tom_int</span><span class="special">&gt;</span></code> to provide a rational number type that
+ is a drop-in replacement for the native C++ number types, but with unlimited
+ precision.
+ </p>
+<p>
+ The advantage of using this type rather than <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">rational</span><span class="special">&lt;</span><span class="identifier">tom_int</span><span class="special">&gt;</span></code> directly, is that it is expression-template
+ enabled, greatly reducing the number of temporaries created in complex
+ expressions.
+ </p>
+<p>
+ There are also non-member functions:
+ </p>
+<pre class="programlisting"><span class="identifier">tom_int</span> <span class="identifier">numerator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">tom_rational</span><span class="special">&amp;);</span>
+<span class="identifier">tom_int</span> <span class="identifier">denominator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">tom_rational</span><span class="special">&amp;);</span>
+</pre>
+<p>
+ which return the numerator and denominator of the number.
+ </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">tom_rational</span></code>s
+ have the value zero (this the inherited Boost.Rational behavior).
+ </li>
+<li class="listitem">
+ Division by zero results in a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">overflow_error</span></code>
+ being thrown.
+ </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 rational
+ number.
+ </li>
+<li class="listitem">
+ No changes are made to <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>'s
+ global state, so this type can safely coexist with other <a href="http://libtom.org/?page=features&amp;newsitems=5&amp;whatfile=ltm" target="_top">libtommath</a>
+ code.
+ </li>
+<li class="listitem">
+ Performance of this type has been found to be pretty poor - this need
+ further investigation - but it appears that Boost.Rational needs some
+ improvement in this area.
+ </li>
+</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>
+ </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">tommath</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="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</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="identifier">tom_rational</span> <span class="identifier">v</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span>
+
+ <span class="comment">// Do some arithmetic:</span>
+ <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">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="number">1000</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
+ <span class="identifier">v</span> <span class="special">*=</span> <span class="identifier">i</span><span class="special">;</span>
+ <span class="identifier">v</span> <span class="special">/=</span> <span class="number">10</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">v</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 1000! / 10</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">numerator</span><span class="special">(</span><span class="identifier">v</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">denominator</span><span class="special">(</span><span class="identifier">v</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">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>
+
+ <span class="keyword">return</span> <span class="number">0</span><span class="special">;</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="gmp_rational.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../rational.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="br.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html
new file mode 100644
index 0000000000..9626a37b66
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/rounding.html
@@ -0,0 +1,191 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Rounding Rules for Conversions</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="lits.html" title="Literal Types and constexpr Support">
+<link rel="next" href="mixed.html" title="Mixed Precision Arithmetic">
+</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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="lits.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="mixed.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.rounding"></a><a class="link" href="rounding.html" title="Rounding Rules for Conversions">Rounding Rules for
+ Conversions</a>
+</h3></div></div></div>
+<p>
+ As a general rule, all conversions between unrelated types are performed
+ using basic arithmetic operations, therefore conversions are either exact,
+ or follow the same rounding rules as arithmetic for the type in question.
+ </p>
+<p>
+ The following table summarises the situation for conversions from native
+ types:
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Backend
+ </p>
+ </th>
+<th>
+ <p>
+ Rounding Rules
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Conversions from integer types are exact if the target has sufficient
+ precision, otherwise they truncate to the first 2^MaxBits bits
+ (modulo arithmetic). Conversions from floating point types are
+ truncating to the nearest integer.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="ints/gmp_int.html" title="gmp_int">gmp_int</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Conversions are performed by the GMP library except for conversion
+ from <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>
+ which is truncating.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="ints/tom_int.html" title="tom_int">tom_int</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Conversions from floating point types are truncating, all others
+ are performed by libtommath and are exact.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="floats/gmp_float.html" title="gmp_float">gmp_float</a>
+ </p>
+ </td>
+<td>
+ <p>
+ Conversions are performed by the GMP library except for conversion
+ from <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>
+ which should be exact provided the target type has as much precision
+ as a <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">double</span></code>.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="floats/mpfr_float.html" title="mpfr_float">mpfr_float</a>
+ </p>
+ </td>
+<td>
+ <p>
+ All conversions are performed by the underlying MPFR library.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="floats/cpp_dec_float.html" title="cpp_dec_float">cpp_dec_float</a>
+ </p>
+ </td>
+<td>
+ <p>
+ All conversions are performed using basic arithmetic operations
+ and are truncating.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="rational/gmp_rational.html" title="gmp_rational">gmp_rational</a>
+ </p>
+ </td>
+<td>
+ <p>
+ See <a class="link" href="ints/gmp_int.html" title="gmp_int">gmp_int</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="rational/cpp_rational.html" title="cpp_rational">cpp_rational</a>
+ </p>
+ </td>
+<td>
+ <p>
+ See <a class="link" href="ints/cpp_int.html" title="cpp_int">cpp_int</a>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <a class="link" href="rational/tommath_rational.html" title="tommath_rational">tommath_rational</a>
+ </p>
+ </td>
+<td>
+ <p>
+ See <a class="link" href="ints/tom_int.html" title="tom_int">tom_int</a>
+ </p>
+ </td>
+</tr>
+</tbody>
+</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="lits.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="mixed.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html b/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html
new file mode 100644
index 0000000000..667dcea832
--- /dev/null
+++ b/libs/multiprecision/doc/html/boost_multiprecision/tut/serial.html
@@ -0,0 +1,64 @@
+<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"><a href="../../../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../../../more/index.htm">More</a></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_bin_float.html" title="cpp_bin_float">cpp_bin_float</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 <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </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>
diff --git a/libs/multiprecision/doc/html/index.html b/libs/multiprecision/doc/html/index.html
new file mode 100644
index 0000000000..c39180a691
--- /dev/null
+++ b/libs/multiprecision/doc/html/index.html
@@ -0,0 +1,172 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
+<title>Chapter&#160;1.&#160;Boost.Multiprecision</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="next" href="boost_multiprecision/intro.html" title="Introduction">
+</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"><a href="../../../../index.html">Home</a></td>
+<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
+<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
+<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
+<td align="center"><a href="../../../../more/index.htm">More</a></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="boost_multiprecision/intro.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
+<div class="chapter">
+<div class="titlepage"><div>
+<div><h2 class="title">
+<a name="boost_multiprecision"></a>Chapter&#160;1.&#160;Boost.Multiprecision</h2></div>
+<div><div class="author"><h3 class="author">
+<span class="firstname">John</span> <span class="surname">Maddock</span>
+</h3></div></div>
+<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-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
+ file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
+ </p>
+</div></div>
+</div></div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl class="toc">
+<dt><span class="section"><a href="boost_multiprecision/intro.html">Introduction</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut.html">Tutorial</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints.html">Integer Types</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints/cpp_int.html">cpp_int</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints/gmp_int.html">gmp_int</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints/tom_int.html">tom_int</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints/egs.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints/egs/factorials.html">Factorials</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/ints/egs/bitops.html">Bit Operations</a></span></dt>
+</dl></dd>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats.html">Floating Point Numbers</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/cpp_bin_float.html">cpp_bin_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/cpp_dec_float.html">cpp_dec_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/gmp_float.html">gmp_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/mpfr_float.html">mpfr_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/float128.html">float128</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg.html">Examples</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/aos.html">Area of
+ Circle</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/jel.html">Defining
+ a Special Function.</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/nd.html">Calculating
+ a Derivative</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/gi.html">Calculating
+ an Integral</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/floats/fp_eg/poly_eg.html">Polynomial
+ Evaluation</a></span></dt>
+</dl></dd>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/tut/interval.html">Interval Number Types</a></span></dt>
+<dd><dl><dt><span class="section"><a href="boost_multiprecision/tut/interval/mpfi.html">mpfi_float</a></span></dt></dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/tut/rational.html">Rational Number Types</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/rational/cpp_rational.html">cpp_rational</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/rational/gmp_rational.html">gmp_rational</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/rational/tommath_rational.html">tommath_rational</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/rational/br.html">Use With Boost.Rational</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/rational/rational_adaptor.html">rational_adaptor</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/tut/misc.html">Miscellaneous Number Types.</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/tut/misc/logged_adaptor.html">logged_adaptor</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/misc/debug_adaptor.html">debug_adaptor</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/misc/visualizers.html">Visual C++
+ Debugger Visualizers</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/tut/conversions.html">Constructing and
+ Interconverting Between Number Types</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/random.html">Generating Random Numbers</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/primetest.html">Primality Testing</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/lits.html">Literal Types and <code class="computeroutput"><span class="keyword">constexpr</span></code> Support</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/rounding.html">Rounding Rules for
+ Conversions</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/mixed.html">Mixed Precision Arithmetic</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/gen_int.html">Generic Integer Operations</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/serial.html">Boost.Serialization
+ Support</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/tut/limits.html">Numeric Limits</a></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"><a href="boost_multiprecision/tut/input_output.html">Input Output</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/ref.html">Reference</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/ref/number.html">number</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/cpp_int_ref.html">cpp_int</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/gmp_int_ref.html">gmp_int</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/tom_int_ref.html">tom_int</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/mpf_ref.html">gmp_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/mpfr_ref.html">mpfr_float_backend</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/cpp_bin_float_ref.html">cpp_bin_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/cpp_dec_ref.html">cpp_dec_float</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/internals.html">Internal Support
+ Code</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/backendconc.html">Backend Requirements</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/ref/headers.html">Header File Structure</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/perf.html">Performance Comparison</a></span></dt>
+<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
+ 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>
+<dt><span class="section"><a href="boost_multiprecision/perf/float_performance.html">Float Algorithm
+ Performance</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/perf/integer_performance.html">Integer
+ Algorithm Performance</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/perf/rational_performance.html">Rational
+ Type Performance</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/map.html">Roadmap</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/map/hist.html">History</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/map/todo.html">TODO</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/map/faq.html">FAQ</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/map/ack.html">Acknowledgements</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="boost_multiprecision/indexes.html">Indexes</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="boost_multiprecision/indexes/s01.html">Function Index</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/indexes/s02.html">Class Index</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/indexes/s03.html">Typedef Index</a></span></dt>
+<dt><span class="section"><a href="boost_multiprecision/indexes/s04.html">Index</a></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: October 17, 2014 at 17:53:54 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="boost_multiprecision/intro.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
+</body>
+</html>
diff --git a/libs/multiprecision/doc/html4_symbols.qbk b/libs/multiprecision/doc/html4_symbols.qbk
new file mode 100644
index 0000000000..3462e30fa0
--- /dev/null
+++ b/libs/multiprecision/doc/html4_symbols.qbk
@@ -0,0 +1,215 @@
+[/ Symbols and Greek letters (about 120) from HTML4.]
+[/ File HTML4_symbols.qbk]
+[/ See http://www.htmlhelp.com/reference/html40/entities/symbols.html]
+[/ See also http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references]
+[/ http://www.alanwood.net/demos/ent4_frame.html]
+[/ http://www.unicode.org/charts/PDF/U2200.pdf and others]
+[/ All (except 2 angle brackets) show OK on Firefox 2.0]
+
+[/ See also Latin-1 aka Western (ISO-8859-1) in latin1_symbols.qbk]
+[/ http://www.htmlhelp.com/reference/html40/entities/latin1.html]
+[/Unicode Latin extended http://www.unicode.org/charts/U0080.pdf]
+
+[/ Also some miscellaneous math characters added to this list - see the end.]
+[/ For others see also math_symbols.qbk]
+
+[/ To use, enclose the template name in square brackets.]
+
+[template fnof[]'''&#x192;'''] [/ ƒ Latin small f with hook = function = florin]
+[/ Capital Greek start with capital letter, lower case all small.]
+[template Alpha[]'''&#x391;'''] [/ ? Greek capital letter alpha]
+[template Beta[]'''&#x392;'''] [/ ? Greek capital letter beta]
+[template Gamma[]'''&#x393;'''] [/ G Greek capital letter gamma]
+[template Delta[]'''&#x394;'''] [/ ? Greek capital letter delta]
+[template Epsilon[]'''&#x395;'''] [/ ? Greek capital letter epsilon]
+[template Zeta[]'''&#x396;'''] [/ ? Greek capital letter zeta]
+[template Eta[]'''&#x397;'''] [/ ? Greek capital letter eta]
+[template Theta[]'''&#x398;'''] [/ T Greek capital letter theta]
+[template Iota[]'''&#x399;'''] [/ ? Greek capital letter iota]
+[template Kappa[]'''&#x39A;'''] [/ ? Greek capital letter kappa]
+[template Lambda[]'''&#x39B;'''] [/ ? Greek capital letter lambda]
+[template Mu[]'''&#x39C;'''] [/ ? Greek capital letter mu]
+[template Nu[]'''&#x39D;'''] [/ ? Greek capital letter nu]
+[template Xi[]'''&#x39E;'''] [/ ? Greek capital letter xi]
+[template Omicron[]'''&#x39F;'''] [/ ? Greek capital letter omicron]
+[template Pi[]'''&#x3A0;'''] [/ ? Greek capital letter pi]
+[template Rho[]'''&#x3A1;'''] [/ ? Greek capital letter rho]
+[template Sigma[]'''&#x3A3;'''] [/ S Greek capital letter sigma]
+[template Tau[]'''&#x3A4;'''] [/ ? Greek capital letter tau]
+[template Upsilon[]'''&#x3A5;'''] [/ ? Greek capital letter upsilon]
+[template Phi[]'''&#x3A6;'''] [/ F Greek capital letter phi]
+[template Chi[]'''&#x3A7;'''] [/ ? Greek capital letter chi]
+[template Psi[]'''&#x3A8;'''] [/ ? Greek capital letter psi]
+[template Omega[]'''&#x3A9;'''] [/ O Greek capital letter omega]
+[template alpha[]'''&#x3B1;'''] [/ a Greek small letter alpha]
+[template beta[]'''&#x3B2;'''] [/ ß Greek small letter beta]
+[template gamma[]'''&#x3B3;'''] [/ ? Greek small letter gamma]
+[template delta[]'''&#x3B4;'''] [/ d Greek small letter delta]
+[template epsilon[]'''&#x3B5;'''] [/ e Greek small letter epsilon]
+[template zeta[]'''&#x3B6;'''] [/ ? Greek small letter zeta]
+[template eta[]'''&#x3B7;'''] [/ ? Greek small letter eta]
+[template theta[]'''&#x3B8;'''] [/ ? Greek small letter theta]
+[template iota[]'''&#x3B9;'''] [/ ? Greek small letter iota]
+[template kappa[]'''&#x3BA;'''] [/ ? Greek small letter kappa]
+[template lambda[]'''&#x3BB;'''] [/ ? Greek small letter lambda]
+[template mu[]'''&#x3BC;'''] [/ µ Greek small letter mu]
+[template nu[]'''&#x3BD;'''] [/ ? Greek small letter nu]
+[template xi[]'''&#x3BE;'''] [/ ? Greek small letter xi]
+[template omicron[]'''&#x3BF;'''] [/ ? Greek small letter omicron]
+[template pi[]'''&#x3C0;'''] [/ p Greek small letter pi]
+[template rho[]'''&#x3C1;'''] [/ ? Greek small letter rho]
+[template sigmaf[]'''&#x3C2;'''] [/ ? Greek small letter final sigma]
+[template sigma[]'''&#x3C3;'''] [/ s Greek small letter sigma]
+[template tau[]'''&#x3C4;'''] [/ t Greek small letter tau]
+[template upsilon[]'''&#x3C5;'''] [/ ? Greek small letter upsilon]
+[template phi[]'''&#x3C6;'''] [/ f Greek small letter phi]
+[template chi[]'''&#x3C7;'''] [/ ? Greek small letter chi]
+[template psi[]'''&#x3C8;'''] [/ ? Greek small letter psi]
+[template omega[]'''&#x3C9;'''] [/ ? Greek small letter omega]
+[template thetasym[]'''&#x3D1;'''] [/ ? Greek small letter theta symbol]
+[template upsih[]'''&#x3D2;'''] [/ ? Greek upsilon with hook symbol]
+[template piv[]'''&#x3D6;'''] [/ ? Greek pi symbol]
+
+[template bull[]'''&#x2022;'''] [/ • bullet = black small circle]
+[template hellip[]'''&#x2026;'''] [/ … horizontal ellipsis = three dot leader]
+[template prime[]'''&#x2032;'''] [/ ' prime = minutes = feet]
+[template Prime[]'''&#x2033;'''] [/ ? double prime = seconds = inches]
+[template oline[]'''&#x203E;'''] [/ ? overline = spacing overscore]
+[template frasl[]'''&#x2044;'''] [/ / fraction slash]
+[template weierp[]'''&#x2118;'''] [/ P script capital P = power set = Weierstrass p]
+[template image[]'''&#x2111;'''] [/ I blackletter capital I = imaginary part]
+[template real[]'''&#x211C;'''] [/ R blackletter capital R = real part symbol]
+[template trade[]'''&#x2122;'''] [/ ™ trade mark sign]
+[template alefsym[]'''&#x2135;'''] [/ ? alef symbol = first transfinite cardinal]
+[template larr[]'''&#x2190;'''] [/ ? leftwards arrow]
+[template uarr[]'''&#x2191;'''] [/ ? upwards arrow]
+[template rarr[]'''&#x2192;'''] [/ ? rightwards arrow]
+[template darr[]'''&#x2193;'''] [/ ? downwards arrow]
+[template harr[]'''&#x2194;'''] [/ ? left right arrow]
+[template crarr[]'''&#x21B5;'''] [/ ? downwards arrow with corner leftwards = CR]
+[template lArr[]'''&#x21D0;'''] [/ ? leftwards double arrow]
+[template uArr[]'''&#x21D1;'''] [/ ? upwards double arrow]
+[template rArr[]'''&#x21D2;'''] [/ ? rightwards double arrow]
+[template dArr[]'''&#x21D3;'''] [/ ? downwards double arrow]
+[template hArr[]'''&#x21D4;'''] [/ ? left right double arrow]
+[template forall[]'''&#x2200;'''] [/ ? for all]
+[template part[]'''&#x2202;'''] [/ ? partial differential]
+[template exist[]'''&#x2203;'''] [/ ? there exists]
+[template empty[]'''&#x2205;'''] [/ Ø empty set = null set = diameter]
+[template nabla[]'''&#x2207;'''] [/ ? nabla = backward difference]
+[template isin[]'''&#x2208;'''] [/ ? element of]
+[template notin[]'''&#x2209;'''] [/ ? not an element of]
+[template ni[]'''&#x220B;'''] [/ ? contains as member]
+[template prod[]'''&#x220F;'''] [/ ? n-ary product = product sign]
+[template sum[]'''&#x2211;'''] [/ ? n-ary sumation]
+[template minus[]'''&#x2212;'''] [/ - minus sign]
+[template lowast[]'''&#x2217;'''] [/ * asterisk operator]
+[template radic[]'''&#x221A;'''] [/ v square root = radical sign]
+[template prop[]'''&#x221D;'''] [/ ? proportional to]
+[template infin[]'''&#x221E;'''] [/ 8 infinity]
+[template ang[]'''&#x2220;'''] [/ ? angle]
+[template and[]'''&#x2227;'''] [/ ? logical and = wedge]
+[template or[]'''&#x2228;'''] [/ ? logical or = vee]
+[template cap[]'''&#x2229;'''] [/ n intersection = cap]
+[template cup[]'''&#x222A;'''] [/ ? union = cup]
+[template int[]'''&#x222B;'''] [/ ? integral]
+[template there4[]'''&#x2234;'''] [/ ? therefore]
+[template sim[]'''&#x223C;'''] [/ ~ tilde operator = varies with = similar to]
+[template cong[]'''&#x2245;'''] [/ ? approximately equal to]
+[template asymp[]'''&#x2248;'''] [/ ˜ almost equal to = asymptotic to]
+[template ne[]'''&#x2260;'''] [/ ? not equal to]
+[template equiv[]'''&#x2261;'''] [/ = identical to]
+[template le[]'''&#x2264;'''] [/ = less-than or equal to]
+[template ge[]'''&#x2265;'''] [/ = greater-than or equal to]
+[template subset[]'''&#x2282;'''] [/ ? subset of]
+[template superset[]'''&#x2283;'''] [/ ? superset of]
+[template nsubset[]'''&#x2284;'''] [/ ? not a subset of]
+[template sube[]'''&#x2286;'''] [/ ? subset of or equal to]
+[template supe[]'''&#x2287;'''] [/ ? superset of or equal to]
+[template oplus[]'''&#x2295;'''] [/ ? circled plus = direct sum]
+[template otimes[]'''&#x2297;'''] [/ ? circled times = vector product]
+[template perp[]'''&#x22A5;'''] [/ ? up tack = orthogonal to = perpendicular]
+[template sdot[]'''&#x22C5;'''] [/ · dot operator]
+[template lceil[]'''&#x2308;'''] [/ ? left ceiling = APL upstile]
+[template rceil[]'''&#x2309;'''] [/ ? right ceiling]
+[template lfloor[]'''&#x230A;'''] [/ ? left floor = APL downstile]
+[template rfloor[]'''&#x230B;'''] [/ ? right floor]
+[template lang[]'''&#x2329;'''] [/ < left-pointing angle bracket = bra (Firefox shows ?)]
+[template rang[]'''&#x232A;'''] [/ > right-pointing angle bracket = ket (Firefox shows ?)]
+[template loz[]'''&#x25CA;'''] [/ ? lozenge]
+[template spades[]'''&#x2660;'''] [/ ? black spade suit]
+[template clubs[]'''&#x2663;'''] [/ ? black club suit = shamrock]
+[template hearts[]'''&#x2665;'''] [/ ? black heart suit = valentine]
+[template diams[]'''&#x2666;'''] [/ ? black diamond suit]
+[template euro[]'''&#x20AC;'''] [/ ? Euro currency symbol]
+[template lchev[]'''&#x27E8;'''] [/ ? left chevron]
+[template rchev[]'''&#x27E9;'''] [/ right chevron]
+[template rflat[]'''&#x27EE;'''] [/ right flat bracket Misc Math Symbol A]
+[template lflat[]'''&#x27EE;'''] [/ left flat bracket]
+[/ U2000.pdf punctuation]
+[template endash[]'''&#x2013;'''] [/ em width dash]
+[template emdash[]'''&#x2014;'''] [/ en width dash]
+[template hbar[]'''&#x2015;'''] [/ ? horizontal bar - introducing quoted text]
+[template vert2bar[]'''&#x2016;'''] [/ ? double vertical bar]
+[template line2[]'''&#x2016;'''] [/ ? double low line bar]
+[template dagger[]'''&#x2020;'''] [/ ? dagger]
+[template dagger2[]'''&#x2021;'''] [/ ? double dagger]
+[template dot[]'''&#x2024;'''] [/ dot leader]
+[template dot2[]'''&#x2025;'''] [/ ? dots leader]
+[template ellipsis[]'''&#x2026;'''] [/ horizontal ellipsis]
+
+[template dotover[]'''&#x0307;'''] [/ dot over symbol]
+[template recur[]'''&#x200A;&#x0307;'''] [/ math recurring symbol, eg after 0.333]
+[/ Note use of a thin space before digit, so that dot isn't placed directly over the digit.]
+[/ Use:1[recur]]
+
+[/ Other symbols, not in the HTML4 list:]
+[template enquad[] '''&#x2000;'''] [/ en quad space]
+[template emquad[] '''&#x2001;'''] [/ em quad space]
+[template enspace[] '''&#x2002;'''] [/ em half en space]
+[template emspace[] '''&#x2003;'''] [/ em space type size in points]
+[template thickspace[] '''&#x2004;'''] [/ 3 per em space]
+[template midspace[] '''&#x2005;'''] [/ 4 per em space]
+[template sixemspace[] '''&#x2006;'''] [/ 6 em space]
+[template figspace[] '''&#x2007;'''] [/ space = width fixed font digit]
+[template punctspace[] '''&#x2008;'''] [/ space = width punctuation]
+[template thin[] '''&#x2009;'''] [/ thin space ]
+[template hair[] '''&#x200A;'''] [/ hair space]
+[template nbsp[] '''&#x00A0;'''] [/ non-breaking space]
+[template space[] '''&#x00A0;'''] [/ plain non-breaking space]
+
+[template nospace[] '''&#x200B;'''] [/ zero width space]
+[template wordjoin[] '''&#x2060;'''] [/ word joiner - no line break either side]
+[template narrownbsp[] '''&#x202F;'''] [/ narrow non-breaking space]
+[template hyphen[] '''&#x2010;'''] [/ soft hyphen]
+[template nbhyphen[] '''&#x2011;'''] [/ non-breaking hyphen]
+
+[template plusminus[]'''&#x00B1;'''] [/ ? plus or minus sign]
+[template sqrt[]'''&#x221A;'''] [/ ? square root sqrt symbol]
+[/template pow2[]'''&#x2073;'''] [/ 2073 is NOT superscript 2 character]
+[template pow2[]'''&#x00B2;'''] [/ superscript 2 character]
+[template pow3[]'''&#x00B3;'''] [/ superscript 3 character]
+[template pown[]'''&#x207F;'''] [/ superscript n character]
+[template frac12[]'''&#x00BD;'''] [/ fraction half]
+[template frac14[]'''&#x00BC;'''] [/ fraction quarter]
+[template frac34[]'''&#x00BE;'''] [/ fraction three quarter]
+[template sup1[]'''&#xB9;'''] [/ superscript one = superscript digit one ]
+[template sup2[]'''&#xB2;'''] [/ superscript two = superscript digit two = squared ]
+[template cubed[]'''&#xB3;'''] [/ superscript three = superscript digit three = cubed ]
+[template macron[]'''&#xAF;'''] [/ macron = spacing macron = overline = APL overbar ]
+[template deg[]'''&#xB0;'''] [/ degree sign ]
+[template plusmn[]'''&#xB1;'''] [/ plus-minus sign = plus-or-minus sign ]
+[template micro[]'''&#xB5;'''] [/ micro sign ]
+[template cedil[]'''&#xB8;'''] [/ cedilla = spacing cedilla ]
+[template ordm[]'''&#xBA;'''] [/ masculine ordinal indicator ]
+[template ordf[]'''&#xAA;'''] [/ feminine ordinal indicator ]
+[template laquo[]'''&#xAB;'''] [/ left-pointing double angle quotation mark = left pointing guillemet ]
+[template raquo[]'''&#xBB;'''] [/ right-pointing double angle quotation mark = right pointing guillemet ]
+
+[/
+Copyright 2007, 2010 Paul A. Bristow.
+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).
+]
+
diff --git a/libs/multiprecision/doc/index.idx b/libs/multiprecision/doc/index.idx
new file mode 100644
index 0000000000..629072a409
--- /dev/null
+++ b/libs/multiprecision/doc/index.idx
@@ -0,0 +1,18 @@
+# Copyright 2011 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)
+#
+# Rewrite the class scanner to accept declarations, not just definitions,
+# as the docs don't include full definitions.
+#
+!define-scanner class_name "^[[:space:]]*(template[[:space:]]*<[^;:{]+>[[:space:]]*)?(class|struct)[[:space:]]*(\<\w+\>([[:blank:]]*\([^)]*\))?[[:space:]]*)*(\<\w*\>)[[:space:]]*(<[^;:{]+>)?[[:space:]]*(\{|:[^;\{()]*\{)" "(?:class|struct)[^;{]+\\<\5\\>\\s*[;{]" \5
+
+!scan-path boost/multiprecision .*\.hpp true
+
+
+
+
+
+
+
+
diff --git a/libs/multiprecision/doc/multiprecision.qbk b/libs/multiprecision/doc/multiprecision.qbk
new file mode 100644
index 0000000000..274302bda7
--- /dev/null
+++ b/libs/multiprecision/doc/multiprecision.qbk
@@ -0,0 +1,5203 @@
+[/
+ 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.7]
+ [copyright 2002-2013 John Maddock and Christopher Kormanyos]
+ [purpose Multiprecision Number library]
+ [license
+ 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])
+ ]
+ [authors [Maddock, John], [Kormanyos, Christopher]]
+ [/last-revision $Date: 2011-07-08 18:51:46 +0100 (Fri, 08 Jul 2011) $]
+]
+
+[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]]
+[template gmp[] [@http://gmplib.org GMP]]
+[template mpf_class[] [@http://gmplib.org/manual/C_002b_002b-Interface-Floats.html#C_002b_002b-Interface-Floats mpf_class]]
+[template mpfr_class[] [@http://math.berkeley.edu/~wilken/code/gmpfrxx/ mpfr_class]]
+[template mpreal[] [@http://www.holoborodko.com/pavel/mpfr/ mpreal]]
+[template mpir[] [@http://mpir.org/ MPIR]]
+[template tommath[] [@http://libtom.org/?page=features&newsitems=5&whatfile=ltm libtommath]]
+[template quadmath[] [@http://gcc.gnu.org/onlinedocs/libquadmath/ libquadmath]]
+
+[template super[x]'''<superscript>'''[x]'''</superscript>''']
+[template sub[x]'''<subscript>'''[x]'''</subscript>''']
+
+[template equation[name] '''<inlinemediaobject>
+<imageobject role="html">
+<imagedata fileref="../'''[name]'''.png"></imagedata>
+</imageobject>
+<imageobject role="print">
+<imagedata fileref="../'''[name]'''.svg"></imagedata>
+</imageobject>
+</inlinemediaobject>''']
+
+[def __cpp_int [link boost_multiprecision.tut.ints.cpp_int cpp_int]]
+[def __gmp_int [link boost_multiprecision.tut.ints.gmp_int gmp_int]]
+[def __tom_int [link boost_multiprecision.tut.ints.tom_int tom_int]]
+[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]]
+[def __tommath_rational [link boost_multiprecision.tut.rational.tommath_rational tommath_rational]]
+[def __number [link boost_multiprecision.ref.number number]]
+[def __float128 [link boost_multiprecision.tut.floats.float128 float128]]
+[def __debug_adaptor [link boost_multiprecision.tut.misc.debug_adaptor debug_adaptor]]
+[def __logged_adaptor [link boost_multiprecision.tut.misc.logged_adaptor logged_adaptor]]
+[def __rational_adaptor [link boost_multiprecision.tut.rational.rational_adaptor rational_adaptor]]
+
+[section:intro Introduction]
+
+The Multiprecision Library provides [link boost_multiprecision.tut.ints integer],
+[link boost_multiprecision.tut.rational rational]
+and [link boost_multiprecision.tut.floats floating-point] types in C++ that have more
+range and precision than C++'s ordinary built-in types.
+The big number types in Multiprecision can be used with a wide
+selection of basic mathematical operations, elementary transcendental
+functions as well as the functions in Boost.Math.
+The Multiprecision types can also interoperate with the
+built-in types in C++ using clearly defined conversion rules.
+This allows Boost.Multiprecision to be used for all
+kinds of mathematical calculations involving integer,
+rational and floating-point types requiring extended
+range and precision.
+
+Multiprecision consists of a generic interface to the
+mathematics of large numbers as well as a selection of
+big number back ends, with support for integer, rational and
+floating-point types. Boost.Multiprecision provides a selection
+of back ends provided off-the-rack in including
+interfaces to GMP, MPFR, MPIR, TomMath as well as
+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
+[link boost_multiprecision.ref.backendconc concepts].
+
+Depending upon the number type, precision may be arbitrarily large
+(limited only by available memory), fixed at compile time
+(for example 50 or 100 decimal digits), or a variable controlled at run-time
+by member functions. The types are expression-template-enabled for
+better performance than naive user-defined types.
+
+The Multiprecision library comes in two distinct parts:
+
+* An expression-template-enabled front-end `number`
+that handles all the operator overloading, expression evaluation optimization, and code reduction.
+* A selection of back-ends that implement the actual arithmetic operations, and need conform only to the
+reduced interface requirements of the front-end.
+
+Separation of front-end and back-end allows use of highly refined, but restricted license libraries
+where possible, but provides Boost license alternatives for users who must have a portable
+unconstrained license. Which is to say some back-ends rely on 3rd party libraries, but a header-only Boost license version is always
+available (if somewhat slower).
+
+Should you just wish to cut to the chase and use a fully Boost-licensed number type, then skip to
+__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]
+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
+
+ boost::multiprecision::mpz_int myint; // Arbitrary precision integer type.
+
+Alternatively, you can compose your own multiprecision type, by combining `number` with one of the
+predefined back-end types. For example, suppose you wanted a 300 decimal digit floating-point type
+based on the [mpfr] library. In this case, there's no predefined typedef with that level of precision,
+so instead we compose our own:
+
+ #include <boost/multiprecision/mpfr.hpp> // Defines the Backend type that wraps MPFR
+
+ namespace mp = boost::multiprecision; // Reduce the typing a bit later...
+
+ typedef mp::number<mp::mpfr_float_backend<300> > my_float;
+
+ my_float a, b, c; // These variables have 300 decimal digits precision
+
+We can repeat the above example, but with the expression templates disabled (for faster compile times, but slower runtimes)
+by passing a second template argument to `number`:
+
+ #include <boost/multiprecision/mpfr.hpp> // Defines the Backend type that wraps MPFR
+
+ namespace mp = boost::multiprecision; // Reduce the typing a bit later...
+
+ typedef mp::number<mp::mpfr_float_backend<300>, et_off> my_float;
+
+ my_float a, b, c; // These variables have 300 decimal digits precision
+
+We can also mix arithmetic operations between different types, provided there is an unambiguous implicit conversion from one
+type to the other:
+
+ #include <boost/multiprecision/cpp_int.hpp>
+
+ namespace mp = boost::multiprecision; // Reduce the typing a bit later...
+
+ mp::int128_t a(3), b(4);
+ mp::int512_t c(50), d;
+
+ d = c * a; // OK, result of mixed arithmetic is an int512_t
+
+Conversions are also allowed:
+
+ d = a; // OK, widening conversion.
+ d = a * b; // OK, can convert from an expression template too.
+
+However conversions that are inherently lossy are either declared explicit or else forbidden altogether:
+
+ d = 3.14; // Error implicit conversion from float not allowed.
+ d = static_cast<mp::int512_t>(3.14); // OK explicit construction is allowed
+
+Mixed arithmetic will fail if the conversion is either ambiguous or explicit:
+
+ number<cpp_int_backend<>, et_off> a(2);
+ number<cpp_int_backend<>, et_on> b(3);
+
+ b = a * b; // Error, implicit conversion could go either way.
+ b = a * 3.14; // Error, no operator overload if the conversion would be explicit.
+
+[h4 Move Semantics]
+
+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
+that look something like:
+
+ template <class B>
+ number<B, et_off> operator + (number<B, et_off>&& a, const number<B, et_off>& b)
+ {
+ return std::move(a += b);
+ }
+
+These operator overloads ensure that many expressions can be evaluated without actually generating any temporaries.
+However, there are still many simple expressions such as:
+
+ a = b * c;
+
+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
+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
+object's internal state), while maintaining usability in the standard library containers.
+
+[h4 Expression Templates]
+
+Class `number` is expression-template-enabled: that means that rather than having a multiplication
+operator that looks like this:
+
+ template <class Backend>
+ number<Backend> operator * (const number<Backend>& a, const number<Backend>& b)
+ {
+ number<Backend> result(a);
+ result *= b;
+ return result;
+ }
+
+Instead the operator looks more like this:
+
+ template <class Backend>
+ ``['unmentionable-type]`` operator * (const number<Backend>& a, const number<Backend>& b);
+
+Where the "unmentionable" return type is an implementation detail that, rather than containing the result
+of the multiplication, contains instructions on how to compute the result. In effect it's just a pair
+of references to the arguments of the function, plus some compile-time information that stores what the operation
+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,
+lets suppose we're evaluating a polynomial via Horner's method, something like this:
+
+ T a[7] = { /* some values */ };
+ //....
+ y = (((((a[6] * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0];
+
+If type `T` is a `number`, then this expression is evaluated ['without creating a single temporary value]. In contrast,
+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
+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.
+[footnote The actual number generated will depend on the compiler, how well it optimises the code, and whether it supports
+rvalue references. The number of 11 temporaries was generated with Visual C++ 10]
+
+[important
+Expression templates can radically reorder the operations in an expression, for example:
+
+ a = (b * c) * a;
+
+Will get transformed into:
+
+ a *= c;
+ a *= b;
+
+If this is likely to be an issue for a particular application, then they should be disabled.
+]
+
+This library also extends expression template support to standard library functions like `abs` or `sin` with `number`
+arguments. This means that an expression such as:
+
+ y = abs(x);
+
+can be evaluated without a single temporary being calculated. Even expressions like:
+
+ y = sin(x);
+
+get this treatment, so that variable 'y' is used as "working storage" within the implementation of `sin`,
+thus reducing the number of temporaries used by one. Of course, should you write:
+
+ x = sin(x);
+
+Then we clearly can't use `x` as working storage during the calculation, so then a temporary variable
+is created in this case.
+
+Given the comments above, you might be forgiven for thinking that expression-templates are some kind of universal-panacea:
+sadly though, all tricks like this have their downsides. For one thing, expression template libraries
+like this one, tend to be slower to compile than their simpler cousins, they're also harder to debug
+(should you actually want to step through our code!), and rely on compiler optimizations being turned
+on to give really good performance. Also, since the return type from expressions involving `number`s
+is an "unmentionable implementation detail", you have to be careful to cast the result of an expression
+to the actual number type when passing an expression to a template function. For example, given:
+
+ template <class T>
+ void my_proc(const T&);
+
+Then calling:
+
+ my_proc(a+b);
+
+Will very likely result in obscure error messages inside the body of `my_proc` - since we've passed it
+an expression template type, and not a number type. Instead we probably need:
+
+ my_proc(my_number_type(a+b));
+
+Having said that, these situations don't occur that often - or indeed not at all for non-template functions.
+In addition, all the functions in the Boost.Math library will automatically convert expression-template arguments
+to the underlying number type without you having to do anything, so:
+
+ mpfr_float_100 a(20), delta(0.125);
+ boost::math::gamma_p(a, a + delta);
+
+Will work just fine, with the `a + delta` expression template argument getting converted to an `mpfr_float_100`
+internally by the Boost.Math library.
+
+One other potential pitfall that's only possible in C++11: you should never store an expression template using:
+
+ auto my_expression = a + b - c;
+
+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
+[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:
+
+[table Evaluation of Order 6 Polynomial.
+[[Library] [Relative Time] [Relative number of memory allocations]]
+[[number] [1.0 (0.00957s)] [1.0 (2996 total)]]
+[[[mpfr_class]] [1.1 (0.0102s)] [4.3 (12976 total)]]
+[[[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
+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
+swamp everything else.
+* The cost of an in-place multiplication (using `operator*=`) tends to be more than an out-of-place
+`operator*` (typically `operator *=` has to create a temporary workspace to carry out the multiplication, where
+as `operator*` can use the target variable as workspace). Since the expression templates carry out their
+magic by converting out-of-place operators to in-place ones, we necessarily take this hit. Even so the
+transformation is more efficient than creating the extra temporary variable, just not by as much as
+one would hope.
+
+Finally, note that `number` takes a second template argument, which, when set to `et_off` disables all
+the expression template machinery. The result is much faster to compile, but slower at runtime.
+
+We'll conclude this section by providing some more performance comparisons between these three libraries,
+again, all are using [mpfr] to carry out the underlying arithmetic, and all are operating at the same precision
+(50 decimal digits):
+
+[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)]
+ [1.1 (6.29s)] [2.64 (4260868)]]
+[[[mpfr_class]] [1.1 (6.28s)] [2.45 (3948316)]]
+[[[mpreal]] [1.65 (9.54s)] [8.21 (13226029)]]
+]
+
+[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)]
+ [1.0 (260s)][1.2 (156797871)]]
+[[[mpfr_class]] [1.1 (287s)][2.1 (268336640)]]
+[[[mpreal]] [1.5 (389s)][3.6 (466960653)]]
+]
+
+The above results were generated on Win32 compiling with Visual C++ 2010, all optimizations on (/Ox),
+with MPFR 3.0 and MPIR 2.3.0.
+
+[endsect]
+
+[section:tut Tutorial]
+
+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],
+[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)?
+
+[section:ints Integer Types]
+
+The following back-ends provide integer arithmetic:
+
+[table
+[[Backend Type][Header][Radix][Dependencies][Pros][Cons]]
+[[`cpp_int`][boost/multiprecision/cpp_int.hpp][2][None]
+ [Very versatile, Boost licensed, all C++ integer type which support both [@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision] and fixed precision integer types.][Slower than [gmp], though typically not as slow as [tommath]]]
+[[`gmp_int`][boost/multiprecision/gmp.hpp][2][[gmp]][Very fast and efficient back-end.][Dependency on GNU licensed [gmp] library.]]
+[[`tom_int`][boost/multiprecision/tommath.hpp][2][[tommath]][Public domain back-end with no licence restrictions.][Slower than [gmp].]]
+]
+
+[section:cpp_int cpp_int]
+
+`#include <boost/multiprecision/cpp_int.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ typedef unspecified-type limb_type;
+
+ enum cpp_integer_type { signed_magnitude, unsigned_magnitude };
+ enum cpp_int_check_type { checked, unchecked };
+
+ template <unsigned MinBits = 0,
+ unsigned MaxBits = 0,
+ cpp_integer_type SignType = signed_magnitude,
+ cpp_int_check_type Checked = unchecked,
+ class Allocator = std::allocator<limb_type> >
+ class cpp_int_backend;
+ //
+ // Expression templates default to et_off if there is no allocator:
+ //
+ template <unsigned MinBits, unsigned MaxBits, cpp_integer_type SignType, cpp_int_check_type Checked>
+ struct expression_template_default<cpp_int_backend<MinBits, MaxBits, SignType, Checked, void> >
+ { static const expression_template_option value = et_off; };
+
+ typedef number<cpp_int_backend<> > cpp_int; // arbitrary precision integer
+ typedef rational_adaptor<cpp_int_backend<> > cpp_rational_backend;
+ typedef number<cpp_rational_backend> cpp_rational; // arbitrary precision rational number
+
+ // Fixed precision unsigned types:
+ typedef number<cpp_int_backend<128, 128, unsigned_magnitude, unchecked, void> > uint128_t;
+ typedef number<cpp_int_backend<256, 256, unsigned_magnitude, unchecked, void> > uint256_t;
+ typedef number<cpp_int_backend<512, 512, unsigned_magnitude, unchecked, void> > uint512_t;
+ typedef number<cpp_int_backend<1024, 1024, unsigned_magnitude, unchecked, void> > uint1024_t;
+
+ // Fixed precision signed types:
+ typedef number<cpp_int_backend<128, 128, signed_magnitude, unchecked, void> > int128_t;
+ typedef number<cpp_int_backend<256, 256, signed_magnitude, unchecked, void> > int256_t;
+ typedef number<cpp_int_backend<512, 512, signed_magnitude, unchecked, void> > int512_t;
+ typedef number<cpp_int_backend<1024, 1024, signed_magnitude, unchecked, void> > int1024_t;
+
+ // Over again, but with checking enabled this time:
+ typedef number<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_int;
+ typedef rational_adaptor<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_rational_backend;
+ typedef number<cpp_rational_backend> checked_cpp_rational;
+
+ // Checked fixed precision unsigned types:
+ typedef number<cpp_int_backend<128, 128, unsigned_magnitude, checked, void> > checked_uint128_t;
+ typedef number<cpp_int_backend<256, 256, unsigned_magnitude, checked, void> > checked_uint256_t;
+ typedef number<cpp_int_backend<512, 512, unsigned_magnitude, checked, void> > checked_uint512_t;
+ typedef number<cpp_int_backend<1024, 1024, unsigned_magnitude, checked, void> > checked_uint1024_t;
+
+ // Fixed precision signed types:
+ typedef number<cpp_int_backend<128, 128, signed_magnitude, checked, void> > checked_int128_t;
+ typedef number<cpp_int_backend<256, 256, signed_magnitude, checked, void> > checked_int256_t;
+ typedef number<cpp_int_backend<512, 512, signed_magnitude, checked, void> > checked_int512_t;
+ typedef number<cpp_int_backend<1024, 1024, signed_magnitude, checked, void> > checked_int1024_t;
+
+ }} // namespaces
+
+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
+[@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision]
+integer types, and both signed and unsigned types. There are five template arguments:
+
+[variablelist
+[[MinBits][Determines the number of Bits to store directly within the object before resorting to dynamic memory
+ allocation. When zero, this field is determined automatically based on how many bits can be stored
+ in union with the dynamic storage header: setting a larger value may improve performance as larger integer
+ values will be stored internally before memory allocation is required.]]
+[[MaxBits][Determines the maximum number of bits to be stored in the type: resulting in a fixed precision type.
+ When this value is the same as MinBits, then the Allocator parameter is ignored, as no dynamic
+ memory allocation will ever be performed: in this situation the Allocator parameter should be set to
+ 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
+[@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`.]]
+[[Checked][This parameter has two values: `checked` or `unchecked`. See below.]]
+[[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
+and unchecked integers have the following properties:
+
+[table
+[[Condition][Checked-Integer][Unchecked-Integer]]
+[[Numeric overflow in fixed precision arithmetic][Throws a `std::overflow_error`.][Performs arithmetic modulo 2[super MaxBits]]]
+[[Constructing an integer from a value that can not be represented in the target type][Throws a `std::range_error`.]
+[Converts the value modulo 2[super MaxBits], signed to unsigned conversions extract the last MaxBits bits of the
+2's complement representation of the input value.]]
+[[Unsigned subtraction yielding a negative value.][Throws a `std::range_error`.][Yields the value that would
+result from treating the unsigned type as a 2's complement signed type.]]
+[[Attempting a bitwise operation on a negative value.][Throws a `std::range_error`][Yields the value, but not the bit pattern,
+that would result from performing the operation on a 2's complement integer type.]]
+]
+
+Things you should know when using this type:
+
+* 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,
+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.
+In this respect the behaviour of these types differs from built-in 2's complement types. In might be tempting to use a
+127-bit type instead, and indeed this does work, but behaviour is still slightly different from a 2's complement built-in type
+as the min and max values are identical (apart from the sign), where as they differ by one for a true 2's complement type.
+That said it should be noted that there's no requirement for built-in types to be 2's complement either - it's simply that this
+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
+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
+ ['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`
+ of type `uint128_t`. However, had this operation been performed on `checked_uint128_t` then a `std::range_error` would have
+ 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.
+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).
+Typically this means you can use
+an integer type wide enough for the "worst case scenario" with only minor performance degradation even if most of the time
+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
+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
+[link boost_multiprecision.tut.lits here] for the full description. For example `0xfffff_cppi1024`
+specifies a 1024-bit integer with the value 0xffff. This can be used to generate compile time constants that are
+too large to fit into any built in number type.
+
+[h5 Example:]
+
+[cpp_int_eg]
+
+[endsect]
+
+[section:gmp_int gmp_int]
+
+`#include <boost/multiprecision/gmp.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ class gmp_int;
+
+ typedef number<gmp_int > mpz_int;
+
+ }} // namespaces
+
+The `gmp_int` back-end is used via the typedef `boost::multiprecision::mpz_int`. It acts as a thin wrapper around the [gmp] `mpz_t`
+to provide an integer type that is a drop-in replacement for the native C++ integer types, but with unlimited precision.
+
+As well as the usual conversions from arithmetic and string types, type `mpz_int` is copy constructible and assignable from:
+
+* The [gmp] native types: `mpf_t`, `mpz_t`, `mpq_t`.
+* Instances of `number<T>` that are wrappers around those types: `number<gmp_float<N> >`, `number<gmp_rational>`.
+
+It's also possible to access the underlying `mpz_t` via the `data()` member function of `gmp_int`.
+
+Things you should know when using this type:
+
+* 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,
+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
+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]
+is recommended on Win32.
+* This backend supports rvalue-references and is move-aware, making instantiations of `number` on this backend move aware.
+
+[h5 Example:]
+
+[mpz_eg]
+
+[endsect]
+
+[section:tom_int tom_int]
+
+`#include <boost/multiprecision/tommath.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ class tommath_int;
+
+ typedef number<tommath_int > tom_int;
+
+ }} // namespaces
+
+The `tommath_int` back-end is used via the typedef `boost::multiprecision::tom_int`. It acts as a thin wrapper around the [tommath] `tom_int`
+to provide an integer type that is a drop-in replacement for the native C++ integer types, but with unlimited precision.
+
+Things you should know when using this type:
+
+* Default constructed objects have the value zero (this is [tommath]'s default behavior).
+* Although `tom_int` is mostly a drop in replacement for the builtin integer types, it should be noted that it is a
+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,
+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
+as a valid integer.
+* Division by zero results in a `std::overflow_error` being thrown.
+
+[h5 Example:]
+
+[tommath_eg]
+
+[endsect]
+
+[section:egs Examples]
+
+[import ../example/integer_examples.cpp]
+
+[section:factorials Factorials]
+[FAC1]
+[endsect]
+
+[section:bitops Bit Operations]
+[BITOPS]
+[endsect]
+
+[endsect]
+
+[endsect]
+
+[section:floats Floating Point Numbers]
+
+The following back-ends provide floating point arithmetic:
+
+[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 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 headroom 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 conversions 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>`
+
+ namespace boost{ namespace multiprecision{
+
+ template <unsigned Digits10, class ExponentType = boost::int32_t, class Allocator = void>
+ class cpp_dec_float;
+
+ typedef number<cpp_dec_float<50> > cpp_dec_float_50;
+ typedef number<cpp_dec_float<100> > cpp_dec_float_100;
+
+ }} // 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
+much greater precision.
+
+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
+and 16-bits wide.
+
+Normally `cpp_dec_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 the final template parameter causes `cpp_dec_float` to dynamically allocate the memory it needs: this
+significantly reduces the size of `cpp_dec_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.
+
+There is full standard library and `numeric_limits` support available for this type.
+
+Things you should know when using this type:
+
+* Default constructed `cpp_dec_float`s have a value of zero.
+* The radix of this type is 10. As a result it can behave subtly differently from base-2 types.
+* The type has a number of internal guard digits over and above those specified in the template argument.
+Normally these should not be visible to the user.
+* 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_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
+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:]
+
+[cpp_dec_float_eg]
+
+[endsect]
+
+[section:gmp_float gmp_float]
+
+`#include <boost/multiprecision/gmp.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ template <unsigned Digits10>
+ class gmp_float;
+
+ typedef number<gmp_float<50> > mpf_float_50;
+ typedef number<gmp_float<100> > mpf_float_100;
+ typedef number<gmp_float<500> > mpf_float_500;
+ typedef number<gmp_float<1000> > mpf_float_1000;
+ typedef number<gmp_float<0> > mpf_float;
+
+ }} // 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
+much greater precision.
+
+Type `gmp_float` can be used at fixed precision by specifying a non-zero `Digits10` template parameter, or
+at variable precision by setting the template argument to zero. The typedefs mpf_float_50, mpf_float_100,
+mpf_float_500, mpf_float_1000 provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision
+respectively. The typedef mpf_float provides a variable precision type whose precision can be controlled via the
+`number`s member functions.
+
+[note This type only provides standard library and `numeric_limits` support when the precision is fixed at compile time.]
+
+As well as the usual conversions from arithmetic and string types, instances of `number<mpf_float<N> >` are
+copy constructible and assignable from:
+
+* The [gmp] native types `mpf_t`, `mpz_t`, `mpq_t`.
+* The `number` wrappers around those types: `number<mpf_float<M> >`, `number<gmp_int>`, `number<gmp_rational>`.
+
+It's also possible to access the underlying `mpf_t` via the `data()` member function of `gmp_float`.
+
+Things you should know when using this type:
+
+* Default constructed `gmp_float`s have the value zero (this is the [gmp] library's default behavior).
+* No changes are made to the [gmp] library's global settings, so this type can be safely mixed with
+existing [gmp] code.
+* This backend supports rvalue-references and is move-aware, making instantiations of `number` on this backend move aware.
+* 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,
+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
+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
+as a valid floating point number.
+* Division by zero results in a `std::overflow_error` being thrown.
+
+[h5 [gmp] example:]
+
+[mpf_eg]
+
+[endsect]
+
+[section:mpfr_float mpfr_float]
+
+`#include <boost/multiprecision/mpfr.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ enum mpfr_allocation_type
+ {
+ allocate_stack,
+ allocate_dynamic
+ };
+
+ template <unsigned Digits10, mpfr_allocation_type AllocateType = allocate_dynamic>
+ class mpfr_float_backend;
+
+ typedef number<mpfr_float_backend<50> > mpfr_float_50;
+ typedef number<mpfr_float_backend<100> > mpfr_float_100;
+ typedef number<mpfr_float_backend<500> > mpfr_float_500;
+ typedef number<mpfr_float_backend<1000> > mpfr_float_1000;
+ typedef number<mpfr_float_backend<0> > mpfr_float;
+
+ typedef number<mpfr_float_backend<50, allocate_stack> > static_mpfr_float_50;
+ typedef number<mpfr_float_backend<100, allocate_stack> > static_mpfr_float_100;
+
+ }} // 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
+much greater precision.
+
+Type `mpfr_float_backend` can be used at fixed precision by specifying a non-zero `Digits10` template parameter, or
+at variable precision by setting the template argument to zero. The typedefs mpfr_float_50, mpfr_float_100,
+mpfr_float_500, mpfr_float_1000 provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision
+respectively. The typedef mpfr_float provides a variable precision type whose precision can be controlled via the
+`number`s member functions.
+
+In addition the second template parameter lets you choose between dynamic allocation (the default,
+and uses MPFR's normal allocation routines),
+or stack allocation (where all the memory required for the underlying data types is stored
+within `mpfr_float_backend`). The latter option can result in significantly faster code, at the
+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
+precision[footnote Compiled with VC++10 and /Ox, with MPFR-3.0.0 and MPIR-2.3.0]:
+
+[table
+[[Type][Bessel function evaluation, relative times]]
+[[`number<mpfr_float_backend<50, allocate_static>, et_on>`][1.0 (5.5s)]]
+[[`number<mpfr_float_backend<50, allocate_static>, et_off>`][1.05 (5.8s)]]
+[[`number<mpfr_float_backend<50, allocate_dynamic>, et_on>`][1.05 (5.8s)]]
+[[`number<mpfr_float_backend<50, allocate_dynamic>, et_off>`][1.16 (6.4s)]]
+]
+
+[note This type only provides `numeric_limits` support when the precision is fixed at compile time.]
+
+As well as the usual conversions from arithmetic and string types, instances of `number<mpfr_float_backend<N> >` are
+copy constructible and assignable from:
+
+* The [gmp] native types `mpf_t`, `mpz_t`, `mpq_t`.
+* The [mpfr] native type `mpfr_t`.
+* The `number` wrappers around those types: `number<mpfr_float_backend<M> >`, `number<mpf_float<M> >`, `number<gmp_int>`, `number<gmp_rational>`.
+
+It's also possible to access the underlying `mpfr_t` via the data() member function of `mpfr_float_backend`.
+
+Things you should know when using this type:
+
+* A default constructed `mpfr_float_backend` is set to a NaN (this is the default [mpfr] behavior).
+* All operations use round to nearest.
+* No changes are made to [gmp] or [mpfr] global settings, so this type can coexist with existing
+[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
+as a valid floating point number.
+* Division by zero results in an infinity.
+
+[h5 [mpfr] example:]
+
+[mpfr_eg]
+
+[endsect]
+
+[section:float128 float128]
+
+`#include <boost/multiprecision/float128.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ class float128_backend;
+
+ typedef number<float128_backend, et_off> float128;
+
+ }} // 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
+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
+`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
+function of `float128_backend`.
+
+Things you should know when using this type:
+
+* Default constructed `float128`s have the value zero.
+* This backend supports rvalue-references and is move-aware, making instantiations of `number` on this backend move aware.
+* It is not possible to round-trip objects of this type to and from a string and get back
+exactly the same value when compiled with Intel's C++ compiler and using `_Quad` as the underlying type: this is a current limitation of
+our code. Round tripping when using `__float128` as the underlying type is possible (both for GCC and Intel).
+* 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 being produced.
+* Type `float128` can be used as a literal type (constexpr support).
+* When using the Intel compiler, the underlying type defaults to `__float128` if it's available and `_Quad` if not. You can override
+the default by defining either `BOOST_MP_USE_FLOAT128` or `BOOST_MP_USE_QUAD`.
+* When the underlying type is Intel's `_Quad` type, the code must be compiled with the compiler option `-Qoption,cpp,--extended_float_type`.
+
+[h5 float128 example:]
+
+[float128_eg]
+
+[endsect]
+
+[section:fp_eg Examples]
+
+[import ../example/floating_point_examples.cpp]
+
+[section:aos Area of Circle]
+
+[AOS1]
+[AOS2]
+[AOS3]
+
+[endsect]
+
+[section:jel Defining a Special Function.]
+
+[JEL]
+
+[endsect]
+
+[section:nd Calculating a Derivative]
+
+[ND1]
+[ND2]
+[ND3]
+
+[endsect]
+
+[section:gi Calculating an Integral]
+
+[GI1]
+[GI2]
+
+[endsect]
+
+[section:poly_eg Polynomial Evaluation]
+
+[POLY]
+
+[endsect]
+
+[endsect]
+
+[endsect]
+
+[section:interval Interval Number Types]
+
+There is one currently only one interval number type supported - [mpfi].
+
+[section:mpfi mpfi_float]
+
+`#include <boost/multiprecision/mpfi.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ template <unsigned Digits10>
+ class mpfi_float_backend;
+
+ typedef number<mpfi_float_backend<50> > mpfi_float_50;
+ typedef number<mpfi_float_backend<100> > mpfifloat_100;
+ typedef number<mpfi_float_backend<500> > mpfifloat_500;
+ typedef number<mpfi_float_backend<1000> > mpfi_float_1000;
+ typedef number<mpfi_float_backend<0> > mpfi_float;
+
+ }} // 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
+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
+at variable precision by setting the template argument to zero. The typedefs mpfi_float_50, mpfi_float_100,
+mpfi_float_500, mpfi_float_1000 provide arithmetic types at 50, 100, 500 and 1000 decimal digits precision
+respectively. The typedef mpfi_float provides a variable precision type whose precision can be controlled via the
+`number`s member functions.
+
+[note This type only provides `numeric_limits` support when the precision is fixed at compile time.]
+
+As well as the usual conversions from arithmetic and string types, instances of `number<mpfi_float_backend<N> >` are
+copy constructible and assignable from:
+
+* The [mpfi] native type `mpfi_t`.
+* The `number` wrappers around [mpfi] or [mpfr]: `number<mpfi_float_backend<M> >` and `number<mpfr_float<M> >`.
+* There is a two argument constructor taking two `number<mpfr_float<M> >` arguments specifying the interval.
+
+It's also possible to access the underlying `mpfi_t` via the data() member function of `mpfi_float_backend`.
+
+Things you should know when using this type:
+
+* A default constructed `mpfi_float_backend` is set to a NaN (this is the default [mpfi] behavior).
+* No changes are made to [gmp] or [mpfr] global settings, so this type can coexist with existing
+[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
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+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);
+
+Returns `true` if `lower(a) == upper(a)`.
+
+[h5 [mpfi] example:]
+
+[mpfi_eg]
+
+[endsect]
+
+[endsect]
+
+[section:rational Rational Number Types]
+
+The following back-ends provide rational number arithmetic:
+
+[table
+[[Backend Type][Header][Radix][Dependencies][Pros][Cons]]
+[[`cpp_rational`][boost/multiprecision/cpp_int.hpp][2][None][An all C++ Boost-licensed implementation.][Slower than [gmp].]]
+[[`gmp_rational`][boost/multiprecision/gmp.hpp][2][[gmp]][Very fast and efficient back-end.][Dependency on GNU licensed [gmp] library.]]
+[[`tommath_rational`][boost/multiprecision/tommath.hpp][2][[tommath]][All C/C++ implementation that's Boost Software Licence compatible.][Slower than [gmp].]]
+[[`rational_adaptor`][boost/multiprecision/rational_adaptor.hpp][N/A][none][All C++ adaptor that allows any integer back-end type to be used as a rational type.][Requires an underlying integer back-end type.]]
+[[`boost::rational`][boost/rational.hpp][N/A][None][A C++ rational number type that can used with any `number` integer type.][The expression templates used by `number` end up being "hidden" inside `boost::rational`: performance may well suffer as a result.]]
+]
+
+[section:cpp_rational cpp_rational]
+
+`#include <boost/multiprecision/cpp_int.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ typedef rational_adaptor<cpp_int_backend<> > cpp_rational_backend;
+
+ typedef number<cpp_rational_backend> cpp_rational;
+
+ }} // namespaces
+
+The `cpp_rational_backend` type is used via the typedef `boost::multiprecision::cpp_rational`. It provides
+a rational number type that is a drop-in replacement for the native C++ number types, but with unlimited precision.
+
+As well as the usual conversions from arithmetic and string types, instances of `cpp_rational` are copy constructible
+and assignable from type `cpp_int`.
+
+There is also a two argument constructor that accepts a numerator and denominator: both of type `cpp_int`.
+
+There are also non-member functions:
+
+ cpp_int numerator(const cpp_rational&);
+ cpp_int denominator(const cpp_rational&);
+
+which return the numerator and denominator of the number.
+
+Things you should know when using this type:
+
+* Default constructed `cpp_rational`s have the value zero.
+* Division by zero results in a `std::overflow_error` being thrown.
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be
+interpreted as a valid rational number.
+
+[h5 Example:]
+
+[cpp_rational_eg]
+
+[endsect]
+
+[section:gmp_rational gmp_rational]
+
+`#include <boost/multiprecision/gmp.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ class gmp_rational;
+
+ typedef number<gmp_rational > mpq_rational;
+
+ }} // namespaces
+
+The `gmp_rational` back-end is used via the typedef `boost::multiprecision::mpq_rational`. It acts as a thin wrapper around the [gmp] `mpq_t`
+to provide a rational number type that is a drop-in replacement for the native C++ number types, but with unlimited precision.
+
+As well as the usual conversions from arithmetic and string types, instances of `number<gmp_rational>` are copy constructible
+and assignable from:
+
+* The [gmp] native types: `mpz_t`, `mpq_t`.
+* `number<gmp_int>`.
+
+There is also a two-argument constructor that accepts a numerator and denominator (both of type `number<gmp_int>`).
+
+There are also non-member functions:
+
+ mpz_int numerator(const mpq_rational&);
+ mpz_int denominator(const mpq_rational&);
+
+which return the numerator and denominator of the number.
+
+It's also possible to access the underlying `mpq_t` via the `data()` member function of `mpq_rational`.
+
+Things you should know when using this type:
+
+* Default constructed `mpq_rational`s have the value zero (this is the [gmp] default behavior).
+* Division by zero results in a `std::overflow_error` being thrown.
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be
+interpreted as a valid rational number.
+* No changes are made to the [gmp] library's global settings, so this type can coexist with existing
+[gmp] code.
+* The code can equally be used with [mpir] as the underlying library - indeed that is the preferred option on Win32.
+
+[h5 Example:]
+
+[mpq_eg]
+
+[endsect]
+
+[section:tommath_rational tommath_rational]
+
+`#include <boost/multiprecision/tommath.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ typedef rational_adpater<tommath_int> tommath_rational;
+ typedef number<tommath_rational > tom_rational;
+
+ }} // namespaces
+
+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.
+
+The advantage of using this type rather than `boost::rational<tom_int>` directly, is that it is expression-template enabled,
+greatly reducing the number of temporaries created in complex expressions.
+
+There are also non-member functions:
+
+ tom_int numerator(const tom_rational&);
+ tom_int denominator(const tom_rational&);
+
+which return the numerator and denominator of the number.
+
+Things you should know when using this type:
+
+* Default constructed `tom_rational`s have the value zero (this the inherited Boost.Rational behavior).
+* Division by zero results in a `std::overflow_error` being thrown.
+* Conversion from a string results in a `std::runtime_error` being thrown if the string can not be
+interpreted as a valid rational number.
+* No changes are made to [tommath]'s global state, so this type can safely coexist with other [tommath] code.
+* Performance of this type has been found to be pretty poor - this need further investigation - but it appears that Boost.Rational
+needs some improvement in this area.
+
+[h5 Example:]
+
+[mp_rat_eg]
+
+[endsect]
+
+[section:br Use With Boost.Rational]
+
+All of the integer types in this library can be used as template arguments to `boost::rational<IntType>`.
+
+Note that using the library in this way largely negates the effect of the expression templates in `number`.
+
+[endsect]
+
+[section:rational_adaptor rational_adaptor]
+
+ namespace boost{ namespace multiprecision{
+
+ template <class IntBackend>
+ class rational_adpater;
+
+ }}
+
+The class template `rational_adaptor` is a back-end for `number` which converts any existing integer back-end
+into a rational-number back-end.
+
+So for example, given an integer back-end type `MyIntegerBackend`, the use would be something like:
+
+ typedef number<MyIntegerBackend> MyInt;
+ typedef number<rational_adaptor<MyIntegerBackend> > MyRational;
+
+ MyRational r = 2;
+ r /= 3;
+ MyInt i = numerator(r);
+ assert(i == 2);
+
+[endsect]
+
+[endsect]
+
+[section:misc Miscellaneous Number Types.]
+
+Backend types listed in this section are predominantly designed to aid debugging.
+
+[section:logged_adaptor logged_adaptor]
+
+`#include <boost/multiprecision/logged_adaptor.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ template <class Backend>
+ void log_postfix_event(const Backend& result, const char* event_description);
+ template <class Backend, class T>
+ void log_postfix_event(const Backend& result1, const T& result2, const char* event_description);
+
+ template <class Backend>
+ void log_prefix_event(const Backend& arg1, const char* event_description);
+ template <class Backend, class T>
+ void log_prefix_event(const Backend& arg1, const T& arg2, const char* event_description);
+ template <class Backend, class T, class U>
+ void log_prefix_event(const Backend& arg1, const T& arg2, const U& arg3, const char* event_description);
+ template <class Backend, class T, class U, class V>
+ void log_prefix_event(const Backend& arg1, const T& arg2, const U& arg3, const V& arg4, const char* event_description);
+
+ template <Backend>
+ class logged_adaptor;
+
+ }} // namespaces
+
+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.
+Optionally, `log_postfix_event` takes a second result argument: this occurs when the result of the operation is not a `number`,
+for example when `fpclassify` is called, `log_postfix_event` will be called with `result1` being the argument to the function, and
+`result2` being the integer result of `fpclassify`.
+
+The default versions of `log_prefix_event` and `log_postfix_event` do nothing, it is therefore up to the user to overload these
+for the particular backend being observed.
+
+This type provides `numeric_limits` support whenever the template argument Backend does so.
+
+This type is particularly useful when combined with an interval number type - in this case we can use `log_postfix_event`
+to monitor the error accumulated after each operation. We could either set some kind of trap whenever the accumulated error
+exceeds some threshold, or simply print out diagnostic information. Using this technique we can quickly locate the cause of
+numerical instability in a particular routine. The following example demonstrates this technique in a trivial algorithm
+that deliberately introduces cancellation error:
+
+[logged_adaptor]
+
+When we examine program output we can clearly see that the diameter of the interval increases after each subtraction:
+
+[logged_adaptor_output]
+
+[endsect]
+
+[section:debug_adaptor debug_adaptor]
+
+`#include <boost/multiprecision/debug_adaptor.hpp>`
+
+ namespace boost{ namespace multiprecision{
+
+ template <Backend>
+ class debug_adaptor;
+
+ }} // namespaces
+
+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.
+
+This type is particularly useful when your debugger provides a good view of `std::string`: when this is the case
+multiprecision values can easily be inspected in the debugger by looking at the `debug_value` member of `debug_adaptor`.
+The down side of this approach is that runtimes are much slower when using this type. Set against that it can make
+debugging very much easier, certainly much easier than sprinkling code with `printf` statements.
+
+When used in conjunction with the Visual C++ debugger visualisers, the value of a multiprecision type that uses this
+backend is displayed in the debugger just a builtin value would be, here we're inspecting a value of type
+`number<debug_adaptor<cpp_dec_float<50> > >`:
+
+[$../debugger1.png]
+
+Otherwise you will need to expand out the view and look at the "debug_value" member:
+
+[$../debugger2.png]
+
+It works for all the backend types equally too, here it is inspecting a `number<debug_adaptor<gmp_rational> >`:
+
+[$../debugger3.png]
+
+
+[endsect]
+
+[section:visualizers Visual C++ Debugger Visualizers]
+
+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
+[@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.
+
+[note These visualizers have only been tested with VC10, also given the ability of buggy visualizers to crash your Visual C++
+debugger, make sure you back up `autoexp.dat` file before using these!!]
+
+The first visualizer provides improved views of `debug_adaptor`:
+
+[$../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.
+
+Here's what it looks like for small values:
+
+[$../debugger4.png]
+
+And for larger values:
+
+[$../debugger5.png]
+
+There is also a `~raw` child member that
+lets you see the actual members of the class:
+
+[$../debugger6.png]
+
+The visualizer for `cpp_dec_float` shows the first few digits of the value in the preview field, and the full array of digits
+when you expand the view. As before the `~raw` child gives you access to the actual data members:
+
+[$../debugger7.png]
+
+[endsect]
+
+[endsect]
+
+[section:conversions Constructing and Interconverting Between Number Types]
+
+All of the number types that are based on `number` have certain conversion rules in common.
+In particular:
+
+* 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):
+
+ cpp_dec_float_50 df(0.5); // OK construction from double
+ cpp_int i(450); // OK constructs from signed int
+ cpp_int j = 3.14; // Error, lossy conversion.
+
+* A number can be explicitly constructed from an arithmetic type, even when the conversion is lossy:
+
+ cpp_int i(3.14); // OK explicit conversion
+ i = static_cast<cpp_int>(3.14) // OK explicit conversion
+ i.assign(3.14); // OK, explicit assign and avoid a temporary from the cast above
+ i = 3.14; // Error, no implicit assignment operator for lossy conversion.
+ cpp_int j = 3.14; // Error, no implicit constructor for lossy conversion.
+
+* A `number` can be converted to any built in type, via the `convert_to` member function:
+
+ mpz_int z(2);
+ int i = z.template convert_to<int>(); // sets i to 2
+
+* Conversions to rational numbers from floating point ones are always allowed, and are exact and implicit
+as long as the rational number uses an unbounded integer type. Please be aware that constructing a rational
+number from an extended precision floating point type with a large exponent range can effectively run the system
+out of memory, as in the extreme case ['2[super max_exponent] / CHAR_BITS] bytes of storage may be required. This
+does not represent a problem for built in floating point types however, as the exponent range for these is rather
+limited.
+
+* Conversions to floating point numbers from rational ones are rounded to nearest (less than 0.5ulp error)
+as long as the floating point number is binary, and the integer type used by the rational number is unbounded.
+
+Additional conversions may be supported by particular backends.
+
+* 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);
+ int i = z; // Error, implicit conversion not allowed.
+ int j = static_cast<int>(z); // OK explicit conversion.
+
+* Any number type can be ['explicitly] constructed (or assigned) from a `const char*` or a `std::string`:
+
+ // pi to 50 places from a string:
+ cpp_dec_float_50 df("3.14159265358979323846264338327950288419716939937510");
+ // Integer type will automatically detect "0x" and "0" prefixes and parse the string accordingly:
+ cpp_int i("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000");
+ // Invalid input always results in a std::runtime_error being thrown:
+ i = static_cast<cpp_int>("3.14");
+ // implicit conversions from strings are not allowed:
+ i = "23"; // Error, no assignment operator for implicit conversion from string
+ // assign member function, avoids having to create a temporary via a static_cast:
+ i.assign("23"); // OK
+
+* Any number type will interoperate with the builtin types in arithmetic expressions as long as the conversions
+are not lossy:
+
+ // pi to 50 places from a string:
+ cpp_dec_float_50 df = "3.14159265358979323846264338327950288419716939937510";
+ // Multiply by 2 - using an integer literal here is usually more efficient
+ // than constructing a temporary:
+ df *= 2;
+
+ // You can't mix integer types with floats though:
+ cpp_int i = 2;
+ 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:
+ std::cout << std::setprecision(std::numeric_limits<cpp_dec_float_50>::max_digits10)
+ << df << std::endl
+ cpp_int i = 1;
+ i <<= 256;
+ // Now print in hex format with prefix:
+ std::cout << std::hex << std::showbase << i << std::endl;
+
+* 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:
+
+ int128_t i128 = 0;
+ int266_t i256 = i128; // OK implicit widening conversion
+ i128_t = i256; // Error, no assignment operator found, narrowing conversion is explicit
+ i128_t = static_cast<int128_t>(i256); // OK, explicit narrowing conversion
+
+ 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.
+
+* 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 -
+ // 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);
+ // We can always promote from int to rational, int to float, or rational to float:
+ cpp_rational cppr(cppi); // OK, int to rational
+ cpp_dec_float_50 df(cppi); // OK, int to float
+ df = static_cast<cpp_dec_float_50>(cppr); // OK, explicit rational to float conversion
+ // However narrowing and/or implicit conversions always fail:
+ cppi = df; // Compiler error, conversion not allowed
+
+* Other interconversions may be allowed as special cases, whenever the backend allows it:
+
+ mpf_t m; // Native GMP type.
+ mpf_init_set_ui(m, 0); // set to a value;
+ mpf_float i(m); // copies the value of the native type.
+
+More information on what additional types a backend supports conversions from are given in the tutorial for each backend.
+The converting constructor will be implicit if the backend's converting constructor is also implicit, and explicit if the
+backends converting constructor is also explicit.
+
+[endsect]
+
+[section:random Generating Random Numbers]
+
+Random numbers are generated in conjunction with Boost.Random. However, since Boost.Random is unaware
+of [@http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic arbitrary precision] numbers, it's necessary to include the header:
+
+ #include <boost/multiprecision/random.hpp>
+
+In order to act as a bridge between the two libraries.
+
+Integers with /N/ random bits are generated using `independent_bits_engine`:
+
+[random_eg1]
+
+Alternatively we can generate integers in a given range using `uniform_int_distribution`, this will
+invoke the underlying engine multiple times to build up the required number of bits in the result:
+
+[random_eg2]
+
+Floating point values in \[0,1) are generated using `uniform_01`, 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 `independent_bits_engine` 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):
+
+[random_eg3]
+
+Finally, we can modify the above example to produce numbers distributed according to some distribution:
+
+[random_eg4]
+
+[endsect]
+
+[section:primetest Primality Testing]
+
+The library implements a Miller-Rabin test for primality:
+
+ #include <boost/multiprecision/miller_rabin.hpp>
+
+ template <class Backend, expression_template_option ExpressionTemplates, class Engine>
+ bool miller_rabin_test(const number<Backend, ExpressionTemplates>& n, unsigned trials, Engine& gen);
+
+ template <class Backend, expression_template_option ExpressionTemplates, class Engine>
+ bool miller_rabin_test(const number<Backend, ExpressionTemplates>& n, unsigned trials);
+
+These functions perform a Miller-Rabin test for primality, if the result is `false` then /n/ is definitely composite,
+while if the result is true then n is probably prime. The probability to declare a composite n as probable prime is
+at most 0.25[super trials]. Note that this does not allow a statement about the probability of n being actually
+prime (for that, the prior probability would have to be known). The algorithm used performs some
+trial divisions to exclude small prime factors, does one Fermat test to exclude many more composites, and then
+uses the Miller-Rabin algorithm straight out of
+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
+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:
+
+[safe_prime]
+
+[endsect]
+
+[section:lits Literal Types and `constexpr` Support]
+
+[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
+`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
+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
+`boost::multiprecision::unchecked`.
+
+For example:
+
+ using namespace boost::multiprecision;
+
+ constexpr int128_t i = 0; // OK, fixed precision int128_t has no allocator.
+ constexpr uint1024_t j = 0xFFFFFFFF00000000uLL; // OK, fixed precision uint1024_t has no allocator.
+
+ constexpr checked_uint128_t k = -1; // Error, checked type is not a literal type as we need runtime error checking.
+ constexpr cpp_int l = 2; // Error, type is not a literal as it performs memory management.
+
+There is also limited support for user defined-literals - these are limited to unchecked, fixed precision `cpp_int`'s
+which are specified in hexadecimal notation. The suffixes supported are:
+
+[table
+[[Suffix][Meaning]]
+[[_cppi][Specifies a value of type: `number<cpp_int_backend<N,N,signed_magnitude,unchecked,void> >`, where N is chosen
+to contain just enough digits to hold the number specified.]]
+[[_cppui][Specifies a value of type: `number<cpp_int_backend<N,N,unsigned_magnitude,unchecked,void> >`, where N is chosen
+to contain just enough digits to hold the number specified.]]
+[[_cppi['N]][Specifies a value of type `number<cpp_int_backend<N,N,signed_magnitude,unchecked,void> >`.]]
+[[_cppui['N]][Specifies a value of type `number<cpp_int_backend<N,N,signed_magnitude,unchecked,void> >`.]]
+]
+
+In each case, use of these suffixes with hexadecimal values produces a `constexpr` result.
+
+Examples:
+
+ //
+ // Any use of user defined literals requires that we import the literal-operators
+ // into current scope first:
+ using namespace boost::multiprecision::literals;
+ //
+ // To keep things simple in the example, we'll make our types used visible to this scope as well:
+ using namespace boost::multiprecision;
+ //
+ // The value zero as a number<cpp_int_backend<4,4,signed_magnitude,unchecked,void> >:
+ constexpr auto a = 0x0_cppi;
+ // The type of each constant has 4 bits per hexadecimal digit,
+ // so this is of type uint256_t (ie number<cpp_int_backend<256,256,unsigned_magnitude,unchecked,void> >):
+ constexpr auto b = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui;
+ //
+ // Smaller values can be assigned to larger values:
+ int256_t c = 0x1234_cppi; // OK
+ //
+ // However, this does not currently work in constexpr contexts:
+ constexpr int256_t d = 0x1_cppi; // Compiler error
+ //
+ // Constants can be padded out with leading zeros to generate wider types:
+ constexpr uint256_t e = 0x0000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFF_cppui; // OK
+ //
+ // However, specific width types are best produced with specific-width suffixes,
+ // ones supported by default are `_cpp[u]i128`, `_cpp[u]i256`, `_cpp[u]i512`, `_cpp[u]i1024`.
+ //
+ constexpr int128_t f = 0x1234_cppi128; // OK, always produces an int128_t as the result.
+ constexpr uint1024_t g = 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccc_cppui1024;
+ //
+ // If other specific width types are required, then there is a macro for generating the operators
+ // for these. The macro can be used at namespace scope only:
+ //
+ BOOST_MP_DEFINE_SIZED_CPP_INT_LITERAL(2048);
+ //
+ // Now we can create 2048-bit literals as well:
+ constexpr auto h = 0xff_cppi2048; // h is of type number<cpp_int_backend<2048,2048,signed_magnitude,unchecked,void> >
+ //
+ // Finally negative values are handled via the unary minus operator:
+ //
+ constexpr int1024_t i = -0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_cppui1024;
+ //
+ // Which means this also works:
+ constexpr int1024_t j = -g; // OK: unary minus operator is constexpr.
+
+[endsect]
+
+[section:rounding Rounding Rules for Conversions]
+
+As a general rule, all conversions between unrelated types are performed using basic arithmetic operations, therefore
+conversions are either exact, or follow the same rounding rules as arithmetic for the type in question.
+
+The following table summarises the situation for conversions from native types:
+
+[table
+[[Backend][Rounding Rules]]
+[[__cpp_int][Conversions from integer types are exact if the target has sufficient precision, otherwise they
+ truncate to the first 2^MaxBits bits (modulo arithmetic). Conversions from floating point types
+ are truncating to the nearest integer.]]
+[[__gmp_int][Conversions are performed by the GMP library except for conversion from `long double` which is truncating.]]
+[[__tom_int][Conversions from floating point types are truncating, all others are performed by libtommath and are exact.]]
+[[__gmp_float][Conversions are performed by the GMP library except for conversion from `long double` which should be exact
+ provided the target type has as much precision as a `long double`.]]
+[[__mpfr_float_backend][All conversions are performed by the underlying MPFR library.]]
+[[__cpp_dec_float][All conversions are performed using basic arithmetic operations and are truncating.]]
+[[__gmp_rational][See __gmp_int]]
+[[__cpp_rational][See __cpp_int]]
+[[__tommath_rational][See __tom_int]]
+]
+
+[endsect]
+
+[section:mixed Mixed Precision Arithmetic]
+
+Mixed precision arithmetic is fully supported by the library.
+
+There are two different forms:
+
+* Where the operands are of different precision.
+* Where the operands are of the same precision, but yield a higher precision result.
+
+[h4 Mixing Operands of Differing Precision]
+
+If the arguments to a binary operator are of different precision, then the operation is allowed
+as long as there is an unambiguous implicit conversion from one argument type to the other.
+In all cases the arithmetic is performed "as if" the lower precision type is promoted to the
+higher precision type before applying the operator. However, particular backends may optimise
+this and avoid actually creating a temporary if they are able to do so.
+
+For example:
+
+ mpfr_float_50 a(2), b;
+ mpfr_float_100 c(3), d;
+ static_mpfr_float_50 e(5), f;
+ mpz_int i(20);
+
+ d = a * c; // OK, result of operand is an mpfr_float_100.
+ b = a * c; // Error, can't convert the result to an mpfr_float_50 as it will lose digits.
+ f = a * e; // Error, operator is ambiguous, result could be of either type.
+ f = e * i; // OK, unambiguous conversion from mpz_int to static_mpfr_float_50
+
+[h4 Operands of the Same Precision]
+
+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
+free functions:
+
+ template <class ResultType, class Source1 class Source2>
+ ResultType& add(ResultType& result, const Source1& a, const Source2& b);
+
+ template <class ResultType, class Source1 class Source2>
+ ResultType& subtract(ResultType& result, const Source1& a, const Source2& b);
+
+ template <class ResultType, class Source1 class Source2>
+ 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"
+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.
+
+The type `ResultType` must be an instance of class `number`, and the types `Source1` and `Source2`
+may be either instances of class `number` or native integer types. The latter is an optimization
+that allows arithmetic to be performed on native integer types producing an extended precision result.
+
+For example:
+
+[mixed_eg]
+
+Produces the output:
+
+[mixed_output]
+
+[h4 Backends With Optimized 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,
+than it is to explicitly cast the operands to the result type:
+
+__mpfr_float_backend, __mpf_float, __cpp_int.
+
+[endsect]
+
+[section:gen_int Generic Integer Operations]
+
+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
+if no built in type is available, a __cpp_int of appropriate precision will be used.
+
+Some of these functions are trivial, others use compiler intrinsics (where available) to ensure optimal
+evaluation.
+
+The overloaded functions are:
+
+ template <class Integer, class I2>
+ Integer& multiply(Integer& result, const I2& a, const I2& b);
+
+Multiplies two `I2` values, to produce a wider `Integer` result.
+
+Returns `result = a * b` without overflow or loss of precision in the multiplication.
+
+ template <class Integer, class I2>
+ Integer& add(Integer& result, const I2& a, const I2& b);
+
+Adds two `I2` values, to produce a wider `Integer` result.
+
+Returns `result = a + b` without overflow or loss of precision in the addition.
+
+ template <class Integer, class I2>
+ Integer& subtract(Integer& result, const I2& a, const I2& b);
+
+Subtracts two `I2` values, to produce a wider `Integer` result.
+
+Returns `result = a - b` without overflow or loss of precision in the subtraction.
+
+ template <class Integer>
+ Integer powm(const Integer& b, const Integer& p, const Integer& m);
+
+Returns b[super p] % m.
+
+ template <class Integer>
+ void divide_qr(const Integer& x, const Integer& y, Integer& q, Integer& r);
+
+Sets `q = x / y` and `r = x % y`.
+
+ template <class Integer1, class Integer2>
+ Integer2 integer_modulus(const Integer1& x, Integer2 val);
+
+Returns x % val;
+
+ template <class Integer>
+ unsigned lsb(const Integer& x);
+
+Returns the (zero-based) index of the least significant bit of `x`.
+
+Throws a `std::domain_error` if `x <= 0`.
+
+ template <class Integer>
+ unsigned msb(const Integer& x);
+
+Returns the (zero-based) index of the most significant bit of `x`.
+
+Throws a `std::domain_error` if `x <= 0`.
+
+ template <class Integer>
+ bool bit_test(const Integer& val, unsigned index);
+
+Returns `true` if bit `index` is set in `val`.
+
+ template <class Integer>
+ Integer& bit_set(Integer& val, unsigned index);
+
+Sets the `index` bit in `val`.
+
+ template <class Integer>
+ Integer& bit_unset(Integer& val, unsigned index);
+
+Unsets the `index` bit in `val`.
+
+ template <class Integer>
+ Integer& bit_flip(Integer& val, unsigned index);
+
+Flips the `index` bit in `val`.
+
+ template <class Integer>
+ Integer sqrt(const Integer& x);
+ template <class Integer>
+ Integer sqrt(const Integer& x, Integer& r);
+
+Returns the integer square root `s` of x and sets `r` to the remainder ['x - s[super 2]].
+
+ template <class Engine>
+ bool miller_rabin_test(const number-or-expression-template-type& n, unsigned trials, Engine& gen);
+ bool miller_rabin_test(const number-or-expression-template-type& n, unsigned trials);
+
+The regular Miller-Rabin functions in `<boost/multiprecision/miller_rabin.hpp>` are defined in terms of the above
+generic operations, and so function equally well for built in and multiprecision types.
+
+[endsect]
+
+[section:serial Boost.Serialization Support]
+
+Support for serialization comes in two forms:
+
+* Classes __number, __debug_adaptor, __logged_adaptor and __rational_adaptor have "pass through" serialization
+support which requires the underlying backend to be serializable.
+* Backends __cpp_int, __cpp_bin_float, __cpp_dec_float and __float128 have full support for Boost.Serialization.
+
+[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 identical 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 example, 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 essence 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* recommended 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]
+
+[section:number number]
+
+[h4 Synopsis]
+
+ namespace boost{ namespace multiprecision{
+
+ enum expression_template_option { et_on = 1, et_off = 0 };
+
+ 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>
+ class number
+ {
+ number();
+ number(see-below);
+ number& operator=(see-below);
+ number& assign(see-below);
+
+ // Member operators
+ number& operator+=(const ``['see-below]``&);
+ number& operator-=(const ``['see-below]``&);
+ number& operator*=(const ``['see-below]``&);
+ number& operator/=(const ``['see-below]``&);
+ number& operator++();
+ number& operator--();
+ number operator++(int);
+ number operator--(int);
+
+ number& operator%=(const ``['see-below]``&);
+ number& operator&=(const ``['see-below]``&);
+ number& operator|=(const ``['see-below]``&);
+ number& operator^=(const ``['see-below]``&);
+ number& operator<<=(const ``['integer-type]``&);
+ number& operator>>=(const ``['integer-type]``&);
+
+ // Use in Boolean context:
+ operator ``['convertible-to-bool-type]``()const;
+ // swap:
+ void swap(number& other);
+ // Sign:
+ bool is_zero()const;
+ int sign()const;
+ // string conversion:
+ std::string str()const;
+ // Generic conversion mechanism
+ template <class T>
+ T convert_to()const;
+ template <class T>
+ explicit operator T ()const;
+ // precision control:
+ static unsigned default_precision();
+ static void default_precision(unsigned digits10);
+ unsigned precision()const;
+ void precision(unsigned digits10);
+ // Comparison:
+ int compare(const number<Backend>& o)const;
+ template <class V>
+ typename enable_if<is_convertible<V, number<Backend, ExpressionTemplates> >, int>::type
+ compare(const V& o)const;
+ // Access to the underlying implementation:
+ Backend& backend();
+ const Backend& backend()const;
+ };
+
+ // Non member operators:
+ ``['unmentionable-expression-template-type]`` operator+(const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator-(const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator+(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator-(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator*(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator/(const ``['see-below]``&, const ``['see-below]``&);
+ // Integer only operations:
+ ``['unmentionable-expression-template-type]`` operator%(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator&(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator|(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator^(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator<<(const ``['see-below]``&, const ``['integer-type]``&);
+ ``['unmentionable-expression-template-type]`` operator>>(const ``['see-below]``&, const ``['integer-type]``&);
+ // Comparison operators:
+ bool operator==(const ``['see-below]``&, const ``['see-below]``&);
+ bool operator!=(const ``['see-below]``&, const ``['see-below]``&);
+ bool operator< (const ``['see-below]``&, const ``['see-below]``&);
+ bool operator> (const ``['see-below]``&, const ``['see-below]``&);
+ bool operator<=(const ``['see-below]``&, const ``['see-below]``&);
+ bool operator>=(const ``['see-below]``&, const ``['see-below]``&);
+
+ // Swap:
+ template <class Backend, expression_template_option ExpressionTemplates>
+ void swap(number<Backend, ExpressionTemplates>& a, number<Backend, ExpressionTemplates>& b);
+
+ // iostream support:
+ template <class Backend, expression_template_option ExpressionTemplates>
+ std::ostream& operator << (std::ostream& os, const number<Backend, ExpressionTemplates>& r);
+ std::ostream& operator << (std::ostream& os, const ``['unmentionable-expression-template-type]``& r);
+ template <class Backend, expression_template_option ExpressionTemplates>
+ std::istream& operator >> (std::istream& is, number<Backend, ExpressionTemplates>& r);
+
+ // Arithmetic with a higher precision result:
+ template <class ResultType, class Source1 class Source2>
+ ResultType& add(ResultType& result, const Source1& a, const Source2& b);
+ template <class ResultType, class Source1 class Source2>
+ ResultType& subtract(ResultType& result, const Source1& a, const Source2& b);
+ template <class ResultType, class Source1 class Source2>
+ ResultType& multiply(ResultType& result, const Source1& a, const Source2& b);
+
+ // Non-member function standard library support:
+ ``['unmentionable-expression-template-type]`` abs (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` fabs (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` sqrt (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` floor (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` ceil (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` trunc (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` itrunc (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` ltrunc (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` lltrunc(const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` round (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` iround (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` lround (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` llround(const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` exp (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` log (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` log10 (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` cos (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` sin (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` tan (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` acos (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` asin (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` atan (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` cosh (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` sinh (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` tanh (const ``['number-or-expression-template-type]``&);
+
+ ``['unmentionable-expression-template-type]`` ldexp (const ``['number-or-expression-template-type]``&, ``['integer-type]``);
+ ``['unmentionable-expression-template-type]`` frexp (const ``['number-or-expression-template-type]``&, ``['integer-type]``*);
+ ``['unmentionable-expression-template-type]`` pow (const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` fmod (const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` atan2 (const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` scalbn(const ``['number-or-expression-template-type]``&, ``['integer-type]``);
+ ``['unmentionable-expression-template-type]`` logb (const ``['number-or-expression-template-type]``&);
+ ``['integer-type]`` ilogb (const ``['number-or-expression-template-type]``&);
+
+ // Traits support:
+ template <class T>
+ struct component_type;
+ template <class T>
+ struct number_category;
+ template <class T>
+ struct is_number;
+ template <class T>
+ struct is_number_expression;
+
+ // Integer specific functions:
+ ``['unmentionable-expression-template-type]`` gcd(const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` lcm(const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` pow(const ``['number-or-expression-template-type]``&, unsigned);
+ ``['unmentionable-expression-template-type]`` powm(const ``['number-or-expression-template-type]``& b, const ``['number-or-expression-template-type]``& p, const ``['number-or-expression-template-type]``& m);
+ ``['unmentionable-expression-template-type]`` sqrt(const ``['number-or-expression-template-type]``&);
+ template <class Backend, expression_template_option ExpressionTemplates>
+ number<Backend, EXpressionTemplates> sqrt(const ``['number-or-expression-template-type]``&, number<Backend, EXpressionTemplates>&);
+ template <class Backend, expression_template_option ExpressionTemplates>
+ void divide_qr(const ``['number-or-expression-template-type]``& x, const ``['number-or-expression-template-type]``& y,
+ number<Backend, ExpressionTemplates>& q, number<Backend, ExpressionTemplates>& r);
+ template <class Integer>
+ Integer integer_modulus(const ``['number-or-expression-template-type]``& x, Integer val);
+ unsigned lsb(const ``['number-or-expression-template-type]``& x);
+ unsigned msb(const ``['number-or-expression-template-type]``& x);
+ template <class Backend, class ExpressionTemplates>
+ bool bit_test(const number<Backend, ExpressionTemplates>& val, unsigned index);
+ template <class Backend, class ExpressionTemplates>
+ number<Backend, ExpressionTemplates>& bit_set(number<Backend, ExpressionTemplates>& val, unsigned index);
+ template <class Backend, class ExpressionTemplates>
+ number<Backend, ExpressionTemplates>& bit_unset(number<Backend, ExpressionTemplates>& val, unsigned index);
+ template <class Backend, class ExpressionTemplates>
+ number<Backend, ExpressionTemplates>& bit_flip(number<Backend, ExpressionTemplates>& val, unsigned index);
+ template <class Engine>
+ bool miller_rabin_test(const ``['number-or-expression-template-type]``& n, unsigned trials, Engine& gen);
+ bool miller_rabin_test(const ``['number-or-expression-template-type]``& n, unsigned trials);
+
+ // Rational number support:
+ typename component_type<``['number-or-expression-template-type]``>::type numerator (const ``['number-or-expression-template-type]``&);
+ typename component_type<``['number-or-expression-template-type]``>::type denominator(const ``['number-or-expression-template-type]``&);
+
+ }} // namespaces
+
+ namespace boost{ namespace math{
+
+ // Boost.Math interoperability functions:
+ int fpclassify (const ``['number-or-expression-template-type]``&, int);
+ bool isfinite (const ``['number-or-expression-template-type]``&, int);
+ bool isnan (const ``['number-or-expression-template-type]``&, int);
+ bool isinf (const ``['number-or-expression-template-type]``&, int);
+ bool isnormal (const ``['number-or-expression-template-type]``&, int);
+
+ }} // namespaces
+
+ // numeric_limits support:
+ namespace std{
+
+ template <class Backend, expression_template_option ExpressionTemplates>
+ struct numeric_limits<boost::multiprecision<Backend, ExpressionTemplates> >
+ {
+ /* Usual members here */
+ };
+
+ }
+
+[h4 Description]
+
+ enum expression_template_option { et_on = 1, et_off = 0 };
+
+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
+ { 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.
+It defaults to `et_on`.
+
+ template <class Backend, expression_template_option ExpressionTemplates = expression_template_default<Backend>::value>
+ class number;
+
+Class `number` has two template arguments:
+
+[variablelist
+[[Backend][The actual arithmetic back-end that does all the work.]]
+[[ExpressionTemplates][A Boolean value: when `et_on`, then expression templates are enabled, otherwise when set to `et_off` they are disabled.
+ The default for this parameter is computed via the traits class `expression_template_default` whose member `value` defaults to `et_on` unless
+ the traits class is specialized for a particular backend.]]
+]
+
+ number();
+ number(see-below);
+ number& operator=(see-below);
+ number& assign(see-below);
+
+Type `number` is default constructible, and both copy constructible and assignable from:
+
+* Itself.
+* An expression template which is the result of one of the arithmetic operators.
+* Any builtin arithmetic type, as long as the result would not be lossy (for example float to integer conversion).
+* Any type that the Backend is implicitly constructible or assignable from.
+* An rvalue reference to another `number`. Move-semantics are used for construction if the backend also
+supports rvalue reference construction. In the case of assignment, move semantics are always supported
+when the argument is an rvalue reference irrespective of the backend.
+* Any type in the same family, as long as no loss of precision is involved. For example from `int128_t` to `int256_t`,
+or `cpp_dec_float_50` to `cpp_dec_float_100`.
+
+Type `number` is explicitly constructible from:
+
+* Any type mentioned above.
+* A `std::string` or any type which is convertible to `const char*`.
+* Any arithmetic type (including those that would result in lossy conversions).
+* Any type in the same family, including those that result in loss of precision.
+* Any type that the Backend is explicitly constructible from.
+* Any pair of types for which a generic interconversion exists: that is from integer to integer, integer
+to rational, integer to float, rational to rational, rational to float, or float to float.
+
+The assign member function is available for any type for which an explicit converting constructor exists.
+It is intended to be used where a temporary generated from an explicit assignment would be expensive, for example:
+
+ mpfr_float_50 f50;
+ mpfr_float_100 f100;
+
+ f50 = static_cast<mpfr_float_50>(f100); // explicit cast create a temporary
+ f50.assign(f100); // explicit call to assign create no temporary
+
+In addition, if the type has multiple components (for example rational or complex number types), then there is a
+two argument constructor:
+
+ number(arg1, arg2);
+
+Where the two args must either be arithmetic types, or types that are convertible to the two components of `this`.
+
+ number& operator+=(const ``['see-below]``&);
+ number& operator-=(const ``['see-below]``&);
+ number& operator*=(const ``['see-below]``&);
+ number& operator/=(const ``['see-below]``&);
+ number& operator++();
+ number& operator--();
+ number operator++(int);
+ number operator--(int);
+ // Integer only operations:
+ number& operator%=(const ``['see-below]``&);
+ number& operator&=(const ``['see-below]``&);
+ number& operator|=(const ``['see-below]``&);
+ number& operator^=(const ``['see-below]``&);
+ number& operator<<=(const ``['integer-type]``&);
+ number& operator>>=(const ``['integer-type]``&);
+
+These operators all take their usual arithmetic meanings.
+
+The arguments to these operators is either:
+
+* Another `number<Backend, ExpressionTemplates>`.
+* An expression template derived from `number<Backend>`.
+* Any type implicitly convertible to `number<Backend, ExpressionTemplates>`, including some other instance of class `number`.
+
+For the left and right shift operations, the argument must be a builtin
+integer type with a positive value (negative values result in a `std::runtime_error` being thrown).
+
+ operator ``['convertible-to-bool-type]``()const;
+
+Returns an ['unmentionable-type] that is usable in Boolean contexts (this allows `number` to be used in any
+Boolean context - if statements, conditional statements, or as an argument to a logical operator - without
+type `number` being convertible to type `bool`.
+
+This operator also enables the use of `number` with any of the following operators:
+`!`, `||`, `&&` and `?:`.
+
+ void swap(number& other);
+
+Swaps `*this` with `other`.
+
+ bool is_zero()const;
+
+Returns `true` is `*this` is zero, otherwise `false`.
+
+ int sign()const;
+
+Returns a value less than zero if `*this` is negative, a value greater than zero if `*this` is positive, and zero
+if `*this` is zero.
+
+ std::string str(unsigned precision, bool scientific = true)const;
+
+Returns the number formatted as a string, with at least /precision/ digits, and in scientific format
+if /scientific/ is true.
+
+ template <class T>
+ T convert_to()const;
+
+ template <class T>
+ explicit operator T ()const;
+
+Provides a generic conversion mechanism to convert `*this` to type `T`. Type `T` may be any arithmetic type.
+Optionally other types may also be supported by specific `Backend` types.
+
+
+ static unsigned default_precision();
+ static void default_precision(unsigned digits10);
+ unsigned precision()const;
+ void precision(unsigned digits10);
+
+These functions are only available if the Backend template parameter supports runtime changes to precision. They get and set
+the default precision and the precision of `*this` respectively.
+
+ int compare(const number<Backend, ExpressionTemplates>& o)const;
+ template <class V>
+ typename enable_if<is_convertible<V, number<Backend, ExpressionTemplates> >, int>::type
+ compare(const V& other)const;
+
+Returns:
+
+* A value less that 0 for `*this < other`
+* A value greater that 0 for `*this > other`
+* Zero for `*this == other`
+
+ Backend& backend();
+ const Backend& backend()const;
+
+Returns the underlying back-end instance used by `*this`.
+
+[h4 Non-member operators]
+
+ // Non member operators:
+ ``['unmentionable-expression-template-type]`` operator+(const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator-(const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator+(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator-(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator*(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator/(const ``['see-below]``&, const ``['see-below]``&);
+ // Integer only operations:
+ ``['unmentionable-expression-template-type]`` operator%(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator&(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator|(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator^(const ``['see-below]``&, const ``['see-below]``&);
+ ``['unmentionable-expression-template-type]`` operator<<(const ``['see-below]``&, const ``['integer-type]``&);
+ ``['unmentionable-expression-template-type]`` operator>>(const ``['see-below]``&, const ``['integer-type]``&);
+ // Comparison operators:
+ bool operator==(const ``['see-below]``&, const ``['see-below]``&);
+ bool operator!=(const ``['see-below]``&, const ``['see-below]``&);
+ bool operator< (const ``['see-below]``&, const ``['see-below]``&);
+ bool operator> (const ``['see-below]``&, const ``['see-below]``&);
+ bool operator<=(const ``['see-below]``&, const ``['see-below]``&);
+ bool operator>=(const ``['see-below]``&, const ``['see-below]``&);
+
+These operators all take their usual arithmetic meanings.
+
+The arguments to these functions must contain at least one of the following:
+
+* A `number`.
+* An expression template type derived from `number`.
+* Any type for which `number` has an implicit constructor - for example a builtin arithmetic type.
+
+The return type of these operators is either:
+
+* An ['unmentionable-type] expression template type when `ExpressionTemplates` is `true`.
+* 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,
+and that the argument must be positive (negative arguments result in a `std::runtime_error` being thrown).
+
+[h4 swap]
+
+ template <class Backend, ExpressionTemplates>
+ void swap(number<Backend, ExpressionTemplates>& a, number<Backend, ExpressionTemplates>& b);
+
+Swaps `a` and `b`.
+
+[h4 Iostream Support]
+
+ template <class Backend, expression_template_option ExpressionTemplates>
+ std::ostream& operator << (std::ostream& os, const number<Backend, ExpressionTemplates>& r);
+ template <class Unspecified...>
+ std::ostream& operator << (std::ostream& os, const unmentionable-expression-template& r);
+ template <class Backend, expression_template_option ExpressionTemplates>
+ inline std::istream& operator >> (std::istream& is, number<Backend, ExpressionTemplates>& r)
+
+These operators provided formatted input-output operations on `number` types, and expression templates derived from them.
+
+It's down to the back-end type to actually implement string conversion. However, the back-ends provided with
+this library support all of the iostream formatting flags, field width and precision settings.
+
+[h4 Arithmetic with a higher precision result]
+
+ template <class ResultType, class Source1 class Source2>
+ ResultType& add(ResultType& result, const Source1& a, const Source2& b);
+
+ template <class ResultType, class Source1 class Source2>
+ ResultType& subtract(ResultType& result, const Source1& a, const Source2& b);
+
+ template <class ResultType, class Source1 class Source2>
+ 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"
+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.
+
+The type `ResultType` must be an instance of class `number`, and the types `Source1` and `Source2`
+may be either instances of class `number` or native integer types. The latter is an optimization
+that allows arithmetic to be performed on native integer types producing an extended precision result.
+
+[h4 Non-member standard library function support]
+
+ ``['unmentionable-expression-template-type]`` abs (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` fabs (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` sqrt (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` floor (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` ceil (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` trunc (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` itrunc (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` ltrunc (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` lltrunc(const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` round (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` iround (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` lround (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` llround(const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` exp (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` log (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` log10 (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` cos (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` sin (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` tan (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` acos (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` asin (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` atan (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` cosh (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` sinh (const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` tanh (const ``['number-or-expression-template-type]``&);
+
+ ``['unmentionable-expression-template-type]`` ldexp (const ``['number-or-expression-template-type]``&, ``['integer-type]``);
+ ``['unmentionable-expression-template-type]`` frexp (const ``['number-or-expression-template-type]``&, ``['integer-type]``*);
+ ``['unmentionable-expression-template-type]`` pow (const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` fmod (const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` atan2 (const ``['number-or-expression-template-type]``&, const ``['number-or-expression-template-type]``&);
+ ``['unmentionable-expression-template-type]`` scalbn(const ``['number-or-expression-template-type]``&, ``['integer-type]``);
+ ``['unmentionable-expression-template-type]`` logb (const ``['number-or-expression-template-type]``&);
+ ``['integer-type]`` ilogb (const ``['number-or-expression-template-type]``&);
+
+These functions all behave exactly as their standard library C++11 counterparts do: their argument is either an instance of `number` or
+an expression template derived from it; If the argument is of type `number<Backend, et_off>` then that is also the return type,
+otherwise the return type is an expression template.
+
+The integer type arguments to `ldexp`, `frexp`, `scalbn` and `ilogb` may be either type `int`, or the actual
+type of the exponent of the number type.
+
+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
+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
+such as fixed precision or complex types are added to the library later, then these functions may be extended to support those number types).
+
+The precision of these functions is generally determined by the backend implementation. For example the precision
+of these functions when used with __mpfr_float_backend is determined entirely by [mpfr]. When these functions use our own
+implementations, the accuracy of the transcendental functions is generally a few epsilon. Note however, that the trigonometrical
+functions incur the usual accuracy loss when reducing arguments by large multiples of [pi]. Also note that both __mpf_float
+and __cpp_dec_float have a number of guard digits beyond their stated precision, so the error rates listed for these
+are in some sense artificially low.
+
+The following table shows the error rates we observe for these functions with various backend types, functions not listed
+here are exact (tested on Win32 with VC++10, MPFR-3.0.0, MPIR-2.1.1):
+
+[table
+[[Function][mpfr_float_50][mpf_float_50][cpp_dec_float_50]]
+[[sqrt][1eps][0eps][0eps]]
+[[exp][1eps][0eps][0eps]]
+[[log][1eps][0eps][0eps]]
+[[log10][1eps][0eps][0eps]]
+[[cos][700eps][0eps][0eps]]
+[[sin][1eps][0eps][0eps]]
+[[tan][0eps][0eps][0eps]]
+[[acos][0eps][0eps][0eps]]
+[[asin][0eps][0eps][0eps]]
+[[atan][1eps][0eps][0eps]]
+[[cosh][1045eps[footnote It's likely that the inherent error in the input values to our test cases are to blame here.]][0eps][0eps]]
+[[sinh][2eps][0eps][0eps]]
+[[tanh][1eps][0eps][0eps]]
+[[pow][0eps][4eps][3eps]]
+[[atan2][1eps][0eps][0eps]]
+]
+[h4 Traits Class Support]
+
+ template <class T>
+ struct component_type;
+
+If this is a type with multiple components (for example rational or complex types), then this trait has a single member
+`type` that is the type of those components.
+
+ template <class T>
+ struct number_category;
+
+A traits class that inherits from `mpl::int_<N>` where `N` is one of the enumerated values `number_kind_integer`, `number_kind_floating_point`,
+`number_kind_rational`, `number_kind_fixed_point`, or `number_kind_unknown`. This traits class is specialized for any type that has
+`std::numeric_limits` support as well as for classes in this library: which means it can be used for generic code that must work
+with built in arithmetic types as well as multiprecision ones.
+
+ template <class T>
+ struct is_number;
+
+A traits class that inherits from `mpl::true_` if T is an instance of `number<>`, otherwise from `mpl::false_`.
+
+ template <class T>
+ struct is_number_expression;
+
+A traits class that inherits from `mpl::true_` if T is an expression template type derived from `number<>`, otherwise from `mpl::false_`.
+
+
+
+[h4 Integer functions]
+
+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
+template.
+
+ ``['unmentionable-expression-template-type]`` gcd(const ``['number-or-expression-template-type]``& a, const ``['number-or-expression-template-type]``& b);
+
+Returns the largest integer `x` that divides both `a` and `b`.
+
+ ``['unmentionable-expression-template-type]`` lcm(const ``['number-or-expression-template-type]``& a, const ``['number-or-expression-template-type]``& b);
+
+Returns the smallest integer `x` that is divisible by both `a` and `b`.
+
+ ``['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
+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.
+
+ ``['unmentionable-expression-template-type]`` powm(const ``['number-or-expression-template-type]``& b, const ``['number-or-expression-template-type]``& p, const ``['number-or-expression-template-type]``& m);
+
+Returns ['b[super p] mod m] as an expression template. Fixed precision types are promoted internally to ensure accuracy.
+
+ ``['unmentionable-expression-template-type]`` sqrt(const ``['number-or-expression-template-type]``& a);
+
+Returns the largest integer `x` such that `x * x < a`.
+
+ template <class Backend, expression_template_option ExpressionTemplates>
+ number<Backend, EXpressionTemplates> sqrt(const ``['number-or-expression-template-type]``& a, number<Backend, EXpressionTemplates>& r);
+
+Returns the largest integer `x` such that `x * x < a`, and sets the remainder `r` such that `r = a - x * x`.
+
+ template <class Backend, expression_template_option ExpressionTemplates>
+ void divide_qr(const ``['number-or-expression-template-type]``& x, const ``['number-or-expression-template-type]``& y,
+ number<Backend, ExpressionTemplates>& q, number<Backend, ExpressionTemplates>& r);
+
+Divides x by y and returns both the quotient and remainder. After the call `q = x / y` and `r = x % y`.
+
+ template <class Integer>
+ Integer integer_modulus(const ``['number-or-expression-template-type]``& x, Integer val);
+
+Returns the absolute value of `x % val`.
+
+ unsigned lsb(const ``['number-or-expression-template-type]``& x);
+
+Returns the (zero-based) index of the least significant bit that is set to 1.
+
+Throws a `std::range_error` if the argument is <= 0.
+
+ unsigned msb(const ``['number-or-expression-template-type]``& x);
+
+Returns the (zero-based) index of the most significant bit.
+
+Throws a `std::range_error` if the argument is <= 0.
+
+ template <class Backend, class ExpressionTemplates>
+ bool bit_test(const number<Backend, ExpressionTemplates>& val, unsigned index);
+
+Returns `true` if the bit at /index/ in /val/ is set.
+
+ template <class Backend, class ExpressionTemplates>
+ number<Backend, ExpressionTemplates>& bit_set(number<Backend, ExpressionTemplates>& val, unsigned index);
+
+Sets the bit at /index/ in /val/, and returns /val/.
+
+ template <class Backend, class ExpressionTemplates>
+ number<Backend, ExpressionTemplates>& bit_unset(number<Backend, ExpressionTemplates>& val, unsigned index);
+
+Unsets the bit at /index/ in /val/, and returns /val/.
+
+ template <class Backend, class ExpressionTemplates>
+ number<Backend, ExpressionTemplates>& bit_flip(number<Backend, ExpressionTemplates>& val, unsigned index);
+
+Flips the bit at /index/ in /val/, and returns /val/.
+
+ template <class Engine>
+ bool miller_rabin_test(const ``['number-or-expression-template-type]``& n, unsigned trials, Engine& gen);
+ bool miller_rabin_test(const ``['number-or-expression-template-type]``& n, unsigned trials);
+
+Tests to see if the number /n/ is probably prime - the test excludes the vast majority of composite numbers
+by excluding small prime factors and performing a single Fermat test. Then performs /trials/ Miller-Rabin
+tests. Returns `false` if /n/ is definitely composite, or `true` if /n/ is probably prime with the
+probability of it being composite less than 0.25^trials. Fixed precision types are promoted internally
+to ensure accuracy.
+
+[h4 Rational Number Functions]
+
+ typename component_type<``['number-or-expression-template-type]``>::type numerator (const ``['number-or-expression-template-type]``&);
+ typename component_type<``['number-or-expression-template-type]``>::type denominator(const ``['number-or-expression-template-type]``&);
+
+These functions return the numerator and denominator of a rational number respectively.
+
+[h4 Boost.Math Interoperability Support]
+
+ namespace boost{ namespace math{
+
+ int fpclassify (const ``['number-or-expression-template-type]``&, int);
+ bool isfinite (const ``['number-or-expression-template-type]``&, int);
+ bool isnan (const ``['number-or-expression-template-type]``&, int);
+ bool isinf (const ``['number-or-expression-template-type]``&, int);
+ bool isnormal (const ``['number-or-expression-template-type]``&, int);
+
+ }} // namespaces
+
+These floating-point classification functions behave exactly as their Boost.Math equivalents.
+
+Other Boost.Math functions and templates may also be
+specialized or overloaded to ensure interoperability.
+
+[h4 std::numeric_limits support]
+
+ namespace std{
+
+ template <class Backend, ExpressionTemplates>
+ struct numeric_limits<boost::multiprecision<Backend, ExpressionTemplates> >
+ {
+ /* Usual members here */
+ };
+
+ }
+
+Class template `std::numeric_limits` is specialized for all instantiations of `number` whose precision is known at compile time, plus those
+types whose precision is unlimited (though it is much less useful in those cases). It is not specialized for types
+whose precision can vary at compile time (such as `mpf_float`).
+
+[endsect]
+
+[section:cpp_int_ref cpp_int]
+
+ namespace boost{ namespace multiprecision{
+
+ typedef unspecified-type limb_type;
+
+ 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,
+ class Allocator = std::allocator<limb_type> >
+ class cpp_int_backend;
+ //
+ // Expression templates default to et_off if there is no allocator:
+ //
+ template <unsigned MinDigits, unsigned MaxDigits, cpp_integer_type SignType, cpp_int_check_type Checked>
+ struct expression_template_default<cpp_int_backend<MinDigits, MaxDigits, SignType, Checked, void> >
+ { static const expression_template_option value = et_off; };
+
+ typedef number<cpp_int_backend<> > cpp_int; // arbitrary precision integer
+ typedef rational_adaptor<cpp_int_backend<> > cpp_rational_backend;
+ typedef number<cpp_rational_backend> cpp_rational; // arbitrary precision rational number
+
+ // Fixed precision unsigned types:
+ typedef number<cpp_int_backend<128, 128, unsigned_magnitude, unchecked, void> > uint128_t;
+ typedef number<cpp_int_backend<256, 256, unsigned_magnitude, unchecked, void> > uint256_t;
+ typedef number<cpp_int_backend<512, 512, unsigned_magnitude, unchecked, void> > uint512_t;
+ typedef number<cpp_int_backend<1024, 1024, unsigned_magnitude, unchecked, void> > uint1024_t;
+
+ // Fixed precision signed types:
+ typedef number<cpp_int_backend<128, 128, signed_magnitude, unchecked, void> > int128_t;
+ typedef number<cpp_int_backend<256, 256, signed_magnitude, unchecked, void> > int256_t;
+ typedef number<cpp_int_backend<512, 512, signed_magnitude, unchecked, void> > int512_t;
+ typedef number<cpp_int_backend<1024, 1024, signed_magnitude, unchecked, void> > int1024_t;
+
+ // Over again, but with checking enabled this time:
+ typedef number<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_int;
+ typedef rational_adaptor<cpp_int_backend<0, 0, signed_magnitude, checked> > checked_cpp_rational_backend;
+ typedef number<cpp_rational_backend> checked_cpp_rational;
+
+ // Checked fixed precision unsigned types:
+ typedef number<cpp_int_backend<128, 128, unsigned_magnitude, checked, void> > checked_uint128_t;
+ typedef number<cpp_int_backend<256, 256, unsigned_magnitude, checked, void> > checked_uint256_t;
+ typedef number<cpp_int_backend<512, 512, unsigned_magnitude, checked, void> > checked_uint512_t;
+ typedef number<cpp_int_backend<1024, 1024, unsigned_magnitude, checked, void> > checked_uint1024_t;
+
+ // Fixed precision signed types:
+ typedef number<cpp_int_backend<128, 128, signed_magnitude, checked, void> > checked_int128_t;
+ typedef number<cpp_int_backend<256, 256, signed_magnitude, checked, void> > checked_int256_t;
+ typedef number<cpp_int_backend<512, 512, signed_magnitude, checked, void> > checked_int512_t;
+ typedef number<cpp_int_backend<1024, 1024, signed_magnitude, checked, void> > checked_int1024_t;
+
+ }} // 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
+to change.
+
+The template arguments are:
+
+[variablelist
+[[MinBits][Determines the number of Bits to store directly within the object before resorting to dynamic memory
+ allocation. When zero, this field is determined automatically based on how many bits can be stored
+ in union with the dynamic storage header: setting a larger value may improve performance as larger integer
+ values will be stored internally before memory allocation is required.]]
+[[MaxBits][Determines the maximum number of bits to be stored in the type: resulting in a fixed precision type.
+ When this value is the same as MinBits, then the Allocator parameter is ignored, as no dynamic
+ memory allocation will ever be performed: in this situation the Allocator parameter should be set to
+ 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
+[@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`.]]
+[[Checked][This parameter has two values: `checked` or `unchecked`. See the [link boost_multiprecision.tut.ints.cpp_int tutorial] for more information.]]
+[[Allocator][The allocator to use for dynamic memory allocation, or type `void` if MaxBits == MinBits.]]
+]
+
+The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_integer>`.
+
+More information on this type can be found in the [link boost_multiprecision.tut.ints.cpp_int tutorial].
+
+[endsect]
+
+[section:gmp_int_ref gmp_int]
+
+ namespace boost{ namespace multiprecision{
+
+ class gmp_int;
+
+ typedef number<gmp_int > mpz_int;
+
+ }} // 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
+to change.
+
+The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_integer>`.
+
+More information on this type can be found in the [link boost_multiprecision.tut.ints.gmp_int tutorial].
+
+[endsect]
+
+[section:tom_int_ref tom_int]
+
+ namespace boost{ namespace multiprecision{
+
+ class tommath_int;
+
+ typedef number<tommath_int > tom_int;
+
+ }} // 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
+to change.
+
+The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_integer>`.
+
+More information on this type can be found in the [link boost_multiprecision.tut.ints.tom_int tutorial].
+
+[endsect]
+
+[section:mpf_ref gmp_float]
+
+ namespace boost{ namespace multiprecision{
+
+ template <unsigned Digits10>
+ class gmp_float;
+
+ typedef number<gmp_float<50> > mpf_float_50;
+ typedef number<gmp_float<100> > mpf_float_100;
+ typedef number<gmp_float<500> > mpf_float_500;
+ typedef number<gmp_float<1000> > mpf_float_1000;
+ typedef number<gmp_float<0> > mpf_float;
+
+ }} // 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
+to change.
+
+The class takes a single template parameter - `Digits10` - which is the number of decimal digits precision the type
+should support. When this parameter is zero, then the precision can be set at runtime via `number::default_precision`
+and `number::precision`. Note that this type does not in any way change the GMP library's global state (for example
+it does not change the default precision of the mpf_t data type), therefore you can safely mix this type with existing
+code that uses GMP, and also mix `gmp_float`s of differing precision.
+
+The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_floating_point>`.
+
+More information on this type can be found in the [link boost_multiprecision.tut.floats.gmp_float tutorial].
+
+[endsect]
+
+[section:mpfr_ref mpfr_float_backend]
+
+ namespace boost{ namespace multiprecision{
+
+ template <unsigned Digits10>
+ class mpfr_float_backend;
+
+ typedef number<mpfr_float_backend<50> > mpfr_float_50;
+ typedef number<mpfr_float_backend<100> > mpfr_float_100;
+ typedef number<mpfr_float_backend<500> > mpfr_float_500;
+ typedef number<mpfr_float_backend<1000> > mpfr_float_1000;
+ typedef number<mpfr_float_backend<0> > mpfr_float;
+
+ }} // 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
+to change.
+
+The class takes a single template parameter - `Digits10` - which is the number of decimal digits precision the type
+should support. When this parameter is zero, then the precision can be set at runtime via `number::default_precision`
+and `number::precision`. Note that this type does not in any way change the GMP or MPFR library's global state (for example
+it does not change the default precision of the mpfr_t data type), therefore you can safely mix this type with existing
+code that uses GMP or MPFR, and also mix `mpfr_float_backend`s of differing precision.
+
+The type of `number_category<cpp_int<Args...> >::type` is `mpl::int_<number_kind_floating_point>`.
+
+More information on this type can be found in the [link boost_multiprecision.tut.floats.mpfr_float tutorial].
+
+[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 expressed 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 limited 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{
+
+ template <unsigned Digits10, class ExponentType = boost::int32_t, class Allocator = void>
+ class cpp_dec_float;
+
+ typedef number<cpp_dec_float<50> > cpp_dec_float_50;
+ typedef number<cpp_dec_float<100> > cpp_dec_float_100;
+
+ }} // 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
+to change.
+
+The class takes three template parameters:
+
+[variablelist
+[[Digits10][The number of decimal digits precision the type
+should support. Note that this type does not normally perform any dynamic memory allocation, and as a result the `Digits10`
+template argument should not be set too high or the class's size will grow unreasonably large.]]
+[[ExponentType][A signed integer type that represents the exponent of the number]]
+[[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.]]
+]
+
+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].
+
+[endsect]
+
+[section:internals Internal Support Code]
+
+There are some traits classes which authors of new backends should be aware of:
+
+ namespace boost{ namespace multiprecision{ namespace detail{
+
+ template<typename From, typename To>
+ struct is_explicitly_convertible;
+
+ }}}
+
+Inherits from `boost::integral_constant<bool,true>` if type `From` has an explicit conversion from `To`.
+
+For compilers that support C++11 SFINAE-expressions this trait should "just work". Otherwise it inherits
+from `boost::is_convertible<From, To>::type`, and will need to be specialised for Backends that have
+constructors marked as `explicit`.
+
+ template <class From, class To>
+ struct is_lossy_conversion
+ {
+ static const bool value = see below;
+ };
+
+Member `value` is true if the conversion from `From` to `To` would result in a loss of precision, and `false` otherwise.
+
+The default version of this trait simply checks whether the ['kind] of conversion (for example from a floating point to an integer type)
+is inherently lossy. Note that if either of the types `From` or `To` are of an unknown number category (because `number_category` is not
+specialised for that type) then this trait will be `true`.
+
+ template<typename From, typename To>
+ struct is_restricted_conversion
+ {
+ static const bool value = see below;
+ };
+
+Member `value` is `true` if `From` is only explicitly convertible to `To` and not implicitly convertible, or
+if `is_lossy_conversion<From, To>::value` is `true`. Otherwise `false`.
+
+Note that while this trait is the ultimate arbiter of which constructors are marked as `explicit` in class `number`,
+authors of backend types should generally specialise one of the traits above, rather than this one directly.
+
+ template <class T>
+ is_signed_number;
+ template <class T>
+ is_unsigned_number;
+
+These two traits inherit from either `mpl::true_` or `mpl::false_`, by default types are assumed to be signed unless
+`is_unsigned_number` is specialized for that type.
+
+[endsect]
+
+[section:backendconc Backend Requirements]
+
+The requirements on the `Backend` template argument to `number` are split up into
+sections: compulsory and optional.
+
+Compulsory requirements have no default implementation in the library, therefore if the feature
+they implement is to be supported at all, then they must be implemented by the backend.
+
+Optional requirements have default implementations that are called if the backend doesn't provide
+it's own. Typically the backend will implement these to improve performance.
+
+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,
+`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`,
+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`.
+
+[table Compulsory Requirements on the Backend type.
+[[Expression][Return Type][Comments][Throws]]
+[[`B::signed_types`][`mpl::list<type-list>`][A list of signed integral types that can be assigned to type B. The types shall be
+ listed in order of size, smallest first, and shall terminate in the type that is `std::intmax_t`.][[space]]]
+[[`B::unsigned_types`][`mpl::list<type-list>`][A list of unsigned integral types that can be assigned to type B. The types shall be
+ listed in order of size, smallest first, and shall terminate in the type that is `std::uintmax_t`.][[space]]]
+[[`B::float_types`][`mpl::list<type-list>`][A list of floating-point types that can be assigned to type B.The types shall be
+ listed in order of size, smallest first, and shall terminate in type `long double`.][[space]]]
+[[`B::exponent_type`][A signed integral type.][The type of the exponent of type B. This type is required only for floating point types.][[space]]]
+[[`B()`][ ][Default constructor.][[space]]]
+[[`B(cb)`][ ][Copy Constructor.][[space]]]
+[[`b = b`][`B&`][Assignment operator.][[space]]]
+[[`b = a`][`B&`][Assignment from an Arithmetic type. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.][[space]]]
+[[`b = s`][`B&`][Assignment from a string.][Throws a `std::runtime_error` if the string could not be interpreted as a valid number.]]
+[[`b.swap(b)`][`void`][Swaps the contents of its arguments.][`noexcept`]]
+[[`cb.str(ss, ff)`][`std::string`][Returns the string representation of `b` with `ss` digits and formatted according to the flags set in `ff`.
+ If `ss` is zero, then returns as many digits as are required to reconstruct the original value.][[space]]]
+[[`b.negate()`][`void`][Negates `b`.][[space]]]
+[[`cb.compare(cb2)`][`int`][Compares `cb` and `cb2`, returns a value less than zero if `cb < cb2`, a value greater than zero if `cb > cb2` and zero
+ if `cb == cb2`.][`noexcept`]]
+[[`cb.compare(a)`][`int`][Compares `cb` and `a`, returns a value less than zero if `cb < a`, a value greater than zero if `cb > a` and zero
+ if `cb == a`. The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.][[space]]]
+[[`eval_add(b, cb)`][`void`][Adds `cb` to `b`.][[space]]]
+[[`eval_subtract(b, cb)`][`void`][Subtracts `cb` from `b`.][[space]]]
+[[`eval_multiply(b, cb)`][`void`][Multiplies `b` by `cb`.][[space]]]
+[[`eval_divide(b, cb)`][`void`][Divides `b` by `cb`.]
+ [`std::overflow_error` if cb has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_modulus(b, cb)`][`void`][Computes `b %= cb`, only required when `B` is an integer type.]
+ [`std::overflow_error` if cb has the value zero.]]
+[[`eval_bitwise_and(b, cb)`][`void`][Computes `b &= cb`, only required when `B` is an integer type.][[space]]]
+[[`eval_bitwise_or(b, cb)`][`void`][Computes `b |= cb`, only required when `B` is an integer type.][[space]]]
+[[`eval_bitwise_xor(b, cb)`][`void`][Computes `b ^= cb`, only required when `B` is an integer type.][[space]]]
+[[`eval_complement(b, cb)`][`void`][Computes the ones-complement of `cb` and stores the result in `b`, only required when `B` is an integer type.][[space]]]
+[[`eval_left_shift(b, ui)`][`void`][Computes `b <<= ui`, only required when `B` is an integer type.][[space]]]
+[[`eval_right_shift(b, ui)`][`void`][Computes `b >>= ui`, only required when `B` is an integer type.][[space]]]
+[[`eval_convert_to(pa, cb)`][`void`][Converts `cb` to the type of `*pa` and store the result in `*pa`. Type `B` shall support
+ conversion to at least types `std::intmax_t`, `std::uintmax_t` and `long long`.
+ Conversion to other arithmetic types can then be synthesised using other operations.
+ Conversions to other types are entirely optional.][[space]]]
+[[`eval_frexp(b, cb, pexp)`][`void`][Stores values in `b` and `*pexp` such that the value of `cb` is b * 2[super *pexp], only required when `B` is a floating-point type.][[space]]]
+[[`eval_ldexp(b, cb, exp)`][`void`][Stores a value in `b` that is cb * 2[super exp], only required when `B` is a floating-point type.][[space]]]
+[[`eval_frexp(b, cb, pi)`][`void`][Stores values in `b` and `*pi` such that the value of `cb` is b * 2[super *pi], only required when `B` is a floating-point type.]
+ [`std::runtime_error` if the exponent of cb is too large to be stored in an `int`.]]
+[[`eval_ldexp(b, cb, i)`][`void`][Stores a value in `b` that is cb * 2[super i], only required when `B` is a floating-point type.][[space]]]
+[[`eval_floor(b, cb)`][`void`][Stores the floor of `cb` in `b`, only required when `B` is a floating-point type.][[space]]]
+[[`eval_ceil(b, cb)`][`void`][Stores the ceiling of `cb` in `b`, only required when `B` is a floating-point type.][[space]]]
+[[`eval_sqrt(b, cb)`][`void`][Stores the square root of `cb` in `b`, only required when `B` is a floating-point type.][[space]]]
+[[`boost::multiprecision::number_category<B>::type`][`mpl::int_<N>`][`N` is one of the values `number_kind_integer`, `number_kind_floating_point`, `number_kind_rational` or `number_kind_fixed_point`.
+ Defaults to `number_kind_floating_point`.][[space]]]
+]
+
+[table Optional Requirements on the Backend Type
+[[Expression][Returns][Comments][Throws]]
+
+[[['Construct and assign:]]]
+[[`B(rb)`][`B`][Move constructor. Afterwards variable `rb` shall be in sane state, albeit with unspecified value.
+ Only destruction and assignment to the moved-from variable `rb` need be supported after the operation.][`noexcept`]]
+[[`b = rb`][`B&`][Move-assign. Afterwards variable `rb` shall be in sane state, albeit with unspecified value.
+ Only destruction and assignment to the moved-from variable `rb` need be supported after the operation.][`noexcept`]]
+[[`B(a)`][`B`][Direct construction from an arithmetic type. 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, this operation is simulated using default-construction followed by assignment.][[space]]]
+[[`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.
+ 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.
+ Only applies to rational and complex number types.
+ When not provided, arithmetic operations are used to synthesise the result from the two values.][[space]]]
+
+[[['Comparisons:]]]
+[[`eval_eq(cb, cb2)`][`bool`][Returns `true` if `cb` and `cb2` are equal in value.
+ When not provided, the default implementation returns `cb.compare(cb2) == 0`.][`noexcept`]]
+[[`eval_eq(cb, a)`][`bool`][Returns `true` if `cb` and `a` are equal in value.
+ 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, return the equivalent of `eval_eq(cb, B(a))`.][[space]]]
+[[`eval_eq(a, cb)`][`bool`][Returns `true` if `cb` and `a` are equal in value.
+ 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 version returns `eval_eq(cb, a)`.][[space]]]
+[[`eval_lt(cb, cb2)`][`bool`][Returns `true` if `cb` is less than `cb2` in value.
+ When not provided, the default implementation returns `cb.compare(cb2) < 0`.][`noexcept`]]
+[[`eval_lt(cb, a)`][`bool`][Returns `true` if `cb` is less than `a` in value.
+ 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, B(a))`.][[space]]]
+[[`eval_lt(a, cb)`][`bool`][Returns `true` if `a` is less than `cb` in value.
+ 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_gt(cb, a)`.][[space]]]
+[[`eval_gt(cb, cb2)`][`bool`][Returns `true` if `cb` is greater than `cb2` in value.
+ When not provided, the default implementation returns `cb.compare(cb2) > 0`.][`noexcept`]]
+[[`eval_gt(cb, a)`][`bool`][Returns `true` if `cb` is greater than `a` in value.
+ 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_gt(cb, B(a))`.][[space]]]
+[[`eval_gt(a, cb)`][`bool`][Returns `true` if `a` is greater than `cb` in value.
+ 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
+ `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
+ `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+
+[[['Basic arithmetic:]]]
+[[`eval_add(b, a)`][`void`][Adds `a` to `b`. 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 version calls `eval_add(b, B(a))`][[space]]]
+[[`eval_add(b, cb, cb2)`][`void`][Add `cb` to `cb2` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_add(b, cb2)`.][[space]]]
+[[`eval_add(b, cb, a)`][`void`][Add `cb` to `a` and stores the result in `b`. 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, does the equivalent of `eval_add(b, cb, B(a))`.][[space]]]
+[[`eval_add(b, a, cb)`][`void`][Add `a` to `cb` and stores the result in `b`. 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, does the equivalent of `eval_add(b, cb, a)`.][[space]]]
+[[`eval_subtract(b, a)`][`void`][Subtracts `a` from `b`. 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 version calls `eval_subtract(b, B(a))`][[space]]]
+[[`eval_subtract(b, cb, cb2)`][`void`][Subtracts `cb2` from `cb` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_subtract(b, cb2)`.][[space]]]
+[[`eval_subtract(b, cb, a)`][`void`][Subtracts `a` from `cb` and stores the result in `b`. 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, does the equivalent of `eval_subtract(b, cb, B(a))`.][[space]]]
+[[`eval_subtract(b, a, cb)`][`void`][Subtracts `cb` from `a` and stores the result in `b`. 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, does the equivalent of `eval_subtract(b, cb, a); b.negate();`.][[space]]]
+[[`eval_multiply(b, a)`][`void`][Multiplies `b` by `a`. 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 version calls `eval_multiply(b, B(a))`][[space]]]
+[[`eval_multiply(b, cb, cb2)`][`void`][Multiplies `cb` by `cb2` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_multiply(b, cb2)`.][[space]]]
+[[`eval_multiply(b, cb, a)`][`void`][Multiplies `cb` by `a` and stores the result in `b`. 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, does the equivalent of `eval_multiply(b, cb, B(a))`.][[space]]]
+[[`eval_multiply(b, a, cb)`][`void`][Multiplies `a` by `cb` and stores the result in `b`. 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, does the equivalent of `eval_multiply(b, cb, a)`.][[space]]]
+[[`eval_multiply_add(b, cb, cb2)`][`void`][Multiplies `cb` by `cb2` and adds the result to `b`.
+ When not provided does the equivalent of creating a temporary `B t` and `eval_multiply(t, cb, cb2)` followed by
+ `eval_add(b, t)`.][[space]]]
+[[`eval_multiply_add(b, cb, a)`][`void`][Multiplies `a` by `cb` and adds the result to `b`.
+ 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 does the equivalent of creating a temporary `B t` and `eval_multiply(t, cb, a)` followed by
+ `eval_add(b, t)`.][[space]]]
+[[`eval_multiply_add(b, a, cb)`][`void`][Multiplies `a` by `cb` and adds the result to `b`.
+ 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 does the equivalent of `eval_multiply_add(b, cb, a)`.][[space]]]
+[[`eval_multiply_subtract(b, cb, cb2)`][`void`][Multiplies `cb` by `cb2` and subtracts the result from `b`.
+ When not provided does the equivalent of creating a temporary `B t` and `eval_multiply(t, cb, cb2)` followed by
+ `eval_subtract(b, t)`.][[space]]]
+[[`eval_multiply_subtract(b, cb, a)`][`void`][Multiplies `a` by `cb` and subtracts the result from `b`.
+ 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 does the equivalent of creating a temporary `B t` and `eval_multiply(t, cb, a)` followed by
+ `eval_subtract(b, t)`.][[space]]]
+[[`eval_multiply_subtract(b, a, cb)`][`void`][Multiplies `a` by `cb` and subtracts the result from `b`.
+ 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 does the equivalent of `eval_multiply_subtract(b, cb, a)`.][[space]]]
+[[`eval_multiply_add(b, cb, cb2, cb3)`][`void`][Multiplies `cb` by `cb2` and adds the result to `cb3` storing the result in `b`.
+ When not provided does the equivalent of `eval_multiply(b, cb, cb2)` followed by
+ `eval_add(b, cb3)`.
+ For brevity, only a version showing all arguments of type `B` is shown here, but you can replace up to any 2 of
+ `cb`, `cb2` and `cb3` with any type listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.][[space]]]
+[[`eval_multiply_subtract(b, cb, cb2, cb3)`][`void`][Multiplies `cb` by `cb2` and subtracts from the result `cb3` storing the result in `b`.
+ When not provided does the equivalent of `eval_multiply(b, cb, cb2)` followed by
+ `eval_subtract(b, cb3)`.
+ For brevity, only a version showing all arguments of type `B` is shown here, but you can replace up to any 2 of
+ `cb`, `cb2` and `cb3` with any type listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.][[space]]]
+[[`eval_divide(b, a)`][`void`][Divides `b` by `a`. 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 version calls `eval_divide(b, B(a))`]
+ [`std::overflow_error` if `a` has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_divide(b, cb, cb2)`][`void`][Divides `cb` by `cb2` and stores the result in `b`.
+ When not provided, does the equivalent of `b = cb; eval_divide(b, cb2)`.]
+ [`std::overflow_error` if `cb2` has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_divide(b, cb, a)`][`void`][Divides `cb` by `a` and stores the result in `b`. 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, does the equivalent of `eval_divide(b, cb, B(a))`.]
+ [`std::overflow_error` if `a` has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_divide(b, a, cb)`][`void`][Divides `a` by `cb` and stores the result in `b`. 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, does the equivalent of `eval_divide(b, B(a), cb)`.]
+ [`std::overflow_error` if cb has the value zero, and `std::numeric_limits<number<B> >::has_infinity == false`]]
+[[`eval_increment(b)`][void][Increments the value of `b` by one.
+ When not provided, does the equivalent of `eval_add(b, static_cast<ui_type>(1u))`.
+ Where `ui_type` is `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+[[`eval_decrement(b)`][void][Decrements the value of `b` by one.
+ When not provided, does the equivalent of `eval_subtract(b, static_cast<ui_type>(1u))`.
+ Where `ui_type` is `typename mpl::front<typename B::unsigned_types>::type`.][[space]]]
+
+[[['Integer specific operations:]]]
+[[`eval_modulus(b, a)`][`void`][Computes `b %= cb`, only required when `B` is an integer type. 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 version calls `eval_modulus(b, B(a))`]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_modulus(b, cb, cb2)`][`void`][Computes `cb % cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_modulus(b, cb2)`.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_modulus(b, cb, a)`][`void`][Computes `cb % a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_modulus(b, cb, B(a))`.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_modulus(b, a, cb)`][`void`][Computes `cb % a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_modulus(b, B(a), cb)`.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_bitwise_and(b, a)`][`void`][Computes `b &= cb`, only required when `B` is an integer type. 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 version calls `eval_bitwise_and(b, B(a))`][[space]]]
+[[`eval_bitwise_and(b, cb, cb2)`][`void`][Computes `cb & cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_bitwise_and(b, cb2)`.][[space]]]
+[[`eval_bitwise_and(b, cb, a)`][`void`][Computes `cb & a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_bitwise_and(b, cb, B(a))`.][[space]]]
+[[`eval_bitwise_and(b, a, cb)`][`void`][Computes `cb & a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_bitwise_and(b, cb, a)`.][[space]]]
+[[`eval_bitwise_or(b, a)`][`void`][Computes `b |= cb`, only required when `B` is an integer type. 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 version calls `eval_bitwise_or(b, B(a))`][[space]]]
+[[`eval_bitwise_or(b, cb, cb2)`][`void`][Computes `cb | cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_bitwise_or(b, cb2)`.][[space]]]
+[[`eval_bitwise_or(b, cb, a)`][`void`][Computes `cb | a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_bitwise_or(b, cb, B(a))`.][[space]]]
+[[`eval_bitwise_or(b, a, cb)`][`void`][Computes `cb | a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_bitwise_or(b, cb, a)`.][[space]]]
+[[`eval_bitwise_xor(b, a)`][`void`][Computes `b ^= cb`, only required when `B` is an integer type. 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 version calls `eval_bitwise_xor(b, B(a))`][[space]]]
+[[`eval_bitwise_xor(b, cb, cb2)`][`void`][Computes `cb ^ cb2` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_bitwise_xor(b, cb2)`.][[space]]]
+[[`eval_bitwise_xor(b, cb, a)`][`void`][Computes `cb ^ a` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_bitwise_xor(b, cb, B(a))`.][[space]]]
+[[`eval_bitwise_xor(b, a, cb)`][`void`][Computes `a ^ cb` and stores the result in `b`, only required when `B` is an integer type. 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, does the equivalent of `eval_bitwise_xor(b, cb, a)`.][[space]]]
+[[`eval_left_shift(b, cb, ui)`][`void`][Computes `cb << ui` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_left_shift(b, a);`.][[space]]]
+[[`eval_right_shift(b, cb, ui)`][`void`][Computes `cb >> ui` and stores the result in `b`, only required when `B` is an integer type.
+ When not provided, does the equivalent of `b = cb; eval_right_shift(b, a);`.][[space]]]
+[[`eval_qr(cb, cb2, b, b2)`][`void`][Sets `b` to the result of `cb / cb2` and `b2` to the result of `cb % cb2`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_integer_modulus(cb, ui)`][`unsigned`][Returns the result of `cb % ui`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.]
+ [`std::overflow_error` if `a` has the value zero.]]
+[[`eval_lsb(cb)`][`unsigned`][Returns the index of the least significant bit that is set. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_msb(cb)`][`unsigned`][Returns the index of the most significant bit that is set. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_test(cb, ui)`][`bool`][Returns true if `cb` has bit `ui` set. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_set(b, ui)`][`void`][Sets the bit at index `ui` in `b`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_unset(b, ui)`][`void`][Unsets the bit at index `ui` in `b`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_bit_flip(b, ui)`][`void`][Flips the bit at index `ui` in `b`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_gcd(b, cb, cb2)`][`void`][Sets `b` to the greatest common divisor of `cb` and `cb2`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_lcm(b, cb, cb2)`][`void`][Sets `b` to the least common multiple of `cb` and `cb2`. Only required when `B` is an integer type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_gcd(b, cb, a)`][`void`][Sets `b` to the greatest common divisor of `cb` and `cb2`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_gcd(b, cb, B(a))`.][[space]]]
+[[`eval_lcm(b, cb, a)`][`void`][Sets `b` to the least common multiple of `cb` and `cb2`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_lcm(b, cb, B(a))`.][[space]]]
+[[`eval_gcd(b, a, cb)`][`void`][Sets `b` to the greatest common divisor of `cb` and `a`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_gcd(b, cb, a)`.][[space]]]
+[[`eval_lcm(b, a, cb)`][`void`][Sets `b` to the least common multiple of `cb` and `a`. Only required when `B` is an integer type.
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types` or `B::float_types`.
+ The default version of this function calls `eval_lcm(b, cb, a)`.][[space]]]
+[[`eval_powm(b, cb, cb2, cb3)`][`void`][Sets `b` to the result of ['(cb^cb2)%cb3].
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_powm(b, cb, cb2, a)`][`void`][Sets `b` to the result of ['(cb^cb2)%a].
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types`.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_powm(b, cb, a, cb2)`][`void`][Sets `b` to the result of ['(cb^a)%cb2].
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types`.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_powm(b, cb, a, a2)`][`void`][Sets `b` to the result of ['(cb^a)%a2].
+ The type of `a` shall be listed in one of the type lists
+ `B::signed_types`, `B::unsigned_types`.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_integer_sqrt(b, cb, b2)`][`void`][Sets `b` to the largest integer which when squared is less than `cb`, also
+ sets `b2` to the remainder, ie to ['cb - b[super 2]].
+ The default version of this function is synthesised from other operations above.][[space]]]
+
+[[['Sign manipulation:]]]
+[[`eval_abs(b, cb)`][`void`][Set `b` to the absolute value of `cb`.
+ The default version of this functions assigns `cb` to `b`, and then calls `b.negate()` if
+ `eval_get_sign(cb) < 0`.][[space]]]
+[[`eval_fabs(b, cb)`][`void`][Set `b` to the absolute value of `cb`.
+ The default version of this functions assigns `cb` to `b`, and then calls `b.negate()` if
+ `eval_get_sign(cb) < 0`.][[space]]]
+
+[[['Floating point functions:]]]
+[[`eval_fpclassify(cb)`][`int`][Returns one of the same values returned by `std::fpclassify`. Only required when `B` is an floating-point type.
+ The default version of this function will only test for zero `cb`.][[space]]]
+[[`eval_trunc(b, cb)`][`void`][Performs the equivalent operation to `std::trunc` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_round(b, cb)`][`void`][Performs the equivalent operation to `std::round` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_exp(b, cb)`][`void`][Performs the equivalent operation to `std::exp` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_log(b, cb)`][`void`][Performs the equivalent operation to `std::log` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_log10(b, cb)`][`void`][Performs the equivalent operation to `std::log10` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_sin(b, cb)`][`void`][Performs the equivalent operation to `std::sin` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_cos(b, cb)`][`void`][Performs the equivalent operation to `std::cos` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_tan(b, cb)`][`void`][Performs the equivalent operation to `std::exp` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_asin(b, cb)`][`void`][Performs the equivalent operation to `std::asin` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_acos(b, cb)`][`void`][Performs the equivalent operation to `std::acos` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_atan(b, cb)`][`void`][Performs the equivalent operation to `std::atan` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_sinh(b, cb)`][`void`][Performs the equivalent operation to `std::sinh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_cosh(b, cb)`][`void`][Performs the equivalent operation to `std::cosh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_tanh(b, cb)`][`void`][Performs the equivalent operation to `std::tanh` on argument `cb` and stores the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_fmod(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::fmod` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_pow(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::pow` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_atan2(b, cb, cb2)`][`void`][Performs the equivalent operation to `std::atan` on arguments `cb` and `cb2`, and store the result in `b`. Only required when `B` is an floating-point type.
+ The default version of this function is synthesised from other operations above.][[space]]]
+[[`eval_scalbn(b, cb, e)`][`void`][Scales value `cb` by ['r[super e]], where ['r] is the radix of the type. The default version of this function
+ is implemented in terms of eval_ldexp, consequently this function must be provided for types with a radix other than 2.]]
+[[`eval_ilogb(cb)`][`B::exponent_type`][Returns the exponent ['e] of value `cb` such that ['1 <= cb*r[super -e] < r], where ['r] is the radix of type B.
+ The default version of this function is implemented in terms of eval_frexp, consequently this function must be provided for types with a radix other than 2.]]
+[[`eval_logb(b, cb)`][`B::exponent_type`][Sets `b` to the exponent ['e] of value `cb` such that ['1 <= cb*r[super -b] < r], where ['r] is the radix of type B.
+ The default version of this function is implemented in terms of `eval_ilogb`.]]
+]
+
+When the tables above place no ['throws] requirements on an operation, then it is up to each type modelling this concept to
+decide when or whether throwing an exception is desirable. However, thrown exceptions should always either be the type, or
+inherit from the type `std::runtime_error`. For example, a floating point type might choose to throw `std::overflow_error`
+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 -
+in point of fact this naming convention shouldn't be necessary, but rather works around some compiler bugs.]
+
+[endsect]
+
+[section:headers Header File Structure]
+
+[table Top level headers
+[[Header][Contains]]
+[[cpp_int.hpp][The `cpp_int` backend type.]]
+[[gmp.hpp][Defines all [gmp] related backends.]]
+[[miller_rabin.hpp][Miller Rabin primality testing code.]]
+[[number.hpp][Defines the `number` backend, is included by all the backend headers.]]
+[[mpfr.hpp][Defines the mpfr_float_backend backend.]]
+[[random.hpp][Defines code to interoperate with Boost.Random.]]
+[[rational_adaptor.hpp][Defines the `rational_adaptor` backend.]]
+[[cpp_dec_float.hpp][Defines the `cpp_dec_float` backend.]]
+[[tommath.hpp][Defines the `tommath_int` backend.]]
+[[concepts/number_archetypes.hpp][Defines a backend concept archetypes for testing use.]]
+]
+
+[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`.]]
+[[cpp_int/checked.hpp][Helper functions for checked arithmetic for `cpp_int_backend`.]]
+[[cpp_int/comparison.hpp][Comparison operators for `cpp_int_backend`.]]
+[[cpp_int/cpp_int_config.hpp][Basic setup and configuration for `cpp_int_backend`.]]
+[[cpp_int/divide.hpp][Division and modulus operators for `cpp_int_backend`.]]
+[[cpp_int/limits.hpp][`numeric_limits` support for `cpp_int_backend`.]]
+[[cpp_int/misc.hpp][Miscellaneous operators for `cpp_int_backend`.]]
+[[cpp_int/multiply.hpp][Multiply operators for `cpp_int_backend`.]]
+[[detail/big_lanczos.hpp][Lanczos support for Boost.Math integration.]]
+[[detail/default_ops.hpp][Default versions of the optional backend non-member functions.]]
+[[detail/generic_interconvert.hpp][Generic interconversion routines.]]
+[[detail/number_base.hpp][All the expression template code, metaprogramming, and operator overloads for `number`.]]
+[[detail/no_et_ops.hpp][The non-expression template operators.]]
+[[detail/functions/constants.hpp][Defines constants used by the floating point functions.]]
+[[detail/functions/pow.hpp][Defines default versions of the power and exponential related floating point functions.]]
+[[detail/functions/trig.hpp][Defines default versions of the trigonometric related floating point functions.]]
+]
+
+[endsect]
+
+[endsect]
+
+[section:perf Performance Comparison]
+
+[section:overhead The Overhead in the Number Class Wrapper]
+
+Using a simple [@../../performance/arithmetic_backend.hpp backend class] that wraps any built in arithmetic type
+we can measure the overhead involved in wrapping a type inside the `number` frontend, and the effect that turning
+on expression templates has. The following table compares the performance between `double` and a `double` wrapped
+inside class `number`:
+
+[table
+[[Type][Bessel Function Evaluation][Non-Central T Evaluation]]
+[[`double`] [[*1.0 (0.016s)]] [[*1.0] (0.46s)]]
+[[`number<arithmetic_backend<double>, et_off>`] [1.2 (0.019s)] [[*1.0](0.46s)]]
+[[`number<arithmetic_backend<double>, et_on>`] [1.2 (0.019s)] [1.7 (0.79s)]]
+]
+
+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
+"trivial" backend like this, saving temporaries has no benefit, but for larger types it becomes
+a bigger win.
+
+The following table compares arithmetic using either `long long` or `number<arithmetic_backend<long long> >`
+for the [@../../performance/voronoi_performance.cpp voronoi-diagram builder test]:
+
+[table
+[[Type][Relative time]]
+[[`long long`][[*1.0](0.0823s)]]
+[[`number<arithmetic_backend<long long>, et_off>`][1.05 (0.0875s)]]
+]
+
+This test involves mainly creating a lot of temporaries and performing a small amount of arithmetic on them,
+with very little difference in performance between the native and "wrapped" types.
+
+The test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+turned on (/Ox), and used MPIR-2.3.0 and [tommath]-0.42.0. The tests were run on 32-bit
+Windows Vista machine.
+
+[endsect]
+
+[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
+given in brackets. The first three libraries listed are the various floating point types provided
+by this library, while for comparison, two popular C++ front-ends to [mpfr] ([mpfr_class] and [mpreal])
+are also shown.
+
+[table Bessel Function Performance
+[[Library][50 Decimal Digits][100 Decimal Digits]]
+[[mpfr_float] [1.2 (5.78s)] [1.2 (9.56s)]]
+[[static_mpfr_float] [1.1 (5.47s)] [1.1 (9.09s)]]
+[[mpf_float] [[*1.0] (4.82s)] [[*1.0](8.07s)]]
+[[cpp_dec_float] [1.8 (8.54s)] [2.6 (20.66s)]]
+[[[mpfr_class]] [1.3 (6.28s)] [1.2(10.06s)]]
+[[[mpreal]] [2.0 (9.54s)] [1.7 (14.08s)]]
+]
+
+[table Non-Central T Distribution Performance
+[[Library][50 Decimal Digits]]
+[[mpfr_float] [1.3 (263.27s)]]
+[[static_mpfr_float] [1.2 (232.88s)]]
+[[mpf_float] [[*1.0] (195.73s)]]
+[[cpp_dec_float] [1.9 (366.38s)]]
+[[[mpfr_class]] [1.5 (286.94s)]]
+[[[mpreal]] [2.0 (388.70s)]]
+]
+
+Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+turned on (/Ox), and used MPIR-2.3.0 and [mpfr]-3.0.0. The tests were run on 32-bit
+Windows Vista machine.
+
+[endsect]
+
+[section:int_real_world Integer Real World Tests]
+
+The first set of [@../../performance/voronoi_performance.cpp tests] measure the times taken to
+execute the multiprecision part of the Voronoi-diagram builder from Boost.Polygon. The tests
+mainly create a large number of temporaries "just in case" multiprecision arithmetic is required,
+for comparison, also included in the tests is Boost.Polygon's own partial-multiprecision integer
+type which was custom written for this specific task:
+
+[table
+[[Integer Type][Relative Performance (Actual time in parenthesis)]]
+[[polygon::detail::extended_int][1(0.138831s)]]
+[[int256_t][1.19247(0.165551s)]]
+[[int512_t][1.23301(0.17118s)]]
+[[int1024_t][1.21463(0.168628s)]]
+[[checked_int256_t][1.31711(0.182855s)]]
+[[checked_int512_t][1.57413(0.218538s)]]
+[[checked_int1024_t][1.36992(0.190187s)]]
+[[cpp_int][1.63244(0.226632s)]]
+[[mpz_int][5.42511(0.753172s)]]
+[[tom_int][29.0793(4.03709s)]]
+]
+
+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
+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:
+
+[table
+[[Integer Type][Relative Performance (Actual time in parenthesis)]]
+[[cpp_int][5.25827(0.379597s)]]
+[[cpp_int (no Expression templates)][5.15675(0.372268s)]]
+[[cpp_int (128-bit cache)][5.10882(0.368808s)]]
+[[cpp_int (256-bit cache)][5.50623(0.397497s)]]
+[[cpp_int (512-bit cache)][4.82257(0.348144s)]]
+[[cpp_int (1024-bit cache)][5.00053(0.360991s)]]
+[[int1024_t][4.37589(0.315897s)]]
+[[checked_int1024_t][4.52396(0.326587s)]]
+[[mpz_int][1(0.0721905s)]]
+[[mpz_int (no Expression templates)][1.0248(0.0739806s)]]
+[[tom_int][2.60673(0.188181s)]]
+[[tom_int (no Expression templates)][2.64997(0.191303s)]]
+]
+
+It's interesting to note that expression templates have little effect here - perhaps because the actual expressions involved
+are relatively trivial in this case - so the time taken for multiplication and division tends to dominate. Also note
+how increasing the internal cache size used by `cpp_int` is quite effective in this case in cutting out memory allocations
+altogether - cutting about a third off the total runtime. Finally the much quicker times from GMP and tommath are down to their
+much better modular-exponentiation algorithms (GMP's is about 5x faster). That's an issue which needs to be addressed
+in a future release for __cpp_int.
+
+Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+turned on (/Ox), and used MPIR-2.3.0 and [mpfr]-3.0.0. The tests were run on 32-bit
+Windows Vista machine.
+
+[endsect]
+
+[section:float_performance Float Algorithm Performance]
+
+Note that these tests are carefully designed to test performance of the underlying algorithms
+and not memory allocation or variable copying. As usual, performance results should be taken
+with a healthy dose of scepticism, and real-world performance may vary widely depending upon the
+specifics of the program. In each table relative times are given first, with the best performer
+given a score of 1. Total actual times are given in brackets, measured in seconds for 500000
+operations.
+
+[table Operator +
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0575156s)][[*1] (0.0740086s)][[*1] (0.219073s)]]
+[[gmp_float][2.45065 (0.14095s)][2.01398 (0.149052s)][1.09608 (0.240122s)]]
+[[mpfr_float][2.6001 (0.149546s)][2.12079 (0.156957s)][1.09078 (0.23896s)]]
+]
+[table Operator +(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.46115 (0.0855392s)][2.60353 (0.114398s)][3.62562 (0.264905s)]]
+[[gmp_float][[*1] (0.0585424s)][[*1] (0.0439398s)][[*1] (0.0730648s)]]
+[[mpfr_float][2.40441 (0.14076s)][3.2877 (0.144461s)][2.40379 (0.175632s)]]
+]
+[table Operator +(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.118146s)][[*1] (0.144714s)][[*1] (0.315639s)]]
+[[gmp_float][4.5555 (0.538213s)][3.83096 (0.554395s)][1.95079 (0.615745s)]]
+[[mpfr_float][5.74477 (0.678719s)][4.85295 (0.702291s)][2.70354 (0.853342s)]]
+]
+[table Operator +=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.101188s)][[*1] (0.122394s)][[*1] (0.251975s)]]
+[[gmp_float][5.199 (0.526079s)][4.39327 (0.537712s)][2.42151 (0.610159s)]]
+[[mpfr_float][6.08318 (0.615547s)][5.18525 (0.634645s)][3.1022 (0.781677s)]]
+]
+[table Operator -
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0895163s)][[*1] (0.129248s)][1.5088 (0.374512s)]]
+[[gmp_float][1.72566 (0.154474s)][1.22567 (0.158415s)][[*1] (0.248219s)]]
+[[mpfr_float][1.83764 (0.164499s)][1.34284 (0.173559s)][1.00226 (0.248781s)]]
+]
+[table Operator -(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.105285s)][[*1] (0.142741s)][[*1] (0.278718s)]]
+[[gmp_float][2.34437 (0.246828s)][1.28814 (0.183871s)][1.00731 (0.280754s)]]
+[[mpfr_float][2.8032 (0.295136s)][2.09178 (0.298582s)][1.25213 (0.34899s)]]
+]
+[table Operator -(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.13719s)][[*1] (0.184428s)][[*1] (0.344212s)]]
+[[gmp_float][4.0804 (0.559791s)][3.06776 (0.565781s)][2.07736 (0.715053s)]]
+[[mpfr_float][5.10114 (0.699828s)][3.88684 (0.716843s)][2.50074 (0.860784s)]]
+]
+[table Operator -=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.100984s)][[*1] (0.123148s)][[*1] (0.246181s)]]
+[[gmp_float][5.68353 (0.573944s)][4.68636 (0.577116s)][2.6958 (0.663655s)]]
+[[mpfr_float][6.19738 (0.625834s)][5.18544 (0.638577s)][3.18738 (0.784673s)]]
+]
+[table Operator *
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.03667 (0.284251s)][1.30576 (0.536527s)][1.44686 (4.81057s)]]
+[[gmp_float][[*1] (0.274196s)][[*1] (0.410891s)][[*1] (3.32484s)]]
+[[mpfr_float][1.24537 (0.341477s)][1.15785 (0.475749s)][1.1796 (3.92199s)]]
+]
+[table Operator *(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][3.97453 (0.240262s)][9.91222 (0.463473s)][50.7926 (4.36527s)]]
+[[gmp_float][[*1] (0.0604505s)][[*1] (0.0467577s)][[*1] (0.0859431s)]]
+[[mpfr_float][2.56974 (0.155342s)][3.56312 (0.166603s)][3.22964 (0.277565s)]]
+]
+[table Operator *(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.331877s)][1.01058 (0.586122s)][6.688 (4.7931s)]]
+[[gmp_float][1.72433 (0.572266s)][[*1] (0.579987s)][[*1] (0.716672s)]]
+[[mpfr_float][2.5553 (0.848047s)][1.74987 (1.0149s)][1.80403 (1.2929s)]]
+]
+[table Operator *=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.321397s)][1.00772 (0.574887s)][6.65946 (4.7468s)]]
+[[gmp_float][1.77419 (0.570218s)][[*1] (0.570482s)][[*1] (0.712791s)]]
+[[mpfr_float][2.62172 (0.842611s)][1.77691 (1.01369s)][1.77511 (1.26528s)]]
+]
+[table Operator /
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.96096 (4.00777s)][4.53244 (7.86435s)][6.11936 (51.5509s)]]
+[[gmp_float][[*1] (1.35354s)][[*1] (1.73512s)][[*1] (8.42422s)]]
+[[mpfr_float][1.30002 (1.75963s)][1.39045 (2.41261s)][1.66762 (14.0484s)]]
+]
+[table Operator /(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][8.60726 (1.8181s)][15.4122 (3.67479s)][34.5119 (24.729s)]]
+[[gmp_float][1.24394 (0.262756s)][[*1] (0.238433s)][[*1] (0.716536s)]]
+[[mpfr_float][[*1] (0.211229s)][1.12178 (0.26747s)][1.02237 (0.732562s)]]
+]
+[table Operator /(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.10976 (1.97569s)][3.73601 (3.9133s)][11.3085 (25.4533s)]]
+[[gmp_float][[*1] (0.936452s)][[*1] (1.04746s)][[*1] (2.25081s)]]
+[[mpfr_float][1.3423 (1.257s)][1.51575 (1.58768s)][3.31513 (7.46175s)]]
+]
+[table Operator /=(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.17401 (1.96883s)][3.79591 (3.8965s)][11.2328 (25.2606s)]]
+[[gmp_float][[*1] (0.905621s)][[*1] (1.0265s)][[*1] (2.24882s)]]
+[[mpfr_float][1.37953 (1.24933s)][1.53073 (1.57129s)][3.30546 (7.43339s)]]
+]
+[table Operator construct
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.00929804s)][[*1] (0.0268321s)][[*1] (0.0310685s)]]
+[[gmp_float][30.8781 (0.287106s)][7.59969 (0.203916s)][6.51873 (0.202527s)]]
+[[mpfr_float][23.5296 (0.218779s)][8.11058 (0.217624s)][7.16325 (0.222552s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0603971s)][[*1] (0.0735485s)][[*1] (0.116464s)]]
+[[gmp_float][3.91573 (0.236498s)][2.88171 (0.211945s)][1.81075 (0.210887s)]]
+[[mpfr_float][4.90052 (0.295977s)][4.01118 (0.295017s)][2.62005 (0.305141s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0610288s)][[*1] (0.0759005s)][[*1] (0.118511s)]]
+[[gmp_float][8.26247 (0.504249s)][6.69042 (0.507806s)][4.32819 (0.51294s)]]
+[[mpfr_float][10.1593 (0.620013s)][8.45884 (0.64203s)][5.51472 (0.653557s)]]
+]
+[table Operator str
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.95848 (0.0223061s)][3.33461 (0.033471s)][3.0159 (0.132732s)]]
+[[gmp_float][[*1] (0.00753971s)][[*1] (0.0100374s)][[*1] (0.0440106s)]]
+[[mpfr_float][1.25424 (0.00945658s)][1.24943 (0.012541s)][1.09428 (0.0481601s)]]
+]
+
+Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+turned on (/Ox), and used MPIR-2.3.0 and [mpfr]-3.0.0. The tests were run on 32-bit
+Windows Vista machine.
+
+[endsect]
+
+[section:integer_performance Integer Algorithm Performance]
+
+Note that these tests are carefully designed to test performance of the underlying algorithms
+and not memory allocation or variable copying. As usual, performance results should be taken
+with a healthy dose of scepticism, and real-world performance may vary widely depending upon the
+specifics of the program. In each table relative times are given first, with the best performer
+given a score of 1. Total actual times are given in brackets, measured in seconds for 500000
+operations.
+
+[table Operator +
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.23704 (0.0274266s)][1.09358 (0.0383278s)][1.26645 (0.0558828s)][1.32188 (0.0916899s)]]
+[[cpp_int(fixed)][1.62044 (0.0359271s)][1.5277 (0.053543s)][1.73059 (0.076363s)][1.71537 (0.118983s)]]
+[[gmp_int][1.87515 (0.0415741s)][1.21699 (0.042653s)][1.15599 (0.0510088s)][[*1] (0.0693631s)]]
+[[tommath_int][[*1] (0.0221711s)][[*1] (0.035048s)][[*1] (0.0441255s)][1.04441 (0.0724435s)]]
+]
+[table Operator +(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0155377s)][[*1] (0.0209523s)][[*1] (0.0306377s)][[*1] (0.043125s)]]
+[[cpp_int(fixed)][1.31904 (0.0204948s)][1.76211 (0.0369203s)][1.52941 (0.0468577s)][1.60412 (0.0691778s)]]
+[[gmp_int][1.96204 (0.0304855s)][2.02569 (0.0424428s)][2.11505 (0.0648002s)][2.65993 (0.114709s)]]
+[[tommath_int][14.0654 (0.218543s)][10.8239 (0.226786s)][7.76691 (0.23796s)][6.10039 (0.263079s)]]
+]
+[table Operator +(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.026624s)][[*1] (0.0291407s)][[*1] (0.0373209s)][[*1] (0.0464919s)]]
+[[cpp_int(fixed)][1.31378 (0.034978s)][1.54897 (0.045138s)][1.53649 (0.0573431s)][1.27833 (0.0594319s)]]
+[[gmp_int][25.5775 (0.680974s)][24.0117 (0.699717s)][19.5633 (0.730121s)][16.8939 (0.785432s)]]
+[[tommath_int][19.4694 (0.518354s)][18.4246 (0.536907s)][14.7715 (0.551288s)][12.3637 (0.574812s)]]
+]
+[table Operator +=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.18405 (0.0196905s)][1.22304 (0.0206476s)][1.25861 (0.0217397s)][1.29525 (0.0220829s)]]
+[[cpp_int(fixed)][[*1] (0.0166298s)][[*1] (0.0168822s)][[*1] (0.0172728s)][[*1] (0.0170492s)]]
+[[gmp_int][39.9082 (0.663668s)][39.4584 (0.666147s)][38.5504 (0.665873s)][39.2231 (0.668722s)]]
+[[tommath_int][30.6219 (0.509238s)][30.4135 (0.513447s)][30.9077 (0.533863s)][32.3086 (0.550835s)]]
+]
+[table Operator -
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.06986 (0.0296064s)][[*1] (0.0381508s)][1.05932 (0.053186s)][1.1766 (0.0844721s)]]
+[[cpp_int(fixed)][1.3304 (0.0368163s)][1.44506 (0.0551303s)][1.4431 (0.0724545s)][1.57255 (0.112898s)]]
+[[gmp_int][1.48072 (0.0409761s)][1.19003 (0.0454007s)][1.0794 (0.0541942s)][[*1] (0.0717934s)]]
+[[tommath_int][[*1] (0.0276731s)][1.10891 (0.0423057s)][[*1] (0.0502076s)][1.08479 (0.0778811s)]]
+]
+[table Operator -(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0147372s)][[*1] (0.0170001s)][[*1] (0.0232882s)][[*1] (0.0310734s)]]
+[[cpp_int(fixed)][1.4267 (0.0210256s)][1.98887 (0.0338109s)][1.83788 (0.0428009s)][1.81269 (0.0563264s)]]
+[[gmp_int][2.07504 (0.0305803s)][2.40928 (0.0409579s)][2.58711 (0.0602493s)][3.26438 (0.101435s)]]
+[[tommath_int][13.5424 (0.199577s)][12.1793 (0.207048s)][9.28855 (0.216314s)][7.49327 (0.232842s)]]
+]
+[table Operator -(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0277377s)][[*1] (0.0296807s)][[*1] (0.0372392s)][[*1] (0.0455855s)]]
+[[cpp_int(fixed)][1.19867 (0.0332484s)][1.48639 (0.0441169s)][1.43253 (0.0533464s)][1.27697 (0.0582111s)]]
+[[gmp_int][24.1794 (0.670683s)][22.9073 (0.679904s)][18.8758 (0.702922s)][16.5837 (0.755975s)]]
+[[tommath_int][18.149 (0.503413s)][17.4116 (0.516787s)][14.0411 (0.52288s)][11.8237 (0.538987s)]]
+]
+[table Operator -=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.26896 (0.0203467s)][1.25722 (0.0206147s)][1.36108 (0.0225485s)][1.18351 (0.0226161s)]]
+[[cpp_int(fixed)][[*1] (0.0160342s)][[*1] (0.0163971s)][[*1] (0.0165667s)][[*1] (0.0191094s)]]
+[[gmp_int][41.1339 (0.659547s)][40.3982 (0.662411s)][39.925 (0.661425s)][34.636 (0.661874s)]]
+[[tommath_int][31.1543 (0.499533s)][31.0303 (0.508806s)][30.7699 (0.509756s)][27.7054 (0.529434s)]]
+]
+[table Operator *
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.11839 (0.0757577s)][1.61061 (0.207951s)][1.4501 (0.696912s)][1.72796 (2.64108s)]]
+[[cpp_int(fixed)][1.01115 (0.0684934s)][1.28687 (0.166152s)][[*1] (0.480595s)][[*1] (1.52844s)]]
+[[gmp_int][[*1] (0.0677384s)][[*1] (0.129113s)][1.09011 (0.523902s)][1.03374 (1.58s)]]
+[[tommath_int][1.6322 (0.110562s)][2.71751 (0.350866s)][2.05222 (0.986288s)][2.0644 (3.15531s)]]
+]
+[table Operator *(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.01611 (0.0229536s)][1.12175 (0.0298152s)][1.16413 (0.0416439s)][1.31747 (0.0666043s)]]
+[[cpp_int(fixed)][1.30215 (0.0294152s)][1.669 (0.0443606s)][1.72395 (0.0616701s)][1.88315 (0.095202s)]]
+[[gmp_int][[*1] (0.0225897s)][[*1] (0.0265791s)][[*1] (0.0357725s)][[*1] (0.0505547s)]]
+[[tommath_int][10.8281 (0.244603s)][10.1516 (0.26982s)][8.76424 (0.313519s)][8.04364 (0.406644s)]]
+]
+[table Operator *(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0570721s)][[*1] (0.0856141s)][[*1] (0.143279s)][[*1] (0.252785s)]]
+[[cpp_int(fixed)][1.10857 (0.0632686s)][1.2951 (0.110878s)][1.20827 (0.173121s)][1.18463 (0.299456s)]]
+[[gmp_int][12.0605 (0.68832s)][8.13434 (0.696415s)][5.21762 (0.747577s)][3.11601 (0.787681s)]]
+[[tommath_int][10.0524 (0.57371s)][7.33116 (0.627651s)][4.85202 (0.695193s)][3.35808 (0.848871s)]]
+]
+[table Operator *=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][111.27 (7.43118s)][67.7078 (7.34138s)][43.3851 (7.4075s)][25.3089 (7.55455s)]]
+[[cpp_int(fixed)][[*1] (0.0667848s)][[*1] (0.108427s)][[*1] (0.170738s)][[*1] (0.298493s)]]
+[[gmp_int][46.3718 (3.09693s)][28.4639 (3.08626s)][18.1719 (3.10264s)][10.5223 (3.14083s)]]
+[[tommath_int][276.674 (18.4776s)][169.146 (18.34s)][108.491 (18.5236s)][63.3261 (18.9024s)]]
+]
+[table Operator /
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.68035 (0.595251s)][2.04702 (0.707471s)][1.62314 (0.921536s)][1.43112 (1.38811s)]]
+[[cpp_int(fixed)][[*1] (0.222079s)][[*1] (0.34561s)][[*1] (0.567748s)][[*1] (0.969945s)]]
+[[gmp_int][3.79283 (0.842308s)][2.73668 (0.945824s)][1.86649 (1.05969s)][1.32141 (1.2817s)]]
+[[tommath_int][13.2531 (2.94324s)][11.2054 (3.87271s)][9.83293 (5.58262s)][13.0164 (12.6252s)]]
+]
+[table Operator /(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][4.06026 (0.225473s)][3.45732 (0.340049s)][3.00195 (0.547957s)][2.80587 (0.978029s)]]
+[[cpp_int(fixed)][2.43766 (0.135367s)][2.56264 (0.252052s)][2.44011 (0.445402s)][2.38009 (0.829617s)]]
+[[gmp_int][[*1] (0.0555316s)][[*1] (0.0983563s)][[*1] (0.182534s)][[*1] (0.348566s)]]
+[[tommath_int][35.9988 (1.99907s)][27.1024 (2.66569s)][21.8333 (3.98531s)][25.8066 (8.99528s)]]
+]
+[table Operator /(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.50505 (0.705756s)][1.39347 (1.58556s)][2.63348 (3.57438s)][4.75451 (8.52733s)]]
+[[cpp_int(fixed)][[*1] (0.468925s)][1.12378 (1.27869s)][2.29966 (3.12128s)][4.4844 (8.04288s)]]
+[[gmp_int][2.17234 (1.01866s)][[*1] (1.13785s)][[*1] (1.35728s)][[*1] (1.79352s)]]
+[[tommath_int][4.74612 (2.22557s)][2.70088 (3.07319s)][3.65634 (4.96268s)][6.79408 (12.1853s)]]
+]
+[table Operator /=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.76281 (0.0574966s)][1.76471 (0.0604224s)][1.56085 (0.0716403s)][1.31422 (0.124043s)]]
+[[cpp_int(fixed)][[*1] (0.0326164s)][[*1] (0.0342393s)][[*1] (0.0458981s)][[*1] (0.0943852s)]]
+[[gmp_int][20.2862 (0.661664s)][19.4043 (0.664389s)][14.4881 (0.664976s)][7.14238 (0.674135s)]]
+[[tommath_int][32.9555 (1.07489s)][30.1525 (1.0324s)][22.8324 (1.04796s)][11.7456 (1.10861s)]]
+]
+[table Operator %
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.8501 (0.364131s)][1.46527 (0.476653s)][1.27509 (0.689738s)][1.20064 (1.11769s)]]
+[[cpp_int(fixed)][[*1] (0.196817s)][[*1] (0.325301s)][[*1] (0.540932s)][[*1] (0.930916s)]]
+[[gmp_int][3.2533 (0.640305s)][2.15441 (0.700832s)][1.47898 (0.800029s)][1.07439 (1.00016s)]]
+[[tommath_int][15.3501 (3.02116s)][12.1106 (3.9396s)][11.0689 (5.98752s)][13.5535 (12.6172s)]]
+]
+[table Operator %(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.82761 (0.104331s)][2.01496 (0.202512s)][2.10004 (0.389523s)][2.17252 (0.768097s)]]
+[[cpp_int(fixed)][1.78851 (0.102099s)][1.96844 (0.197838s)][2.02956 (0.376451s)][2.07257 (0.73276s)]]
+[[gmp_int][[*1] (0.057086s)][[*1] (0.100505s)][[*1] (0.185483s)][[*1] (0.353552s)]]
+[[tommath_int][36.3018 (2.07233s)][26.3075 (2.64402s)][21.9525 (4.07183s)][25.6759 (9.07775s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.40211 (0.0026854s)][[*1] (0.00278639s)][[*1] (0.00322813s)][[*1] (0.0027185s)]]
+[[cpp_int(fixed)][[*1] (0.00191526s)][1.40721 (0.00392103s)][1.90346 (0.00614463s)][2.14621 (0.00583447s)]]
+[[gmp_int][98.705 (0.189046s)][68.9726 (0.192184s)][58.8994 (0.190135s)][70.0525 (0.190438s)]]
+[[tommath_int][105.602 (0.202255s)][74.1994 (0.206748s)][63.6455 (0.205456s)][76.8935 (0.209035s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.73436 (0.00348927s)][[*1] (0.00263476s)][[*1] (0.0027009s)][[*1] (0.00318651s)]]
+[[cpp_int(fixed)][[*1] (0.00201185s)][1.36851 (0.0036057s)][2.07362 (0.00560064s)][1.66856 (0.00531688s)]]
+[[gmp_int][97.2414 (0.195635s)][76.3759 (0.201232s)][72.7396 (0.196462s)][63.8129 (0.20334s)]]
+[[tommath_int][210.112 (0.422713s)][162.652 (0.42855s)][158.33 (0.427634s)][134.626 (0.428987s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.34403 (0.00739542s)][1.66376 (0.00713834s)][1.22989 (0.0074969s)][1.23708 (0.00711417s)]]
+[[cpp_int(fixed)][[*1] (0.00315501s)][[*1] (0.00429049s)][[*1] (0.00609561s)][[*1] (0.0057508s)]]
+[[gmp_int][222.866 (0.703144s)][164.331 (0.705059s)][115.363 (0.70321s)][122.347 (0.703596s)]]
+[[tommath_int][218.681 (0.689941s)][163.796 (0.702765s)][114.57 (0.698376s)][122.422 (0.704027s)]]
+]
+[table Operator gcd
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.16358 (2.74442s)][1.39847 (8.11559s)][1.64677 (22.2518s)][1.95096 (64.4961s)]]
+[[cpp_int(fixed)][[*1] (2.35859s)][1.30986 (7.60133s)][1.67681 (22.6577s)][2.0895 (69.0758s)]]
+[[gmp_int][1.03392 (2.4386s)][[*1] (5.80319s)][[*1] (13.5124s)][[*1] (33.0586s)]]
+[[tommath_int][5.25978 (12.4057s)][4.4619 (25.8932s)][4.15577 (56.1542s)][3.91192 (129.323s)]]
+]
+[table Operator powm
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.50722 (2.91621s)][3.5561 (13.406s)][4.37066 (73.483s)][4.88831 (473.91s)]]
+[[cpp_int(fixed)][1.93385 (2.24931s)][3.18107 (11.9922s)][4.20753 (70.7403s)][4.8158 (466.88s)]]
+[[gmp_int][[*1] (1.16313s)][[*1] (3.76986s)][[*1] (16.8128s)][[*1] (96.9476s)]]
+[[tommath_int][1.44081 (1.67584s)][1.8794 (7.08507s)][2.19115 (36.8394s)][2.17186 (210.557s)]]
+]
+[table Operator str
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.17175 (0.00160006s)][1.41999 (0.00329476s)][1.40856 (0.00813784s)][1.52964 (0.0229767s)]]
+[[cpp_int(fixed)][[*1] (0.00136554s)][[*1] (0.00232027s)][[*1] (0.00577741s)][1.14754 (0.0172372s)]]
+[[gmp_int][1.50501 (0.00205515s)][1.52968 (0.00354926s)][1.01989 (0.0058923s)][[*1] (0.015021s)]]
+[[tommath_int][12.2161 (0.0166816s)][16.9577 (0.0393463s)][18.7474 (0.108311s)][22.7368 (0.341528s)]]
+]
+[table Operator |
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0301617s)][[*1] (0.0423404s)][[*1] (0.0522358s)][[*1] (0.0813156s)]]
+[[cpp_int(fixed)][1.0638 (0.0320861s)][1.22566 (0.0518951s)][1.28515 (0.0671305s)][1.16118 (0.094422s)]]
+[[gmp_int][1.76553 (0.0532514s)][1.51489 (0.0641408s)][1.70708 (0.0891706s)][1.77346 (0.14421s)]]
+[[tommath_int][4.37637 (0.131999s)][3.46212 (0.146587s)][2.91875 (0.152463s)][4.19621 (0.341217s)]]
+]
+[table Operator |(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0289129s)][[*1] (0.0351119s)][[*1] (0.0406779s)][[*1] (0.0525891s)]]
+[[cpp_int(fixed)][1.06091 (0.030674s)][1.25979 (0.0442336s)][1.36194 (0.0554009s)][1.37438 (0.0722772s)]]
+[[gmp_int][4.92854 (0.142498s)][4.34687 (0.152627s)][3.71442 (0.151095s)][2.981 (0.156768s)]]
+[[tommath_int][10.9847 (0.317598s)][9.37065 (0.329021s)][8.53651 (0.347248s)][11.2155 (0.589813s)]]
+]
+[table Operator ^
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0305149s)][[*1] (0.04217s)][[*1] (0.0525977s)][[*1] (0.0816632s)]]
+[[cpp_int(fixed)][1.01544 (0.0309861s)][1.24872 (0.0526585s)][1.26661 (0.066621s)][1.15965 (0.0947007s)]]
+[[gmp_int][1.64675 (0.0502505s)][1.47181 (0.0620663s)][1.66038 (0.0873322s)][1.67895 (0.137108s)]]
+[[tommath_int][4.30668 (0.131418s)][3.45859 (0.145849s)][2.91462 (0.153303s)][4.15538 (0.339342s)]]
+]
+[table Operator ^(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.01566 (0.0296088s)][[*1] (0.0356634s)][[*1] (0.0401898s)][[*1] (0.0514097s)]]
+[[cpp_int(fixed)][[*1] (0.0291524s)][1.2393 (0.0441976s)][1.38556 (0.0556856s)][1.38899 (0.0714075s)]]
+[[gmp_int][4.68027 (0.136441s)][4.15243 (0.14809s)][3.74237 (0.150405s)][3.0483 (0.156712s)]]
+[[tommath_int][10.919 (0.318314s)][9.16311 (0.326788s)][8.62554 (0.346659s)][11.6212 (0.597442s)]]
+]
+[table Operator &
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.0346 (0.0303431s)][[*1] (0.0427309s)][[*1] (0.0535587s)][1.06945 (0.0828084s)]]
+[[cpp_int(fixed)][[*1] (0.0293284s)][1.10435 (0.04719s)][1.05262 (0.0563769s)][[*1] (0.0774309s)]]
+[[gmp_int][1.86057 (0.0545675s)][1.58432 (0.0676995s)][1.69164 (0.0906018s)][1.86625 (0.144505s)]]
+[[tommath_int][4.4157 (0.129506s)][3.60396 (0.154s)][2.95985 (0.158525s)][4.4032 (0.340944s)]]
+]
+[table Operator &(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.05874 (0.038946s)][[*1] (0.0483903s)][[*1] (0.063842s)][[*1] (0.100361s)]]
+[[cpp_int(fixed)][[*1] (0.0367853s)][1.05827 (0.0512099s)][1.09114 (0.0696605s)][1.09432 (0.109826s)]]
+[[gmp_int][3.92298 (0.144308s)][2.99447 (0.144903s)][2.228 (0.14224s)][1.42296 (0.142809s)]]
+[[tommath_int][8.79208 (0.323419s)][7.02288 (0.339839s)][5.65271 (0.36088s)][6.27104 (0.629365s)]]
+]
+[table Operator <<
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0248801s)][1.23196 (0.04s)][[*1] (0.0424149s)][[*1] (0.060157s)]]
+[[cpp_int(fixed)][1.08931 (0.027102s)][1.40572 (0.0456418s)][1.3475 (0.0571542s)][1.24573 (0.0749397s)]]
+[[gmp_int][1.05561 (0.0262636s)][[*1] (0.0324686s)][1.09914 (0.0466199s)][1.16315 (0.0699719s)]]
+[[tommath_int][1.60497 (0.0399319s)][2.13048 (0.0691737s)][2.31219 (0.0980712s)][2.74695 (0.165248s)]]
+]
+[table Operator >>
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0213349s)][1.02127 (0.0295019s)][[*1] (0.0327116s)][1.13168 (0.0433804s)]]
+[[cpp_int(fixed)][1.13514 (0.0242181s)][1.16938 (0.0337803s)][1.46999 (0.0480859s)][1.60077 (0.061362s)]]
+[[gmp_int][1.26614 (0.0270129s)][[*1] (0.0288873s)][1.42219 (0.0465221s)][[*1] (0.0383329s)]]
+[[tommath_int][12.0066 (0.25616s)][10.2837 (0.297067s)][9.99696 (0.327017s)][16.0943 (0.616942s)]]
+]
+
+Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+turned on (/Ox), and used MPIR-2.3.0 and [mpfr]-3.0.0. The tests were run on 32-bit
+Windows Vista machine.
+
+Linux x86_64 results are broadly similar, except that libtommath performs much better there.
+
+[endsect]
+
+[section:rational_performance Rational Type Performance]
+
+Note that these tests are carefully designed to test performance of the underlying algorithms
+and not memory allocation or variable copying. As usual, performance results should be taken
+with a healthy dose of scepticism, and real-world performance may vary widely depending upon the
+specifics of the program. In each table relative times are given first, with the best performer
+given a score of 1. Total actual times are given in brackets, measured in seconds for 500000
+operations.
+
+[table Operator +
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][5.89417 (18.4116s)][6.87256 (47.4698s)][6.65008 (107.715s)][6.53801 (256.244s)]]
+[[mpq_rational][[*1] (3.1237s)][[*1] (6.90715s)][[*1] (16.1975s)][[*1] (39.1929s)]]
+]
+[table Operator +(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][3.62367 (2.46488s)][4.18291 (2.94603s)][4.726 (3.74866s)][6.1388 (5.56817s)]]
+[[mpq_rational][[*1] (0.680215s)][[*1] (0.704303s)][[*1] (0.7932s)][[*1] (0.907046s)]]
+]
+[table Operator +(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.1527 (2.6378s)][1.31751 (3.09863s)][1.58996 (4.00714s)][2.15642 (5.75702s)]]
+[[mpq_rational][[*1] (2.28837s)][[*1] (2.35189s)][[*1] (2.52028s)][[*1] (2.66971s)]]
+]
+[table Operator +=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.18436 (2.7059s)][1.32279 (3.11099s)][1.61398 (4.05389s)][2.20048 (5.84623s)]]
+[[mpq_rational][[*1] (2.2847s)][[*1] (2.35183s)][[*1] (2.51174s)][[*1] (2.6568s)]]
+]
+[table Operator -
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][5.81893 (18.3457s)][6.82209 (47.1928s)][6.64143 (107.498s)][6.51362 (255.137s)]]
+[[mpq_rational][[*1] (3.15277s)][[*1] (6.91765s)][[*1] (16.1859s)][[*1] (39.1698s)]]
+]
+[table Operator -(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][3.72441 (2.48756s)][4.27663 (2.98713s)][4.62109 (3.72114s)][6.17605 (5.56503s)]]
+[[mpq_rational][[*1] (0.667908s)][[*1] (0.698479s)][[*1] (0.805252s)][[*1] (0.901066s)]]
+]
+[table Operator -(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.15627 (2.63239s)][1.32096 (3.12092s)][1.61044 (4.00106s)][2.19378 (5.7644s)]]
+[[mpq_rational][[*1] (2.27663s)][[*1] (2.36262s)][[*1] (2.48445s)][[*1] (2.62761s)]]
+]
+[table Operator -=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.1984 (2.73444s)][1.34141 (3.15698s)][1.64159 (4.06997s)][2.23017 (5.88108s)]]
+[[mpq_rational][[*1] (2.28174s)][[*1] (2.35348s)][[*1] (2.47929s)][[*1] (2.63706s)]]
+]
+[table Operator *
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][5.4306 (32.5882s)][6.91805 (89.9436s)][6.94556 (207.307s)][6.88704 (492.151s)]]
+[[mpq_rational][[*1] (6.00084s)][[*1] (13.0013s)][[*1] (29.8475s)][[*1] (71.4604s)]]
+]
+[table Operator *(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][2.12892 (2.51376s)][2.47245 (3.07841s)][2.86832 (3.93619s)][3.94086 (6.02565s)]]
+[[mpq_rational][[*1] (1.18077s)][[*1] (1.24508s)][[*1] (1.3723s)][[*1] (1.52902s)]]
+]
+[table Operator *(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.32254 (5.43565s)][1.56078 (6.73163s)][1.97701 (9.32522s)][2.85404 (15.1573s)]]
+[[mpq_rational][[*1] (4.11002s)][[*1] (4.313s)][[*1] (4.71682s)][[*1] (5.31082s)]]
+]
+[table Operator *=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][6.29806 (58.1188s)][6.30556 (59.5076s)][6.3385 (62.1007s)][6.55345 (67.6905s)]]
+[[mpq_rational][[*1] (9.22804s)][[*1] (9.43733s)][[*1] (9.79739s)][[*1] (10.329s)]]
+]
+[table Operator /
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][4.4269 (66.8031s)][6.40103 (173.527s)][6.32347 (348.193s)][6.61148 (824.063s)]]
+[[mpq_rational][[*1] (15.0903s)][[*1] (27.1093s)][[*1] (55.0637s)][[*1] (124.641s)]]
+]
+[table Operator /(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.78772 (2.50984s)][2.10623 (3.10606s)][2.46986 (3.99358s)][3.37428 (5.96678s)]]
+[[mpq_rational][[*1] (1.40393s)][[*1] (1.4747s)][[*1] (1.61693s)][[*1] (1.76831s)]]
+]
+[table Operator /(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.29695 (5.45454s)][1.55248 (6.85353s)][1.93237 (9.28765s)][2.75211 (14.8541s)]]
+[[mpq_rational][[*1] (4.20568s)][[*1] (4.41458s)][[*1] (4.80635s)][[*1] (5.39734s)]]
+]
+[table Operator /=(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][6.19401 (58.4278s)][6.20135 (59.643s)][6.21327 (62.0338s)][6.40576 (67.6778s)]]
+[[mpq_rational][[*1] (9.43295s)][[*1] (9.61774s)][[*1] (9.98407s)][[*1] (10.5652s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.00978288s)][[*1] (0.0100574s)][[*1] (0.0101393s)][[*1] (0.0101847s)]]
+[[mpq_rational][39.1516 (0.383015s)][38.3523 (0.385725s)][37.5812 (0.381048s)][37.6007 (0.382953s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0548151s)][[*1] (0.0557542s)][[*1] (0.055825s)][[*1] (0.0552808s)]]
+[[mpq_rational][7.21073 (0.395257s)][7.1016 (0.395944s)][7.02046 (0.391917s)][7.16881 (0.396297s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0605156s)][[*1] (0.0616657s)][[*1] (0.0592056s)][[*1] (0.0603081s)]]
+[[mpq_rational][35.1604 (2.12775s)][34.7575 (2.14335s)][35.7232 (2.11502s)][35.0437 (2.11342s)]]
+]
+[table Operator str
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][5.48898 (0.0208949s)][8.49668 (0.0546688s)][10.107 (0.121897s)][10.5339 (0.310584s)]]
+[[mpq_rational][[*1] (0.0038067s)][[*1] (0.00643413s)][[*1] (0.0120606s)][[*1] (0.0294843s)]]
+]
+
+Test code was compiled with Microsoft Visual Studio 2010 with all optimisations
+turned on (/Ox), and used MPIR-2.3.0 and [mpfr]-3.0.0. The tests were run on 32-bit
+Windows Vista machine.
+
+[endsect]
+
+[endsect]
+
+[section:map Roadmap]
+
+[section:hist History]
+
+[h4 Multiprecision-2.2.3 (Boost-1.57)]
+
+* Changed rational to float conversions to exactly round to nearest, see [https://svn.boost.org/trac/boost/ticket/10085 10085].
+* Added improved generic float to rational conversions.
+* Fixed rare bug in exponent function for __cpp_bin_float.
+* Fixed various minor documentation issues.
+
+[h4 Multiprecision-2.2.2 (Boost-1.56)]
+
+* Change floating point to rational conversions to be implicit, see [@https://svn.boost.org/trac/boost/ticket/10082 10082].
+* Fix definition of checked_cpp_rational typedef.
+
+[h4 Multiprecision-2.2.1]
+
+* Fix bug in assignment from string in cpp_int, see [@https://svn.boost.org/trac/boost/ticket/9936 9936].
+
+[h4 Multiprecision-2.2.0]
+
+* Moved to Boost.Multiprecision specific version number - we have one breaking change in Boost-1.54
+which makes this major version 2, plus two releases with new features since then.
+* Added new __cpp_bin_float backend for binary floating point.
+* Added MSVC-specific #include for compiler intrinsics, see [@https://svn.boost.org/trac/boost/ticket/9336 9336].
+* Fixed various typos in docs, see [@https://svn.boost.org/trac/boost/ticket/9432 9432].
+* Fixed __gmp_rational to allow move-copy from an already copied-from object, see [@https://svn.boost.org/trac/boost/ticket/9497 9497].
+* Added list of values for numeric_limits.
+
+[h4 Boost-1.55]
+
+* Added support for Boost.Serialization.
+* Suppressed some GCC warnings. See [@https://svn.boost.org/trac/boost/ticket/8872 8872].
+* Fixed bug in pow for large integer arguments. See [@https://svn.boost.org/trac/boost/ticket/8809 8809].
+* Fixed bug in pow for calculation of 0[super N]. See [@https://svn.boost.org/trac/boost/ticket/8798 8798].
+* Fixed bug in fixed precision cpp_int IO code that causes conversion to string to fail when the
+bit count is very small (less than CHAR_BIT). See [@https://svn.boost.org/trac/boost/ticket/8745 8745].
+* Fixed bug in cpp_int that causes left shift to fail when a fixed precision type would overflow.
+See [@https://svn.boost.org/trac/boost/ticket/8741 8741].
+* Fixed some cosmetic warnings from cpp_int. See [@https://svn.boost.org/trac/boost/ticket/8748 8748].
+* Fixed calls to functions which are required to be macros in C99. See [@https://svn.boost.org/trac/boost/ticket/8732 8732].
+* Fixed bug that causes construction from INT_MIN, LONG_MIN etc to fail in cpp_int. See [@https://svn.boost.org/trac/boost/ticket/8711 8711].
+
+[h4 1.54]
+
+* [*Breaking change] renamed `rational_adapter` to `rational_adaptor`.
+* Add support for [mpfi].
+* Add logged_adaptor.
+* Add support for 128-bit floats via GCC's `__float128` or Intel's `_Quad` data types.
+* Add support for user-defined literals in cpp_int, improve `constexpr` support.
+* Fixed bug in integer division of `cpp_int` that results in incorrect sign of `cpp_int` when both arguments are small enough
+to fit in a `double_limb_type`. See [@https://svn.boost.org/trac/boost/ticket/8126 8126].
+* Fixed bug in subtraction of a single limb in `cpp_int` that results in incorrect value when the result should have a 0
+in the last limb: [@https://svn.boost.org/trac/boost/ticket/8133 8133].
+* Fixed bug in `cpp_int` where division of 0 by something doesn't get zero in the result: [@https://svn.boost.org/trac/boost/ticket/8160 8160].
+* Fixed bug in some transcendental functions that caused incorrect return values when variables are reused, for example with
+`a = pow(a, b)`. See [@https://svn.boost.org/trac/boost/ticket/8326 8326].
+* Fixed some assignment operations in the mpfr and gmp backends to be safe if the target has been moved from: [@https://svn.boost.org/trac/boost/ticket/8326 8667].
+* Fixed bug in `cpp_int` that gives incorrect answer for 0%N for large N: [@https://svn.boost.org/trac/boost/ticket/8670 8670].
+* Fixed set_precision in mpfr backend so it doesn't trample over an existing value: [@https://svn.boost.org/trac/boost/ticket/8692 8692].
+
+[h4 1.53]
+
+* First Release.
+* Fix bug in [@https://svn.boost.org/trac/boost/ticket/7878 cpp_int division].
+* Fix issue [@https://svn.boost.org/trac/boost/ticket/7806 #7806].
+
+[h4 Post review changes]
+
+* Non-expression template operators further optimised with rvalue reference support.
+* Many functions made `constexp`.
+* Differentiate between explicit and implicit conversions in the number constructor.
+* Removed "mp_" prefix from types.
+* Allowed mixed precision arithmetic.
+* Changed ExpressionTemplates parameter to class `number` to use enumerated values rather than true/false.
+* Changed ExpressionTemplate parameter default value to use a traits class so that the default value depends on the backend used.
+* Added support for fused-multiply-add/subtract with GMP support.
+* Tweaked expression template unpacking to use fewer temporaries when the LHS also appears in the RHS.
+* Refactored `cpp_int_backend` based on review comments with new template parameter structure.
+* Added additional template parameter to `mpfr_float_backend` to allow stack-based allocation.
+* Added section on mixed precision arithmetic, and added support for operations yielding a higher precision result
+than either of the arguments.
+* Added overloads of integer-specific functions for built in integer types.
+
+[h4 Pre-review history]
+
+*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,
+2011.
+* 2002-2011, Christopher Kormanyos develops the all C++ decimal arithmetic floating point
+code.
+
+[endsect]
+
+[section:todo TODO]
+
+
+
+More a list of what ['could] be done, rather than what ['should] be done (which may be a much smaller list!).
+
+* Add back-end support for libdecNumber.
+* Add an adaptor back-end for complex number types.
+* Add better multiplication routines (Karatsuba, FFT etc) to cpp_int_backend.
+* Add assembly level routines to cpp_int_backend.
+* 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).
+* cpp_dec_float should round to nearest.
+* A 2's complement fixed precision int that uses exactly N bits and no more.
+
+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
+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).
+* Document why we don't abstract out addition/multiplication algorithms etc. (done - FAQ)
+* Document why we don't use proto (compile times) (Done).
+* 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
+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
+deliberately an implementation detail, and "optional" requirements are optimisations which can't be detected
+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
+compilers supporting it? (Done 2012/09/15).
+* 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
+conversions. (Done 2012/09/15).
+* 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
+and backend requirements operations. (Done 2012/09/15).
+* 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
+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
+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).
+
+
+
+[h4 Pre-Review Comments]
+
+* 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.
+* Make the exponent type for cpp_dec_float a template parameter, maybe include support for big-integer exponents.
+Open question - what should be the default - int32_t or int64_t? (done 2012/09/06)
+* Document the size requirements of fixed precision ints (done 2012/09/15).
+* Document std lib function accuracy (done 2012/09/15).
+* Be a bit clearer on the effects of sign-magnitude representation of cpp_int - min == -max etc - done.
+* Document cpp_dec_float precision, rounding, and exponent size (done 2012/09/06).
+* Can we be clearer in the docs that mixed arithmetic doesn't work (no longer applicable as of 2012/09/06)?
+* Document round functions behaviour better (they behave as in C++11) (added note 2012/09/06).
+* Document limits on size of cpp_dec_float (done 2012/09/06).
+* Add support for fused multiply add (and subtract). GMP mpz_t could use this (done 2012/09/20).
+
+[endsect]
+
+[section:faq FAQ]
+
+[variablelist
+[[Why do I get compiler errors when passing a `number` to a template function?]
+ [Most likely you are actually passing an expression template type to the function and
+ template-argument-deduction deduces the "wrong" type. Try casting the arguments
+ involving expressions to the actual number type, or as a last resort turning off
+ expression template support in the number type you are using.]]
+[[When is expression template support a performance gain?]
+ [As a general rule, expression template support adds a small runtime overhead
+ creating and unpacking the expression templates, but greatly reduces the number of
+ temporaries created. So it's most effective in improving performance when the cost
+ of creating a temporary is high: for example when creating a temporary involves a memory
+ allocation. It is least effective (and may even be a dis-optimisation) when temporaries
+ are cheap: for example if the number type is basically a thin wrapper around a native
+ arithmetic type. In addition, since the library makes extensive use of thin inline wrapper
+ functions, turning on compiler optimization is essential to achieving high performance.]]
+[[Do expression templates reorder operations?]
+ [Yes they do, sometimes quite radically so, if this is a concern then they should be turned
+ off for the number type you are using.]]
+[[I can't construct my number type from ['some other type], but the docs indicate that the conversion should be allowed, what's up?]
+ [Some conversions are ['explicit], that includes construction from a string, or constructing from any type
+ that may result in loss of precision (for example constructing an integer type from a float).]]
+[[Why do I get an exception thrown (or the program crash due to an uncaught exception) when using the bitwise operators on a checked `cpp_int`?]
+ [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
+ 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.]]
+[[Why can't I negate an unsigned type?]
+ [The unary negation operator is deliberately disabled for unsigned integer types as its use would almost always be a programming error.]]
+[[Why doesn't the library use proto?]
+ [A very early version of the library did use proto, but compile times became too slow
+ for the library to be usable. Since the library only required a tiny fraction of what
+ proto has to offer anyway, a lightweight expression template mechanism was used instead.
+ Compile times are still too slow...]]
+[[Why not abstract out addition/multiplication algorithms?]
+ [This was deemed not to be practical: these algorithms are intimately
+ tied to the actual data representation used.]]
+]
+
+[endsect]
+
+[section:ack Acknowledgements]
+
+This library would not have happened without:
+
+* 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
+(Reading, Massachusetts: Addison-Wesley, 1997), xiv+762pp. ISBN 0-201-89684-2
+
+[endsect]
+
+[endsect]
+
+[section:indexes Indexes]
+
+'''
+<index type="function_name">
+<title>Function Index</title>
+</index>
+
+<index type="class_name">
+<title>Class Index</title>
+</index>
+
+<index type="typedef_name">
+<title>Typedef Index</title>
+</index>
+
+<index/>
+'''
+
+[endsect]
+
+
+
+
diff --git a/libs/multiprecision/doc/numeric_limits_32_tables.qbk b/libs/multiprecision/doc/numeric_limits_32_tables.qbk
new file mode 100644
index 0000000000..06d0549078
--- /dev/null
+++ b/libs/multiprecision/doc/numeric_limits_32_tables.qbk
@@ -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]
+
diff --git a/libs/multiprecision/doc/numeric_limits_qbk.cpp b/libs/multiprecision/doc/numeric_limits_qbk.cpp
new file mode 100644
index 0000000000..5f4f6b194f
--- /dev/null
+++ b/libs/multiprecision/doc/numeric_limits_qbk.cpp
@@ -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
+
+ */
+
diff --git a/libs/multiprecision/example/Jamfile.v2 b/libs/multiprecision/example/Jamfile.v2
new file mode 100644
index 0000000000..b357c186fd
--- /dev/null
+++ b/libs/multiprecision/example/Jamfile.v2
@@ -0,0 +1,95 @@
+# \libs\math\example\jamfile.v2
+# Runs multiprecision examples.
+# Copyright 2014 John Maddock
+# Copyright Paul A. Bristow 2014.
+# Copyright Christpher Kormanyos 2014
+
+# 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)
+
+# bring in the rules for testing
+import testing ;
+import modules ;
+import path ;
+
+local ntl-path = [ modules.peek : NTL_PATH ] ;
+local gmp_path = [ modules.peek : GMP_PATH ] ;
+local mpfr_path = [ modules.peek : MPFR_PATH ] ;
+local mpfi_path = [ modules.peek : MPFI_PATH ] ;
+local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
+
+project
+ : requirements
+ <include>$(gmp_path)
+ <include>$(gmp_path)/mpfr
+ <include>$(gmp_path)/gmpfrxx
+ <include>$(mpfr_path)
+ <include>$(mpfi_path)
+ <include>$(mpfi_path)/src
+ <include>$(tommath_path)
+ <include>../include
+ <include>../../..
+ <toolset>gcc:<cxxflags>-Wno-missing-braces
+ <toolset>darwin:<cxxflags>-Wno-missing-braces
+ <toolset>acc:<cxxflags>+W2068,2461,2236,4070
+ <toolset>intel:<cxxflags>-Qwd264,239
+ <toolset>msvc:<runtime-link>static
+ <toolset>msvc:<link>static
+ <toolset>msvc:<warnings>all
+ <toolset>msvc:<asynch-exceptions>on
+ <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
+ <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
+ <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
+ <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
+ <toolset>msvc:<cxxflags>/wd4996
+ <toolset>msvc:<cxxflags>/wd4512
+ <toolset>msvc:<cxxflags>/wd4610
+ <toolset>msvc:<cxxflags>/wd4510
+ <toolset>msvc:<cxxflags>/wd4127
+ <toolset>msvc:<cxxflags>/wd4701
+ <toolset>msvc:<cxxflags>/wd4127
+ <toolset>msvc:<cxxflags>/wd4305
+ ;
+
+lib gmp : : <search>$(gmp_path) ;
+lib mpfr : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug ;
+lib mpfi : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug <search>$(mpfi_path) <search>$(mpfi_path)/src ;
+lib quadmath ;
+
+if $(tommath_path)
+{
+ lib tommath : [ GLOB $(tommath_path) : *.c ] ;
+ TOMMATH = tommath ;
+}
+else
+{
+ lib tommath : : <search>$(tommath_path) ;
+ TOMMATH = tommath ;
+}
+
+run cpp_int_snips.cpp ;
+
+run cpp_dec_float_snips.cpp ;
+
+run cpp_bin_float_snips.cpp ;
+
+run debug_adaptor_snips.cpp ;
+run float128_snips.cpp quadmath : : : [ check-target-builds ../config//has_float128 : : <build>no ] ;
+run floating_point_examples.cpp ;
+run gauss_laguerre_quadrature.cpp : : : release ;
+run hypergeometric_luke_algorithms.cpp ;
+run integer_examples.cpp ;
+run logged_adaptor.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ;
+run mixed_integer_arithmetic.cpp ;
+run numeric_limits_snips.cpp /boost//test_exec_monitor ;
+run random_snips.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
+run safe_prime.cpp ;
+
+run gmp_snips.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
+run mpfi_snips.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ;
+run mpfr_snips.cpp mpfr gmp : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+run tommath_snips.cpp $(TOMMATH) : : : [ check-target-builds ../config//has_tommath : : <build>no ] ;
+
+
+
+
diff --git a/libs/multiprecision/example/cpp_bin_float_snips.cpp b/libs/multiprecision/example/cpp_bin_float_snips.cpp
new file mode 100644
index 0000000000..6450440182
--- /dev/null
+++ b/libs/multiprecision/example/cpp_bin_float_snips.cpp
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//[cpp_bin_float_eg
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+int main()
+{
+ 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;
+ return 0;
+}
+
+//]
diff --git a/libs/multiprecision/example/cpp_dec_float_snips.cpp b/libs/multiprecision/example/cpp_dec_float_snips.cpp
new file mode 100644
index 0000000000..faa488abab
--- /dev/null
+++ b/libs/multiprecision/example/cpp_dec_float_snips.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_
+
+ //[cpp_dec_float_eg
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ // Operations at fixed precision and full numeric_limits support:
+ cpp_dec_float_100 b = 2;
+ std::cout << std::numeric_limits<cpp_dec_float_100>::digits << std::endl;
+ // Note that digits10 is the same as digits, since we're base 10! :
+ std::cout << std::numeric_limits<cpp_dec_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_dec_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_dec_float_100(1000)) << std::endl;
+ return 0;
+}
+//]
+
diff --git a/libs/multiprecision/example/cpp_int_snips.cpp b/libs/multiprecision/example/cpp_int_snips.cpp
new file mode 100644
index 0000000000..e0eb92711c
--- /dev/null
+++ b/libs/multiprecision/example/cpp_int_snips.cpp
@@ -0,0 +1,74 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_int.hpp>
+#include <iostream>
+
+void t1()
+{
+//[cpp_int_eg
+//=#include <boost/multiprecision/cpp_int.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+
+ int128_t v = 1;
+
+ // Do some fixed precision arithmetic:
+ for(unsigned i = 1; i <= 20; ++i)
+ v *= i;
+
+ std::cout << v << std::endl; // prints 20!
+
+ // Repeat at arbitrary precision:
+ cpp_int u = 1;
+ for(unsigned i = 1; i <= 100; ++i)
+ u *= i;
+
+ std::cout << u << std::endl; // prints 100!
+
+//= return 0;
+//=}
+//]
+}
+
+void t3()
+{
+//[cpp_rational_eg
+//=#include <boost/multiprecision/cpp_int.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+
+ cpp_rational v = 1;
+
+ // Do some arithmetic:
+ for(unsigned i = 1; i <= 1000; ++i)
+ v *= i;
+ v /= 10;
+
+ std::cout << v << std::endl; // prints 1000! / 10
+ std::cout << numerator(v) << std::endl;
+ std::cout << denominator(v) << std::endl;
+
+ cpp_rational w(2, 3); // component wise constructor
+ std::cout << w << std::endl; // prints 2/3
+//= return 0;
+//=}
+//]
+}
+
+
+int main()
+{
+ t1();
+ t3();
+ return 0;
+}
+
diff --git a/libs/multiprecision/example/debug_adaptor_snips.cpp b/libs/multiprecision/example/debug_adaptor_snips.cpp
new file mode 100644
index 0000000000..ca19f444ed
--- /dev/null
+++ b/libs/multiprecision/example/debug_adaptor_snips.cpp
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_dec_float.hpp>
+#include <boost/multiprecision/debug_adaptor.hpp>
+#include <iostream>
+
+void t1()
+{
+ //[debug_adaptor_eg
+ //=#include <boost/multiprecision/debug_adaptor.hpp>
+ //=#include <boost/multiprecision/cpp_dec_float.hpp>
+
+ using namespace boost::multiprecision;
+
+ typedef number<debug_adaptor<cpp_dec_float<50> > > fp_type;
+
+ fp_type denom = 1;
+ fp_type sum = 1;
+
+ for(unsigned i = 2; i < 50; ++i)
+ {
+ denom *= i;
+ sum += 1 / denom;
+ }
+
+ std::cout << std::setprecision(std::numeric_limits<fp_type>::digits) << sum << std::endl;
+ //]
+}
+
+int main()
+{
+ t1();
+ return 0;
+}
+
+
+
diff --git a/libs/multiprecision/example/float128_snips.cpp b/libs/multiprecision/example/float128_snips.cpp
new file mode 100644
index 0000000000..c7e7d64f11
--- /dev/null
+++ b/libs/multiprecision/example/float128_snips.cpp
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//[float128_eg
+#include <boost/multiprecision/float128.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ // Operations at 128-bit precision and full numeric_limits support:
+ float128 b = 2;
+ // There are 113-bits of precision:
+ std::cout << std::numeric_limits<float128>::digits << std::endl;
+ // Or 34 decimal places:
+ std::cout << std::numeric_limits<float128>::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<float128>::max_digits10)
+ << log(b) << std::endl; // print log(2) = 0.693147180559945309417232121458176575
+ // We can also use any function from Boost.Math:
+ std::cout << boost::math::tgamma(b) << std::endl;
+ // And since we have an extended exponent range we can generate some really large
+ // numbers here (4.02387260077093773543702433923004111e+2564):
+ std::cout << boost::math::tgamma(float128(1000)) << std::endl;
+ //
+ // We can declare constants using GCC or Intel's native types, and the Q suffix,
+ // these can be declared constexpr if required:
+ /*<-*/
+#ifndef BOOST_NO_CONSTEXPR
+ /*->*/
+ constexpr float128 pi = 3.1415926535897932384626433832795028841971693993751058Q;
+ /*<-*/
+#endif
+ /*->*/
+ return 0;
+}
+//]
+
diff --git a/libs/multiprecision/example/floating_point_examples.cpp b/libs/multiprecision/example/floating_point_examples.cpp
new file mode 100644
index 0000000000..74f593f20c
--- /dev/null
+++ b/libs/multiprecision/example/floating_point_examples.cpp
@@ -0,0 +1,697 @@
+///////////////////////////////////////////////////////////////
+// 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/math/constants/constants.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <boost/math/special_functions/bessel.hpp>
+#include <iostream>
+#include <iomanip>
+
+#if !defined(BOOST_NO_CXX11_HDR_ARRAY) && !defined(BOOST_NO_CXX11_LAMBDAS)
+
+#include <array>
+
+//[AOS1
+
+/*`Generic numeric programming employs templates to use the same code for different
+floating-point types and functions. Consider the area of a circle a of radius r, given by
+
+[:['a = [pi] * r[super 2]]]
+
+The area of a circle can be computed in generic programming using Boost.Math
+for the constant [pi] as shown below:
+
+*/
+
+//=#include <boost/math/constants/constants.hpp>
+
+template<typename T>
+inline T area_of_a_circle(T r)
+{
+ using boost::math::constants::pi;
+ return pi<T>() * r * r;
+}
+
+/*`
+It is possible to use `area_of_a_circle()` 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 double and also the
+`cpp_dec_float_50` data type from Boost.Multiprecision with 50 decimal digits
+of precision.
+
+We can compute and print the approximate area of a circle with radius 123/100 for
+`float`, `double` and `cpp_dec_float_50` with the program below.
+
+*/
+
+//]
+
+//[AOS3
+
+/*`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 types.*/
+
+//]
+
+//[JEL
+
+/*`
+In this example we'll show several implementations of the
+[@http://mathworld.wolfram.com/LambdaFunction.html Jahnke and Emden Lambda function],
+each implementation a little more sophisticated than the last.
+
+The Jahnke-Emden Lambda function is defined by the equation:
+
+[:['JahnkeEmden(v, z) = [Gamma](v+1) * J[sub v](z) / (z / 2)[super v]]]
+
+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:
+
+*/
+
+double JEL1(double v, double z)
+{
+ return boost::math::tgamma(v + 1) * boost::math::cyl_bessel_j(v, z) / std::pow(z / 2, v);
+}
+
+/*`
+Calling this function as:
+
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<double>::digits10);
+ std::cout << JEL1(2.5, 0.5) << std::endl;
+
+Yields the output:
+
+[pre 9.822663964796047e-001]
+
+Now let's implement the function again, but this time using the multiprecision type
+`cpp_dec_float_50` as the argument type:
+
+*/
+
+boost::multiprecision::cpp_dec_float_50
+ JEL2(boost::multiprecision::cpp_dec_float_50 v, boost::multiprecision::cpp_dec_float_50 z)
+{
+ return boost::math::tgamma(v + 1) * boost::math::cyl_bessel_j(v, z) / boost::multiprecision::pow(z / 2, v);
+}
+
+/*`
+The implementation is almost the same as before, but with one key difference - we can no longer call
+`std::pow`, instead we must call the version inside the `boost::multiprecision` namespace. In point of
+fact, we could have omitted the namespace prefix on the call to `pow` since the right overload would
+have been found via [@http://en.wikipedia.org/wiki/Argument-dependent_name_lookup
+argument dependent lookup] in any case.
+
+Note also that the first argument to `pow` along with the argument to `tgamma` in the above code
+are actually expression templates. The `pow` and `tgamma` functions will handle these arguments
+just fine.
+
+Here's an example of how the function may be called:
+
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
+ std::cout << JEL2(cpp_dec_float_50(2.5), cpp_dec_float_50(0.5)) << std::endl;
+
+Which outputs:
+
+[pre 9.82266396479604757017335009796882833995903762577173e-01]
+
+Now that we've seen some non-template examples, lets repeat the code again, but this time as a template
+that can be called either with a builtin type (`float`, `double` etc), or with a multiprecision type:
+
+*/
+
+template <class Float>
+Float JEL3(Float v, Float z)
+{
+ using std::pow;
+ return boost::math::tgamma(v + 1) * boost::math::cyl_bessel_j(v, z) / pow(z / 2, v);
+}
+
+/*`
+
+Once again the code is almost the same as before, but the call to `pow` has changed yet again.
+We need the call to resolve to either `std::pow` (when the argument is a builtin type), or
+to `boost::multiprecision::pow` (when the argument is a multiprecision type). We do that by
+making the call unqualified so that versions of `pow` defined in the same namespace as type
+`Float` are found via argument dependent lookup, while the `using std::pow` directive makes
+the standard library versions visible for builtin floating point types.
+
+Let's call the function with both `double` and multiprecision arguments:
+
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<double>::digits10);
+ std::cout << JEL3(2.5, 0.5) << std::endl;
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
+ std::cout << JEL3(cpp_dec_float_50(2.5), cpp_dec_float_50(0.5)) << std::endl;
+
+Which outputs:
+
+[pre
+9.822663964796047e-001
+9.82266396479604757017335009796882833995903762577173e-01
+]
+
+Unfortunately there is a problem with this version: if we were to call it like this:
+
+ boost::multiprecision::cpp_dec_float_50 v(2), z(0.5);
+ JEL3(v + 0.5, z);
+
+Then we would get a long and inscrutable error message from the compiler: the problem here is that the first
+argument to `JEL3` is not a number type, but an expression template. We could obviously add a typecast to
+fix the issue:
+
+ JEL(cpp_dec_float_50(v + 0.5), z);
+
+However, if we want the function JEL to be truly reusable, then a better solution might be preferred.
+To achieve this we can borrow some code from Boost.Math which calculates the return type of mixed-argument
+functions, here's how the new code looks now:
+
+*/
+
+template <class Float1, class Float2>
+typename boost::math::tools::promote_args<Float1, Float2>::type
+ JEL4(Float1 v, Float2 z)
+{
+ using std::pow;
+ return boost::math::tgamma(v + 1) * boost::math::cyl_bessel_j(v, z) / pow(z / 2, v);
+}
+
+/*`
+
+As you can see the two arguments to the function are now separate template types, and
+the return type is computed using the `promote_args` metafunction from Boost.Math.
+
+Now we can call:
+
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<cpp_dec_float_100>::digits10);
+ std::cout << JEL4(cpp_dec_float_100(2) + 0.5, cpp_dec_float_100(0.5)) << std::endl;
+
+And get 100 digits of output:
+
+[pre 9.8226639647960475701733500979688283399590376257717309069410413822165082248153638454147004236848917775e-01]
+
+As a bonus, we can now call the function not just with expression templates, but with other mixed types as well:
+for example `float` and `double` or `int` and `double`, and the correct return type will be computed in each case.
+
+Note that while in this case we didn't have to change the body of the function, in the general case
+any function like this which creates local variables internally would have to use `promote_args`
+to work out what type those variables should be, for example:
+
+ template <class Float1, class Float2>
+ typename boost::math::tools::promote_args<Float1, Float2>::type
+ JEL5(Float1 v, Float2 z)
+ {
+ using std::pow;
+ typedef typename boost::math::tools::promote_args<Float1, Float2>::type variable_type;
+ variable_type t = pow(z / 2, v);
+ return boost::math::tgamma(v + 1) * boost::math::cyl_bessel_j(v, z) / t;
+ }
+
+*/
+
+//]
+
+//[ND1
+
+/*`
+In this example we'll add even more power to generic numeric programming using not only different
+floating-point types but also function objects as template parameters. Consider
+some well-known central difference rules for numerically computing the first derivative
+of a function ['f[prime](x)] with ['x [isin] [real]]:
+
+[equation floating_point_eg1]
+
+Where the difference terms ['m[sub n]] are given by:
+
+[equation floating_point_eg2]
+
+and ['dx] is the step-size of the derivative.
+
+The third formula in Equation 1 is a three-point central difference rule. It calculates
+the first derivative of ['f[prime](x)] to ['O(dx[super 6])], where ['dx] is the given step-size.
+For example, if
+the step-size is 0.01 this derivative calculation has about 6 decimal digits of precision -
+just about right for the 7 decimal digits of single-precision float.
+Let's make a generic template subroutine using this three-point central difference
+rule. In particular:
+*/
+
+template<typename value_type, typename function_type>
+ value_type derivative(const value_type x, const value_type dx, function_type func)
+{
+ // Compute d/dx[func(*first)] using a three-point
+ // central difference rule of O(dx^6).
+
+ const value_type dx1 = dx;
+ const value_type dx2 = dx1 * 2;
+ const value_type dx3 = dx1 * 3;
+
+ const value_type m1 = (func(x + dx1) - func(x - dx1)) / 2;
+ const value_type m2 = (func(x + dx2) - func(x - dx2)) / 4;
+ const value_type m3 = (func(x + dx3) - func(x - dx3)) / 6;
+
+ const value_type fifteen_m1 = 15 * m1;
+ const value_type six_m2 = 6 * m2;
+ const value_type ten_dx1 = 10 * dx1;
+
+ return ((fifteen_m1 - six_m2) + m3) / ten_dx1;
+}
+
+/*`The `derivative()` template function can be used to compute the first derivative
+of any function to ['O(dx[super 6])]. For example, consider the first derivative of ['sin(x)] evaluated
+at ['x = [pi]/3]. In other words,
+
+[equation floating_point_eg3]
+
+The code below computes the derivative in Equation 3 for float, double and boost's
+multiple-precision type cpp_dec_float_50.
+*/
+
+//]
+
+//[GI1
+
+/*`
+Similar to the generic derivative example, we can calculate integrals in a similar manner:
+*/
+
+template<typename value_type, typename function_type>
+inline value_type integral(const value_type a,
+ const value_type b,
+ const value_type tol,
+ function_type func)
+{
+ unsigned n = 1U;
+
+ value_type h = (b - a);
+ value_type I = (func(a) + func(b)) * (h / 2);
+
+ for(unsigned k = 0U; k < 8U; k++)
+ {
+ h /= 2;
+
+ value_type sum(0);
+ for(unsigned j = 1U; j <= n; j++)
+ {
+ sum += func(a + (value_type((j * 2) - 1) * h));
+ }
+
+ const value_type I0 = I;
+ I = (I / 2) + (h * sum);
+
+ const value_type ratio = I0 / I;
+ const value_type delta = ratio - 1;
+ const value_type delta_abs = ((delta < 0) ? -delta : delta);
+
+ if((k > 1U) && (delta_abs < tol))
+ {
+ break;
+ }
+
+ n *= 2U;
+ }
+
+ return I;
+}
+
+/*`
+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:
+*/
+
+template<typename value_type>
+class cyl_bessel_j_integral_rep
+{
+public:
+ cyl_bessel_j_integral_rep(const unsigned N,
+ const value_type& X) : n(N), x(X) { }
+
+ value_type operator()(const value_type& t) const
+ {
+ // pi * Jn(x) = Int_0^pi [cos(x * sin(t) - n*t) dt]
+ return cos(x * sin(t) - (n * t));
+ }
+
+private:
+ const unsigned n;
+ const value_type x;
+};
+
+
+//]
+
+//[POLY
+
+/*`
+In this example we'll look at polynomial evaluation, this is not only an important
+use case, but it's one that `number` performs particularly well at because the
+expression templates ['completely eliminate all temporaries] from a
+[@http://en.wikipedia.org/wiki/Horner%27s_method Horner polynomial
+evaluation scheme].
+
+The following code evaluates `sin(x)` as a polynomial, accurate to at least 64 decimal places:
+
+*/
+
+using boost::multiprecision::cpp_dec_float;
+typedef boost::multiprecision::number<cpp_dec_float<64> > mp_type;
+
+mp_type mysin(const mp_type& x)
+{
+ // Approximation of sin(x * pi/2) for -1 <= x <= 1, using an order 63 polynomial.
+ static const std::array<mp_type, 32U> coefs =
+ {{
+ mp_type("+1.5707963267948966192313216916397514420985846996875529104874722961539082031431044993140174126711"), //"),
+ mp_type("-0.64596409750624625365575656389794573337969351178927307696134454382929989411386887578263960484"), // ^3
+ mp_type("+0.07969262624616704512050554949047802252091164235106119545663865720995702920146198554317279"), // ^5
+ mp_type("-0.0046817541353186881006854639339534378594950280185010575749538605102665157913157426229824"), // ^7
+ mp_type("+0.00016044118478735982187266087016347332970280754062061156858775174056686380286868007443"), // ^9
+ mp_type("-3.598843235212085340458540018208389404888495232432127661083907575106196374913134E-6"), // ^11
+ mp_type("+5.692172921967926811775255303592184372902829756054598109818158853197797542565E-8"), // ^13
+ mp_type("-6.688035109811467232478226335783138689956270985704278659373558497256423498E-10"), // ^15
+ mp_type("+6.066935731106195667101445665327140070166203261129845646380005577490472E-12"), // ^17
+ mp_type("-4.377065467313742277184271313776319094862897030084226361576452003432E-14"), // ^19
+ mp_type("+2.571422892860473866153865950420487369167895373255729246889168337E-16"), // ^21
+ mp_type("-1.253899540535457665340073300390626396596970180355253776711660E-18"), // ^23
+ mp_type("+5.15645517658028233395375998562329055050964428219501277474E-21"), // ^25
+ mp_type("-1.812399312848887477410034071087545686586497030654642705E-23"), // ^27
+ mp_type("+5.50728578652238583570585513920522536675023562254864E-26"), // ^29
+ mp_type("-1.461148710664467988723468673933026649943084902958E-28"), // ^31
+ mp_type("+3.41405297003316172502972039913417222912445427E-31"), // ^33
+ mp_type("-7.07885550810745570069916712806856538290251E-34"), // ^35
+ mp_type("+1.31128947968267628970845439024155655665E-36"), // ^37
+ mp_type("-2.18318293181145698535113946654065918E-39"), // ^39
+ mp_type("+3.28462680978498856345937578502923E-42"), // ^41
+ mp_type("-4.48753699028101089490067137298E-45"), // ^43
+ mp_type("+5.59219884208696457859353716E-48"), // ^45
+ mp_type("-6.38214503973500471720565E-51"), // ^47
+ mp_type("+6.69528558381794452556E-54"), // ^49
+ mp_type("-6.47841373182350206E-57"), // ^51
+ mp_type("+5.800016389666445E-60"), // ^53
+ mp_type("-4.818507347289E-63"), // ^55
+ mp_type("+3.724683686E-66"), // ^57
+ mp_type("-2.6856479E-69"), // ^59
+ mp_type("+1.81046E-72"), // ^61
+ mp_type("-1.133E-75"), // ^63
+ }};
+
+ const mp_type v = x * 2 / boost::math::constants::pi<mp_type>();
+ const mp_type x2 = (v * v);
+ //
+ // Polynomial evaluation follows, if mp_type allocates memory then
+ // just one such allocation occurs - to initialize the variable "sum" -
+ // and no temporaries are created at all.
+ //
+ const mp_type sum = ((((((((((((((((((((((((((((((( + coefs[31U]
+ * x2 + coefs[30U])
+ * x2 + coefs[29U])
+ * x2 + coefs[28U])
+ * x2 + coefs[27U])
+ * x2 + coefs[26U])
+ * x2 + coefs[25U])
+ * x2 + coefs[24U])
+ * x2 + coefs[23U])
+ * x2 + coefs[22U])
+ * x2 + coefs[21U])
+ * x2 + coefs[20U])
+ * x2 + coefs[19U])
+ * x2 + coefs[18U])
+ * x2 + coefs[17U])
+ * x2 + coefs[16U])
+ * x2 + coefs[15U])
+ * x2 + coefs[14U])
+ * x2 + coefs[13U])
+ * x2 + coefs[12U])
+ * x2 + coefs[11U])
+ * x2 + coefs[10U])
+ * x2 + coefs[9U])
+ * x2 + coefs[8U])
+ * x2 + coefs[7U])
+ * x2 + coefs[6U])
+ * x2 + coefs[5U])
+ * x2 + coefs[4U])
+ * x2 + coefs[3U])
+ * x2 + coefs[2U])
+ * x2 + coefs[1U])
+ * x2 + coefs[0U])
+ * v;
+
+ return sum;
+}
+
+/*`
+Calling the function like so:
+
+ mp_type pid4 = boost::math::constants::pi<mp_type>() / 4;
+ std::cout << std::setprecision(std::numeric_limits< ::mp_type>::digits10) << std::scientific;
+ std::cout << mysin(pid4) << std::endl;
+
+Yields the expected output:
+
+[pre 7.0710678118654752440084436210484903928483593768847403658833986900e-01]
+
+*/
+
+//]
+
+
+int main()
+{
+ using namespace boost::multiprecision;
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<double>::digits10);
+ std::cout << JEL1(2.5, 0.5) << std::endl;
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
+ std::cout << JEL2(cpp_dec_float_50(2.5), cpp_dec_float_50(0.5)) << std::endl;
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<double>::digits10);
+ std::cout << JEL3(2.5, 0.5) << std::endl;
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
+ std::cout << JEL3(cpp_dec_float_50(2.5), cpp_dec_float_50(0.5)) << std::endl;
+ std::cout << std::scientific << std::setprecision(std::numeric_limits<cpp_dec_float_100>::digits10);
+ std::cout << JEL4(cpp_dec_float_100(2) + 0.5, cpp_dec_float_100(0.5)) << std::endl;
+
+ //[AOS2
+
+/*=#include <iostream>
+#include <iomanip>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using boost::multiprecision::cpp_dec_float_50;
+
+int main(int, char**)
+{*/
+ const float r_f(float(123) / 100);
+ const float a_f = area_of_a_circle(r_f);
+
+ const double r_d(double(123) / 100);
+ const double a_d = area_of_a_circle(r_d);
+
+ const cpp_dec_float_50 r_mp(cpp_dec_float_50(123) / 100);
+ const cpp_dec_float_50 a_mp = area_of_a_circle(r_mp);
+
+ // 4.75292
+ std::cout
+ << std::setprecision(std::numeric_limits<float>::digits10)
+ << a_f
+ << std::endl;
+
+ // 4.752915525616
+ std::cout
+ << std::setprecision(std::numeric_limits<double>::digits10)
+ << a_d
+ << std::endl;
+
+ // 4.7529155256159981904701331745635599135018975843146
+ std::cout
+ << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10)
+ << a_mp
+ << std::endl;
+/*=}*/
+
+ //]
+
+ //[ND2
+/*=
+#include <iostream>
+#include <iomanip>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include <boost/math/constants/constants.hpp>
+
+
+int main(int, char**)
+{*/
+ using boost::math::constants::pi;
+ using boost::multiprecision::cpp_dec_float_50;
+ //
+ // We'll pass a function pointer for the function object passed to derivative,
+ // the typecast is needed to select the correct overload of std::sin:
+ //
+ const float d_f = derivative(
+ pi<float>() / 3,
+ 0.01F,
+ static_cast<float(*)(float)>(std::sin)
+ );
+
+ const double d_d = derivative(
+ pi<double>() / 3,
+ 0.001,
+ static_cast<double(*)(double)>(std::sin)
+ );
+ //
+ // In the cpp_dec_float_50 case, the sin function is multiply overloaded
+ // to handle expression templates etc. As a result it's hard to take its
+ // address without knowing about its implementation details. We'll use a
+ // C++11 lambda expression to capture the call.
+ // We also need a typecast on the first argument so we don't accidentally pass
+ // an expression template to a template function:
+ //
+ const cpp_dec_float_50 d_mp = derivative(
+ cpp_dec_float_50(pi<cpp_dec_float_50>() / 3),
+ cpp_dec_float_50(1.0E-9),
+ [](const cpp_dec_float_50& x) -> cpp_dec_float_50
+ {
+ return sin(x);
+ }
+ );
+
+ // 5.000029e-001
+ std::cout
+ << std::setprecision(std::numeric_limits<float>::digits10)
+ << d_f
+ << std::endl;
+
+ // 4.999999999998876e-001
+ std::cout
+ << std::setprecision(std::numeric_limits<double>::digits10)
+ << d_d
+ << std::endl;
+
+ // 4.99999999999999999999999999999999999999999999999999e-01
+ std::cout
+ << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10)
+ << d_mp
+ << std::endl;
+//=}
+
+ /*`
+ 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 value of 0.5.*/
+
+ //]
+
+ //[ND3
+
+ /*`
+ We can take this a step further and use our derivative function to compute
+ a partial derivative. For example if we take the incomplete gamma function
+ ['P(a, z)], and take the derivative with respect to /z/ at /(2,2)/ then we
+ can calculate the result as shown below, for good measure we'll compare with
+ the "correct" result obtained from a call to ['gamma_p_derivative], the results
+ agree to approximately 44 digits:
+ */
+
+ cpp_dec_float_50 gd = derivative(
+ cpp_dec_float_50(2),
+ cpp_dec_float_50(1.0E-9),
+ [](const cpp_dec_float_50& x) ->cpp_dec_float_50
+ {
+ return boost::math::gamma_p(2, x);
+ }
+ );
+ // 2.70670566473225383787998989944968806815263091819151e-01
+ std::cout
+ << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10)
+ << gd
+ << std::endl;
+ // 2.70670566473225383787998989944968806815253190143120e-01
+ std::cout << boost::math::gamma_p_derivative(cpp_dec_float_50(2), cpp_dec_float_50(2)) << std::endl;
+ //]
+
+ //[GI2
+
+ /* The function can now be called as follows: */
+/*=int main(int, char**)
+{*/
+ using boost::math::constants::pi;
+ typedef boost::multiprecision::cpp_dec_float_50 mp_type;
+
+ const float j2_f =
+ integral(0.0F,
+ pi<float>(),
+ 0.01F,
+ cyl_bessel_j_integral_rep<float>(2U, 1.23F)) / pi<float>();
+
+ const double j2_d =
+ integral(0.0,
+ pi<double>(),
+ 0.0001,
+ cyl_bessel_j_integral_rep<double>(2U, 1.23)) / pi<double>();
+
+ const mp_type j2_mp =
+ integral(mp_type(0),
+ pi<mp_type>(),
+ mp_type(1.0E-20),
+ cyl_bessel_j_integral_rep<mp_type>(2U, mp_type(123) / 100)) / pi<mp_type>();
+
+ // 0.166369
+ std::cout
+ << std::setprecision(std::numeric_limits<float>::digits10)
+ << j2_f
+ << std::endl;
+
+ // 0.166369383786814
+ std::cout
+ << std::setprecision(std::numeric_limits<double>::digits10)
+ << j2_d
+ << std::endl;
+
+ // 0.16636938378681407351267852431513159437103348245333
+ std::cout
+ << std::setprecision(std::numeric_limits<mp_type>::digits10)
+ << j2_mp
+ << std::endl;
+
+ //
+ // Print true value for comparison:
+ // 0.166369383786814073512678524315131594371033482453329
+ std::cout << boost::math::cyl_bessel_j(2, mp_type(123) / 100) << std::endl;
+//=}
+
+ //]
+
+ std::cout << std::setprecision(std::numeric_limits< ::mp_type>::digits10) << std::scientific;
+ std::cout << mysin(boost::math::constants::pi< ::mp_type>() / 4) << std::endl;
+ std::cout << boost::multiprecision::sin(boost::math::constants::pi< ::mp_type>() / 4) << std::endl;
+
+ return 0;
+}
+
+/*
+
+Program output:
+
+9.822663964796047e-001
+9.82266396479604757017335009796882833995903762577173e-01
+9.822663964796047e-001
+9.82266396479604757017335009796882833995903762577173e-01
+9.8226639647960475701733500979688283399590376257717309069410413822165082248153638454147004236848917775e-01
+4.752916e+000
+4.752915525615998e+000
+4.75291552561599819047013317456355991350189758431460e+00
+5.000029e-001
+4.999999999998876e-001
+4.99999999999999999999999999999999999999999999999999e-01
+2.70670566473225383787998989944968806815263091819151e-01
+2.70670566473225383787998989944968806815253190143120e-01
+7.0710678118654752440084436210484903928483593768847403658833986900e-01
+7.0710678118654752440084436210484903928483593768847403658833986900e-01
+*/
+
+#else
+
+int main() { return 0; }
+
+#endif
diff --git a/libs/multiprecision/example/gauss_laguerre_quadrature.cpp b/libs/multiprecision/example/gauss_laguerre_quadrature.cpp
new file mode 100644
index 0000000000..87a8bb0bc3
--- /dev/null
+++ b/libs/multiprecision/example/gauss_laguerre_quadrature.cpp
@@ -0,0 +1,514 @@
+#include <cmath>
+#include <cstdint>
+#include <functional>
+#include <iomanip>
+#include <iostream>
+#include <numeric>
+#include <boost/math/constants/constants.hpp>
+#include <boost/math/special_functions/cbrt.hpp>
+#include <boost/math/special_functions/factorials.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <boost/math/tools/roots.hpp>
+#include <boost/noncopyable.hpp>
+
+#define CPP_BIN_FLOAT 1
+#define CPP_DEC_FLOAT 2
+#define CPP_MPFR_FLOAT 3
+
+//#define MP_TYPE CPP_BIN_FLOAT
+#define MP_TYPE CPP_DEC_FLOAT
+//#define MP_TYPE CPP_MPFR_FLOAT
+
+namespace
+{
+ struct digits_characteristics
+ {
+ static const int digits10 = 300;
+ static const int guard_digits = 6;
+ };
+}
+
+#if (MP_TYPE == CPP_BIN_FLOAT)
+ #include <boost/multiprecision/cpp_bin_float.hpp>
+ namespace mp = boost::multiprecision;
+ typedef mp::number<mp::cpp_bin_float<digits_characteristics::digits10 + digits_characteristics::guard_digits>, mp::et_off> mp_type;
+#elif (MP_TYPE == CPP_DEC_FLOAT)
+ #include <boost/multiprecision/cpp_dec_float.hpp>
+ namespace mp = boost::multiprecision;
+ typedef mp::number<mp::cpp_dec_float<digits_characteristics::digits10 + digits_characteristics::guard_digits>, mp::et_off> mp_type;
+#elif (MP_TYPE == CPP_MPFR_FLOAT)
+ #include <boost/multiprecision/mpfr.hpp>
+ namespace mp = boost::multiprecision;
+ typedef mp::number<mp::mpfr_float_backend<digits_characteristics::digits10 + digits_characteristics::guard_digits>, mp::et_off> mp_type;
+#else
+#error MP_TYPE is undefined
+#endif
+
+template<typename T>
+class laguerre_function_object
+{
+public:
+ laguerre_function_object(const int n, const T a) : order(n),
+ alpha(a),
+ p1 (0),
+ d2 (0) { }
+
+ laguerre_function_object(const laguerre_function_object& other) : order(other.order),
+ alpha(other.alpha),
+ p1 (other.p1),
+ d2 (other.d2) { }
+
+ ~laguerre_function_object() { }
+
+ T operator()(const T& x) const
+ {
+ // Calculate (via forward recursion):
+ // * the value of the Laguerre function L(n, alpha, x), called (p2),
+ // * the value of the derivative of the Laguerre function (d2),
+ // * and the value of the corresponding Laguerre function of
+ // previous order (p1).
+
+ // Return the value of the function (p2) in order to be used as a
+ // function object with Boost.Math root-finding. Store the values
+ // of the Laguerre function derivative (d2) and the Laguerre function
+ // of previous order (p1) in class members for later use.
+
+ p1 = T(0);
+ T p2 = T(1);
+ d2 = T(0);
+
+ T j_plus_alpha(alpha);
+ T two_j_plus_one_plus_alpha_minus_x(1 + alpha - x);
+
+ int j;
+
+ const T my_two(2);
+
+ for(j = 0; j < order; ++j)
+ {
+ const T p0(p1);
+
+ // Set the value of the previous Laguerre function.
+ p1 = p2;
+
+ // Use a recurrence relation to compute the value of the Laguerre function.
+ p2 = ((two_j_plus_one_plus_alpha_minus_x * p1) - (j_plus_alpha * p0)) / (j + 1);
+
+ ++j_plus_alpha;
+ two_j_plus_one_plus_alpha_minus_x += my_two;
+ }
+
+ // Set the value of the derivative of the Laguerre function.
+ d2 = ((p2 * j) - (j_plus_alpha * p1)) / x;
+
+ // Return the value of the Laguerre function.
+ return p2;
+ }
+
+ const T& previous () const { return p1; }
+ const T& derivative() const { return d2; }
+
+ static bool root_tolerance(const T& a, const T& b)
+ {
+ using std::abs;
+
+ // The relative tolerance here is: ((a - b) * 2) / (a + b).
+ return (abs((a - b) * 2) < ((a + b) * boost::math::tools::epsilon<T>()));
+ }
+
+private:
+ const int order;
+ const T alpha;
+ mutable T p1;
+ mutable T d2;
+
+ laguerre_function_object();
+
+ const laguerre_function_object& operator=(const laguerre_function_object&);
+};
+
+template<typename T>
+class guass_laguerre_abscissas_and_weights : private boost::noncopyable
+{
+public:
+ guass_laguerre_abscissas_and_weights(const int n, const T a) : order(n),
+ alpha(a),
+ valid(true),
+ xi (),
+ wi ()
+ {
+ if(alpha < -20.0F)
+ {
+ // TBD: If we ever boostify this, throw a range error here.
+ // If so, then also document it in the docs.
+ std::cout << "Range error: the order of the Laguerre function must exceed -20.0." << std::endl;
+ }
+ else
+ {
+ calculate();
+ }
+ }
+
+ virtual ~guass_laguerre_abscissas_and_weights() { }
+
+ const std::vector<T>& abscissas() const { return xi; }
+ const std::vector<T>& weights () const { return wi; }
+
+ bool get_valid() const { return valid; }
+
+private:
+ const int order;
+ const T alpha;
+ bool valid;
+
+ std::vector<T> xi;
+ std::vector<T> wi;
+
+ void calculate()
+ {
+ using std::abs;
+
+ std::cout << "finding approximate roots..." << std::endl;
+
+ std::vector<boost::math::tuple<T, T> > root_estimates;
+
+ root_estimates.reserve(static_cast<typename std::vector<boost::math::tuple<T, T> >::size_type>(order));
+
+ const laguerre_function_object<T> laguerre_object(order, alpha);
+
+ // Set the initial values of the step size and the running step
+ // to be used for finding the estimate of the first root.
+ T step_size = 0.01F;
+ T step = step_size;
+
+ T first_laguerre_root = 0.0F;
+
+ bool first_laguerre_root_has_been_found = true;
+
+ if(alpha < -1.0F)
+ {
+ // Iteratively step through the Laguerre function using a
+ // small step-size in order to find a rough estimate of
+ // the first zero.
+
+ bool this_laguerre_value_is_negative = (laguerre_object(mp_type(0)) < 0);
+
+ static const int j_max = 10000;
+
+ int j;
+
+ for(j = 0; (j < j_max) && (this_laguerre_value_is_negative != (laguerre_object(step) < 0)); ++j)
+ {
+ // Increment the step size until the sign of the Laguerre function
+ // switches. This indicates a zero-crossing, signalling the next root.
+ step += step_size;
+ }
+
+ if(j >= j_max)
+ {
+ first_laguerre_root_has_been_found = false;
+ }
+ else
+ {
+ // We have found the first zero-crossing. Put a loose bracket around
+ // the root using a window. Here, we know that the first root lies
+ // between (x - step_size) < root < x.
+
+ // Before storing the approximate root, perform a couple of
+ // bisection steps in order to tighten up the root bracket.
+ boost::uintmax_t a_couple_of_iterations = 3U;
+ const std::pair<T, T>
+ first_laguerre_root = boost::math::tools::bisect(laguerre_object,
+ step - step_size,
+ step,
+ laguerre_function_object<T>::root_tolerance,
+ a_couple_of_iterations);
+
+ static_cast<void>(a_couple_of_iterations);
+ }
+ }
+ else
+ {
+ // Calculate an estimate of the 1st root of a generalized Laguerre
+ // function using either a Taylor series or an expansion in Bessel
+ // function zeros. The Bessel function zeros expansion is from Tricomi.
+
+ // Here, we obtain an estimate of the first zero of J_alpha(x).
+
+ T j_alpha_m1;
+
+ if(alpha < 1.4F)
+ {
+ // For small alpha, use a short series obtained from Mathematica(R).
+ // Series[BesselJZero[v, 1], {v, 0, 3}]
+ // N[%, 12]
+ j_alpha_m1 = ((( 0.09748661784476F
+ * alpha - 0.17549359276115F)
+ * alpha + 1.54288974259931F)
+ * alpha + 2.40482555769577F);
+ }
+ else
+ {
+ // For larger alpha, use the first line of Eqs. 10.21.40 in the NIST Handbook.
+ const T alpha_pow_third(boost::math::cbrt(alpha));
+ const T alpha_pow_minus_two_thirds(T(1) / (alpha_pow_third * alpha_pow_third));
+
+ j_alpha_m1 = alpha * ((((( + 0.043F
+ * alpha_pow_minus_two_thirds - 0.0908F)
+ * alpha_pow_minus_two_thirds - 0.00397F)
+ * alpha_pow_minus_two_thirds + 1.033150F)
+ * alpha_pow_minus_two_thirds + 1.8557571F)
+ * alpha_pow_minus_two_thirds + 1.0F);
+ }
+
+ const T vf = ((order * 4.0F) + (alpha * 2.0F) + 2.0F);
+ const T vf2 = vf * vf;
+ const T j_alpha_m1_sqr = j_alpha_m1 * j_alpha_m1;
+
+ first_laguerre_root = (j_alpha_m1_sqr * (-0.6666666666667F + ((0.6666666666667F * alpha) * alpha) + (0.3333333333333F * j_alpha_m1_sqr) + vf2)) / (vf2 * vf);
+ }
+
+ if(first_laguerre_root_has_been_found)
+ {
+ bool this_laguerre_value_is_negative = (laguerre_object(mp_type(0)) < 0);
+
+ // Re-set the initial value of the step-size based on the
+ // estimate of the first root.
+ step_size = first_laguerre_root / 2;
+ step = step_size;
+
+ // Step through the Laguerre function using a step-size
+ // of dynamic width in order to find the zero crossings
+ // of the Laguerre function, providing rough estimates
+ // of the roots. Refine the brackets with a few bisection
+ // steps, and store the results as bracketed root estimates.
+
+ while(static_cast<int>(root_estimates.size()) < order)
+ {
+ // Increment the step size until the sign of the Laguerre function
+ // switches. This indicates a zero-crossing, signalling the next root.
+ step += step_size;
+
+ if(this_laguerre_value_is_negative != (laguerre_object(step) < 0))
+ {
+ // We have found the next zero-crossing.
+
+ // Change the running sign of the Laguerre function.
+ this_laguerre_value_is_negative = (!this_laguerre_value_is_negative);
+
+ // We have found the first zero-crossing. Put a loose bracket around
+ // the root using a window. Here, we know that the first root lies
+ // between (x - step_size) < root < x.
+
+ // Before storing the approximate root, perform a couple of
+ // bisection steps in order to tighten up the root bracket.
+ boost::uintmax_t a_couple_of_iterations = 3U;
+ const std::pair<T, T>
+ root_estimate_bracket = boost::math::tools::bisect(laguerre_object,
+ step - step_size,
+ step,
+ laguerre_function_object<T>::root_tolerance,
+ a_couple_of_iterations);
+
+ static_cast<void>(a_couple_of_iterations);
+
+ // Store the refined root estimate as a bracketed range in a tuple.
+ root_estimates.push_back(boost::math::tuple<T, T>(root_estimate_bracket.first,
+ root_estimate_bracket.second));
+
+ if(root_estimates.size() >= static_cast<std::size_t>(2U))
+ {
+ // Determine the next step size. This is based on the distance between
+ // the previous two roots, whereby the estimates of the previous roots
+ // are computed by taking the average of the lower and upper range of
+ // the root-estimate bracket.
+
+ const T r0 = ( boost::math::get<0>(*(root_estimates.rbegin() + 1U))
+ + boost::math::get<1>(*(root_estimates.rbegin() + 1U))) / 2;
+
+ const T r1 = ( boost::math::get<0>(*root_estimates.rbegin())
+ + boost::math::get<1>(*root_estimates.rbegin())) / 2;
+
+ const T distance_between_previous_roots = r1 - r0;
+
+ step_size = distance_between_previous_roots / 3;
+ }
+ }
+ }
+
+ const T norm_g =
+ ((alpha == 0) ? T(-1)
+ : -boost::math::tgamma(alpha + order) / boost::math::factorial<T>(order - 1));
+
+ xi.reserve(root_estimates.size());
+ wi.reserve(root_estimates.size());
+
+ // Calculate the abscissas and weights to full precision.
+ for(std::size_t i = static_cast<std::size_t>(0U); i < root_estimates.size(); ++i)
+ {
+ std::cout << "calculating abscissa and weight for index: " << i << std::endl;
+
+ // Calculate the abscissas using iterative root-finding.
+
+ // Select the maximum allowed iterations, being at least 20.
+ // The determination of the maximum allowed iterations is
+ // based on the number of decimal digits in the numerical
+ // type T.
+ const int my_digits10 = static_cast<int>(static_cast<float>(boost::math::tools::digits<T>()) * 0.301F);
+ const boost::uintmax_t number_of_iterations_allowed = (std::max)(20, my_digits10 / 2);
+
+ boost::uintmax_t number_of_iterations_used = number_of_iterations_allowed;
+
+ // Perform the root-finding using ACM TOMS 748 from Boost.Math.
+ const std::pair<T, T>
+ laguerre_root_bracket = boost::math::tools::toms748_solve(laguerre_object,
+ boost::math::get<0>(root_estimates[i]),
+ boost::math::get<1>(root_estimates[i]),
+ laguerre_function_object<T>::root_tolerance,
+ number_of_iterations_used);
+
+ // Based on the result of *each* root-finding operation, re-assess
+ // the validity of the Guass-Laguerre abscissas and weights object.
+ valid &= (number_of_iterations_used < number_of_iterations_allowed);
+
+ // Compute the Laguerre root as the average of the values from
+ // the solved root bracket.
+ const T laguerre_root = ( laguerre_root_bracket.first
+ + laguerre_root_bracket.second) / 2;
+
+ // Calculate the weight for this Laguerre root. Here, we calculate
+ // the derivative of the Laguerre function and the value of the
+ // previous Laguerre function on the x-axis at the value of this
+ // Laguerre root.
+ static_cast<void>(laguerre_object(laguerre_root));
+
+ // Store the abscissa and weight for this index.
+ xi.push_back(laguerre_root);
+ wi.push_back(norm_g / ((laguerre_object.derivative() * order) * laguerre_object.previous()));
+ }
+ }
+ }
+};
+
+namespace
+{
+ template<typename T>
+ struct gauss_laguerre_ai
+ {
+ public:
+ gauss_laguerre_ai(const T X) : x(X)
+ {
+ using std::exp;
+ using std::sqrt;
+
+ zeta = ((sqrt(x) * x) * 2) / 3;
+
+ const T zeta_times_48_pow_sixth = sqrt(boost::math::cbrt(zeta * 48));
+
+ factor = 1 / ((sqrt(boost::math::constants::pi<T>()) * zeta_times_48_pow_sixth) * (exp(zeta) * gamma_of_five_sixths()));
+ }
+
+ gauss_laguerre_ai(const gauss_laguerre_ai& other) : x (other.x),
+ zeta (other.zeta),
+ factor(other.factor) { }
+
+ T operator()(const T& t) const
+ {
+ using std::sqrt;
+
+ return factor / sqrt(boost::math::cbrt(2 + (t / zeta)));
+ }
+
+ private:
+ const T x;
+ T zeta;
+ T factor;
+
+ static const T& gamma_of_five_sixths()
+ {
+ static const T value = boost::math::tgamma(T(5) / 6);
+
+ return value;
+ }
+
+ const gauss_laguerre_ai& operator=(const gauss_laguerre_ai&);
+ };
+
+ template<typename T>
+ T gauss_laguerre_airy_ai(const T x)
+ {
+ static const float digits_factor = static_cast<float>(std::numeric_limits<mp_type>::digits10) / 300.0F;
+ static const int laguerre_order = static_cast<int>(600.0F * digits_factor);
+
+ static const guass_laguerre_abscissas_and_weights<T> abscissas_and_weights(laguerre_order, -T(1) / 6);
+
+ T airy_ai_result;
+
+ if(abscissas_and_weights.get_valid())
+ {
+ const gauss_laguerre_ai<T> this_gauss_laguerre_ai(x);
+
+ airy_ai_result =
+ std::inner_product(abscissas_and_weights.abscissas().begin(),
+ abscissas_and_weights.abscissas().end(),
+ abscissas_and_weights.weights().begin(),
+ T(0),
+ std::plus<T>(),
+ [&this_gauss_laguerre_ai](const T& this_abscissa, const T& this_weight) -> T
+ {
+ return this_gauss_laguerre_ai(this_abscissa) * this_weight;
+ });
+ }
+ else
+ {
+ // TBD: Consider an error message.
+ airy_ai_result = T(0);
+ }
+
+ return airy_ai_result;
+ }
+}
+
+int main()
+{
+ // Use Gauss-Laguerre integration to compute airy_ai(120 / 7).
+
+ // 9 digits
+ // 3.89904210e-22
+
+ // 10 digits
+ // 3.899042098e-22
+
+ // 50 digits.
+ // 3.8990420982303275013276114626640705170145070824318e-22
+
+ // 100 digits.
+ // 3.899042098230327501327611462664070517014507082431797677146153303523108862015228
+ // 864136051942933142648e-22
+
+ // 200 digits.
+ // 3.899042098230327501327611462664070517014507082431797677146153303523108862015228
+ // 86413605194293314264788265460938200890998546786740097437064263800719644346113699
+ // 77010905030516409847054404055843899790277e-22
+
+ // 300 digits.
+ // 3.899042098230327501327611462664070517014507082431797677146153303523108862015228
+ // 86413605194293314264788265460938200890998546786740097437064263800719644346113699
+ // 77010905030516409847054404055843899790277083960877617919088116211775232728792242
+ // 9346416823281460245814808276654088201413901972239996130752528e-22
+
+ // 500 digits.
+ // 3.899042098230327501327611462664070517014507082431797677146153303523108862015228
+ // 86413605194293314264788265460938200890998546786740097437064263800719644346113699
+ // 77010905030516409847054404055843899790277083960877617919088116211775232728792242
+ // 93464168232814602458148082766540882014139019722399961307525276722937464859521685
+ // 42826483602153339361960948844649799257455597165900957281659632186012043089610827
+ // 78871305322190941528281744734605934497977375094921646511687434038062987482900167
+ // 45127557400365419545e-22
+
+ // Mathematica(R) or Wolfram's Alpha:
+ // N[AiryAi[120 / 7], 300]
+ std::cout << std::setprecision(digits_characteristics::digits10)
+ << gauss_laguerre_airy_ai(mp_type(120) / 7)
+ << std::endl;
+}
diff --git a/libs/multiprecision/example/gmp_snips.cpp b/libs/multiprecision/example/gmp_snips.cpp
new file mode 100644
index 0000000000..d3347da180
--- /dev/null
+++ b/libs/multiprecision/example/gmp_snips.cpp
@@ -0,0 +1,117 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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/gmp.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+void t1()
+{
+ //[mpz_eg
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+
+ mpz_int v = 1;
+
+ // Do some arithmetic:
+ for(unsigned i = 1; i <= 1000; ++i)
+ v *= i;
+
+ std::cout << v << std::endl; // prints 1000!
+
+ // Access the underlying representation:
+ mpz_t z;
+ mpz_init(z);
+ mpz_set(z, v.backend().data());
+ mpz_clear(z);
+//= return 0;
+//=}
+//]
+}
+
+void t2()
+{
+//[mpf_eg
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <boost/math/special_functions/gamma.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+
+ // Operations at variable precision and limited standard library support:
+ mpf_float a = 2;
+ mpf_float::default_precision(1000);
+ std::cout << mpf_float::default_precision() << std::endl;
+ std::cout << sqrt(a) << std::endl; // print root-2
+
+ // Operations at fixed precision and full standard library support:
+ mpf_float_100 b = 2;
+ std::cout << std::numeric_limits<mpf_float_100>::digits << std::endl;
+ // We can use any C++ std lib function:
+ std::cout << 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;
+
+ // Access the underlying representation:
+ mpf_t f;
+ mpf_init(f);
+ mpf_set(f, a.backend().data());
+ mpf_clear(f);
+//= return 0;
+//=}
+//]
+}
+
+void t3()
+{
+//[mpq_eg
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+
+ mpq_rational v = 1;
+
+ // Do some arithmetic:
+ for(unsigned i = 1; i <= 1000; ++i)
+ v *= i;
+ v /= 10;
+
+ std::cout << v << std::endl; // prints 1000! / 10
+ std::cout << numerator(v) << std::endl;
+ std::cout << denominator(v) << std::endl;
+
+ mpq_rational w(2, 3); // component wise constructor
+ std::cout << w << std::endl; // prints 2/3
+
+ // Access the underlying data:
+ mpq_t q;
+ mpq_init(q);
+ mpq_set(q, v.backend().data());
+ mpq_clear(q);
+//= return 0;
+//=}
+//]
+}
+
+int main()
+{
+ t1();
+ t2();
+ t3();
+ return 0;
+}
+
diff --git a/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp b/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp
new file mode 100644
index 0000000000..f7ff1c4b1b
--- /dev/null
+++ b/libs/multiprecision/example/hypergeometric_luke_algorithms.cpp
@@ -0,0 +1,803 @@
+
+///////////////////////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2013 - 2014.
+// Copyright John Maddock 2013.
+// 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)
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+//
+
+#include <algorithm>
+#include <cstdint>
+#include <deque>
+#include <functional>
+#include <iostream>
+#include <limits>
+#include <numeric>
+#include <vector>
+#include <boost/math/constants/constants.hpp>
+#include <boost/noncopyable.hpp>
+
+//#define USE_CPP_BIN_FLOAT
+#define USE_CPP_DEC_FLOAT
+//#define USE_MPFR
+
+#if !defined(DIGIT_COUNT)
+#define DIGIT_COUNT 100
+#endif
+
+#define HAS_STD_CHRONO
+
+#if defined(HAS_STD_CHRONO)
+ #include <chrono>
+ #define STD_CHRONO std::chrono
+#else
+ #include <boost/chrono.hpp>
+ #define STD_CHRONO boost::chrono
+#endif
+
+#if defined(USE_CPP_BIN_FLOAT)
+ #include <boost/multiprecision/cpp_bin_float.hpp>
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_bin_float<DIGIT_COUNT + 10> > mp_type;
+#elif defined(USE_CPP_DEC_FLOAT)
+ #include <boost/multiprecision/cpp_dec_float.hpp>
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<DIGIT_COUNT + 10> > mp_type;
+#elif defined(USE_MPFR)
+ #include <boost/multiprecision/mpfr.hpp>
+ typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<DIGIT_COUNT + 10> > mp_type;
+#else
+ #error no multiprecision floating type is defined
+#endif
+
+template <class clock_type>
+struct stopwatch
+{
+public:
+ typedef typename clock_type::duration duration_type;
+
+ stopwatch() : m_start(clock_type::now()) { }
+
+ stopwatch(const stopwatch& other) : m_start(other.m_start) { }
+
+ stopwatch& operator=(const stopwatch& other)
+ {
+ m_start = other.m_start;
+ return *this;
+ }
+
+ ~stopwatch() { }
+
+ duration_type elapsed() const
+ {
+ return (clock_type::now() - m_start);
+ }
+
+ void reset()
+ {
+ m_start = clock_type::now();
+ }
+
+private:
+ typename clock_type::time_point m_start;
+};
+
+namespace my_math
+{
+ template<class T> T chebyshev_t(const std::int32_t n, const T& x);
+
+ template<class T> T chebyshev_t(const std::uint32_t n, const T& x, std::vector<T>* vp);
+
+ template<class T> bool isneg(const T& x) { return (x < T(0)); }
+
+ template<class T> const T& zero() { static const T value_zero(0); return value_zero; }
+ template<class T> const T& one () { static const T value_one (1); return value_one; }
+ template<class T> const T& two () { static const T value_two (2); return value_two; }
+}
+
+namespace orthogonal_polynomial_series
+{
+ template<typename T> static inline T orthogonal_polynomial_template(const T& x, const std::uint32_t n, std::vector<T>* const vp = static_cast<std::vector<T>*>(0u))
+ {
+ // Compute the value of an orthogonal chebyshev polinomial.
+ // Use stable upward recursion.
+
+ if(vp != nullptr)
+ {
+ vp->clear();
+ vp->reserve(static_cast<std::size_t>(n + 1u));
+ }
+
+ T y0 = my_math::one<T>();
+
+ if(vp != nullptr) { vp->push_back(y0); }
+
+ if(n == static_cast<std::uint32_t>(0u))
+ {
+ return y0;
+ }
+
+ T y1 = x;
+
+ if(vp != nullptr) { vp->push_back(y1); }
+
+ if(n == static_cast<std::uint32_t>(1u))
+ {
+ return y1;
+ }
+
+ T a = my_math::two <T>();
+ T b = my_math::zero<T>();
+ T c = my_math::one <T>();
+
+ T yk;
+
+ // Calculate higher orders using the recurrence relation.
+ // The direction of stability is upward recursion.
+ for(std::int32_t k = static_cast<std::int32_t>(2); k <= static_cast<std::int32_t>(n); ++k)
+ {
+ yk = (((a * x) + b) * y1) - (c * y0);
+
+ y0 = y1;
+ y1 = yk;
+
+ if(vp != nullptr) { vp->push_back(yk); }
+ }
+
+ return yk;
+ }
+}
+
+template<class T> T my_math::chebyshev_t(const std::int32_t n, const T& x)
+{
+ if(my_math::isneg(x))
+ {
+ const bool b_negate = ((n % static_cast<std::int32_t>(2)) != static_cast<std::int32_t>(0));
+
+ const T y = chebyshev_t(n, -x);
+
+ return (!b_negate ? y : -y);
+ }
+
+ if(n < static_cast<std::int32_t>(0))
+ {
+ const std::int32_t nn = static_cast<std::int32_t>(-n);
+
+ return chebyshev_t(nn, x);
+ }
+ else
+ {
+ return orthogonal_polynomial_series::orthogonal_polynomial_template(x, static_cast<std::uint32_t>(n));
+ }
+}
+
+template<class T> T my_math::chebyshev_t(const std::uint32_t n, const T& x, std::vector<T>* const vp) { return orthogonal_polynomial_series::orthogonal_polynomial_template(x, static_cast<std::int32_t>(n), vp); }
+
+namespace util
+{
+ template <class T> float digit_scale()
+ {
+ const int d = ((std::max)(std::numeric_limits<T>::digits10, 15));
+ return static_cast<float>(d) / 300.0F;
+ }
+}
+
+namespace examples
+{
+ namespace nr_006
+ {
+ template<typename T> class hypergeometric_pfq_base : private boost::noncopyable
+ {
+ public:
+ virtual ~hypergeometric_pfq_base() { }
+
+ virtual void ccoef() const = 0;
+
+ virtual T series() const
+ {
+ using my_math::chebyshev_t;
+
+ // Compute the Chebyshev coefficients.
+ // Get the values of the shifted Chebyshev polynomials.
+ std::vector<T> chebyshev_t_shifted_values;
+ const T z_shifted = ((Z / W) * static_cast<std::int32_t>(2)) - static_cast<std::int32_t>(1);
+
+ chebyshev_t(static_cast<std::uint32_t>(C.size()),
+ z_shifted,
+ &chebyshev_t_shifted_values);
+
+ // Luke: C ---------- COMPUTE SCALE FACTOR ----------
+ // Luke: C
+ // Luke: C ---------- SCALE THE COEFFICIENTS ----------
+ // Luke: C
+
+ // The coefficient scaling is preformed after the Chebyshev summation,
+ // and it is carried out with a single division operation.
+ bool b_neg = false;
+
+ const T scale = std::accumulate(C.begin(),
+ C.end(),
+ T(0),
+ [&b_neg](T& scale_sum, const T& ck) -> T
+ {
+ ((!b_neg) ? (scale_sum += ck) : (scale_sum -= ck));
+ b_neg = (!b_neg);
+ return scale_sum;
+ });
+
+ // Compute the result of the series expansion using unscaled coefficients.
+ const T sum = std::inner_product(C.begin(),
+ C.end(),
+ chebyshev_t_shifted_values.begin(),
+ T(0));
+
+ // Return the properly scaled result.
+ return sum / scale;
+ }
+
+ protected:
+ const T Z;
+ const T W;
+ mutable std::deque<T> C;
+
+ hypergeometric_pfq_base(const T& z,
+ const T& w) : Z(z),
+ W(w),
+ C(0u) { }
+
+ virtual std::int32_t N() const { return static_cast<std::int32_t>(util::digit_scale<T>() * 500.0F); }
+ };
+
+ template<typename T> class ccoef4_hypergeometric_0f1 : public hypergeometric_pfq_base<T>
+ {
+ public:
+ ccoef4_hypergeometric_0f1(const T& c,
+ const T& z,
+ const T& w) : hypergeometric_pfq_base<T>(z, w),
+ CP(c) { }
+
+ virtual ~ccoef4_hypergeometric_0f1() { }
+
+ virtual void ccoef() const
+ {
+ // See Luke 1977 page 80.
+ const std::int32_t N1 = static_cast<std::int32_t>(this->N() + static_cast<std::int32_t>(1));
+ const std::int32_t N2 = static_cast<std::int32_t>(this->N() + static_cast<std::int32_t>(2));
+
+ // Luke: C ---------- START COMPUTING COEFFICIENTS USING ----------
+ // Luke: C ---------- BACKWARD RECURRENCE SCHEME ----------
+ // Luke: C
+ T A3(0);
+ T A2(0);
+ T A1(boost::math::tools::root_epsilon<T>());
+
+ hypergeometric_pfq_base<T>::C.resize(1u, A1);
+
+ std::int32_t X1 = N2;
+
+ T C1 = T(1) - CP;
+
+ const T Z1 = T(4) / hypergeometric_pfq_base<T>::W;
+
+ for(std::int32_t k = static_cast<std::int32_t>(0); k < N1; ++k)
+ {
+ const T DIVFAC = T(1) / X1;
+
+ --X1;
+
+ // The terms have been slightly re-arranged resulting in lower complexity.
+ // Parentheses have been added to avoid reliance on operator precedence.
+ const T term = (A2 - ((A3 * DIVFAC) * X1))
+ + ((A2 * X1) * ((1 + (C1 + X1)) * Z1))
+ + ((A1 * X1) * ((DIVFAC - (C1 * Z1)) + (X1 * Z1)));
+
+ hypergeometric_pfq_base<T>::C.push_front(term);
+
+ A3 = A2;
+ A2 = A1;
+ A1 = hypergeometric_pfq_base<T>::C.front();
+ }
+
+ hypergeometric_pfq_base<T>::C.front() /= static_cast<std::int32_t>(2);
+ }
+
+ private:
+ const T CP;
+ };
+
+ template<typename T> class ccoef1_hypergeometric_1f0 : public hypergeometric_pfq_base<T>
+ {
+ public:
+ ccoef1_hypergeometric_1f0(const T& a,
+ const T& z,
+ const T& w) : hypergeometric_pfq_base<T>(z, w),
+ AP(a) { }
+
+ virtual ~ccoef1_hypergeometric_1f0() { }
+
+ virtual void ccoef() const
+ {
+ // See Luke 1977 page 67.
+ const std::int32_t N1 = static_cast<std::int32_t>(N() + static_cast<std::int32_t>(1));
+ const std::int32_t N2 = static_cast<std::int32_t>(N() + static_cast<std::int32_t>(2));
+
+ // Luke: C ---------- START COMPUTING COEFFICIENTS USING ----------
+ // Luke: C ---------- BACKWARD RECURRENCE SCHEME ----------
+ // Luke: C
+ T A2(0);
+ T A1(boost::math::tools::root_epsilon<T>());
+
+ hypergeometric_pfq_base<T>::C.resize(1u, A1);
+
+ std::int32_t X1 = N2;
+
+ T V1 = T(1) - AP;
+
+ // Here, we have corrected what appears to be an error in Luke's code.
+
+ // Luke's original code listing has:
+ // AFAC = 2 + FOUR/W
+ // But it appears as though the correct form is:
+ // AFAC = 2 - FOUR/W.
+
+ const T AFAC = 2 - (T(4) / hypergeometric_pfq_base<T>::W);
+
+ for(std::int32_t k = static_cast<std::int32_t>(0); k < N1; ++k)
+ {
+ --X1;
+
+ // The terms have been slightly re-arranged resulting in lower complexity.
+ // Parentheses have been added to avoid reliance on operator precedence.
+ const T term = -(((X1 * AFAC) * A1) + ((X1 + V1) * A2)) / (X1 - V1);
+
+ hypergeometric_pfq_base<T>::C.push_front(term);
+
+ A2 = A1;
+ A1 = hypergeometric_pfq_base<T>::C.front();
+ }
+
+ hypergeometric_pfq_base<T>::C.front() /= static_cast<std::int32_t>(2);
+ }
+
+ private:
+ const T AP;
+
+ virtual std::int32_t N() const { return static_cast<std::int32_t>(util::digit_scale<T>() * 1600.0F); }
+ };
+
+ template<typename T> class ccoef3_hypergeometric_1f1 : public hypergeometric_pfq_base<T>
+ {
+ public:
+ ccoef3_hypergeometric_1f1(const T& a,
+ const T& c,
+ const T& z,
+ const T& w) : hypergeometric_pfq_base<T>(z, w),
+ AP(a),
+ CP(c) { }
+
+ virtual ~ccoef3_hypergeometric_1f1() { }
+
+ virtual void ccoef() const
+ {
+ // See Luke 1977 page 74.
+ const std::int32_t N1 = static_cast<std::int32_t>(this->N() + static_cast<std::int32_t>(1));
+ const std::int32_t N2 = static_cast<std::int32_t>(this->N() + static_cast<std::int32_t>(2));
+
+ // Luke: C ---------- START COMPUTING COEFFICIENTS USING ----------
+ // Luke: C ---------- BACKWARD RECURRENCE SCHEME ----------
+ // Luke: C
+ T A3(0);
+ T A2(0);
+ T A1(boost::math::tools::root_epsilon<T>());
+
+ hypergeometric_pfq_base<T>::C.resize(1u, A1);
+
+ std::int32_t X = N1;
+ std::int32_t X1 = N2;
+
+ T XA = X + AP;
+ T X3A = (X + 3) - AP;
+
+ const T Z1 = T(4) / hypergeometric_pfq_base<T>::W;
+
+ for(std::int32_t k = static_cast<std::int32_t>(0); k < N1; ++k)
+ {
+ --X;
+ --X1;
+ --XA;
+ --X3A;
+
+ const T X3A_over_X2 = X3A / static_cast<std::int32_t>(X + 2);
+
+ // The terms have been slightly re-arranged resulting in lower complexity.
+ // Parentheses have been added to avoid reliance on operator precedence.
+ const T PART1 = A1 * (((X + CP) * Z1) - X3A_over_X2);
+ const T PART2 = A2 * (Z1 * ((X + 3) - CP) + (XA / X1));
+ const T PART3 = A3 * X3A_over_X2;
+
+ const T term = (((PART1 + PART2) + PART3) * X1) / XA;
+
+ hypergeometric_pfq_base<T>::C.push_front(term);
+
+ A3 = A2;
+ A2 = A1;
+ A1 = hypergeometric_pfq_base<T>::C.front();
+ }
+
+ hypergeometric_pfq_base<T>::C.front() /= static_cast<std::int32_t>(2);
+ }
+
+ private:
+ const T AP;
+ const T CP;
+ };
+
+ template<typename T> class ccoef6_hypergeometric_1f2 : public hypergeometric_pfq_base<T>
+ {
+ public:
+ ccoef6_hypergeometric_1f2(const T& a,
+ const T& b,
+ const T& c,
+ const T& z,
+ const T& w) : hypergeometric_pfq_base<T>(z, w),
+ AP(a),
+ BP(b),
+ CP(c) { }
+
+ virtual ~ccoef6_hypergeometric_1f2() { }
+
+ virtual void ccoef() const
+ {
+ // See Luke 1977 page 85.
+ const std::int32_t N1 = static_cast<std::int32_t>(this->N() + static_cast<std::int32_t>(1));
+
+ // Luke: C ---------- START COMPUTING COEFFICIENTS USING ----------
+ // Luke: C ---------- BACKWARD RECURRENCE SCHEME ----------
+ // Luke: C
+ T A4(0);
+ T A3(0);
+ T A2(0);
+ T A1(boost::math::tools::root_epsilon<T>());
+
+ hypergeometric_pfq_base<T>::C.resize(1u, A1);
+
+ std::int32_t X = N1;
+ T PP = X + AP;
+
+ const T Z1 = T(4) / hypergeometric_pfq_base<T>::W;
+
+ for(std::int32_t k = static_cast<std::int32_t>(0); k < N1; ++k)
+ {
+ --X;
+ --PP;
+
+ const std::int32_t TWO_X = static_cast<std::int32_t>(X * 2);
+ const std::int32_t X_PLUS_1 = static_cast<std::int32_t>(X + 1);
+ const std::int32_t X_PLUS_3 = static_cast<std::int32_t>(X + 3);
+ const std::int32_t X_PLUS_4 = static_cast<std::int32_t>(X + 4);
+
+ const T QQ = T(TWO_X + 3) / static_cast<std::int32_t>(TWO_X + static_cast<std::int32_t>(5));
+ const T SS = (X + BP) * (X + CP);
+
+ // The terms have been slightly re-arranged resulting in lower complexity.
+ // Parentheses have been added to avoid reliance on operator precedence.
+ const T PART1 = A1 * (((PP - (QQ * (PP + 1))) * 2) + (SS * Z1));
+ const T PART2 = (A2 * (X + 2)) * ((((TWO_X + 1) * PP) / X_PLUS_1) - ((QQ * 4) * (PP + 1)) + (((TWO_X + 3) * (PP + 2)) / X_PLUS_3) + ((Z1 * 2) * (SS - (QQ * (X_PLUS_1 + BP)) * (X_PLUS_1 + CP))));
+ const T PART3 = A3 * ((((X_PLUS_3 - AP) - (QQ * (X_PLUS_4 - AP))) * 2) + (((QQ * Z1) * (X_PLUS_4 - BP)) * (X_PLUS_4 - CP)));
+ const T PART4 = ((A4 * QQ) * (X_PLUS_4 - AP)) / X_PLUS_3;
+
+ const T term = (((PART1 - PART2) + (PART3 - PART4)) * X_PLUS_1) / PP;
+
+ hypergeometric_pfq_base<T>::C.push_front(term);
+
+ A4 = A3;
+ A3 = A2;
+ A2 = A1;
+ A1 = hypergeometric_pfq_base<T>::C.front();
+ }
+
+ hypergeometric_pfq_base<T>::C.front() /= static_cast<std::int32_t>(2);
+ }
+
+ private:
+ const T AP;
+ const T BP;
+ const T CP;
+ };
+
+ template<typename T> class ccoef2_hypergeometric_2f1 : public hypergeometric_pfq_base<T>
+ {
+ public:
+ ccoef2_hypergeometric_2f1(const T& a,
+ const T& b,
+ const T& c,
+ const T& z,
+ const T& w) : hypergeometric_pfq_base<T>(z, w),
+ AP(a),
+ BP(b),
+ CP(c) { }
+
+ virtual ~ccoef2_hypergeometric_2f1() { }
+
+ virtual void ccoef() const
+ {
+ // See Luke 1977 page 59.
+ const std::int32_t N1 = static_cast<std::int32_t>(N() + static_cast<std::int32_t>(1));
+ const std::int32_t N2 = static_cast<std::int32_t>(N() + static_cast<std::int32_t>(2));
+
+ // Luke: C ---------- START COMPUTING COEFFICIENTS USING ----------
+ // Luke: C ---------- BACKWARD RECURRENCE SCHEME ----------
+ // Luke: C
+ T A3(0);
+ T A2(0);
+ T A1(boost::math::tools::root_epsilon<T>());
+
+ hypergeometric_pfq_base<T>::C.resize(1u, A1);
+
+ std::int32_t X = N1;
+ std::int32_t X1 = N2;
+ std::int32_t X3 = static_cast<std::int32_t>((X * 2) + 3);
+
+ T X3A = (X + 3) - AP;
+ T X3B = (X + 3) - BP;
+
+ const T Z1 = T(4) / hypergeometric_pfq_base<T>::W;
+
+ for(std::int32_t k = static_cast<std::int32_t>(0); k < N1; ++k)
+ {
+ --X;
+ --X1;
+ --X3A;
+ --X3B;
+ X3 -= 2;
+
+ const std::int32_t X_PLUS_2 = static_cast<std::int32_t>(X + 2);
+
+ const T XAB = T(1) / ((X + AP) * (X + BP));
+
+ // The terms have been slightly re-arranged resulting in lower complexity.
+ // Parentheses have been added to avoid reliance on operator precedence.
+ const T PART1 = (A1 * X1) * (2 - (((AP + X1) * (BP + X1)) * ((T(X3) / X_PLUS_2) * XAB)) + ((CP + X) * (XAB * Z1)));
+ const T PART2 = (A2 * XAB) * ((X3A * X3B) - (X3 * ((X3A + X3B) - 1)) + (((3 - CP) + X) * (X1 * Z1)));
+ const T PART3 = (A3 * X1) * (X3A / X_PLUS_2) * (X3B * XAB);
+
+ const T term = (PART1 + PART2) - PART3;
+
+ hypergeometric_pfq_base<T>::C.push_front(term);
+
+ A3 = A2;
+ A2 = A1;
+ A1 = hypergeometric_pfq_base<T>::C.front();
+ }
+
+ hypergeometric_pfq_base<T>::C.front() /= static_cast<std::int32_t>(2);
+ }
+
+ private:
+ const T AP;
+ const T BP;
+ const T CP;
+
+ virtual std::int32_t N() const { return static_cast<std::int32_t>(util::digit_scale<T>() * 1600.0F); }
+ };
+
+ template<class T> T luke_ccoef4_hypergeometric_0f1(const T& a, const T& x);
+ template<class T> T luke_ccoef1_hypergeometric_1f0(const T& a, const T& x);
+ template<class T> T luke_ccoef3_hypergeometric_1f1(const T& a, const T& b, const T& x);
+ template<class T> T luke_ccoef6_hypergeometric_1f2(const T& a, const T& b, const T& c, const T& x);
+ template<class T> T luke_ccoef2_hypergeometric_2f1(const T& a, const T& b, const T& c, const T& x);
+ }
+}
+
+template<class T>
+T examples::nr_006::luke_ccoef4_hypergeometric_0f1(const T& a, const T& x)
+{
+ const ccoef4_hypergeometric_0f1<T> hypergeometric_0f1_object(a, x, T(-20));
+
+ hypergeometric_0f1_object.ccoef();
+
+ return hypergeometric_0f1_object.series();
+}
+
+template<class T>
+T examples::nr_006::luke_ccoef1_hypergeometric_1f0(const T& a, const T& x)
+{
+ const ccoef1_hypergeometric_1f0<T> hypergeometric_1f0_object(a, x, T(-20));
+
+ hypergeometric_1f0_object.ccoef();
+
+ return hypergeometric_1f0_object.series();
+}
+
+template<class T>
+T examples::nr_006::luke_ccoef3_hypergeometric_1f1(const T& a, const T& b, const T& x)
+{
+ const ccoef3_hypergeometric_1f1<T> hypergeometric_1f1_object(a, b, x, T(-20));
+
+ hypergeometric_1f1_object.ccoef();
+
+ return hypergeometric_1f1_object.series();
+}
+
+template<class T>
+T examples::nr_006::luke_ccoef6_hypergeometric_1f2(const T& a, const T& b, const T& c, const T& x)
+{
+ const ccoef6_hypergeometric_1f2<T> hypergeometric_1f2_object(a, b, c, x, T(-20));
+
+ hypergeometric_1f2_object.ccoef();
+
+ return hypergeometric_1f2_object.series();
+}
+
+template<class T>
+T examples::nr_006::luke_ccoef2_hypergeometric_2f1(const T& a, const T& b, const T& c, const T& x)
+{
+ const ccoef2_hypergeometric_2f1<T> hypergeometric_2f1_object(a, b, c, x, T(-20));
+
+ hypergeometric_2f1_object.ccoef();
+
+ return hypergeometric_2f1_object.series();
+}
+
+int main()
+{
+ stopwatch<STD_CHRONO::high_resolution_clock> my_stopwatch;
+ float total_time = 0.0F;
+
+ std::vector<mp_type> hypergeometric_0f1_results(20U);
+ std::vector<mp_type> hypergeometric_1f0_results(20U);
+ std::vector<mp_type> hypergeometric_1f1_results(20U);
+ std::vector<mp_type> hypergeometric_2f1_results(20U);
+ std::vector<mp_type> hypergeometric_1f2_results(20U);
+
+ const mp_type a(mp_type(3) / 7);
+ const mp_type b(mp_type(2) / 3);
+ const mp_type c(mp_type(1) / 4);
+
+ std::int_least16_t i;
+
+ std::cout << "test hypergeometric_0f1." << std::endl;
+ i = 1U;
+ my_stopwatch.reset();
+
+ // Generate a table of values of Hypergeometric0F1.
+ // Compare with the Mathematica command:
+ // Table[N[HypergeometricPFQ[{}, {3/7}, -(i*EulerGamma)], 100], {i, 1, 20, 1}]
+ std::for_each(hypergeometric_0f1_results.begin(),
+ hypergeometric_0f1_results.end(),
+ [&i, &a](mp_type& new_value)
+ {
+ const mp_type x(-(boost::math::constants::euler<mp_type>() * i));
+
+ new_value = examples::nr_006::luke_ccoef4_hypergeometric_0f1(a, x);
+
+ ++i;
+ });
+
+ total_time += STD_CHRONO::duration_cast<STD_CHRONO::duration<float> >(my_stopwatch.elapsed()).count();
+
+ // Print the values of Hypergeometric0F1.
+ std::for_each(hypergeometric_0f1_results.begin(),
+ hypergeometric_0f1_results.end(),
+ [](const mp_type& h)
+ {
+ std::cout << std::setprecision(DIGIT_COUNT) << h << std::endl;
+ });
+
+ std::cout << "test hypergeometric_1f0." << std::endl;
+ i = 1U;
+ my_stopwatch.reset();
+
+ // Generate a table of values of Hypergeometric1F0.
+ // Compare with the Mathematica command:
+ // Table[N[HypergeometricPFQ[{3/7}, {}, -(i*EulerGamma)], 100], {i, 1, 20, 1}]
+ std::for_each(hypergeometric_1f0_results.begin(),
+ hypergeometric_1f0_results.end(),
+ [&i, &a](mp_type& new_value)
+ {
+ const mp_type x(-(boost::math::constants::euler<mp_type>() * i));
+
+ new_value = examples::nr_006::luke_ccoef1_hypergeometric_1f0(a, x);
+
+ ++i;
+ });
+
+ total_time += STD_CHRONO::duration_cast<STD_CHRONO::duration<float> >(my_stopwatch.elapsed()).count();
+
+ // Print the values of Hypergeometric1F0.
+ std::for_each(hypergeometric_1f0_results.begin(),
+ hypergeometric_1f0_results.end(),
+ [](const mp_type& h)
+ {
+ std::cout << std::setprecision(DIGIT_COUNT) << h << std::endl;
+ });
+
+ std::cout << "test hypergeometric_1f1." << std::endl;
+ i = 1U;
+ my_stopwatch.reset();
+
+ // Generate a table of values of Hypergeometric1F1.
+ // Compare with the Mathematica command:
+ // Table[N[HypergeometricPFQ[{3/7}, {2/3}, -(i*EulerGamma)], 100], {i, 1, 20, 1}]
+ std::for_each(hypergeometric_1f1_results.begin(),
+ hypergeometric_1f1_results.end(),
+ [&i, &a, &b](mp_type& new_value)
+ {
+ const mp_type x(-(boost::math::constants::euler<mp_type>() * i));
+
+ new_value = examples::nr_006::luke_ccoef3_hypergeometric_1f1(a, b, x);
+
+ ++i;
+ });
+
+ total_time += STD_CHRONO::duration_cast<STD_CHRONO::duration<float> >(my_stopwatch.elapsed()).count();
+
+ // Print the values of Hypergeometric1F1.
+ std::for_each(hypergeometric_1f1_results.begin(),
+ hypergeometric_1f1_results.end(),
+ [](const mp_type& h)
+ {
+ std::cout << std::setprecision(DIGIT_COUNT) << h << std::endl;
+ });
+
+ std::cout << "test hypergeometric_1f2." << std::endl;
+ i = 1U;
+ my_stopwatch.reset();
+
+ // Generate a table of values of Hypergeometric1F2.
+ // Compare with the Mathematica command:
+ // Table[N[HypergeometricPFQ[{3/7}, {2/3, 1/4}, -(i*EulerGamma)], 100], {i, 1, 20, 1}]
+ std::for_each(hypergeometric_1f2_results.begin(),
+ hypergeometric_1f2_results.end(),
+ [&i, &a, &b, &c](mp_type& new_value)
+ {
+ const mp_type x(-(boost::math::constants::euler<mp_type>() * i));
+
+ new_value = examples::nr_006::luke_ccoef6_hypergeometric_1f2(a, b, c, x);
+
+ ++i;
+ });
+
+ total_time += STD_CHRONO::duration_cast<STD_CHRONO::duration<float> >(my_stopwatch.elapsed()).count();
+
+ // Print the values of Hypergeometric1F2.
+ std::for_each(hypergeometric_1f2_results.begin(),
+ hypergeometric_1f2_results.end(),
+ [](const mp_type& h)
+ {
+ std::cout << std::setprecision(DIGIT_COUNT) << h << std::endl;
+ });
+
+ std::cout << "test hypergeometric_2f1." << std::endl;
+ i = 1U;
+ my_stopwatch.reset();
+
+ // Generate a table of values of Hypergeometric2F1.
+ // Compare with the Mathematica command:
+ // Table[N[HypergeometricPFQ[{3/7, 2/3}, {1/4}, -(i * EulerGamma)], 100], {i, 1, 20, 1}]
+ std::for_each(hypergeometric_2f1_results.begin(),
+ hypergeometric_2f1_results.end(),
+ [&i, &a, &b, &c](mp_type& new_value)
+ {
+ const mp_type x(-(boost::math::constants::euler<mp_type>() * i));
+
+ new_value = examples::nr_006::luke_ccoef2_hypergeometric_2f1(a, b, c, x);
+
+ ++i;
+ });
+
+ total_time += STD_CHRONO::duration_cast<STD_CHRONO::duration<float> >(my_stopwatch.elapsed()).count();
+
+ // Print the values of Hypergeometric2F1.
+ std::for_each(hypergeometric_2f1_results.begin(),
+ hypergeometric_2f1_results.end(),
+ [](const mp_type& h)
+ {
+ std::cout << std::setprecision(DIGIT_COUNT) << h << std::endl;
+ });
+
+ std::cout << "Total execution time = " << std::setprecision(3) << total_time << "s" << std::endl;
+}
diff --git a/libs/multiprecision/example/integer_examples.cpp b/libs/multiprecision/example/integer_examples.cpp
new file mode 100644
index 0000000000..67187978d9
--- /dev/null
+++ b/libs/multiprecision/example/integer_examples.cpp
@@ -0,0 +1,230 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+#include <iostream>
+#include <iomanip>
+#include <vector>
+
+//[FAC1
+
+/*`
+In this simple example, we'll write a routine to print out all of the factorials
+which will fit into a 128-bit integer. At the end of the routine we do some
+fancy iostream formatting of the results:
+*/
+/*=
+#include <boost/multiprecision/cpp_int.hpp>
+#include <iostream>
+#include <iomanip>
+#include <vector>
+*/
+
+void print_factorials()
+{
+ using boost::multiprecision::cpp_int;
+ //
+ // Print all the factorials that will fit inside a 128-bit integer.
+ //
+ // Begin by building a big table of factorials, once we know just how
+ // large the largest is, we'll be able to "pretty format" the results.
+ //
+ // Calculate the largest number that will fit inside 128 bits, we could
+ // also have used numeric_limits<int128_t>::max() for this value:
+ cpp_int limit = (cpp_int(1) << 128) - 1;
+ //
+ // Our table of values:
+ std::vector<cpp_int> results;
+ //
+ // Initial values:
+ unsigned i = 1;
+ cpp_int factorial = 1;
+ //
+ // Cycle through the factorials till we reach the limit:
+ while(factorial < limit)
+ {
+ results.push_back(factorial);
+ ++i;
+ factorial *= i;
+ }
+ //
+ // Lets see how many digits the largest factorial was:
+ unsigned digits = results.back().str().size();
+ //
+ // Now print them out, using right justification, while we're at it
+ // we'll indicate the limit of each integer type, so begin by defining
+ // the limits for 16, 32, 64 etc bit integers:
+ cpp_int limits[] = {
+ (cpp_int(1) << 16) - 1,
+ (cpp_int(1) << 32) - 1,
+ (cpp_int(1) << 64) - 1,
+ (cpp_int(1) << 128) - 1,
+ };
+ std::string bit_counts[] = { "16", "32", "64", "128" };
+ unsigned current_limit = 0;
+ for(unsigned j = 0; j < results.size(); ++j)
+ {
+ if(limits[current_limit] < results[j])
+ {
+ std::string message = "Limit of " + bit_counts[current_limit] + " bit integers";
+ std::cout << std::setfill('.') << std::setw(digits+1) << std::right << message << std::setfill(' ') << std::endl;
+ ++current_limit;
+ }
+ std::cout << std::setw(digits + 1) << std::right << results[j] << std::endl;
+ }
+}
+
+/*`
+The output from this routine is:
+[pre
+ 1
+ 2
+ 6
+ 24
+ 120
+ 720
+ 5040
+ 40320
+................Limit of 16 bit integers
+ 362880
+ 3628800
+ 39916800
+ 479001600
+................Limit of 32 bit integers
+ 6227020800
+ 87178291200
+ 1307674368000
+ 20922789888000
+ 355687428096000
+ 6402373705728000
+ 121645100408832000
+ 2432902008176640000
+................Limit of 64 bit integers
+ 51090942171709440000
+ 1124000727777607680000
+ 25852016738884976640000
+ 620448401733239439360000
+ 15511210043330985984000000
+ 403291461126605635584000000
+ 10888869450418352160768000000
+ 304888344611713860501504000000
+ 8841761993739701954543616000000
+ 265252859812191058636308480000000
+ 8222838654177922817725562880000000
+ 263130836933693530167218012160000000
+ 8683317618811886495518194401280000000
+ 295232799039604140847618609643520000000
+]
+*/
+
+//]
+
+//[BITOPS
+
+/*`
+In this example we'll show how individual bits within an integer may be manipulated,
+we'll start with an often needed calculation of ['2[super n] - 1], which we could obviously
+implement like this:
+*/
+
+using boost::multiprecision::cpp_int;
+
+cpp_int b1(unsigned n)
+{
+ cpp_int r(1);
+ return (r << n) - 1;
+}
+
+/*`
+Calling:
+
+ std::cout << std::hex << std::showbase << b1(200) << std::endl;
+
+Yields as expected:
+
+[pre 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF]
+
+However, we could equally just set the n'th bit in the result, like this:
+*/
+
+cpp_int b2(unsigned n)
+{
+ cpp_int r(0);
+ return --bit_set(r, n);
+}
+
+/*`
+Note how the `bit_set` 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 call to `b2` is the same as that to `b1`.
+
+We can equally test bits, so for example the n'th bit of the result returned from `b2` shouldn't be set
+unless we increment it first:
+
+ assert(!bit_test(b1(200), 200)); // OK
+ assert(bit_test(++b1(200), 200)); // OK
+
+And of course if we flip the n'th bit after increment, then we should get back to zero:
+
+ assert(!bit_flip(++b1(200), 200)); // OK
+*/
+
+//]
+
+int main()
+{
+ print_factorials();
+
+ std::cout << std::hex << std::showbase << b1(200) << std::endl;
+ std::cout << std::hex << std::showbase << b2(200) << std::endl;
+ assert(!bit_test(b1(200), 200)); // OK
+ assert(bit_test(++b1(200), 200)); // OK
+ assert(!bit_flip(++b1(200), 200)); // OK
+ return 0;
+}
+
+/*
+
+Program output:
+
+ 1
+ 2
+ 6
+ 24
+ 120
+ 720
+ 5040
+ 40320
+................Limit of 16 bit integers
+ 362880
+ 3628800
+ 39916800
+ 479001600
+................Limit of 32 bit integers
+ 6227020800
+ 87178291200
+ 1307674368000
+ 20922789888000
+ 355687428096000
+ 6402373705728000
+ 121645100408832000
+ 2432902008176640000
+................Limit of 64 bit integers
+ 51090942171709440000
+ 1124000727777607680000
+ 25852016738884976640000
+ 620448401733239439360000
+ 15511210043330985984000000
+ 403291461126605635584000000
+ 10888869450418352160768000000
+ 304888344611713860501504000000
+ 8841761993739701954543616000000
+ 265252859812191058636308480000000
+ 8222838654177922817725562880000000
+ 263130836933693530167218012160000000
+ 8683317618811886495518194401280000000
+ 295232799039604140847618609643520000000
+ 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+ */
diff --git a/libs/multiprecision/example/logged_adaptor.cpp b/libs/multiprecision/example/logged_adaptor.cpp
new file mode 100644
index 0000000000..e6270af6ec
--- /dev/null
+++ b/libs/multiprecision/example/logged_adaptor.cpp
@@ -0,0 +1,119 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//[logged_adaptor
+
+#include <boost/multiprecision/mpfi.hpp>
+#include <boost/multiprecision/logged_adaptor.hpp>
+#include <iostream>
+#include <iomanip>
+//
+// Begin by overloading log_postfix_event so we can capture each arithmetic event as it happens:
+//
+namespace boost{ namespace multiprecision{
+
+template <unsigned D>
+inline void log_postfix_event(const mpfi_float_backend<D>& val, const char* event_description)
+{
+ // Print out the (relative) diameter of the interval:
+ using namespace boost::multiprecision;
+ number<mpfr_float_backend<D> > diam;
+ mpfi_diam(diam.backend().data(), val.data());
+ std::cout << "Diameter was " << diam << " after operation: " << event_description << std::endl;
+}
+template <unsigned D, class T>
+inline void log_postfix_event(const mpfi_float_backend<D>&, const T&, const char* event_description)
+{
+ // This version is never called in this example.
+}
+
+}}
+
+
+int main()
+{
+ using namespace boost::multiprecision;
+ typedef number<logged_adaptor<mpfi_float_backend<17> > > logged_type;
+ //
+ // Test case deliberately introduces cancellation error, relative size of interval
+ // gradually gets larger after each operation:
+ //
+ logged_type a = 1;
+ a /= 10;
+
+ for(unsigned i = 0; i < 13; ++i)
+ {
+ logged_type b = a * 9;
+ b /= 10;
+ a -= b;
+ }
+ std::cout << "Final value was: " << a << std::endl;
+ return 0;
+}
+
+//]
+
+/*
+//[logged_adaptor_output
+
+Diameter was nan after operation: Default construct
+Diameter was 0 after operation: Assignment from arithmetic type
+Diameter was 4.33681e-18 after operation: /=
+Diameter was nan after operation: Default construct
+Diameter was 7.70988e-18 after operation: *
+Diameter was 9.63735e-18 after operation: /=
+Diameter was 1.30104e-16 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 1.30104e-16 after operation: *
+Diameter was 1.38537e-16 after operation: /=
+Diameter was 2.54788e-15 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 2.54788e-15 after operation: *
+Diameter was 2.54863e-15 after operation: /=
+Diameter was 4.84164e-14 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 4.84164e-14 after operation: *
+Diameter was 4.84221e-14 after operation: /=
+Diameter was 9.19962e-13 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 9.19962e-13 after operation: *
+Diameter was 9.19966e-13 after operation: /=
+Diameter was 1.74793e-11 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 1.74793e-11 after operation: *
+Diameter was 1.74793e-11 after operation: /=
+Diameter was 3.32107e-10 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 3.32107e-10 after operation: *
+Diameter was 3.32107e-10 after operation: /=
+Diameter was 6.31003e-09 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 6.31003e-09 after operation: *
+Diameter was 6.31003e-09 after operation: /=
+Diameter was 1.19891e-07 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 1.19891e-07 after operation: *
+Diameter was 1.19891e-07 after operation: /=
+Diameter was 2.27792e-06 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 2.27792e-06 after operation: *
+Diameter was 2.27792e-06 after operation: /=
+Diameter was 4.32805e-05 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 4.32805e-05 after operation: *
+Diameter was 4.32805e-05 after operation: /=
+Diameter was 0.00082233 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 0.00082233 after operation: *
+Diameter was 0.00082233 after operation: /=
+Diameter was 0.0156243 after operation: -=
+Diameter was nan after operation: Default construct
+Diameter was 0.0156243 after operation: *
+Diameter was 0.0156243 after operation: /=
+Diameter was 0.296861 after operation: -=
+Final value was: {8.51569e-15,1.14843e-14}
+
+//]
+*/
diff --git a/libs/multiprecision/example/mixed_integer_arithmetic.cpp b/libs/multiprecision/example/mixed_integer_arithmetic.cpp
new file mode 100644
index 0000000000..48155115cc
--- /dev/null
+++ b/libs/multiprecision/example/mixed_integer_arithmetic.cpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+//[mixed_eg
+#include <boost/multiprecision/cpp_int.hpp>
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ boost::uint64_t i = (std::numeric_limits<boost::uint64_t>::max)();
+ boost::uint64_t j = 1;
+
+ uint128_t ui128;
+ uint256_t ui256;
+ //
+ // Start by performing arithmetic on 64-bit integers to yield 128-bit results:
+ //
+ std::cout << std::hex << std::showbase << i << std::endl;
+ std::cout << std::hex << std::showbase << add(ui128, i, j) << std::endl;
+ std::cout << std::hex << std::showbase << multiply(ui128, i, i) << std::endl;
+ //
+ // The try squaring a 128-bit integer to yield a 256-bit result:
+ //
+ ui128 = (std::numeric_limits<uint128_t>::max)();
+ std::cout << std::hex << std::showbase << multiply(ui256, ui128, ui128) << std::endl;
+
+ return 0;
+}
+//]
+
+/*
+
+Program output:
+
+//[mixed_output
+
+0xffffffffffffffff
+0x10000000000000000
+0xFFFFFFFFFFFFFFFE0000000000000001
+0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00000000000000000000000000000001
+
+//]
+*/
+
diff --git a/libs/multiprecision/example/mpfi_snips.cpp b/libs/multiprecision/example/mpfi_snips.cpp
new file mode 100644
index 0000000000..c3580a1941
--- /dev/null
+++ b/libs/multiprecision/example/mpfi_snips.cpp
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_
+
+//[mpfi_eg
+#include <boost/multiprecision/mpfi.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ // Operations at variable precision and no numeric_limits support:
+ mpfi_float a = 2;
+ mpfi_float::default_precision(1000);
+ std::cout << mpfi_float::default_precision() << std::endl;
+ std::cout << sqrt(a) << std::endl; // print root-2
+
+ // Operations at fixed precision and full numeric_limits support:
+ mpfi_float_100 b = 2;
+ std::cout << std::numeric_limits<mpfi_float_100>::digits << std::endl;
+ // We can use any C++ std lib function:
+ std::cout << log(b) << std::endl; // print log(2)
+
+ // Access the underlying data:
+ mpfi_t r;
+ mpfi_init(r);
+ mpfi_set(r, b.backend().data());
+
+ // Construct some explicit intervals and perform set operations:
+ mpfi_float_50 i1(1, 2), i2(1.5, 2.5);
+ std::cout << intersect(i1, i2) << std::endl;
+ std::cout << hull(i1, i2) << std::endl;
+ std::cout << overlap(i1, i2) << std::endl;
+ std::cout << subset(i1, i2) << std::endl;
+ mpfi_clear(r);
+ return 0;
+}
+//]
+
diff --git a/libs/multiprecision/example/mpfr_snips.cpp b/libs/multiprecision/example/mpfr_snips.cpp
new file mode 100644
index 0000000000..ccb5c9a4d7
--- /dev/null
+++ b/libs/multiprecision/example/mpfr_snips.cpp
@@ -0,0 +1,40 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_
+
+//[mpfr_eg
+#include <boost/multiprecision/mpfr.hpp>
+#include <boost/math/special_functions/gamma.hpp>
+#include <iostream>
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ // Operations at variable precision and no numeric_limits support:
+ mpfr_float a = 2;
+ mpfr_float::default_precision(1000);
+ std::cout << mpfr_float::default_precision() << std::endl;
+ std::cout << sqrt(a) << std::endl; // print root-2
+
+ // Operations at fixed precision and full numeric_limits support:
+ mpfr_float_100 b = 2;
+ std::cout << std::numeric_limits<mpfr_float_100>::digits << std::endl;
+ // We can use any C++ std lib function:
+ std::cout << 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;
+
+ // Access the underlying data:
+ mpfr_t r;
+ mpfr_init(r);
+ mpfr_set(r, b.backend().data(), GMP_RNDN);
+ mpfr_clear(r);
+ return 0;
+}
+//]
+
+
diff --git a/libs/multiprecision/example/numeric_limits_snips.cpp b/libs/multiprecision/example/numeric_limits_snips.cpp
new file mode 100644
index 0000000000..fbdc5c5e70
--- /dev/null
+++ b/libs/multiprecision/example/numeric_limits_snips.cpp
@@ -0,0 +1,435 @@
+// 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>
+
+int test_main(int argc, char**const argv)
+{
+ 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();
+
+ 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>();
+
+ BOOST_CHECK_CLOSE_FRACTION(expected, calculated, tolerance);
+
+//] [/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>();
+
+ BOOST_CHECK_CLOSE_FRACTION(expected, calculated, tolerance);
+
+//] [/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;
+ // Comparisons of NaN's always fail:
+ bool b = expected == calculated;
+ std::cout << b << std::endl;
+ BOOST_CHECK_NE(expected, expected);
+ BOOST_CHECK_NE(expected, calculated);
+ }
+ 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.
+ std::cout << "NaN input was " << n << std::endl;
+ }
+/*`
+ NaN output was nan
+ NaN input was nan
+
+*/
+//] [/facet_1]
+ }
+
+ return 0;
+
+} // int main()
diff --git a/libs/multiprecision/example/random_snips.cpp b/libs/multiprecision/example/random_snips.cpp
new file mode 100644
index 0000000000..c083bf2f21
--- /dev/null
+++ b/libs/multiprecision/example/random_snips.cpp
@@ -0,0 +1,134 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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/gmp.hpp>
+#include <boost/multiprecision/random.hpp>
+#include <iostream>
+#include <iomanip>
+
+void t1()
+{
+//[random_eg1
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <boost/multiprecision/random.hpp>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+ using namespace boost::random;
+
+ //
+ // Declare our random number generator type, the underlying generator
+ // is the Mersenne twister mt19937 engine, and 256 bits are generated:
+ //
+ typedef independent_bits_engine<mt19937, 256, mpz_int> generator_type;
+ generator_type gen;
+ //
+ // Generate some values:
+ //
+ std::cout << std::hex << std::showbase;
+ for(unsigned i = 0; i < 10; ++i)
+ std::cout << gen() << std::endl;
+//= return 0;
+//=}
+//]
+}
+
+void t2()
+{
+//[random_eg2
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <boost/multiprecision/random.hpp>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+ using namespace boost::random;
+
+ //
+ // Generate integers in a given range using uniform_int,
+ // the underlying generator is invoked multiple times
+ // to generate enough bits:
+ //
+ mt19937 mt;
+ uniform_int_distribution<mpz_int> ui(0, mpz_int(1) << 256);
+ //
+ // Generate the numbers:
+ //
+ std::cout << std::hex << std::showbase;
+ for(unsigned i = 0; i < 10; ++i)
+ std::cout << ui(mt) << std::endl;
+
+//= return 0;
+//=}
+//]
+}
+
+void t3()
+{
+//[random_eg3
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <boost/multiprecision/random.hpp>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+ using namespace boost::random;
+ //
+ // We need an underlying generator with at least as many bits as the
+ // floating point type to generate numbers in [0, 1) with all the bits
+ // in the floating point type randomly filled:
+ //
+ uniform_01<mpf_float_50> uf;
+ independent_bits_engine<mt19937, 50L*1000L/301L, mpz_int> gen;
+ //
+ // Generate the values:
+ //
+ std::cout << std::setprecision(50);
+ for(unsigned i = 0; i < 20; ++i)
+ std::cout << uf(gen) << std::endl;
+//= return 0;
+//=}
+//]
+}
+
+void t4()
+{
+//[random_eg4
+//=#include <boost/multiprecision/gmp.hpp>
+//=#include <boost/multiprecision/random.hpp>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+ using namespace boost::random;
+ //
+ // We can repeat the above example, with other distributions:
+ //
+ uniform_real_distribution<mpf_float_50> ur(-20, 20);
+ gamma_distribution<mpf_float_50> gd(20);
+ independent_bits_engine<mt19937, 50L*1000L/301L, mpz_int> gen;
+ //
+ // Generate some values:
+ //
+ std::cout << std::setprecision(50);
+ for(unsigned i = 0; i < 20; ++i)
+ std::cout << ur(gen) << std::endl;
+ for(unsigned i = 0; i < 20; ++i)
+ std::cout << gd(gen) << std::endl;
+//= return 0;
+//=}
+//]
+}
+
+int main()
+{
+ t1();
+ t2();
+ t3();
+ t4();
+ return 0;
+}
+
diff --git a/libs/multiprecision/example/safe_prime.cpp b/libs/multiprecision/example/safe_prime.cpp
new file mode 100644
index 0000000000..71adf4f34a
--- /dev/null
+++ b/libs/multiprecision/example/safe_prime.cpp
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//[safe_prime
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/miller_rabin.hpp>
+#include <iostream>
+#include <iomanip>
+
+int main()
+{
+ using namespace boost::random;
+ using namespace boost::multiprecision;
+
+ typedef cpp_int int_type;
+ mt11213b base_gen(clock());
+ independent_bits_engine<mt11213b, 256, int_type> gen(base_gen);
+ //
+ // We must use a different generator for the tests and number generation, otherwise
+ // we get false positives.
+ //
+ mt19937 gen2(clock());
+
+ for(unsigned i = 0; i < 100000; ++i)
+ {
+ int_type n = gen();
+ if(miller_rabin_test(n, 25, gen2))
+ {
+ // Value n is probably prime, see if (n-1)/2 is also prime:
+ std::cout << "We have a probable prime with value: " << std::hex << std::showbase << n << std::endl;
+ if(miller_rabin_test((n-1)/2, 25, gen2))
+ {
+ std::cout << "We have a safe prime with value: " << std::hex << std::showbase << n << std::endl;
+ return 0;
+ }
+ }
+ }
+ std::cout << "Ooops, no safe primes were found" << std::endl;
+ return 1;
+}
+
+//]
diff --git a/libs/multiprecision/example/tommath_snips.cpp b/libs/multiprecision/example/tommath_snips.cpp
new file mode 100644
index 0000000000..63a78b22ef
--- /dev/null
+++ b/libs/multiprecision/example/tommath_snips.cpp
@@ -0,0 +1,84 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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/tommath.hpp>
+#include <iostream>
+
+void t1()
+{
+//[tommath_eg
+//=#include <boost/multiprecision/tommath.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ boost::multiprecision::tom_int v = 1;
+
+ // Do some arithmetic:
+ for(unsigned i = 1; i <= 1000; ++i)
+ v *= i;
+
+ std::cout << v << std::endl; // prints 1000!
+ std::cout << std::hex << v << std::endl; // prints 1000! in hex format
+
+ try{
+ std::cout << std::hex << -v << std::endl; // Ooops! can't print a negative value in hex format!
+ }
+ catch(const std::runtime_error& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+
+ try{
+ // v is not a 2's complement type, bitwise operations are only supported
+ // on positive values:
+ v = -v & 2;
+ }
+ catch(const std::runtime_error& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+
+//= return 0;
+//=}
+//]
+}
+
+void t3()
+{
+//[mp_rat_eg
+//=#include <boost/multiprecision/tommath.hpp>
+//=#include <iostream>
+//=
+//=int main()
+//={
+ using namespace boost::multiprecision;
+
+ tom_rational v = 1;
+
+ // Do some arithmetic:
+ for(unsigned i = 1; i <= 1000; ++i)
+ v *= i;
+ v /= 10;
+
+ std::cout << v << std::endl; // prints 1000! / 10
+ std::cout << numerator(v) << std::endl;
+ std::cout << denominator(v) << std::endl;
+
+ tom_rational w(2, 3); // Component wise constructor
+ std::cout << w << std::endl; // prints 2/3
+
+//= return 0;
+//=}
+//]
+}
+
+int main()
+{
+ t1();
+ t3();
+ return 0;
+}
+
diff --git a/libs/multiprecision/index.html b/libs/multiprecision/index.html
new file mode 100644
index 0000000000..df7430bd0e
--- /dev/null
+++ b/libs/multiprecision/index.html
@@ -0,0 +1,15 @@
+<html>
+ <head>
+ <meta http-equiv="refresh" content="0; URL=doc/html/index.html">
+ </head>
+ <body>
+ <P>
+ Automatic redirection failed, please go to <a href="doc/html/index.html">doc/html/index.html</a>.
+ </P>
+ <P>Copyright&nbsp;John Maddock 2001</P>
+ <P>Distributed under the Boost Software License, Version 1.0. (See accompanying file <A href="../../LICENSE_1_0.txt">
+ LICENSE_1_0.txt</A> or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</A>).</P>
+ </body>
+</html>
+
+
diff --git a/libs/multiprecision/meta/libraries.json b/libs/multiprecision/meta/libraries.json
new file mode 100644
index 0000000000..ce2f2eb180
--- /dev/null
+++ b/libs/multiprecision/meta/libraries.json
@@ -0,0 +1,16 @@
+{
+ "key": "multiprecision",
+ "name": "Multiprecision",
+ "authors": [
+ "John Maddock",
+ "Christopher Kormanyos"
+ ],
+ "description": "Extended precision arithmetic types for floating point, integer andrational arithmetic.",
+ "category": [
+ "Math"
+ ],
+ "maintainers": [
+ "John Maddock <john -at- johnmaddock.co.uk>",
+ "christopher Kormanyos <e_float -at- yahoo.com>"
+ ]
+}
diff --git a/libs/multiprecision/performance/Jamfile.v2 b/libs/multiprecision/performance/Jamfile.v2
new file mode 100644
index 0000000000..fbd6731561
--- /dev/null
+++ b/libs/multiprecision/performance/Jamfile.v2
@@ -0,0 +1,133 @@
+# copyright John Maddock 2012
+# 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.
+
+import modules ;
+import path ;
+
+local ntl-path = [ modules.peek : NTL_PATH ] ;
+local gmp_path = [ modules.peek : GMP_PATH ] ;
+local mpfr_path = [ modules.peek : MPFR_PATH ] ;
+local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
+
+project : requirements
+ <target-os>freebsd:<linkflags>"-lrt"
+ <target-os>linux:<linkflags>"-lrt"
+ <toolset>pgi:<linkflags>"-lrt"
+ <include>$(gmp_path)
+ <include>$(gmp_path)/mpfr
+ <include>$(gmp_path)/gmpfrxx
+ <include>$(mpfr_path)
+ <include>$(tommath_path)
+ <include>../../..
+ <search>$(gmp_path)
+ <search>$(mpfr_path)
+ <search>$(mpfr_path)/build.vc10/lib/Win32/Debug
+ <search>$(tommath_path)
+ <link>static
+ <define>BOOST_ALL_NO_LIB
+ <debug-symbols>off
+ ;
+
+
+lib gmp ;
+lib mpfr ;
+
+if $(tommath_path)
+{
+ TOMMATH = [ GLOB $(tommath_path) : *.c ] ;
+}
+else
+{
+ lib tommath ;
+ TOMMATH = tommath ;
+}
+
+exe performance_test : performance_test.cpp /boost/system//boost_system
+ : release
+ [ check-target-builds ../config//has_gmp : <define>TEST_MPF <define>TEST_MPZ <source>gmp : ]
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr : ]
+ [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>$(TOMMATH) : ]
+ <define>TEST_CPP_DEC_FLOAT
+ <define>TEST_CPP_INT
+ ;
+
+exe miller_rabin_performance : miller_rabin_performance.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : release
+ [ check-target-builds ../config//has_gmp : <define>TEST_MPF <define>TEST_MPZ <source>gmp : ]
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr : ]
+ #[ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>$(TOMMATH) : ]
+ <define>TEST_CPP_DEC_FLOAT
+ <define>TEST_CPP_INT
+ ;
+
+exe sf_performance : sf_performance.cpp sf_performance_basic.cpp sf_performance_bessel.cpp
+ sf_performance_bessel1.cpp sf_performance_bessel2.cpp sf_performance_bessel3.cpp
+ sf_performance_bessel4.cpp sf_performance_bessel5.cpp sf_performance_bessel6.cpp
+ sf_performance_nct.cpp sf_performance_nct1.cpp
+ sf_performance_nct2.cpp sf_performance_nct3.cpp sf_performance_nct4.cpp
+ sf_performance_nct5.cpp sf_performance_nct6.cpp
+ sf_performance_poly.cpp
+ /boost/system//boost_system /boost/chrono//boost_chrono /boost/thread//boost_thread
+ : release
+ [ check-target-builds ../config//has_gmp : <define>TEST_MPF <define>TEST_MPZ <source>gmp : ]
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr : ]
+ <define>TEST_CPP_DEC_FLOAT
+ <toolset>msvc:<cxxflags>-bigobj
+ ;
+
+exe delaunay_test : delaunay_test.cpp /boost/system//boost_system /boost/chrono//boost_chrono ;
+
+obj obj_linpack_benchmark_mpfr : linpack-benchmark.cpp
+ : release
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <define>TEST_MPFR_50
+ ;
+
+obj obj_linpack_benchmark_mpf : linpack-benchmark.cpp
+ : release
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ <define>TEST_MPF_50
+ ;
+
+obj obj_linpack_benchmark_cpp_float : linpack-benchmark.cpp
+ : release
+ <define>TEST_CPP_DEC_FLOAT
+ ;
+
+obj obj_linpack_benchmark_double : linpack-benchmark.cpp
+ : release
+ ;
+
+lib f2c ;
+
+exe linpack_benchmark_mpfr : obj_linpack_benchmark_mpfr mpfr f2c gmp
+ : release
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <define>TEST_MPFR_50
+ ;
+
+exe linpack_benchmark_mpf : obj_linpack_benchmark_mpf gmp f2c
+ : release
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ <define>TEST_MPF_50
+ ;
+
+exe linpack_benchmark_cpp_float : obj_linpack_benchmark_cpp_float f2c
+ : release
+ <define>TEST_CPP_DEC_FLOAT
+ ;
+
+exe linpack_benchmark_double : obj_linpack_benchmark_double f2c
+ : release
+ ;
+
+install miller_rabin_install : miller_rabin_performance : <location>. ;
+install performance_test_install : performance_test : <location>. ;
+install sf_performance_install : sf_performance : <location>. ;
+install . : linpack_benchmark_double linpack_benchmark_cpp_float linpack_benchmark_mpf linpack_benchmark_mpfr ;
+install delaunay_install : delaunay_test : <location>. ;
+
+
+
diff --git a/libs/multiprecision/performance/arithmetic_backend.hpp b/libs/multiprecision/performance/arithmetic_backend.hpp
new file mode 100644
index 0000000000..a0574d193b
--- /dev/null
+++ b/libs/multiprecision/performance/arithmetic_backend.hpp
@@ -0,0 +1,600 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+#ifndef BOOST_MATH_FLOAT_BACKEND_HPP
+#define BOOST_MATH_FLOAT_BACKEND_HPP
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <boost/cstdint.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/math/concepts/real_concept.hpp>
+#include <boost/multiprecision/number.hpp>
+#include <boost/math/common_factor_rt.hpp>
+
+namespace boost{
+namespace multiprecision{
+namespace backends{
+
+#ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable:4389 4244 4018 4244 4127)
+#endif
+
+template <class Arithmetic>
+struct arithmetic_backend
+{
+ typedef mpl::list<short, int, long, long long> signed_types;
+ typedef mpl::list<unsigned short, unsigned, unsigned long, unsigned long long> unsigned_types;
+ typedef mpl::list<float, double, long double> float_types;
+ typedef int exponent_type;
+
+ arithmetic_backend(){}
+ arithmetic_backend(const arithmetic_backend& o)
+ {
+ m_value = o.m_value;
+ }
+ template <class A>
+ arithmetic_backend(const A& o, const typename enable_if<is_arithmetic<A> >::type* = 0) : m_value(o) {}
+ template <class A>
+ arithmetic_backend(const arithmetic_backend<A>& o) : m_value(o.data()) {}
+ arithmetic_backend& operator = (const arithmetic_backend& o)
+ {
+ m_value = o.m_value;
+ return *this;
+ }
+ template <class A>
+ typename enable_if<is_arithmetic<A>, arithmetic_backend&>::type operator = (A i)
+ {
+ m_value = i;
+ return *this;
+ }
+ template <class A>
+ arithmetic_backend& operator = (const arithmetic_backend<A>& i)
+ {
+ m_value = i.data();
+ return *this;
+ }
+ arithmetic_backend& operator = (const char* s)
+ {
+ try
+ {
+ m_value = boost::lexical_cast<Arithmetic>(s);
+ }
+ catch(const bad_lexical_cast&)
+ {
+ throw std::runtime_error(std::string("Unable to interpret the string provided: \"") + s + std::string("\" as a compatible number type."));
+ }
+ return *this;
+ }
+ void swap(arithmetic_backend& o)
+ {
+ std::swap(m_value, o.m_value);
+ }
+ std::string str(std::streamsize digits, std::ios_base::fmtflags f)const
+ {
+ std::stringstream ss;
+ ss.flags(f);
+ ss << std::setprecision(digits ? digits : std::numeric_limits<Arithmetic>::digits10 + 4) << m_value;
+ return ss.str();
+ }
+ void do_negate(const mpl::true_&)
+ {
+ m_value = 1 + ~m_value;
+ }
+ void do_negate(const mpl::false_&)
+ {
+ m_value = -m_value;
+ }
+ void negate()
+ {
+ do_negate(is_unsigned<Arithmetic>());
+ }
+ int compare(const arithmetic_backend& o)const
+ {
+ return m_value > o.m_value ? 1 : (m_value < o.m_value ? -1 : 0);
+ }
+ template <class A>
+ typename enable_if<is_arithmetic<A>, int>::type compare(A i)const
+ {
+ return m_value > static_cast<Arithmetic>(i) ? 1 : (m_value < static_cast<Arithmetic>(i) ? -1 : 0);
+ }
+ Arithmetic& data() { return m_value; }
+ const Arithmetic& data()const { return m_value; }
+private:
+ Arithmetic m_value;
+};
+
+template <class R, class Arithmetic>
+inline void eval_convert_to(R* result, const arithmetic_backend<Arithmetic>& backend)
+{
+ *result = backend.data();
+}
+
+template <class Arithmetic>
+inline bool eval_eq(const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ return a.data() == b.data();
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2>, bool>::type eval_eq(const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ return a.data() == static_cast<Arithmetic>(b);
+}
+template <class Arithmetic>
+inline bool eval_lt(const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ return a.data() < b.data();
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2>, bool>::type eval_lt(const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ return a.data() < static_cast<Arithmetic>(b);
+}
+template <class Arithmetic>
+inline bool eval_gt(const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ return a.data() > b.data();
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2>, bool>::type eval_gt(const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ return a.data() > static_cast<Arithmetic>(b);
+}
+
+template <class Arithmetic>
+inline void eval_add(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ result.data() += o.data();
+}
+template <class Arithmetic>
+inline void eval_subtract(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ result.data() -= o.data();
+}
+template <class Arithmetic>
+inline void eval_multiply(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ result.data() *= o.data();
+}
+template <class Arithmetic>
+inline typename enable_if_c<std::numeric_limits<Arithmetic>::has_infinity>::type eval_divide(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ result.data() /= o.data();
+}
+template <class Arithmetic>
+inline typename disable_if_c<std::numeric_limits<Arithmetic>::has_infinity>::type eval_divide(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ if(!o.data())
+ BOOST_THROW_EXCEPTION(std::overflow_error("Divide by zero"));
+ result.data() /= o.data();
+}
+
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2> >::type eval_add(arithmetic_backend<Arithmetic>& result, const A2& o)
+{
+ result.data() += o;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2> >::type eval_subtract(arithmetic_backend<Arithmetic>& result, const A2& o)
+{
+ result.data() -= o;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2> >::type eval_multiply(arithmetic_backend<Arithmetic>& result, const A2& o)
+{
+ result.data() *= o;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if_c<(is_arithmetic<A2>::value && !std::numeric_limits<Arithmetic>::has_infinity)>::type
+ eval_divide(arithmetic_backend<Arithmetic>& result, const A2& o)
+{
+ if(!o)
+ BOOST_THROW_EXCEPTION(std::overflow_error("Divide by zero"));
+ result.data() /= o;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if_c<(is_arithmetic<A2>::value && std::numeric_limits<Arithmetic>::has_infinity)>::type
+ eval_divide(arithmetic_backend<Arithmetic>& result, const A2& o)
+{
+ result.data() /= o;
+}
+
+template <class Arithmetic>
+inline void eval_add(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ result.data() = a.data() + b.data();
+}
+template <class Arithmetic>
+inline void eval_subtract(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ result.data() = a.data() - b.data();
+}
+template <class Arithmetic>
+inline void eval_multiply(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ result.data() = a.data() * b.data();
+}
+template <class Arithmetic>
+inline typename enable_if_c<std::numeric_limits<Arithmetic>::has_infinity>::type eval_divide(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ result.data() = a.data() / b.data();
+}
+template <class Arithmetic>
+inline typename disable_if_c<std::numeric_limits<Arithmetic>::has_infinity>::type eval_divide(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ if(!b.data())
+ BOOST_THROW_EXCEPTION(std::overflow_error("Divide by zero"));
+ result.data() = a.data() / b.data();
+}
+
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2> >::type eval_add(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ result.data() = a.data() + b;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2> >::type eval_subtract(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ result.data() = a.data() - b;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if<is_arithmetic<A2> >::type eval_multiply(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ result.data() = a.data() * b;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if_c<(is_arithmetic<A2>::value && !std::numeric_limits<Arithmetic>::has_infinity)>::type
+ eval_divide(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ if(!b)
+ BOOST_THROW_EXCEPTION(std::overflow_error("Divide by zero"));
+ result.data() = a.data() / b;
+}
+template <class Arithmetic, class A2>
+inline typename enable_if_c<(is_arithmetic<A2>::value && std::numeric_limits<Arithmetic>::has_infinity)>::type
+ eval_divide(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const A2& b)
+{
+ result.data() = a.data() / b;
+}
+
+template <class Arithmetic>
+inline bool eval_is_zero(const arithmetic_backend<Arithmetic>& val)
+{
+ return val.data() == 0;
+}
+
+template <class Arithmetic>
+inline typename enable_if_c<
+ (!std::numeric_limits<Arithmetic>::is_specialized
+ || std::numeric_limits<Arithmetic>::is_signed), int>::type
+ eval_get_sign(const arithmetic_backend<Arithmetic>& val)
+{
+ return val.data() == 0 ? 0 : val.data() < 0 ? -1 : 1;
+}
+template <class Arithmetic>
+inline typename disable_if_c<
+ (std::numeric_limits<Arithmetic>::is_specialized
+ || std::numeric_limits<Arithmetic>::is_signed), int>::type
+ eval_get_sign(const arithmetic_backend<Arithmetic>& val)
+{
+ return val.data() == 0 ? 0 : 1;
+}
+
+template <class T>
+inline typename enable_if<is_unsigned<T>, T>::type abs(T v) { return v; }
+
+template <class Arithmetic>
+inline void eval_abs(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ using std::abs;
+ using boost::multiprecision::backends::abs;
+ result.data() = abs(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_fabs(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ result.data() = std::abs(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_floor(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = floor(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_ceil(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = ceil(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_sqrt(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = sqrt(o.data());
+}
+
+template <class Arithmetic>
+inline int eval_fpclassify(const arithmetic_backend<Arithmetic>& o)
+{
+ return (boost::math::fpclassify)(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_trunc(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = trunc(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_round(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = round(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_frexp(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, int* v)
+{
+ BOOST_MATH_STD_USING
+ result.data() = frexp(a.data(), v);
+}
+
+template <class Arithmetic>
+inline void eval_ldexp(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, int v)
+{
+ BOOST_MATH_STD_USING
+ result.data() = ldexp(a.data(), v);
+}
+
+template <class Arithmetic>
+inline void eval_exp(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = exp(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_log(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = log(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_log10(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = log10(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_sin(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = sin(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_cos(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = cos(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_tan(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = tan(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_acos(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = acos(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_asin(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = asin(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_atan(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = atan(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_sinh(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = sinh(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_cosh(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = cosh(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_tanh(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& o)
+{
+ BOOST_MATH_STD_USING
+ result.data() = tanh(o.data());
+}
+
+template <class Arithmetic>
+inline void eval_fmod(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ BOOST_MATH_STD_USING
+ result.data() = fmod(a.data(), b.data());
+}
+
+template <class Arithmetic>
+inline void eval_pow(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ BOOST_MATH_STD_USING
+ result.data() = pow(a.data(), b.data());
+}
+
+template <class Arithmetic>
+inline void eval_atan2(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ BOOST_MATH_STD_USING
+ result.data() = atan2(a.data(), b.data());
+}
+
+template <class Arithmetic, class I>
+inline void eval_left_shift(arithmetic_backend<Arithmetic>& result, I val)
+{
+ result.data() <<= val;
+}
+
+template <class Arithmetic, class I>
+inline void eval_right_shift(arithmetic_backend<Arithmetic>& result, I val)
+{
+ result.data() >>= val;
+}
+
+template <class Arithmetic>
+inline void eval_modulus(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a)
+{
+ result.data() %= a.data();
+}
+
+template <class Arithmetic>
+inline void eval_bitwise_and(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a)
+{
+ result.data() &= a.data();
+}
+
+template <class Arithmetic>
+inline void eval_bitwise_or(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a)
+{
+ result.data() |= a.data();
+}
+
+template <class Arithmetic>
+inline void eval_bitwise_xor(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a)
+{
+ result.data() ^= a.data();
+}
+
+template <class Arithmetic>
+inline void eval_complement(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a)
+{
+ result.data() = ~a.data();
+}
+
+template <class Arithmetic>
+inline void eval_gcd(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ result.data() = boost::math::gcd(a.data(), b.data());
+}
+
+template <class Arithmetic>
+inline void eval_lcm(arithmetic_backend<Arithmetic>& result, const arithmetic_backend<Arithmetic>& a, const arithmetic_backend<Arithmetic>& b)
+{
+ result.data() = boost::math::lcm(a.data(), b.data());
+}
+
+#ifdef BOOST_MSVC
+# pragma warning(pop)
+#endif
+
+} // namespace backends
+
+using boost::multiprecision::backends::arithmetic_backend;
+
+template <class Arithmetic>
+struct number_category<arithmetic_backend<Arithmetic> > : public mpl::int_<is_integral<Arithmetic>::value ? number_kind_integer : number_kind_floating_point>{};
+
+namespace detail{
+
+template <class Backend>
+struct double_precision_type;
+
+template<class Arithmetic, boost::multiprecision::expression_template_option ET>
+struct double_precision_type<number<arithmetic_backend<Arithmetic>, ET> >
+{
+ typedef number<arithmetic_backend<typename double_precision_type<Arithmetic>::type>, ET> type;
+};
+template<>
+struct double_precision_type<arithmetic_backend<boost::int32_t> >
+{
+ typedef arithmetic_backend<boost::int64_t> type;
+};
+
+}
+
+}} // namespaces
+
+namespace boost{ namespace math{ namespace tools{
+
+template <>
+inline double real_cast<double, concepts::real_concept>(concepts::real_concept r)
+{
+ return static_cast<double>(r.value());
+}
+
+}}}
+
+
+namespace std{
+
+template <class Arithmetic, boost::multiprecision::expression_template_option ExpressionTemplates>
+class numeric_limits<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<Arithmetic>, ExpressionTemplates > > : public std::numeric_limits<Arithmetic>
+{
+ typedef std::numeric_limits<Arithmetic> base_type;
+ typedef boost::multiprecision::number<boost::multiprecision::arithmetic_backend<Arithmetic>, ExpressionTemplates> number_type;
+public:
+ BOOST_STATIC_CONSTEXPR number_type (min)() BOOST_NOEXCEPT { return (base_type::min)(); }
+ BOOST_STATIC_CONSTEXPR number_type (max)() BOOST_NOEXCEPT { return (base_type::max)(); }
+ BOOST_STATIC_CONSTEXPR number_type lowest() BOOST_NOEXCEPT { return -(max)(); }
+ BOOST_STATIC_CONSTEXPR number_type epsilon() BOOST_NOEXCEPT { return base_type::epsilon(); }
+ BOOST_STATIC_CONSTEXPR number_type round_error() BOOST_NOEXCEPT { return epsilon() / 2; }
+ BOOST_STATIC_CONSTEXPR number_type infinity() BOOST_NOEXCEPT { return base_type::infinity(); }
+ BOOST_STATIC_CONSTEXPR number_type quiet_NaN() BOOST_NOEXCEPT { return base_type::quiet_NaN(); }
+ BOOST_STATIC_CONSTEXPR number_type signaling_NaN() BOOST_NOEXCEPT { return base_type::signaling_NaN(); }
+ BOOST_STATIC_CONSTEXPR number_type denorm_min() BOOST_NOEXCEPT { return base_type::denorm_min(); }
+};
+
+template<>
+class numeric_limits<boost::math::concepts::real_concept> : public std::numeric_limits<long double>
+{
+ typedef std::numeric_limits<long double> base_type;
+ typedef boost::math::concepts::real_concept number_type;
+public:
+ static const number_type (min)() BOOST_NOEXCEPT { return (base_type::min)(); }
+ static const number_type (max)() BOOST_NOEXCEPT { return (base_type::max)(); }
+ static const number_type lowest() BOOST_NOEXCEPT { return -(max)(); }
+ static const number_type epsilon() BOOST_NOEXCEPT { return base_type::epsilon(); }
+ static const number_type round_error() BOOST_NOEXCEPT { return epsilon() / 2; }
+ static const number_type infinity() BOOST_NOEXCEPT { return base_type::infinity(); }
+ static const number_type quiet_NaN() BOOST_NOEXCEPT { return base_type::quiet_NaN(); }
+ static const number_type signaling_NaN() BOOST_NOEXCEPT { return base_type::signaling_NaN(); }
+ static const number_type denorm_min() BOOST_NOEXCEPT { return base_type::denorm_min(); }
+};
+
+}
+
+#include <boost/multiprecision/detail/integer_ops.hpp>
+
+#endif
diff --git a/libs/multiprecision/performance/delaunay_test.cpp b/libs/multiprecision/performance/delaunay_test.cpp
new file mode 100644
index 0000000000..d6fff13529
--- /dev/null
+++ b/libs/multiprecision/performance/delaunay_test.cpp
@@ -0,0 +1,295 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2012 John Maddock.
+// Copyright 2012 Phil Endecott
+// 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)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include "arithmetic_backend.hpp"
+#include <boost/chrono.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+
+#include <fstream>
+#include <iomanip>
+
+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;
+};
+
+// Custom 128-bit maths used for exact calculation of the Delaunay test.
+// Only the few operators actually needed here are implemented.
+
+struct int128_t {
+ int64_t high;
+ uint64_t low;
+
+ int128_t() {}
+ int128_t(int32_t i): high(i>>31), low(static_cast<int64_t>(i)) {}
+ int128_t(uint32_t i): high(0), low(i) {}
+ int128_t(int64_t i): high(i>>63), low(i) {}
+ int128_t(uint64_t i): high(0), low(i) {}
+};
+
+inline int128_t operator<<(int128_t val, int amt)
+{
+ int128_t r;
+ r.low = val.low << amt;
+ r.high = val.low >> (64-amt);
+ r.high |= val.high << amt;
+ return r;
+}
+
+inline int128_t& operator+=(int128_t& l, int128_t r)
+{
+ l.low += r.low;
+ bool carry = l.low < r.low;
+ l.high += r.high;
+ if (carry) ++l.high;
+ return l;
+}
+
+inline int128_t operator-(int128_t val)
+{
+ val.low = ~val.low;
+ val.high = ~val.high;
+ val.low += 1;
+ if (val.low == 0) val.high += 1;
+ return val;
+}
+
+inline int128_t operator+(int128_t l, int128_t r)
+{
+ l += r;
+ return l;
+}
+
+inline bool operator<(int128_t l, int128_t r)
+{
+ if (l.high != r.high) return l.high < r.high;
+ return l.low < r.low;
+}
+
+
+inline int128_t mult_64x64_to_128(int64_t a, int64_t b)
+{
+ // Make life simple by dealing only with positive numbers:
+ bool neg = false;
+ if (a<0) { neg = !neg; a = -a; }
+ if (b<0) { neg = !neg; b = -b; }
+
+ // Divide input into 32-bit halves:
+ uint32_t ah = a >> 32;
+ uint32_t al = a & 0xffffffff;
+ uint32_t bh = b >> 32;
+ uint32_t bl = b & 0xffffffff;
+
+ // Long multiplication, with 64-bit temporaries:
+
+ // ah al
+ // * bh bl
+ // ----------------
+ // al*bl (t1)
+ // + ah*bl (t2)
+ // + al*bh (t3)
+ // + ah*bh (t4)
+ // ----------------
+
+ uint64_t t1 = static_cast<uint64_t>(al)*bl;
+ uint64_t t2 = static_cast<uint64_t>(ah)*bl;
+ uint64_t t3 = static_cast<uint64_t>(al)*bh;
+ uint64_t t4 = static_cast<uint64_t>(ah)*bh;
+
+ int128_t r(t1);
+ r.high = t4;
+ r += int128_t(t2) << 32;
+ r += int128_t(t3) << 32;
+
+ if (neg) r = -r;
+
+ return r;
+}
+
+template <class R, class T>
+BOOST_FORCEINLINE void mul_2n(R& r, const T& a, const T& b)
+{
+ r = a;
+ r *= b;
+}
+
+template <class B, boost::multiprecision::expression_template_option ET, class T>
+BOOST_FORCEINLINE void mul_2n(boost::multiprecision::number<B, ET>& r, const T& a, const T& b)
+{
+ multiply(r, a, b);
+}
+
+BOOST_FORCEINLINE void mul_2n(int128_t& r, const boost::int64_t& a, const boost::int64_t& b)
+{
+ r = mult_64x64_to_128(a, b);
+}
+
+template <class Traits>
+inline bool delaunay_test(int32_t ax, int32_t ay, int32_t bx, int32_t by,
+ int32_t cx, int32_t cy, int32_t dx, int32_t dy)
+{
+ // Test whether the quadrilateral ABCD's diagonal AC should be flipped to BD.
+ // This is the Cline & Renka method.
+ // Flip if the sum of the angles ABC and CDA is greater than 180 degrees.
+ // Equivalently, flip if sin(ABC + CDA) < 0.
+ // Trig identity: cos(ABC) * sin(CDA) + sin(ABC) * cos(CDA) < 0
+ // We can use scalar and vector products to find sin and cos, and simplify
+ // to the following code.
+ // Numerical robustness is important. This code addresses it by performing
+ // exact calculations with large integer types.
+ //
+ // NOTE: This routine is limited to inputs with up to 30 BIT PRECISION, which
+ // is to say all inputs must be in the range [INT_MIN/2, INT_MAX/2].
+
+ typedef typename Traits::i64_t i64;
+ typedef typename Traits::i128_t i128;
+
+ i64 cos_abc, t;
+ mul_2n(cos_abc, (ax-bx), (cx-bx)); // subtraction yields 31-bit values, multiplied to give 62-bit values
+ mul_2n(t, (ay-by), (cy-by));
+ cos_abc += t; // addition yields 63 bit value, leaving one left for the sign
+
+ i64 cos_cda;
+ mul_2n(cos_cda, (cx-dx), (ax-dx));
+ mul_2n(t, (cy-dy), (ay-dy));
+ cos_cda += t;
+
+ if (cos_abc >= 0 && cos_cda >= 0) return false;
+ if (cos_abc < 0 && cos_cda < 0) return true;
+
+ i64 sin_abc;
+ mul_2n(sin_abc, (ax-bx), (cy-by));
+ mul_2n(t, (cx-bx), (ay-by));
+ sin_abc -= t;
+
+ i64 sin_cda;
+ mul_2n(sin_cda, (cx-dx), (ay-dy));
+ mul_2n(t, (ax-dx), (cy-dy));
+ sin_cda -= t;
+
+ i128 sin_sum, t128;
+ mul_2n(sin_sum, sin_abc, cos_cda); // 63-bit inputs multiplied to 126-bit output
+ mul_2n(t128, cos_abc, sin_cda);
+ sin_sum += t128; // Addition yields 127 bit result, leaving one bit for the sign
+
+ return sin_sum < 0;
+}
+
+
+struct dt_dat {
+ int32_t ax, ay, bx, by, cx, cy, dx, dy;
+};
+
+typedef std::vector<dt_dat> data_t;
+data_t data;
+
+template <class Traits>
+void do_calc(const char* name)
+{
+ std::cout << "Running calculations for: " << name << std::endl;
+
+ stopwatch<boost::chrono::high_resolution_clock> w;
+
+ boost::uint64_t flips = 0;
+ boost::uint64_t calcs = 0;
+
+ for(int j = 0; j < 1000; ++j)
+ {
+ for(data_t::const_iterator i = data.begin(); i != data.end(); ++i)
+ {
+ const dt_dat& d = *i;
+ bool flip = delaunay_test<Traits>(d.ax,d.ay, d.bx,d.by, d.cx,d.cy, d.dx,d.dy);
+ if (flip) ++flips;
+ ++calcs;
+ }
+ }
+ double t = boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+
+ std::cout << "Number of calculations = " << calcs << std::endl;
+ std::cout << "Number of flips = " << flips << std::endl;
+ std::cout << "Total execution time = " << t << std::endl;
+ std::cout << "Time per calculation = " << t / calcs << std::endl << std::endl;
+}
+
+template <class I64, class I128>
+struct test_traits
+{
+ typedef I64 i64_t;
+ typedef I128 i128_t;
+};
+
+
+dt_dat generate_quadrilateral()
+{
+ static boost::random::mt19937 gen;
+ static boost::random::uniform_int_distribution<> dist(INT_MIN/2, INT_MAX/2);
+
+ dt_dat result;
+
+ result.ax = dist(gen);
+ result.ay = dist(gen);
+ result.bx = boost::random::uniform_int_distribution<>(result.ax, INT_MAX/2)(gen); // bx is to the right of ax.
+ result.by = dist(gen);
+ result.cx = dist(gen);
+ result.cy = boost::random::uniform_int_distribution<>(result.cx > result.bx ? result.by : result.ay, INT_MAX/2)(gen); // cy is below at least one of ay and by.
+ result.dx = boost::random::uniform_int_distribution<>(result.cx, INT_MAX/2)(gen); // dx is to the right of cx.
+ result.dy = boost::random::uniform_int_distribution<>(result.cx > result.bx ? result.by : result.ay, INT_MAX/2)(gen); // cy is below at least one of ay and by.
+
+ return result;
+}
+
+static void load_data()
+{
+ for(unsigned i = 0; i < 100000; ++i)
+ data.push_back(generate_quadrilateral());
+}
+
+
+int main()
+{
+ using namespace boost::multiprecision;
+ std::cout << "loading data...\n";
+ load_data();
+
+ std::cout << "calculating...\n";
+
+ do_calc<test_traits<boost::int64_t, boost::int64_t> >("int64_t, int64_t");
+ do_calc<test_traits<number<arithmetic_backend<boost::int64_t>, et_off>, number<arithmetic_backend<boost::int64_t>, et_off> > >("arithmetic_backend<int64_t>, arithmetic_backend<int64_t>");
+ do_calc<test_traits<boost::int64_t, number<arithmetic_backend<boost::int64_t>, et_off> > >("int64_t, arithmetic_backend<int64_t>");
+ do_calc<test_traits<number<cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, et_off>, number<cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, et_off> > >("multiprecision::int64_t, multiprecision::int64_t");
+
+ do_calc<test_traits<boost::int64_t, ::int128_t> >("int64_t, int128_t");
+ do_calc<test_traits<boost::int64_t, boost::multiprecision::int128_t> >("int64_t, boost::multiprecision::int128_t");
+ do_calc<test_traits<boost::int64_t, number<cpp_int_backend<128, 128, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, et_on> > >("int64_t, int128_t (ET)");
+ do_calc<test_traits<number<cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, et_off>, boost::multiprecision::int128_t > >("multiprecision::int64_t, multiprecision::int128_t");
+
+ do_calc<test_traits<boost::int64_t, cpp_int> >("int64_t, cpp_int");
+ do_calc<test_traits<boost::int64_t, number<cpp_int_backend<>, et_off> > >("int64_t, cpp_int (no ET's)");
+ do_calc<test_traits<boost::int64_t, number<cpp_int_backend<128> > > >("int64_t, cpp_int(128-bit cache)");
+ do_calc<test_traits<boost::int64_t, number<cpp_int_backend<128>, et_off> > >("int64_t, cpp_int (128-bit Cache no ET's)");
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/performance/linpack-benchmark.cpp b/libs/multiprecision/performance/linpack-benchmark.cpp
new file mode 100644
index 0000000000..104ac4c904
--- /dev/null
+++ b/libs/multiprecision/performance/linpack-benchmark.cpp
@@ -0,0 +1,1278 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2011 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)
+
+/* 1000d.f -- translated by f2c (version 20050501).
+You must link the resulting object file with libf2c:
+on Microsoft Windows system, link with libf2c.lib;
+on Linux or Unix systems, link with .../path/to/libf2c.a -lm
+or, if you install libf2c.a in a standard place, with -lf2c -lm
+-- in that order, at the end of the command line, as in
+cc *.o -lf2c -lm
+Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
+
+http://www.netlib.org/f2c/libf2c.zip
+*/
+#include <iostream>
+#include <iomanip>
+#include <cmath>
+
+#if defined(TEST_GMPXX)
+#include <gmpxx.h>
+typedef mpf_class real_type;
+#elif defined(TEST_MPFRXX)
+#include <gmpfrxx.h>
+typedef mpfr_class real_type;
+#elif defined(TEST_CPP_DEC_FLOAT)
+#include <boost/multiprecision/cpp_dec_float.hpp>
+typedef boost::multiprecision::cpp_dec_float_50 real_type;
+#elif defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+typedef boost::multiprecision::mpfr_float_50 real_type;
+#elif defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+typedef boost::multiprecision::mpf_float_50 real_type;
+#elif defined(NATIVE_FLOAT128)
+#include <boost/multiprecision/float128.hpp>
+typedef __float128 real_type;
+
+std::ostream& operator<<(std::ostream& os, const __float128& f)
+{
+ return os << boost::multiprecision::float128(f);
+}
+
+#include <boost/type_traits/has_left_shift.hpp>
+
+namespace boost{
+
+template<>
+struct has_left_shift<std::basic_ostream<char>, __float128> : public mpl::true_ {};
+
+template<>
+double lexical_cast<double, __float128>(const __float128& f)
+{ return f; }
+
+}
+
+#elif defined(TEST_FLOAT128)
+#include <boost/multiprecision/float128.hpp>
+typedef boost::multiprecision::float128 real_type;
+#else
+typedef double real_type;
+#endif
+
+#include <boost/lexical_cast.hpp>
+
+#ifndef CAST_TO_RT
+# define CAST_TO_RT(x) x
+#endif
+
+extern "C" {
+#include "f2c.h"
+ integer s_wsfe(cilist *), e_wsfe(void), do_fio(integer *, char *, ftnlen),
+ s_wsle(cilist *), do_lio(integer *, integer *, char *, ftnlen),
+ e_wsle(void);
+ /* Subroutine */ int s_stop(char *, ftnlen);
+
+#undef abs
+#undef dabs
+#define dabs abs
+#undef dmin
+#undef dmax
+#define dmin min
+#define dmax max
+
+}
+#include <time.h>
+
+using std::min;
+using std::max;
+
+/* Table of constant values */
+
+static integer c__0 = 0;
+static real_type c_b7 = CAST_TO_RT(1);
+static integer c__1 = 1;
+static integer c__9 = 9;
+
+inline double second_(void)
+{
+ return ((double)(clock())) / CLOCKS_PER_SEC;
+}
+
+int dgefa_(real_type *, integer *, integer *, integer *, integer *), dgesl_(real_type *, integer *, integer *, integer *, real_type *, integer *);
+int dmxpy_(integer *, real_type *, integer *, integer *, real_type *, real_type *);
+int matgen_(real_type *, integer *, integer *, real_type *, real_type *);
+real_type epslon_(real_type *);
+real_type ran_(integer *);
+int dscal_(integer *, real_type *, real_type *, integer *);
+int daxpy_(integer *, real_type *, real_type *, integer *, real_type *, integer *);
+integer idamax_(integer *, real_type *, integer *);
+real_type ddot_(integer *, real_type *, integer *, real_type *, integer *);
+int daxpy_(integer *, real_type *, real_type *, integer *, real_type *, integer *);
+int dmxpy_(integer *, real_type *, integer *, integer *, real_type *, real_type *);
+
+extern "C" int MAIN__()
+{
+#ifdef TEST_MPF_50
+ std::cout << "Testing number<mpf_float<50> >" << std::endl;
+#elif defined(TEST_MPFR_50)
+ std::cout << "Testing number<mpf_float<50> >" << std::endl;
+#elif defined(TEST_GMPXX)
+ std::cout << "Testing mpf_class at 50 decimal degits" << std::endl;
+ mpf_set_default_prec(((50 + 1) * 1000L) / 301L);
+#elif defined(TEST_MPFRXX)
+ std::cout << "Testing mpfr_class at 50 decimal degits" << std::endl;
+ mpfr_set_default_prec(((50 + 1) * 1000L) / 301L);
+#elif defined(TEST_CPP_DEC_FLOAT)
+ std::cout << "Testing number<cpp_dec_float<50> >" << std::endl;
+#elif defined(NATIVE_FLOAT128)
+ std::cout << "Testing __float128" << std::endl;
+#elif defined(TEST_FLOAT128)
+ std::cout << "Testing number<float128_backend, et_off>" << std::endl;
+#else
+ std::cout << "Testing double" << std::endl;
+#endif
+
+
+ /* Format strings */
+ static char fmt_1[] = "(\002 Please send the results of this run to:\002"
+ "//\002 Jack J. Dongarra\002/\002 Computer Science Department\002/"
+ "\002 University of Tennessee\002/\002 Knoxville, Tennessee 37996"
+ "-1300\002//\002 Fax: 615-974-8296\002//\002 Internet: dongarra@c"
+ "s.utk.edu\002/)";
+ static char fmt_40[] = "(\002 norm. resid resid mac"
+ "hep\002,\002 x(1) x(n)\002)";
+ static char fmt_50[] = "(1p5e16.8)";
+ static char fmt_60[] = "(//\002 times are reported for matrices of or"
+ "der \002,i5)";
+ static char fmt_70[] = "(6x,\002factor\002,5x,\002solve\002,6x,\002tota"
+ "l\002,5x,\002mflops\002,7x,\002unit\002,6x,\002ratio\002)";
+ static char fmt_80[] = "(\002 times for array with leading dimension o"
+ "f\002,i4)";
+ static char fmt_110[] = "(6(1pe11.3))";
+
+ /* System generated locals */
+ integer i__1;
+ real_type d__1, d__2, d__3;
+
+ /* Builtin functions */
+
+ /* Local variables */
+ static real_type a[1001000] /* was [1001][1000] */, b[1000];
+ static integer i__, n;
+ static real_type x[1000];
+ static double t1;
+ static integer lda;
+ static double ops;
+ static real_type eps;
+ static integer info;
+ static double time[6], cray, total;
+ static integer ipvt[1000];
+ static real_type resid, norma;
+ static real_type normx;
+ static real_type residn;
+
+ /* Fortran I/O blocks */
+ static cilist io___4 = { 0, 6, 0, fmt_1, 0 };
+ static cilist io___20 = { 0, 6, 0, fmt_40, 0 };
+ static cilist io___21 = { 0, 6, 0, fmt_50, 0 };
+ static cilist io___22 = { 0, 6, 0, fmt_60, 0 };
+ static cilist io___23 = { 0, 6, 0, fmt_70, 0 };
+ static cilist io___24 = { 0, 6, 0, fmt_80, 0 };
+ static cilist io___25 = { 0, 6, 0, fmt_110, 0 };
+ static cilist io___26 = { 0, 6, 0, 0, 0 };
+
+
+ lda = 1001;
+
+ /* this program was updated on 10/12/92 to correct a */
+ /* problem with the random number generator. The previous */
+ /* random number generator had a short period and produced */
+ /* singular matrices occasionally. */
+
+ n = 1000;
+ cray = .056f;
+ s_wsfe(&io___4);
+ e_wsfe();
+ /* Computing 3rd power */
+ d__1 = (real_type) n;
+ /* Computing 2nd power */
+ d__2 = (real_type) n;
+ ops = boost::lexical_cast<double>(real_type(d__1 * (d__1 * d__1) * 2. / 3. + d__2 * d__2 * 2.));
+
+ matgen_(a, &lda, &n, b, &norma);
+
+ /* ****************************************************************** */
+ /* ****************************************************************** */
+ /* you should replace the call to dgefa and dgesl */
+ /* by calls to your linear equation solver. */
+ /* ****************************************************************** */
+ /* ****************************************************************** */
+
+ t1 = second_();
+ dgefa_(a, &lda, &n, ipvt, &info);
+ time[0] = second_() - t1;
+ t1 = second_();
+ dgesl_(a, &lda, &n, ipvt, b, &c__0);
+ time[1] = second_() - t1;
+ total = time[0] + time[1];
+ /* ****************************************************************** */
+ /* ****************************************************************** */
+
+ /* compute a residual to verify results. */
+
+ i__1 = n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ x[i__ - 1] = b[i__ - 1];
+ /* L10: */
+ }
+ matgen_(a, &lda, &n, b, &norma);
+ i__1 = n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ b[i__ - 1] = -b[i__ - 1];
+ /* L20: */
+ }
+ dmxpy_(&n, b, &n, &lda, x, a);
+ resid = CAST_TO_RT(0);
+ normx = CAST_TO_RT(0);
+ i__1 = n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ /* Computing MAX */
+ d__2 = resid, d__3 = (d__1 = b[i__ - 1], abs(d__1));
+ resid = (max)(d__2,d__3);
+ /* Computing MAX */
+ d__2 = normx, d__3 = (d__1 = x[i__ - 1], abs(d__1));
+ normx = (max)(d__2,d__3);
+ /* L30: */
+ }
+ eps = epslon_(&c_b7);
+ residn = resid / (n * norma * normx * eps);
+ s_wsfe(&io___20);
+ e_wsfe();
+ s_wsfe(&io___21);
+ /*
+ do_fio(&c__1, (char *)&residn, (ftnlen)sizeof(real_type));
+ do_fio(&c__1, (char *)&resid, (ftnlen)sizeof(real_type));
+ do_fio(&c__1, (char *)&eps, (ftnlen)sizeof(real_type));
+ do_fio(&c__1, (char *)&x[0], (ftnlen)sizeof(real_type));
+ do_fio(&c__1, (char *)&x[n - 1], (ftnlen)sizeof(real_type));
+ */
+ std::cout << std::setw(12) << std::setprecision(5) << residn << " " << resid << " " << eps << " " << x[0] << " " << x[n-1] << std::endl;
+ e_wsfe();
+
+ s_wsfe(&io___22);
+ do_fio(&c__1, (char *)&n, (ftnlen)sizeof(integer));
+ e_wsfe();
+ s_wsfe(&io___23);
+ e_wsfe();
+
+ time[2] = total;
+ time[3] = ops / (total * 1e6);
+ time[4] = 2. / time[3];
+ time[5] = total / cray;
+ s_wsfe(&io___24);
+ do_fio(&c__1, (char *)&lda, (ftnlen)sizeof(integer));
+ e_wsfe();
+ s_wsfe(&io___25);
+ for (i__ = 1; i__ <= 6; ++i__) {
+ // do_fio(&c__1, (char *)&time[i__ - 1], (ftnlen)sizeof(real_type));
+ std::cout << std::setw(12) << std::setprecision(5) << time[i__ - 1];
+ }
+ e_wsfe();
+ s_wsle(&io___26);
+ do_lio(&c__9, &c__1, " end of tests -- this version dated 10/12/92", (
+ ftnlen)44);
+ e_wsle();
+
+ s_stop("", (ftnlen)0);
+ return 0;
+} /* MAIN__ */
+
+/* Subroutine */ int matgen_(real_type *a, integer *lda, integer *n,
+ real_type *b, real_type *norma)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+ real_type d__1, d__2;
+
+ /* Local variables */
+ static integer i__, j;
+ static integer init[4];
+
+
+ /* Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = 1 + a_dim1;
+ a -= a_offset;
+ --b;
+
+ /* Function Body */
+ init[0] = 1;
+ init[1] = 2;
+ init[2] = 3;
+ init[3] = 1325;
+ *norma = CAST_TO_RT(0);
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i__ = 1; i__ <= i__2; ++i__) {
+ a[i__ + j * a_dim1] = ran_(init) - .5f;
+ /* Computing MAX */
+ d__2 = (d__1 = a[i__ + j * a_dim1], abs(d__1));
+ *norma = (max)(d__2,*norma);
+ /* L20: */
+ }
+ /* L30: */
+ }
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ b[i__] = CAST_TO_RT(0);
+ /* L35: */
+ }
+ i__1 = *n;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n;
+ for (i__ = 1; i__ <= i__2; ++i__) {
+ b[i__] += a[i__ + j * a_dim1];
+ /* L40: */
+ }
+ /* L50: */
+ }
+ return 0;
+} /* matgen_ */
+
+/* Subroutine */ int dgefa_(real_type *a, integer *lda, integer *n, integer *
+ ipvt, integer *info)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2, i__3;
+
+ /* Local variables */
+ static integer j, k, l;
+ static real_type t;
+ static integer kp1, nm1;
+
+
+ /* dgefa factors a double precision matrix by gaussian elimination. */
+
+ /* dgefa is usually called by dgeco, but it can be called */
+ /* directly with a saving in time if rcond is not needed. */
+ /* (time for dgeco) = (1 + 9/n)*(time for dgefa) . */
+
+ /* on entry */
+
+ /* a double precision(lda, n) */
+ /* the matrix to be factored. */
+
+ /* lda integer */
+ /* the leading dimension of the array a . */
+
+ /* n integer */
+ /* the order of the matrix a . */
+
+ /* on return */
+
+ /* a an upper triangular matrix and the multipliers */
+ /* which were used to obtain it. */
+ /* the factorization can be written a = l*u where */
+ /* l is a product of permutation and unit lower */
+ /* triangular matrices and u is upper triangular. */
+
+ /* ipvt integer(n) */
+ /* an integer vector of pivot indices. */
+
+ /* info integer */
+ /* = 0 normal value. */
+ /* = k if u(k,k) .eq. 0.0 . this is not an error */
+ /* condition for this subroutine, but it does */
+ /* indicate that dgesl or dgedi will divide by zero */
+ /* if called. use rcond in dgeco for a reliable */
+ /* indication of singularity. */
+
+ /* linpack. this version dated 08/14/78 . */
+ /* cleve moler, university of new mexico, argonne national lab. */
+
+ /* subroutines and functions */
+
+ /* blas daxpy,dscal,idamax */
+
+ /* internal variables */
+
+
+
+ /* gaussian elimination with partial pivoting */
+
+ /* Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = 1 + a_dim1;
+ a -= a_offset;
+ --ipvt;
+
+ /* Function Body */
+ *info = 0;
+ nm1 = *n - 1;
+ if (nm1 < 1) {
+ goto L70;
+ }
+ i__1 = nm1;
+ for (k = 1; k <= i__1; ++k) {
+ kp1 = k + 1;
+
+ /* find l = pivot index */
+
+ i__2 = *n - k + 1;
+ l = idamax_(&i__2, &a[k + k * a_dim1], &c__1) + k - 1;
+ ipvt[k] = l;
+
+ /* zero pivot implies this column already triangularized */
+
+ if (a[l + k * a_dim1] == 0.) {
+ goto L40;
+ }
+
+ /* interchange if necessary */
+
+ if (l == k) {
+ goto L10;
+ }
+ t = a[l + k * a_dim1];
+ a[l + k * a_dim1] = a[k + k * a_dim1];
+ a[k + k * a_dim1] = t;
+L10:
+
+ /* compute multipliers */
+
+ t = -1. / a[k + k * a_dim1];
+ i__2 = *n - k;
+ dscal_(&i__2, &t, &a[k + 1 + k * a_dim1], &c__1);
+
+ /* row elimination with column indexing */
+
+ i__2 = *n;
+ for (j = kp1; j <= i__2; ++j) {
+ t = a[l + j * a_dim1];
+ if (l == k) {
+ goto L20;
+ }
+ a[l + j * a_dim1] = a[k + j * a_dim1];
+ a[k + j * a_dim1] = t;
+L20:
+ i__3 = *n - k;
+ daxpy_(&i__3, &t, &a[k + 1 + k * a_dim1], &c__1, &a[k + 1 + j *
+ a_dim1], &c__1);
+ /* L30: */
+ }
+ goto L50;
+L40:
+ *info = k;
+L50:
+ /* L60: */
+ ;
+ }
+L70:
+ ipvt[*n] = *n;
+ if (a[*n + *n * a_dim1] == 0.) {
+ *info = *n;
+ }
+ return 0;
+} /* dgefa_ */
+
+/* Subroutine */ int dgesl_(real_type *a, integer *lda, integer *n, integer *
+ ipvt, real_type *b, integer *job)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer k, l;
+ static real_type t;
+ static integer kb, nm1;
+
+
+ /* dgesl solves the double precision system */
+ /* a * x = b or trans(a) * x = b */
+ /* using the factors computed by dgeco or dgefa. */
+
+ /* on entry */
+
+ /* a double precision(lda, n) */
+ /* the output from dgeco or dgefa. */
+
+ /* lda integer */
+ /* the leading dimension of the array a . */
+
+ /* n integer */
+ /* the order of the matrix a . */
+
+ /* ipvt integer(n) */
+ /* the pivot vector from dgeco or dgefa. */
+
+ /* b double precision(n) */
+ /* the right hand side vector. */
+
+ /* job integer */
+ /* = 0 to solve a*x = b , */
+ /* = nonzero to solve trans(a)*x = b where */
+ /* trans(a) is the transpose. */
+
+ /* on return */
+
+ /* b the solution vector x . */
+
+ /* error condition */
+
+ /* a division by zero will occur if the input factor contains a */
+ /* zero on the diagonal. technically this indicates singularity */
+ /* but it is often caused by improper arguments or improper */
+ /* setting of lda . it will not occur if the subroutines are */
+ /* called correctly and if dgeco has set rcond .gt. 0.0 */
+ /* or dgefa has set info .eq. 0 . */
+
+ /* to compute inverse(a) * c where c is a matrix */
+ /* with p columns */
+ /* call dgeco(a,lda,n,ipvt,rcond,z) */
+ /* if (rcond is too small) go to ... */
+ /* do 10 j = 1, p */
+ /* call dgesl(a,lda,n,ipvt,c(1,j),0) */
+ /* 10 continue */
+
+ /* linpack. this version dated 08/14/78 . */
+ /* cleve moler, university of new mexico, argonne national lab. */
+
+ /* subroutines and functions */
+
+ /* blas daxpy,ddot */
+
+ /* internal variables */
+
+
+ /* Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = 1 + a_dim1;
+ a -= a_offset;
+ --ipvt;
+ --b;
+
+ /* Function Body */
+ nm1 = *n - 1;
+ if (*job != 0) {
+ goto L50;
+ }
+
+ /* job = 0 , solve a * x = b */
+ /* first solve l*y = b */
+
+ if (nm1 < 1) {
+ goto L30;
+ }
+ i__1 = nm1;
+ for (k = 1; k <= i__1; ++k) {
+ l = ipvt[k];
+ t = b[l];
+ if (l == k) {
+ goto L10;
+ }
+ b[l] = b[k];
+ b[k] = t;
+L10:
+ i__2 = *n - k;
+ daxpy_(&i__2, &t, &a[k + 1 + k * a_dim1], &c__1, &b[k + 1], &c__1);
+ /* L20: */
+ }
+L30:
+
+ /* now solve u*x = y */
+
+ i__1 = *n;
+ for (kb = 1; kb <= i__1; ++kb) {
+ k = *n + 1 - kb;
+ b[k] /= a[k + k * a_dim1];
+ t = -b[k];
+ i__2 = k - 1;
+ daxpy_(&i__2, &t, &a[k * a_dim1 + 1], &c__1, &b[1], &c__1);
+ /* L40: */
+ }
+ goto L100;
+L50:
+
+ /* job = nonzero, solve trans(a) * x = b */
+ /* first solve trans(u)*y = b */
+
+ i__1 = *n;
+ for (k = 1; k <= i__1; ++k) {
+ i__2 = k - 1;
+ t = ddot_(&i__2, &a[k * a_dim1 + 1], &c__1, &b[1], &c__1);
+ b[k] = (b[k] - t) / a[k + k * a_dim1];
+ /* L60: */
+ }
+
+ /* now solve trans(l)*x = y */
+
+ if (nm1 < 1) {
+ goto L90;
+ }
+ i__1 = nm1;
+ for (kb = 1; kb <= i__1; ++kb) {
+ k = *n - kb;
+ i__2 = *n - k;
+ b[k] += ddot_(&i__2, &a[k + 1 + k * a_dim1], &c__1, &b[k + 1], &c__1);
+ l = ipvt[k];
+ if (l == k) {
+ goto L70;
+ }
+ t = b[l];
+ b[l] = b[k];
+ b[k] = t;
+L70:
+ /* L80: */
+ ;
+ }
+L90:
+L100:
+ return 0;
+} /* dgesl_ */
+
+/* Subroutine */ int daxpy_(integer *n, real_type *da, real_type *dx,
+ integer *incx, real_type *dy, integer *incy)
+{
+ /* System generated locals */
+ integer i__1;
+
+ /* Local variables */
+ static integer i__, m, ix, iy, mp1;
+
+
+ /* constant times a vector plus a vector. */
+ /* uses unrolled loops for increments equal to one. */
+ /* jack dongarra, linpack, 3/11/78. */
+
+
+ /* Parameter adjustments */
+ --dy;
+ --dx;
+
+ /* Function Body */
+ if (*n <= 0) {
+ return 0;
+ }
+ if (*da == 0.) {
+ return 0;
+ }
+ if (*incx == 1 && *incy == 1) {
+ goto L20;
+ }
+
+ /* code for unequal increments or equal increments */
+ /* not equal to 1 */
+
+ ix = 1;
+ iy = 1;
+ if (*incx < 0) {
+ ix = (-(*n) + 1) * *incx + 1;
+ }
+ if (*incy < 0) {
+ iy = (-(*n) + 1) * *incy + 1;
+ }
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ dy[iy] += *da * dx[ix];
+ ix += *incx;
+ iy += *incy;
+ /* L10: */
+ }
+ return 0;
+
+ /* code for both increments equal to 1 */
+
+
+ /* clean-up loop */
+
+L20:
+ m = *n % 4;
+ if (m == 0) {
+ goto L40;
+ }
+ i__1 = m;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ dy[i__] += *da * dx[i__];
+ /* L30: */
+ }
+ if (*n < 4) {
+ return 0;
+ }
+L40:
+ mp1 = m + 1;
+ i__1 = *n;
+ for (i__ = mp1; i__ <= i__1; i__ += 4) {
+ dy[i__] += *da * dx[i__];
+ dy[i__ + 1] += *da * dx[i__ + 1];
+ dy[i__ + 2] += *da * dx[i__ + 2];
+ dy[i__ + 3] += *da * dx[i__ + 3];
+ /* L50: */
+ }
+ return 0;
+} /* daxpy_ */
+
+real_type ddot_(integer *n, real_type *dx, integer *incx, real_type *dy,
+ integer *incy)
+{
+ /* System generated locals */
+ integer i__1;
+ real_type ret_val;
+
+ /* Local variables */
+ static integer i__, m, ix, iy, mp1;
+ static real_type dtemp;
+
+
+ /* forms the dot product of two vectors. */
+ /* uses unrolled loops for increments equal to one. */
+ /* jack dongarra, linpack, 3/11/78. */
+
+
+ /* Parameter adjustments */
+ --dy;
+ --dx;
+
+ /* Function Body */
+ ret_val = CAST_TO_RT(0);
+ dtemp = CAST_TO_RT(0);
+ if (*n <= 0) {
+ return ret_val;
+ }
+ if (*incx == 1 && *incy == 1) {
+ goto L20;
+ }
+
+ /* code for unequal increments or equal increments */
+ /* not equal to 1 */
+
+ ix = 1;
+ iy = 1;
+ if (*incx < 0) {
+ ix = (-(*n) + 1) * *incx + 1;
+ }
+ if (*incy < 0) {
+ iy = (-(*n) + 1) * *incy + 1;
+ }
+ i__1 = *n;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ dtemp += dx[ix] * dy[iy];
+ ix += *incx;
+ iy += *incy;
+ /* L10: */
+ }
+ ret_val = dtemp;
+ return ret_val;
+
+ /* code for both increments equal to 1 */
+
+
+ /* clean-up loop */
+
+L20:
+ m = *n % 5;
+ if (m == 0) {
+ goto L40;
+ }
+ i__1 = m;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ dtemp += dx[i__] * dy[i__];
+ /* L30: */
+ }
+ if (*n < 5) {
+ goto L60;
+ }
+L40:
+ mp1 = m + 1;
+ i__1 = *n;
+ for (i__ = mp1; i__ <= i__1; i__ += 5) {
+ dtemp = dtemp + dx[i__] * dy[i__] + dx[i__ + 1] * dy[i__ + 1] + dx[
+ i__ + 2] * dy[i__ + 2] + dx[i__ + 3] * dy[i__ + 3] + dx[i__ +
+ 4] * dy[i__ + 4];
+ /* L50: */
+ }
+L60:
+ ret_val = dtemp;
+ return ret_val;
+} /* ddot_ */
+
+/* Subroutine */ int dscal_(integer *n, real_type *da, real_type *dx,
+ integer *incx)
+{
+ /* System generated locals */
+ integer i__1, i__2;
+
+ /* Local variables */
+ static integer i__, m, mp1, nincx;
+
+
+ /* scales a vector by a constant. */
+ /* uses unrolled loops for increment equal to one. */
+ /* jack dongarra, linpack, 3/11/78. */
+
+
+ /* Parameter adjustments */
+ --dx;
+
+ /* Function Body */
+ if (*n <= 0) {
+ return 0;
+ }
+ if (*incx == 1) {
+ goto L20;
+ }
+
+ /* code for increment not equal to 1 */
+
+ nincx = *n * *incx;
+ i__1 = nincx;
+ i__2 = *incx;
+ for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) {
+ dx[i__] = *da * dx[i__];
+ /* L10: */
+ }
+ return 0;
+
+ /* code for increment equal to 1 */
+
+
+ /* clean-up loop */
+
+L20:
+ m = *n % 5;
+ if (m == 0) {
+ goto L40;
+ }
+ i__2 = m;
+ for (i__ = 1; i__ <= i__2; ++i__) {
+ dx[i__] = *da * dx[i__];
+ /* L30: */
+ }
+ if (*n < 5) {
+ return 0;
+ }
+L40:
+ mp1 = m + 1;
+ i__2 = *n;
+ for (i__ = mp1; i__ <= i__2; i__ += 5) {
+ dx[i__] = *da * dx[i__];
+ dx[i__ + 1] = *da * dx[i__ + 1];
+ dx[i__ + 2] = *da * dx[i__ + 2];
+ dx[i__ + 3] = *da * dx[i__ + 3];
+ dx[i__ + 4] = *da * dx[i__ + 4];
+ /* L50: */
+ }
+ return 0;
+} /* dscal_ */
+
+integer idamax_(integer *n, real_type *dx, integer *incx)
+{
+ /* System generated locals */
+ integer ret_val, i__1;
+ real_type d__1;
+
+ /* Local variables */
+ static integer i__, ix;
+ static real_type dmax__;
+
+
+ /* finds the index of element having max. dabsolute value. */
+ /* jack dongarra, linpack, 3/11/78. */
+
+
+ /* Parameter adjustments */
+ --dx;
+
+ /* Function Body */
+ ret_val = 0;
+ if (*n < 1) {
+ return ret_val;
+ }
+ ret_val = 1;
+ if (*n == 1) {
+ return ret_val;
+ }
+ if (*incx == 1) {
+ goto L20;
+ }
+
+ /* code for increment not equal to 1 */
+
+ ix = 1;
+ dmax__ = abs(dx[1]);
+ ix += *incx;
+ i__1 = *n;
+ for (i__ = 2; i__ <= i__1; ++i__) {
+ if ((d__1 = dx[ix], abs(d__1)) <= dmax__) {
+ goto L5;
+ }
+ ret_val = i__;
+ dmax__ = (d__1 = dx[ix], abs(d__1));
+L5:
+ ix += *incx;
+ /* L10: */
+ }
+ return ret_val;
+
+ /* code for increment equal to 1 */
+
+L20:
+ dmax__ = abs(dx[1]);
+ i__1 = *n;
+ for (i__ = 2; i__ <= i__1; ++i__) {
+ if ((d__1 = dx[i__], abs(d__1)) <= dmax__) {
+ goto L30;
+ }
+ ret_val = i__;
+ dmax__ = (d__1 = dx[i__], abs(d__1));
+L30:
+ ;
+ }
+ return ret_val;
+} /* idamax_ */
+
+real_type epslon_(real_type *x)
+{
+#if defined(TEST_MPF_100) || defined(TEST_MPFR_100) || defined(TEST_GMPXX) || defined(TEST_MPFRXX)
+ return std::ldexp(1.0, 1 - ((100 + 1) * 1000L) / 301L);
+#elif defined(TEST_CPP_DEC_FLOAT_BN)
+ return std::pow(10.0, 1-std::numeric_limits<efx::cpp_dec_float_50>::digits10);
+#elif defined(NATIVE_FLOAT128)
+ return FLT128_EPSILON;
+#else
+ return CAST_TO_RT(std::numeric_limits<real_type>::epsilon());
+#endif
+} /* epslon_ */
+
+/* Subroutine */ int mm_(real_type *a, integer *lda, integer *n1, integer *
+ n3, real_type *b, integer *ldb, integer *n2, real_type *c__,
+ integer *ldc)
+{
+ /* System generated locals */
+ integer a_dim1, a_offset, b_dim1, b_offset, c_dim1, c_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer i__, j;
+
+
+ /* purpose: */
+ /* multiply matrix b times matrix c and store the result in matrix a. */
+
+ /* parameters: */
+
+ /* a double precision(lda,n3), matrix of n1 rows and n3 columns */
+
+ /* lda integer, leading dimension of array a */
+
+ /* n1 integer, number of rows in matrices a and b */
+
+ /* n3 integer, number of columns in matrices a and c */
+
+ /* b double precision(ldb,n2), matrix of n1 rows and n2 columns */
+
+ /* ldb integer, leading dimension of array b */
+
+ /* n2 integer, number of columns in matrix b, and number of rows in */
+ /* matrix c */
+
+ /* c double precision(ldc,n3), matrix of n2 rows and n3 columns */
+
+ /* ldc integer, leading dimension of array c */
+
+ /* ---------------------------------------------------------------------- */
+
+ /* Parameter adjustments */
+ a_dim1 = *lda;
+ a_offset = 1 + a_dim1;
+ a -= a_offset;
+ b_dim1 = *ldb;
+ b_offset = 1 + b_dim1;
+ b -= b_offset;
+ c_dim1 = *ldc;
+ c_offset = 1 + c_dim1;
+ c__ -= c_offset;
+
+ /* Function Body */
+ i__1 = *n3;
+ for (j = 1; j <= i__1; ++j) {
+ i__2 = *n1;
+ for (i__ = 1; i__ <= i__2; ++i__) {
+ a[i__ + j * a_dim1] = CAST_TO_RT(0);
+ /* L10: */
+ }
+ dmxpy_(n2, &a[j * a_dim1 + 1], n1, ldb, &c__[j * c_dim1 + 1], &b[
+ b_offset]);
+ /* L20: */
+ }
+
+ return 0;
+} /* mm_ */
+
+/* Subroutine */ int dmxpy_(integer *n1, real_type *y, integer *n2, integer *
+ ldm, real_type *x, real_type *m)
+{
+ /* System generated locals */
+ integer m_dim1, m_offset, i__1, i__2;
+
+ /* Local variables */
+ static integer i__, j, jmin;
+
+
+ /* purpose: */
+ /* multiply matrix m times vector x and add the result to vector y. */
+
+ /* parameters: */
+
+ /* n1 integer, number of elements in vector y, and number of rows in */
+ /* matrix m */
+
+ /* y double precision(n1), vector of length n1 to which is added */
+ /* the product m*x */
+
+ /* n2 integer, number of elements in vector x, and number of columns */
+ /* in matrix m */
+
+ /* ldm integer, leading dimension of array m */
+
+ /* x double precision(n2), vector of length n2 */
+
+ /* m double precision(ldm,n2), matrix of n1 rows and n2 columns */
+
+ /* ---------------------------------------------------------------------- */
+
+ /* cleanup odd vector */
+
+ /* Parameter adjustments */
+ --y;
+ m_dim1 = *ldm;
+ m_offset = 1 + m_dim1;
+ m -= m_offset;
+ --x;
+
+ /* Function Body */
+ j = *n2 % 2;
+ if (j >= 1) {
+ i__1 = *n1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ y[i__] += x[j] * m[i__ + j * m_dim1];
+ /* L10: */
+ }
+ }
+
+ /* cleanup odd group of two vectors */
+
+ j = *n2 % 4;
+ if (j >= 2) {
+ i__1 = *n1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ y[i__] = y[i__] + x[j - 1] * m[i__ + (j - 1) * m_dim1] + x[j] * m[
+ i__ + j * m_dim1];
+ /* L20: */
+ }
+ }
+
+ /* cleanup odd group of four vectors */
+
+ j = *n2 % 8;
+ if (j >= 4) {
+ i__1 = *n1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ y[i__] = y[i__] + x[j - 3] * m[i__ + (j - 3) * m_dim1] + x[j - 2]
+ * m[i__ + (j - 2) * m_dim1] + x[j - 1] * m[i__ + (j - 1) *
+ m_dim1] + x[j] * m[i__ + j * m_dim1];
+ /* L30: */
+ }
+ }
+
+ /* cleanup odd group of eight vectors */
+
+ j = *n2 % 16;
+ if (j >= 8) {
+ i__1 = *n1;
+ for (i__ = 1; i__ <= i__1; ++i__) {
+ y[i__] = y[i__] + x[j - 7] * m[i__ + (j - 7) * m_dim1] + x[j - 6]
+ * m[i__ + (j - 6) * m_dim1] + x[j - 5] * m[i__ + (j - 5) *
+ m_dim1] + x[j - 4] * m[i__ + (j - 4) * m_dim1] + x[j - 3]
+ * m[i__ + (j - 3) * m_dim1] + x[j - 2] * m[i__ + (j - 2)
+ * m_dim1] + x[j - 1] * m[i__ + (j - 1) * m_dim1] + x[j] *
+ m[i__ + j * m_dim1];
+ /* L40: */
+ }
+ }
+
+ /* main loop - groups of sixteen vectors */
+
+ jmin = j + 16;
+ i__1 = *n2;
+ for (j = jmin; j <= i__1; j += 16) {
+ i__2 = *n1;
+ for (i__ = 1; i__ <= i__2; ++i__) {
+ y[i__] = y[i__] + x[j - 15] * m[i__ + (j - 15) * m_dim1] + x[j -
+ 14] * m[i__ + (j - 14) * m_dim1] + x[j - 13] * m[i__ + (j
+ - 13) * m_dim1] + x[j - 12] * m[i__ + (j - 12) * m_dim1]
+ + x[j - 11] * m[i__ + (j - 11) * m_dim1] + x[j - 10] * m[
+ i__ + (j - 10) * m_dim1] + x[j - 9] * m[i__ + (j - 9) *
+ m_dim1] + x[j - 8] * m[i__ + (j - 8) * m_dim1] + x[j - 7]
+ * m[i__ + (j - 7) * m_dim1] + x[j - 6] * m[i__ + (j - 6) *
+ m_dim1] + x[j - 5] * m[i__ + (j - 5) * m_dim1] + x[j - 4]
+ * m[i__ + (j - 4) * m_dim1] + x[j - 3] * m[i__ + (j - 3)
+ * m_dim1] + x[j - 2] * m[i__ + (j - 2) * m_dim1] + x[j -
+ 1] * m[i__ + (j - 1) * m_dim1] + x[j] * m[i__ + j *
+ m_dim1];
+ /* L50: */
+ }
+ /* L60: */
+ }
+ return 0;
+} /* dmxpy_ */
+
+real_type ran_(integer *iseed)
+{
+ /* System generated locals */
+ real_type ret_val;
+
+ /* Local variables */
+ static integer it1, it2, it3, it4;
+
+
+ /* modified from the LAPACK auxiliary routine 10/12/92 JD */
+ /* -- LAPACK auxiliary routine (version 1.0) -- */
+ /* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., */
+ /* Courant Institute, Argonne National Lab, and Rice University */
+ /* February 29, 1992 */
+
+ /* .. Array Arguments .. */
+ /* .. */
+
+ /* Purpose */
+ /* ======= */
+
+ /* DLARAN returns a random double number from a uniform (0,1) */
+ /* distribution. */
+
+ /* Arguments */
+ /* ========= */
+
+ /* ISEED (input/output) INTEGER array, dimension (4) */
+ /* On entry, the seed of the random number generator; the array */
+ /* elements must be between 0 and 4095, and ISEED(4) must be */
+ /* odd. */
+ /* On exit, the seed is updated. */
+
+ /* Further Details */
+ /* =============== */
+
+ /* This routine uses a multiplicative congruential method with modulus */
+ /* 2**48 and multiplier 33952834046453 (see G.S.Fishman, */
+ /* 'Multiplicative congruential random number generators with modulus */
+ /* 2**b: an exhaustive analysis for b = 32 and a partial analysis for */
+ /* b = 48', Math. Comp. 189, pp 331-344, 1990). */
+
+ /* 48-bit integers are stored in 4 integer array elements with 12 bits */
+ /* per element. Hence the routine is portable across machines with */
+ /* integers of 32 bits or more. */
+
+ /* .. Parameters .. */
+ /* .. */
+ /* .. Local Scalars .. */
+ /* .. */
+ /* .. Intrinsic Functions .. */
+ /* .. */
+ /* .. Executable Statements .. */
+
+ /* multiply the seed by the multiplier modulo 2**48 */
+
+ /* Parameter adjustments */
+ --iseed;
+
+ /* Function Body */
+ it4 = iseed[4] * 2549;
+ it3 = it4 / 4096;
+ it4 -= it3 << 12;
+ it3 = it3 + iseed[3] * 2549 + iseed[4] * 2508;
+ it2 = it3 / 4096;
+ it3 -= it2 << 12;
+ it2 = it2 + iseed[2] * 2549 + iseed[3] * 2508 + iseed[4] * 322;
+ it1 = it2 / 4096;
+ it2 -= it1 << 12;
+ it1 = it1 + iseed[1] * 2549 + iseed[2] * 2508 + iseed[3] * 322 + iseed[4]
+ * 494;
+ it1 %= 4096;
+
+ /* return updated seed */
+
+ iseed[1] = it1;
+ iseed[2] = it2;
+ iseed[3] = it3;
+ iseed[4] = it4;
+
+ /* convert 48-bit integer to a double number in the interval (0,1) */
+
+ ret_val = ((real_type) it1 + ((real_type) it2 + ((real_type) it3 + (
+ real_type) it4 * 2.44140625e-4) * 2.44140625e-4) * 2.44140625e-4)
+ * 2.44140625e-4;
+ return ret_val;
+
+ /* End of RAN */
+
+} /* ran_ */
+
+/*
+
+Double results:
+~~~~~~~~~~~~~~
+
+norm. resid resid machep x(1) x(n)
+6.4915 7.207e-013 2.2204e-016 1 1
+
+
+
+times are reported for matrices of order 1000
+factor solve total mflops unit ratio
+times for array with leading dimension of1001
+1.443 0.003 1.446 462.43 0.004325 25.821
+
+
+mpf_class results:
+~~~~~~~~~~~~~~~~~~
+
+norm. resid resid machep x(1) x(n)
+3.6575e-05 5.2257e-103 2.8575e-101 1 1
+
+
+
+times are reported for matrices of order 1000
+factor solve total mflops unit ratio
+times for array with leading dimension of1001
+266.45 0.798 267.24 2.5021 0.79933 4772.2
+
+
+number<gmp_float<100> >:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ norm. resid resid machep x(1) x(n)
+ 0.36575e-4 0.52257e-102 0.28575e-100 0.1e1 0.1e1
+
+
+
+ times are reported for matrices of order 1000
+ factor solve total mflops unit ratio
+ times for array with leading dimension of1001
+ 279.96 0.84 280.8 2.3813 0.83988 5014.3
+
+boost::multiprecision::ef::cpp_dec_float_50:
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ norm. resid resid machep x(1) x(n)
+ 2.551330735e-16 1.275665107e-112 1e-99 1 1
+
+
+
+ times are reported for matrices of order 1000
+ factor solve total mflops unit ratio
+ times for array with leading dimension of1001
+ 363.89 1.074 364.97 1.8321 1.0916 6517.3
+*/
diff --git a/libs/multiprecision/performance/miller_rabin_performance.cpp b/libs/multiprecision/performance/miller_rabin_performance.cpp
new file mode 100644
index 0000000000..e4ca6a500a
--- /dev/null
+++ b/libs/multiprecision/performance/miller_rabin_performance.cpp
@@ -0,0 +1,167 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+#define BOOST_CHRONO_HEADER_ONLY
+
+#if !defined(TEST_MPZ) && !defined(TEST_TOMMATH) && !defined(TEST_CPP_INT)
+# define TEST_MPZ
+# define TEST_TOMMATH
+# define TEST_CPP_INT
+#endif
+
+#ifdef TEST_MPZ
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_TOMMATH
+#include <boost/multiprecision/tommath.hpp>
+#endif
+#ifdef TEST_CPP_INT
+#include <boost/multiprecision/cpp_int.hpp>
+#endif
+#include <boost/multiprecision/miller_rabin.hpp>
+#include <boost/chrono.hpp>
+#include <map>
+
+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;
+};
+
+unsigned allocation_count = 0;
+
+void *(*alloc_func_ptr) (size_t);
+void *(*realloc_func_ptr) (void *, size_t, size_t);
+void (*free_func_ptr) (void *, size_t);
+
+void *alloc_func(size_t n)
+{
+ ++allocation_count;
+ return (*alloc_func_ptr)(n);
+}
+
+void free_func(void * p, size_t n)
+{
+ (*free_func_ptr)(p, n);
+}
+
+void * realloc_func(void * p, size_t old, size_t n)
+{
+ ++allocation_count;
+ return (*realloc_func_ptr)(p, old, n);
+}
+
+#ifdef TEST_MPZ
+boost::chrono::duration<double> test_miller_rabin_gmp()
+{
+ using namespace boost::random;
+ using namespace boost::multiprecision;
+
+ stopwatch<boost::chrono::high_resolution_clock> c;
+
+ independent_bits_engine<mt11213b, 256, mpz_int> gen;
+
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ mpz_int n = gen();
+ mpz_probab_prime_p(n.backend().data(), 25);
+ }
+ return c.elapsed();
+}
+#endif
+
+std::map<std::string, double> results;
+double min_time = (std::numeric_limits<double>::max)();
+
+template <class IntType>
+boost::chrono::duration<double> test_miller_rabin(const char* name)
+{
+ using namespace boost::random;
+
+ stopwatch<boost::chrono::high_resolution_clock> c;
+
+ independent_bits_engine<mt11213b, 256, IntType> gen;
+ //
+ // We must use a different generator for the tests and number generation, otherwise
+ // we get false positives.
+ //
+ mt19937 gen2;
+ unsigned result_count = 0;
+
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ IntType n = gen();
+ if(boost::multiprecision::miller_rabin_test(n, 25, gen2))
+ ++result_count;
+ }
+ boost::chrono::duration<double> t = c.elapsed();
+ double d = t.count();
+ if(d < min_time)
+ min_time = d;
+ results[name] = d;
+ std::cout << "Time for " << std::setw(30) << std::left << name << " = " << d << std::endl;
+ std::cout << "Number of primes found = " << result_count << std::endl;
+ return t;
+}
+
+void generate_quickbook()
+{
+ std::cout << "[table\n[[Integer Type][Relative Performance (Actual time in parenthesis)]]\n";
+
+ std::map<std::string, double>::const_iterator i(results.begin()), j(results.end());
+
+ while(i != j)
+ {
+ double rel = i->second / min_time;
+ std::cout << "[[" << i->first << "][" << rel << "(" << i->second << "s)]]\n";
+ ++i;
+ }
+
+ std::cout << "]\n";
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+#ifdef TEST_CPP_INT
+ test_miller_rabin<number<cpp_int_backend<>, et_off> >("cpp_int (no Expression templates)");
+ test_miller_rabin<cpp_int>("cpp_int");
+ test_miller_rabin<number<cpp_int_backend<128> > >("cpp_int (128-bit cache)");
+ test_miller_rabin<number<cpp_int_backend<256> > >("cpp_int (256-bit cache)");
+ test_miller_rabin<number<cpp_int_backend<512> > >("cpp_int (512-bit cache)");
+ test_miller_rabin<number<cpp_int_backend<1024> > >("cpp_int (1024-bit cache)");
+ test_miller_rabin<int1024_t>("int1024_t");
+ test_miller_rabin<checked_int1024_t>("checked_int1024_t");
+#endif
+#ifdef TEST_MPZ
+ test_miller_rabin<number<gmp_int, et_off> >("mpz_int (no Expression templates)");
+ test_miller_rabin<mpz_int>("mpz_int");
+ std::cout << "Time for mpz_int (native Miller Rabin Test) = " << test_miller_rabin_gmp() << std::endl;
+#endif
+#ifdef TEST_TOMMATH
+ test_miller_rabin<number<boost::multiprecision::tommath_int, et_off> >("tom_int (no Expression templates)");
+ test_miller_rabin<boost::multiprecision::tom_int>("tom_int");
+#endif
+
+ generate_quickbook();
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/performance/performance_test-gcc-linux.log b/libs/multiprecision/performance/performance_test-gcc-linux.log
new file mode 100644
index 0000000000..83b150044c
--- /dev/null
+++ b/libs/multiprecision/performance/performance_test-gcc-linux.log
@@ -0,0 +1,718 @@
+gmp_float 50 + 0.0180885
+gmp_float 50 - 0.0227712
+gmp_float 50 * 0.0567584
+gmp_float 50 / 0.289062
+gmp_float 50 str 0.00354863
+gmp_float 50 +(int)0.0129337
+gmp_float 50 -(int)0.0256267
+gmp_float 50 *(int)0.0197258
+gmp_float 50 /(int)0.087785
+gmp_float 100 + 0.0196977
+gmp_float 100 - 0.024745
+gmp_float 100 * 0.0972
+gmp_float 100 / 0.393792
+gmp_float 100 str 0.00528245
+gmp_float 100 +(int)0.0154802
+gmp_float 100 -(int)0.0242376
+gmp_float 100 *(int)0.0251239
+gmp_float 100 /(int)0.100588
+gmp_float 500 + 0.034133
+gmp_float 500 - 0.0411447
+gmp_float 500 * 0.938779
+gmp_float 500 / 1.5973
+gmp_float 500 str 0.0406575
+gmp_float 500 +(int)0.0220839
+gmp_float 500 -(int)0.0310849
+gmp_float 500 *(int)0.046899
+gmp_float 500 /(int)0.240511
+gmp_int 128 + 0.0236625
+gmp_int 128 - 0.0255431
+gmp_int 128 * 0.0164612
+gmp_int 128 / 0.20205
+gmp_int 128 str 0.000397397
+gmp_int 128 +(int)0.00907029
+gmp_int 128 -(int)0.0120936
+gmp_int 128 *(int)0.0139764
+gmp_int 128 /(int)0.061181
+gmp_int 128 % 0.167724
+gmp_int 128 | 0.0126627
+gmp_int 128 & 0.0129377
+gmp_int 128 ^ 0.0136018
+gmp_int 128 << 0.0109566
+gmp_int 128 >> 0.0107283
+gmp_int 128 %(int)0.0408971
+gmp_int 128 |(int)0.0463637
+gmp_int 128 &(int)0.0502028
+gmp_int 128 ^(int)0.047593
+gmp_int 128 gcd 0.452707
+gmp_int 256 + 0.0257277
+gmp_int 256 - 0.0314085
+gmp_int 256 * 0.0495293
+gmp_int 256 / 0.242695
+gmp_int 256 str 0.000617745
+gmp_int 256 +(int)0.0129046
+gmp_int 256 -(int)0.0163165
+gmp_int 256 *(int)0.0153128
+gmp_int 256 /(int)0.0730963
+gmp_int 256 % 0.203102
+gmp_int 256 | 0.0149383
+gmp_int 256 & 0.0170717
+gmp_int 256 ^ 0.0160796
+gmp_int 256 << 0.0146023
+gmp_int 256 >> 0.010293
+gmp_int 256 %(int)0.0525884
+gmp_int 256 |(int)0.0501017
+gmp_int 256 &(int)0.0508389
+gmp_int 256 ^(int)0.0498771
+gmp_int 256 gcd 2.17179
+gmp_int 512 + 0.0283556
+gmp_int 512 - 0.0398509
+gmp_int 512 * 0.104633
+gmp_int 512 / 0.294206
+gmp_int 512 str 0.00125749
+gmp_int 512 +(int)0.0156938
+gmp_int 512 -(int)0.0204795
+gmp_int 512 *(int)0.0190714
+gmp_int 512 /(int)0.09638
+gmp_int 512 % 0.23687
+gmp_int 512 | 0.0244134
+gmp_int 512 & 0.0209509
+gmp_int 512 ^ 0.0266707
+gmp_int 512 << 0.0178981
+gmp_int 512 >> 0.0122496
+gmp_int 512 %(int)0.0655264
+gmp_int 512 |(int)0.0536497
+gmp_int 512 &(int)0.0532932
+gmp_int 512 ^(int)0.0540655
+gmp_int 512 gcd 4.86569
+gmp_int 1024 + 0.0417292
+gmp_int 1024 - 0.0504965
+gmp_int 1024 * 0.330741
+gmp_int 1024 / 0.376529
+gmp_int 1024 str 0.00295526
+gmp_int 1024 +(int)0.0258726
+gmp_int 1024 -(int)0.0235972
+gmp_int 1024 *(int)0.0326542
+gmp_int 1024 /(int)0.148103
+gmp_int 1024 % 0.301177
+gmp_int 1024 | 0.0262977
+gmp_int 1024 & 0.0235786
+gmp_int 1024 ^ 0.0254182
+gmp_int 1024 << 0.0206225
+gmp_int 1024 >> 0.012848
+gmp_int 1024 %(int)0.0765616
+gmp_int 1024 |(int)0.0495613
+gmp_int 1024 &(int)0.0512979
+gmp_int 1024 ^(int)0.0491785
+gmp_int 1024 gcd 10.2899
+cpp_int 128 + 0.0226262
+cpp_int 128 - 0.0256171
+cpp_int 128 * 0.0363846
+cpp_int 128 / 0.227187
+cpp_int 128 str 0.000703371
+cpp_int 128 +(int)0.0156956
+cpp_int 128 -(int)0.0122229
+cpp_int 128 *(int)0.0257193
+cpp_int 128 /(int)0.129609
+cpp_int 128 % 0.226534
+cpp_int 128 | 0.0242976
+cpp_int 128 & 0.0244482
+cpp_int 128 ^ 0.0243197
+cpp_int 128 << 0.0182175
+cpp_int 128 >> 0.0215535
+cpp_int 128 %(int)0.181554
+cpp_int 128 |(int)0.0454215
+cpp_int 128 &(int)0.0426893
+cpp_int 128 ^(int)0.0404509
+cpp_int 128 gcd 4.16823
+cpp_int 256 + 0.0275581
+cpp_int 256 - 0.0305114
+cpp_int 256 * 0.100083
+cpp_int 256 / 0.467116
+cpp_int 256 str 0.00181769
+cpp_int 256 +(int)0.017033
+cpp_int 256 -(int)0.0143035
+cpp_int 256 *(int)0.0294836
+cpp_int 256 /(int)0.303922
+cpp_int 256 % 0.435207
+cpp_int 256 | 0.0281237
+cpp_int 256 & 0.028049
+cpp_int 256 ^ 0.0280192
+cpp_int 256 << 0.0210768
+cpp_int 256 >> 0.0175781
+cpp_int 256 %(int)0.279274
+cpp_int 256 |(int)0.0323883
+cpp_int 256 &(int)0.0338674
+cpp_int 256 ^(int)0.0299941
+cpp_int 256 gcd 8.51244
+cpp_int 512 + 0.033691
+cpp_int 512 - 0.0422701
+cpp_int 512 * 0.343683
+cpp_int 512 / 0.755608
+cpp_int 512 str 0.00434022
+cpp_int 512 +(int)0.0196755
+cpp_int 512 -(int)0.0171212
+cpp_int 512 *(int)0.039305
+cpp_int 512 /(int)0.535727
+cpp_int 512 % 0.719958
+cpp_int 512 | 0.0339623
+cpp_int 512 & 0.0342017
+cpp_int 512 ^ 0.033929
+cpp_int 512 << 0.0269161
+cpp_int 512 >> 0.0216914
+cpp_int 512 %(int)0.53345
+cpp_int 512 |(int)0.0324562
+cpp_int 512 &(int)0.0424884
+cpp_int 512 ^(int)0.0323887
+cpp_int 512 gcd 19.489
+cpp_int 1024 + 0.0456764
+cpp_int 1024 - 0.0574919
+cpp_int 1024 * 1.28548
+cpp_int 1024 / 1.30086
+cpp_int 1024 str 0.0122363
+cpp_int 1024 +(int)0.0241476
+cpp_int 1024 -(int)0.0212992
+cpp_int 1024 *(int)0.0540818
+cpp_int 1024 /(int)1.00179
+cpp_int 1024 % 1.27181
+cpp_int 1024 | 0.0457886
+cpp_int 1024 & 0.0456006
+cpp_int 1024 ^ 0.0456494
+cpp_int 1024 << 0.0394128
+cpp_int 1024 >> 0.0294462
+cpp_int 1024 %(int)0.962651
+cpp_int 1024 |(int)0.0372077
+cpp_int 1024 &(int)0.0577198
+cpp_int 1024 ^(int)0.0372218
+cpp_int 1024 gcd 47.7651
+cpp_int(fixed) 128 + 0.0183948
+cpp_int(fixed) 128 - 0.0182905
+cpp_int(fixed) 128 * 0.0201727
+cpp_int(fixed) 128 / 0.206852
+cpp_int(fixed) 128 str 0.000630107
+cpp_int(fixed) 128 +(int)0.00967714
+cpp_int(fixed) 128 -(int)0.00810627
+cpp_int(fixed) 128 *(int)0.0183201
+cpp_int(fixed) 128 /(int)0.111309
+cpp_int(fixed) 128 % 0.204164
+cpp_int(fixed) 128 | 0.0136789
+cpp_int(fixed) 128 & 0.0143848
+cpp_int(fixed) 128 ^ 0.0137773
+cpp_int(fixed) 128 << 0.0131154
+cpp_int(fixed) 128 >> 0.00912176
+cpp_int(fixed) 128 %(int)0.115583
+cpp_int(fixed) 128 |(int)0.0164462
+cpp_int(fixed) 128 &(int)0.0169816
+cpp_int(fixed) 128 ^(int)0.014607
+cpp_int(fixed) 128 gcd 2.87326
+cpp_int(fixed) 256 + 0.0217614
+cpp_int(fixed) 256 - 0.0208437
+cpp_int(fixed) 256 * 0.0385279
+cpp_int(fixed) 256 / 0.321272
+cpp_int(fixed) 256 str 0.00149991
+cpp_int(fixed) 256 +(int)0.0102395
+cpp_int(fixed) 256 -(int)0.00923316
+cpp_int(fixed) 256 *(int)0.021549
+cpp_int(fixed) 256 /(int)0.219146
+cpp_int(fixed) 256 % 0.321039
+cpp_int(fixed) 256 | 0.0154596
+cpp_int(fixed) 256 & 0.0156443
+cpp_int(fixed) 256 ^ 0.015493
+cpp_int(fixed) 256 << 0.0169546
+cpp_int(fixed) 256 >> 0.0114138
+cpp_int(fixed) 256 %(int)0.238857
+cpp_int(fixed) 256 |(int)0.015725
+cpp_int(fixed) 256 &(int)0.021641
+cpp_int(fixed) 256 ^(int)0.0163443
+cpp_int(fixed) 256 gcd 6.68597
+cpp_int(fixed) 512 + 0.0284799
+cpp_int(fixed) 512 - 0.028304
+cpp_int(fixed) 512 * 0.119904
+cpp_int(fixed) 512 / 0.616699
+cpp_int(fixed) 512 str 0.00415653
+cpp_int(fixed) 512 +(int)0.0122821
+cpp_int(fixed) 512 -(int)0.0110103
+cpp_int(fixed) 512 *(int)0.0283635
+cpp_int(fixed) 512 /(int)0.451373
+cpp_int(fixed) 512 % 0.620217
+cpp_int(fixed) 512 | 0.0189862
+cpp_int(fixed) 512 & 0.0192657
+cpp_int(fixed) 512 ^ 0.018973
+cpp_int(fixed) 512 << 0.0188263
+cpp_int(fixed) 512 >> 0.0152103
+cpp_int(fixed) 512 %(int)0.491398
+cpp_int(fixed) 512 |(int)0.0182191
+cpp_int(fixed) 512 &(int)0.0277722
+cpp_int(fixed) 512 ^(int)0.0182565
+cpp_int(fixed) 512 gcd 16.1788
+cpp_int(fixed) 1024 + 0.0396571
+cpp_int(fixed) 1024 - 0.0413187
+cpp_int(fixed) 1024 * 0.371065
+cpp_int(fixed) 1024 / 1.09072
+cpp_int(fixed) 1024 str 0.011546
+cpp_int(fixed) 1024 +(int)0.0254102
+cpp_int(fixed) 1024 -(int)0.020939
+cpp_int(fixed) 1024 *(int)0.0494233
+cpp_int(fixed) 1024 /(int)0.870306
+cpp_int(fixed) 1024 % 1.09888
+cpp_int(fixed) 1024 | 0.0393824
+cpp_int(fixed) 1024 & 0.0397966
+cpp_int(fixed) 1024 ^ 0.0394082
+cpp_int(fixed) 1024 << 0.0392477
+cpp_int(fixed) 1024 >> 0.0214742
+cpp_int(fixed) 1024 %(int)0.941513
+cpp_int(fixed) 1024 |(int)0.0304613
+cpp_int(fixed) 1024 &(int)0.0497983
+cpp_int(fixed) 1024 ^(int)0.0333848
+cpp_int(fixed) 1024 gcd 41.9178
+cpp_rational 128 + 8.33358
+cpp_rational 128 - 8.3543
+cpp_rational 128 * 15.3196
+cpp_rational 128 / 31.794
+cpp_rational 128 str 0.00980984
+cpp_rational 128 +(int)1.14042
+cpp_rational 128 -(int)1.13947
+cpp_rational 128 *(int)1.3425
+cpp_rational 128 /(int)1.35276
+cpp_rational 256 + 24.5753
+cpp_rational 256 - 24.3831
+cpp_rational 256 * 45.9283
+cpp_rational 256 / 80.7871
+cpp_rational 256 str 0.0288878
+cpp_rational 256 +(int)1.54697
+cpp_rational 256 -(int)1.55711
+cpp_rational 256 *(int)2.05921
+cpp_rational 256 /(int)2.12933
+cpp_rational 512 + 58.1983
+cpp_rational 512 - 58.3044
+cpp_rational 512 * 111.528
+cpp_rational 512 / 184.73
+cpp_rational 512 str 0.067039
+cpp_rational 512 +(int)1.83113
+cpp_rational 512 -(int)1.82889
+cpp_rational 512 *(int)2.75206
+cpp_rational 512 /(int)2.75885
+cpp_rational 1024 + 139.884
+cpp_rational 1024 - 139.665
+cpp_rational 1024 * 270.253
+cpp_rational 1024 / 436.471
+cpp_rational 1024 str 0.165057
+cpp_rational 1024 +(int)2.65768
+cpp_rational 1024 -(int)2.68279
+cpp_rational 1024 *(int)4.26866
+cpp_rational 1024 /(int)4.27228
+mpq_rational 128 + 0.518878
+mpq_rational 128 - 0.520249
+mpq_rational 128 * 0.940549
+mpq_rational 128 / 2.63335
+mpq_rational 128 str 0.000732008
+mpq_rational 128 +(int)0.145745
+mpq_rational 128 -(int)0.142505
+mpq_rational 128 *(int)0.173305
+mpq_rational 128 /(int)0.178914
+mpq_rational 256 + 2.2747
+mpq_rational 256 - 2.27886
+mpq_rational 256 * 4.27402
+mpq_rational 256 / 8.07149
+mpq_rational 256 str 0.00123256
+mpq_rational 256 +(int)0.164417
+mpq_rational 256 -(int)0.161741
+mpq_rational 256 *(int)0.193095
+mpq_rational 256 /(int)0.202255
+mpq_rational 512 + 5.09463
+mpq_rational 512 - 5.09757
+mpq_rational 512 * 9.6481
+mpq_rational 512 / 16.9064
+mpq_rational 512 str 0.00244388
+mpq_rational 512 +(int)0.202901
+mpq_rational 512 -(int)0.200644
+mpq_rational 512 *(int)0.248942
+mpq_rational 512 /(int)0.251928
+mpq_rational 1024 + 11.2492
+mpq_rational 1024 - 11.2528
+mpq_rational 1024 * 21.0227
+mpq_rational 1024 / 35.7647
+mpq_rational 1024 str 0.00559869
+mpq_rational 1024 +(int)0.287349
+mpq_rational 1024 -(int)0.28136
+mpq_rational 1024 *(int)0.337805
+mpq_rational 1024 /(int)0.351164
+tommath_int 128 + 0.0169999
+tommath_int 128 - 0.025088
+tommath_int 128 * 0.0608098
+tommath_int 128 / 1.14807
+tommath_int 128 str 0.00864677
+tommath_int 128 +(int)0.170239
+tommath_int 128 -(int)0.169805
+tommath_int 128 *(int)0.18998
+tommath_int 128 /(int)0.936106
+tommath_int 128 % 1.10993
+tommath_int 128 | 0.0742258
+tommath_int 128 & 0.0747022
+tommath_int 128 ^ 0.0734074
+tommath_int 128 << 0.0316344
+tommath_int 128 >> 0.139155
+tommath_int 128 %(int)0.871093
+tommath_int 128 |(int)0.249135
+tommath_int 128 &(int)0.224394
+tommath_int 128 ^(int)0.248407
+tommath_int 128 gcd 7.6073
+tommath_int 256 + 0.0191462
+tommath_int 256 - 0.0267191
+tommath_int 256 * 0.0843842
+tommath_int 256 / 1.34052
+tommath_int 256 str 0.0212684
+tommath_int 256 +(int)0.173633
+tommath_int 256 -(int)0.173084
+tommath_int 256 *(int)0.20074
+tommath_int 256 /(int)1.17192
+tommath_int 256 % 1.33781
+tommath_int 256 | 0.0740269
+tommath_int 256 & 0.0747001
+tommath_int 256 ^ 0.0741847
+tommath_int 256 << 0.0379471
+tommath_int 256 >> 0.14164
+tommath_int 256 %(int)1.52193
+tommath_int 256 |(int)0.251418
+tommath_int 256 &(int)0.230435
+tommath_int 256 ^(int)0.249516
+tommath_int 256 gcd 15.8851
+tommath_int 512 + 0.0241933
+tommath_int 512 - 0.032154
+tommath_int 512 * 0.195855
+tommath_int 512 / 2.061
+tommath_int 512 str 0.0827649
+tommath_int 512 +(int)0.25223
+tommath_int 512 -(int)0.25482
+tommath_int 512 *(int)0.305608
+tommath_int 512 /(int)1.76155
+tommath_int 512 % 1.97453
+tommath_int 512 | 0.0795209
+tommath_int 512 & 0.0815029
+tommath_int 512 ^ 0.0793004
+tommath_int 512 << 0.0449753
+tommath_int 512 >> 0.149597
+tommath_int 512 %(int)1.74258
+tommath_int 512 |(int)0.253519
+tommath_int 512 &(int)0.235246
+tommath_int 512 ^(int)0.261762
+tommath_int 512 gcd 33.8904
+tommath_int 1024 + 0.0356467
+tommath_int 1024 - 0.0426379
+tommath_int 1024 * 0.563154
+tommath_int 1024 / 3.3106
+tommath_int 1024 str 0.200351
+tommath_int 1024 +(int)0.183982
+tommath_int 1024 -(int)0.182348
+tommath_int 1024 *(int)0.265242
+tommath_int 1024 /(int)2.99248
+tommath_int 1024 % 3.36442
+tommath_int 1024 | 0.0935681
+tommath_int 1024 & 0.0990244
+tommath_int 1024 ^ 0.0948247
+tommath_int 1024 << 0.0671463
+tommath_int 1024 >> 0.167341
+tommath_int 1024 %(int)2.8911
+tommath_int 1024 |(int)0.26358
+tommath_int 1024 &(int)0.244976
+tommath_int 1024 ^(int)0.261357
+tommath_int 1024 gcd 67.1657
+cpp_dec_float 50 + 0.0139248
+cpp_dec_float 50 - 0.0142418
+cpp_dec_float 50 * 0.118247
+cpp_dec_float 50 / 1.82747
+cpp_dec_float 50 str 0.00932849
+cpp_dec_float 50 +(int)0.0253923
+cpp_dec_float 50 -(int)0.0248418
+cpp_dec_float 50 *(int)0.0371704
+cpp_dec_float 50 /(int)0.199883
+cpp_dec_float 100 + 0.0171021
+cpp_dec_float 100 - 0.0176287
+cpp_dec_float 100 * 0.237033
+cpp_dec_float 100 / 3.63766
+cpp_dec_float 100 str 0.0201057
+cpp_dec_float 100 +(int)0.0330663
+cpp_dec_float 100 -(int)0.0332922
+cpp_dec_float 100 *(int)0.0606472
+cpp_dec_float 100 /(int)0.343778
+cpp_dec_float 500 + 0.043194
+cpp_dec_float 500 - 0.0443422
+cpp_dec_float 500 * 2.12299
+cpp_dec_float 500 / 25.7245
+cpp_dec_float 500 str 0.0655127
+cpp_dec_float 500 +(int)0.0706977
+cpp_dec_float 500 -(int)0.0727089
+cpp_dec_float 500 *(int)0.239796
+cpp_dec_float 500 /(int)1.39609
+mpfr_float 50 + 0.019179
+mpfr_float 50 - 0.0225632
+mpfr_float 50 * 0.0588765
+mpfr_float 50 / 0.317276
+mpfr_float 50 str 0.00725414
+mpfr_float 50 +(int)0.0286079
+mpfr_float 50 -(int)0.0465151
+mpfr_float 50 *(int)0.0362579
+mpfr_float 50 /(int)0.0888645
+mpfr_float 100 + 0.0210236
+mpfr_float 100 - 0.0250703
+mpfr_float 100 * 0.0946262
+mpfr_float 100 / 0.456375
+mpfr_float 100 str 0.00900848
+mpfr_float 100 +(int)0.0320443
+mpfr_float 100 -(int)0.0487733
+mpfr_float 100 *(int)0.0437034
+mpfr_float 100 /(int)0.154203
+mpfr_float 500 + 0.033691
+mpfr_float 500 - 0.0371954
+mpfr_float 500 * 0.851721
+mpfr_float 500 / 2.7946
+mpfr_float 500 str 0.0342011
+mpfr_float 500 +(int)0.0414774
+mpfr_float 500 -(int)0.0616173
+mpfr_float 500 *(int)0.0826485
+mpfr_float 500 /(int)0.254227
+[section:float_performance Float Type Perfomance]
+[table Operator *
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.08334 (0.118247s)][2.50494 (0.237033s)][2.49259 (2.12299s)]]
+[[gmp_float][[*1] (0.0567584s)][1.0272 (0.0972s)][1.10221 (0.938779s)]]
+[[mpfr_float][1.03732 (0.0588765s)][[*1] (0.0946262s)][[*1] (0.851721s)]]
+]
+[table Operator *(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.88436 (0.0371704s)][2.41392 (0.0606472s)][5.11303 (0.239796s)]]
+[[gmp_float][[*1] (0.0197258s)][[*1] (0.0251239s)][[*1] (0.046899s)]]
+[[mpfr_float][1.8381 (0.0362579s)][1.73951 (0.0437034s)][1.76227 (0.0826485s)]]
+]
+[table Operator +
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0139248s)][[*1] (0.0171021s)][1.28206 (0.043194s)]]
+[[gmp_float][1.29901 (0.0180885s)][1.15177 (0.0196977s)][1.01312 (0.034133s)]]
+[[mpfr_float][1.37732 (0.019179s)][1.2293 (0.0210236s)][[*1] (0.033691s)]]
+]
+[table Operator +(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.96327 (0.0253923s)][2.13604 (0.0330663s)][3.20133 (0.0706977s)]]
+[[gmp_float][[*1] (0.0129337s)][[*1] (0.0154802s)][[*1] (0.0220839s)]]
+[[mpfr_float][2.21189 (0.0286079s)][2.07002 (0.0320443s)][1.87818 (0.0414774s)]]
+]
+[table Operator -
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0142418s)][[*1] (0.0176287s)][1.19214 (0.0443422s)]]
+[[gmp_float][1.5989 (0.0227712s)][1.40368 (0.024745s)][1.10618 (0.0411447s)]]
+[[mpfr_float][1.5843 (0.0225632s)][1.42213 (0.0250703s)][[*1] (0.0371954s)]]
+]
+[table Operator -(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0248418s)][1.37357 (0.0332922s)][2.33904 (0.0727089s)]]
+[[gmp_float][1.03159 (0.0256267s)][[*1] (0.0242376s)][[*1] (0.0310849s)]]
+[[mpfr_float][1.87245 (0.0465151s)][2.0123 (0.0487733s)][1.98223 (0.0616173s)]]
+]
+[table Operator /
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][6.32206 (1.82747s)][9.23752 (3.63766s)][16.1049 (25.7245s)]]
+[[gmp_float][[*1] (0.289062s)][[*1] (0.393792s)][[*1] (1.5973s)]]
+[[mpfr_float][1.09761 (0.317276s)][1.15892 (0.456375s)][1.74957 (2.7946s)]]
+]
+[table Operator /(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.27696 (0.199883s)][3.41769 (0.343778s)][5.8047 (1.39609s)]]
+[[gmp_float][[*1] (0.087785s)][[*1] (0.100588s)][[*1] (0.240511s)]]
+[[mpfr_float][1.0123 (0.0888645s)][1.53302 (0.154203s)][1.05703 (0.254227s)]]
+]
+[table Operator str
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.62876 (0.00932849s)][3.80613 (0.0201057s)][1.91552 (0.0655127s)]]
+[[gmp_float][[*1] (0.00354863s)][[*1] (0.00528245s)][1.18878 (0.0406575s)]]
+[[mpfr_float][2.04421 (0.00725414s)][1.70536 (0.00900848s)][[*1] (0.0342011s)]]
+]
+[endsect]
+[section:integer_performance Integer Type Perfomance]
+[table Operator %
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.35064 (0.226534s)][2.1428 (0.435207s)][3.03946 (0.719958s)][4.22281 (1.27181s)]]
+[[cpp_int(fixed)][1.21726 (0.204164s)][1.58068 (0.321039s)][2.61838 (0.620217s)][3.6486 (1.09888s)]]
+[[gmp_int][[*1] (0.167724s)][[*1] (0.203102s)][[*1] (0.23687s)][[*1] (0.301177s)]]
+[[tommath_int][6.61759 (1.10993s)][6.58689 (1.33781s)][8.33593 (1.97453s)][11.1709 (3.36442s)]]
+]
+[table Operator %(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][4.43928 (0.181554s)][5.31056 (0.279274s)][8.141 (0.53345s)][12.5735 (0.962651s)]]
+[[cpp_int(fixed)][2.82619 (0.115583s)][4.54202 (0.238857s)][7.49924 (0.491398s)][12.2974 (0.941513s)]]
+[[gmp_int][[*1] (0.0408971s)][[*1] (0.0525884s)][[*1] (0.0655264s)][[*1] (0.0765616s)]]
+[[tommath_int][21.2996 (0.871093s)][28.9405 (1.52193s)][26.5936 (1.74258s)][37.7618 (2.8911s)]]
+]
+[table Operator &
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.88968 (0.0244482s)][1.79292 (0.028049s)][1.77526 (0.0342017s)][1.93398 (0.0456006s)]]
+[[cpp_int(fixed)][1.11185 (0.0143848s)][[*1] (0.0156443s)][[*1] (0.0192657s)][1.68783 (0.0397966s)]]
+[[gmp_int][[*1] (0.0129377s)][1.09124 (0.0170717s)][1.08747 (0.0209509s)][[*1] (0.0235786s)]]
+[[tommath_int][5.77397 (0.0747022s)][4.7749 (0.0747001s)][4.23046 (0.0815029s)][4.19976 (0.0990244s)]]
+]
+[table Operator &(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.51385 (0.0426893s)][1.56497 (0.0338674s)][1.52989 (0.0424884s)][1.15907 (0.0577198s)]]
+[[cpp_int(fixed)][[*1] (0.0169816s)][[*1] (0.021641s)][[*1] (0.0277722s)][[*1] (0.0497983s)]]
+[[gmp_int][2.9563 (0.0502028s)][2.3492 (0.0508389s)][1.91894 (0.0532932s)][1.03011 (0.0512979s)]]
+[[tommath_int][13.2139 (0.224394s)][10.6481 (0.230435s)][8.47057 (0.235246s)][4.91936 (0.244976s)]]
+]
+[table Operator *
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.21032 (0.0363846s)][2.59769 (0.100083s)][3.28466 (0.343683s)][3.88666 (1.28548s)]]
+[[cpp_int(fixed)][1.22547 (0.0201727s)][[*1] (0.0385279s)][1.14595 (0.119904s)][1.12192 (0.371065s)]]
+[[gmp_int][[*1] (0.0164612s)][1.28554 (0.0495293s)][[*1] (0.104633s)][[*1] (0.330741s)]]
+[[tommath_int][3.69412 (0.0608098s)][2.19021 (0.0843842s)][1.87184 (0.195855s)][1.70271 (0.563154s)]]
+]
+[table Operator *(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.8402 (0.0257193s)][1.92542 (0.0294836s)][2.06094 (0.039305s)][1.6562 (0.0540818s)]]
+[[cpp_int(fixed)][1.3108 (0.0183201s)][1.40725 (0.021549s)][1.48723 (0.0283635s)][1.51354 (0.0494233s)]]
+[[gmp_int][[*1] (0.0139764s)][[*1] (0.0153128s)][[*1] (0.0190714s)][[*1] (0.0326542s)]]
+[[tommath_int][13.593 (0.18998s)][13.1093 (0.20074s)][16.0244 (0.305608s)][8.12274 (0.265242s)]]
+]
+[table Operator +
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.33096 (0.0226262s)][1.43935 (0.0275581s)][1.39258 (0.033691s)][1.28136 (0.0456764s)]]
+[[cpp_int(fixed)][1.08205 (0.0183948s)][1.13659 (0.0217614s)][1.17718 (0.0284799s)][1.1125 (0.0396571s)]]
+[[gmp_int][1.39192 (0.0236625s)][1.34375 (0.0257277s)][1.17204 (0.0283556s)][1.17063 (0.0417292s)]]
+[[tommath_int][[*1] (0.0169999s)][[*1] (0.0191462s)][[*1] (0.0241933s)][[*1] (0.0356467s)]]
+]
+[table Operator +(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.73044 (0.0156956s)][1.66346 (0.017033s)][1.60196 (0.0196755s)][[*1] (0.0241476s)]]
+[[cpp_int(fixed)][1.06691 (0.00967714s)][[*1] (0.0102395s)][[*1] (0.0122821s)][1.05229 (0.0254102s)]]
+[[gmp_int][[*1] (0.00907029s)][1.26028 (0.0129046s)][1.27777 (0.0156938s)][1.07144 (0.0258726s)]]
+[[tommath_int][18.7688 (0.170239s)][16.9572 (0.173633s)][20.5363 (0.25223s)][7.61905 (0.183982s)]]
+]
+[table Operator -
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.40057 (0.0256171s)][1.46382 (0.0305114s)][1.49343 (0.0422701s)][1.39142 (0.0574919s)]]
+[[cpp_int(fixed)][[*1] (0.0182905s)][[*1] (0.0208437s)][[*1] (0.028304s)][[*1] (0.0413187s)]]
+[[gmp_int][1.39653 (0.0255431s)][1.50686 (0.0314085s)][1.40796 (0.0398509s)][1.22212 (0.0504965s)]]
+[[tommath_int][1.37164 (0.025088s)][1.28188 (0.0267191s)][1.13602 (0.032154s)][1.03193 (0.0426379s)]]
+]
+[table Operator -(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.50784 (0.0122229s)][1.54914 (0.0143035s)][1.55501 (0.0171212s)][1.0172 (0.0212992s)]]
+[[cpp_int(fixed)][[*1] (0.00810627s)][[*1] (0.00923316s)][[*1] (0.0110103s)][[*1] (0.020939s)]]
+[[gmp_int][1.49189 (0.0120936s)][1.76716 (0.0163165s)][1.86002 (0.0204795s)][1.12695 (0.0235972s)]]
+[[tommath_int][20.9474 (0.169805s)][18.7459 (0.173084s)][23.1437 (0.25482s)][8.70855 (0.182348s)]]
+]
+[table Operator /
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.12441 (0.227187s)][1.92471 (0.467116s)][2.5683 (0.755608s)][3.45487 (1.30086s)]]
+[[cpp_int(fixed)][1.02377 (0.206852s)][1.32377 (0.321272s)][2.09615 (0.616699s)][2.89679 (1.09072s)]]
+[[gmp_int][[*1] (0.20205s)][[*1] (0.242695s)][[*1] (0.294206s)][[*1] (0.376529s)]]
+[[tommath_int][5.68214 (1.14807s)][5.52349 (1.34052s)][7.00529 (2.061s)][8.79242 (3.3106s)]]
+]
+[table Operator /(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.11845 (0.129609s)][4.15783 (0.303922s)][5.55849 (0.535727s)][6.76415 (1.00179s)]]
+[[cpp_int(fixed)][1.81934 (0.111309s)][2.99804 (0.219146s)][4.68327 (0.451373s)][5.87635 (0.870306s)]]
+[[gmp_int][[*1] (0.061181s)][[*1] (0.0730963s)][[*1] (0.09638s)][[*1] (0.148103s)]]
+[[tommath_int][15.3006 (0.936106s)][16.0325 (1.17192s)][18.2771 (1.76155s)][20.2054 (2.99248s)]]
+]
+[table Operator <<
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.66271 (0.0182175s)][1.44338 (0.0210768s)][1.50386 (0.0269161s)][1.91115 (0.0394128s)]]
+[[cpp_int(fixed)][1.19703 (0.0131154s)][1.16109 (0.0169546s)][1.05186 (0.0188263s)][1.90315 (0.0392477s)]]
+[[gmp_int][[*1] (0.0109566s)][[*1] (0.0146023s)][[*1] (0.0178981s)][[*1] (0.0206225s)]]
+[[tommath_int][2.88726 (0.0316344s)][2.5987 (0.0379471s)][2.51285 (0.0449753s)][3.25597 (0.0671463s)]]
+]
+[table Operator >>
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.36287 (0.0215535s)][1.70778 (0.0175781s)][1.77078 (0.0216914s)][2.29189 (0.0294462s)]]
+[[cpp_int(fixed)][[*1] (0.00912176s)][1.10889 (0.0114138s)][1.2417 (0.0152103s)][1.6714 (0.0214742s)]]
+[[gmp_int][1.17612 (0.0107283s)][[*1] (0.010293s)][[*1] (0.0122496s)][[*1] (0.012848s)]]
+[[tommath_int][15.2553 (0.139155s)][13.7608 (0.14164s)][12.2124 (0.149597s)][13.0247 (0.167341s)]]
+]
+[table Operator ^
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.78798 (0.0243197s)][1.8085 (0.0280192s)][1.78828 (0.033929s)][1.79594 (0.0456494s)]]
+[[cpp_int(fixed)][1.0129 (0.0137773s)][[*1] (0.015493s)][[*1] (0.018973s)][1.5504 (0.0394082s)]]
+[[gmp_int][[*1] (0.0136018s)][1.03786 (0.0160796s)][1.40572 (0.0266707s)][[*1] (0.0254182s)]]
+[[tommath_int][5.39689 (0.0734074s)][4.78827 (0.0741847s)][4.17964 (0.0793004s)][3.73059 (0.0948247s)]]
+]
+[table Operator ^(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.76928 (0.0404509s)][1.83515 (0.0299941s)][1.77409 (0.0323887s)][1.11493 (0.0372218s)]]
+[[cpp_int(fixed)][[*1] (0.014607s)][[*1] (0.0163443s)][[*1] (0.0182565s)][[*1] (0.0333848s)]]
+[[gmp_int][3.25823 (0.047593s)][3.05166 (0.0498771s)][2.96144 (0.0540655s)][1.47308 (0.0491785s)]]
+[[tommath_int][17.006 (0.248407s)][15.2663 (0.249516s)][14.338 (0.261762s)][7.82864 (0.261357s)]]
+]
+[table Operator gcd
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.20736 (4.16823s)][3.91955 (8.51244s)][4.00539 (19.489s)][4.64192 (47.7651s)]]
+[[cpp_int(fixed)][6.34685 (2.87326s)][3.07855 (6.68597s)][3.32507 (16.1788s)][4.07366 (41.9178s)]]
+[[gmp_int][[*1] (0.452707s)][[*1] (2.17179s)][[*1] (4.86569s)][[*1] (10.2899s)]]
+[[tommath_int][16.804 (7.6073s)][7.31428 (15.8851s)][6.96518 (33.8904s)][6.52732 (67.1657s)]]
+]
+[table Operator str
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.76995 (0.000703371s)][2.94246 (0.00181769s)][3.45149 (0.00434022s)][4.14052 (0.0122363s)]]
+[[cpp_int(fixed)][1.58559 (0.000630107s)][2.42804 (0.00149991s)][3.30542 (0.00415653s)][3.90693 (0.011546s)]]
+[[gmp_int][[*1] (0.000397397s)][[*1] (0.000617745s)][[*1] (0.00125749s)][[*1] (0.00295526s)]]
+[[tommath_int][21.7585 (0.00864677s)][34.4291 (0.0212684s)][65.8175 (0.0827649s)][67.7946 (0.200351s)]]
+]
+[table Operator |
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.91883 (0.0242976s)][1.88265 (0.0281237s)][1.78879 (0.0339623s)][1.74117 (0.0457886s)]]
+[[cpp_int(fixed)][1.08025 (0.0136789s)][1.03489 (0.0154596s)][[*1] (0.0189862s)][1.49756 (0.0393824s)]]
+[[gmp_int][[*1] (0.0126627s)][[*1] (0.0149383s)][1.28585 (0.0244134s)][[*1] (0.0262977s)]]
+[[tommath_int][5.86177 (0.0742258s)][4.9555 (0.0740269s)][4.18835 (0.0795209s)][3.55804 (0.0935681s)]]
+]
+[table Operator |(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.76183 (0.0454215s)][2.05967 (0.0323883s)][1.78143 (0.0324562s)][1.22147 (0.0372077s)]]
+[[cpp_int(fixed)][[*1] (0.0164462s)][[*1] (0.015725s)][[*1] (0.0182191s)][[*1] (0.0304613s)]]
+[[gmp_int][2.81912 (0.0463637s)][3.18611 (0.0501017s)][2.94469 (0.0536497s)][1.62702 (0.0495613s)]]
+[[tommath_int][15.1485 (0.249135s)][15.9884 (0.251418s)][13.915 (0.253519s)][8.65293 (0.26358s)]]
+]
+[endsect]
+[section:rational_performance Rational Type Perfomance]
+[table Operator *
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][16.2879 (15.3196s)][10.7459 (45.9283s)][11.5596 (111.528s)][12.8553 (270.253s)]]
+[[mpq_rational][[*1] (0.940549s)][[*1] (4.27402s)][[*1] (9.6481s)][[*1] (21.0227s)]]
+]
+[table Operator *(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][7.7465 (1.3425s)][10.6643 (2.05921s)][11.055 (2.75206s)][12.6365 (4.26866s)]]
+[[mpq_rational][[*1] (0.173305s)][[*1] (0.193095s)][[*1] (0.248942s)][[*1] (0.337805s)]]
+]
+[table Operator +
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][16.0608 (8.33358s)][10.8037 (24.5753s)][11.4235 (58.1983s)][12.435 (139.884s)]]
+[[mpq_rational][[*1] (0.518878s)][[*1] (2.2747s)][[*1] (5.09463s)][[*1] (11.2492s)]]
+]
+[table Operator +(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][7.82472 (1.14042s)][9.40883 (1.54697s)][9.02478 (1.83113s)][9.24894 (2.65768s)]]
+[[mpq_rational][[*1] (0.145745s)][[*1] (0.164417s)][[*1] (0.202901s)][[*1] (0.287349s)]]
+]
+[table Operator -
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][16.0583 (8.3543s)][10.6997 (24.3831s)][11.4377 (58.3044s)][12.4116 (139.665s)]]
+[[mpq_rational][[*1] (0.520249s)][[*1] (2.27886s)][[*1] (5.09757s)][[*1] (11.2528s)]]
+]
+[table Operator -(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][7.99602 (1.13947s)][9.62717 (1.55711s)][9.1151 (1.82889s)][9.53508 (2.68279s)]]
+[[mpq_rational][[*1] (0.142505s)][[*1] (0.161741s)][[*1] (0.200644s)][[*1] (0.28136s)]]
+]
+[table Operator /
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][12.0736 (31.794s)][10.0089 (80.7871s)][10.9267 (184.73s)][12.204 (436.471s)]]
+[[mpq_rational][[*1] (2.63335s)][[*1] (8.07149s)][[*1] (16.9064s)][[*1] (35.7647s)]]
+]
+[table Operator /(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][7.56092 (1.35276s)][10.5279 (2.12933s)][10.9509 (2.75885s)][12.166 (4.27228s)]]
+[[mpq_rational][[*1] (0.178914s)][[*1] (0.202255s)][[*1] (0.251928s)][[*1] (0.351164s)]]
+]
+[table Operator str
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][13.4013 (0.00980984s)][23.4372 (0.0288878s)][27.4314 (0.067039s)][29.4814 (0.165057s)]]
+[[mpq_rational][[*1] (0.000732008s)][[*1] (0.00123256s)][[*1] (0.00244388s)][[*1] (0.00559869s)]]
+]
+[endsect]
diff --git a/libs/multiprecision/performance/performance_test-intel-linux.log b/libs/multiprecision/performance/performance_test-intel-linux.log
new file mode 100644
index 0000000000..e721729eb6
--- /dev/null
+++ b/libs/multiprecision/performance/performance_test-intel-linux.log
@@ -0,0 +1,422 @@
+gmp_int 64 + 0.016582
+gmp_int 64 - 0.0174517
+gmp_int 64 * 0.0112253
+gmp_int 64 / 0.170951
+gmp_int 64 str 0.000343689
+gmp_int 64 +(int)0.00688382
+gmp_int 64 -(int)0.00734613
+gmp_int 64 *(int)0.00881438
+gmp_int 64 /(int)0.0465651
+gmp_int 64 % 0.164576
+gmp_int 64 | 0.0101555
+gmp_int 64 & 0.00955666
+gmp_int 64 ^ 0.00987346
+gmp_int 64 << 0.0106043
+gmp_int 64 >> 0.0093887
+gmp_int 64 %(int)0.0297463
+gmp_int 64 |(int)0.0403338
+gmp_int 64 &(int)0.0417288
+gmp_int 64 ^(int)0.0405779
+gmp_int 64 gcd 0.173816
+gmp_int 128 + 0.0183088
+gmp_int 128 - 0.0189266
+gmp_int 128 * 0.0161084
+gmp_int 128 / 0.191775
+gmp_int 128 str 0.000374699
+gmp_int 128 +(int)0.00866339
+gmp_int 128 -(int)0.0089443
+gmp_int 128 *(int)0.0114143
+gmp_int 128 /(int)0.0534638
+gmp_int 128 % 0.161212
+gmp_int 128 | 0.0107201
+gmp_int 128 & 0.0113559
+gmp_int 128 ^ 0.0112116
+gmp_int 128 << 0.0103295
+gmp_int 128 >> 0.00813413
+gmp_int 128 %(int)0.03692
+gmp_int 128 |(int)0.0412168
+gmp_int 128 &(int)0.0428359
+gmp_int 128 ^(int)0.0418522
+gmp_int 128 gcd 0.43131
+gmp_int 256 + 0.0224834
+gmp_int 256 - 0.025062
+gmp_int 256 * 0.0417471
+gmp_int 256 / 0.233656
+gmp_int 256 str 0.00059903
+gmp_int 256 +(int)0.0112071
+gmp_int 256 -(int)0.0116302
+gmp_int 256 *(int)0.0137181
+gmp_int 256 /(int)0.0667669
+gmp_int 256 % 0.191884
+gmp_int 256 | 0.0129489
+gmp_int 256 & 0.012778
+gmp_int 256 ^ 0.0134548
+gmp_int 256 << 0.0121471
+gmp_int 256 >> 0.00832878
+gmp_int 256 %(int)0.0474363
+gmp_int 256 |(int)0.0425591
+gmp_int 256 &(int)0.0436742
+gmp_int 256 ^(int)0.0425636
+gmp_int 256 gcd 2.06855
+gmp_int 512 + 0.0277439
+gmp_int 512 - 0.0318874
+gmp_int 512 * 0.0991032
+gmp_int 512 / 0.274993
+gmp_int 512 str 0.00129458
+gmp_int 512 +(int)0.014283
+gmp_int 512 -(int)0.0149874
+gmp_int 512 *(int)0.0180512
+gmp_int 512 /(int)0.0906691
+gmp_int 512 % 0.222477
+gmp_int 512 | 0.0217103
+gmp_int 512 & 0.0165285
+gmp_int 512 ^ 0.0208848
+gmp_int 512 << 0.014839
+gmp_int 512 >> 0.00988994
+gmp_int 512 %(int)0.0605682
+gmp_int 512 |(int)0.0462909
+gmp_int 512 &(int)0.046599
+gmp_int 512 ^(int)0.0456608
+gmp_int 512 gcd 4.68499
+gmp_int 1024 + 0.0397479
+gmp_int 1024 - 0.042232
+gmp_int 1024 * 0.31703
+gmp_int 1024 / 0.345984
+gmp_int 1024 str 0.00271592
+gmp_int 1024 +(int)0.0189969
+gmp_int 1024 -(int)0.0195046
+gmp_int 1024 *(int)0.0260306
+gmp_int 1024 /(int)0.140151
+gmp_int 1024 % 0.286399
+gmp_int 1024 | 0.0261953
+gmp_int 1024 & 0.023083
+gmp_int 1024 ^ 0.0248084
+gmp_int 1024 << 0.0202635
+gmp_int 1024 >> 0.0127909
+gmp_int 1024 %(int)0.0761102
+gmp_int 1024 |(int)0.049175
+gmp_int 1024 &(int)0.0499195
+gmp_int 1024 ^(int)0.0487102
+gmp_int 1024 gcd 10.1127
+cpp_int 64 + 0.0152915
+cpp_int 64 - 0.0191821
+cpp_int 64 * 0.0326218
+cpp_int 64 / 0.0951094
+cpp_int 64 str 0.000428547
+cpp_int 64 +(int)0.0132027
+cpp_int 64 -(int)0.0126144
+cpp_int 64 *(int)0.0151037
+cpp_int 64 /(int)0.0491116
+cpp_int 64 % 0.0951581
+cpp_int 64 | 0.0199629
+cpp_int 64 & 0.0196969
+cpp_int 64 ^ 0.0208608
+cpp_int 64 << 0.0179372
+cpp_int 64 >> 0.0146206
+cpp_int 64 %(int)0.0229261
+cpp_int 64 |(int)0.0185797
+cpp_int 64 &(int)0.0225055
+cpp_int 64 ^(int)0.0191337
+cpp_int 64 gcd 1.50205
+cpp_int 128 + 0.0170788
+cpp_int 128 - 0.0228373
+cpp_int 128 * 0.0375831
+cpp_int 128 / 0.163958
+cpp_int 128 str 0.000744647
+cpp_int 128 +(int)0.0144833
+cpp_int 128 -(int)0.013922
+cpp_int 128 *(int)0.0176402
+cpp_int 128 /(int)0.0972057
+cpp_int 128 % 0.169015
+cpp_int 128 | 0.0229631
+cpp_int 128 & 0.023126
+cpp_int 128 ^ 0.0229278
+cpp_int 128 << 0.0215749
+cpp_int 128 >> 0.0149198
+cpp_int 128 %(int)0.0476063
+cpp_int 128 |(int)0.0194697
+cpp_int 128 &(int)0.0270183
+cpp_int 128 ^(int)0.0194481
+cpp_int 128 gcd 3.36986
+cpp_int 256 + 0.0231877
+cpp_int 256 - 0.0293424
+cpp_int 256 * 0.113247
+cpp_int 256 / 0.336287
+cpp_int 256 str 0.00190436
+cpp_int 256 +(int)0.0161733
+cpp_int 256 -(int)0.0173225
+cpp_int 256 *(int)0.0199426
+cpp_int 256 /(int)0.229286
+cpp_int 256 % 0.306542
+cpp_int 256 | 0.0257191
+cpp_int 256 & 0.0254172
+cpp_int 256 ^ 0.0259082
+cpp_int 256 << 0.0253994
+cpp_int 256 >> 0.0172635
+cpp_int 256 %(int)0.116093
+cpp_int 256 |(int)0.0233559
+cpp_int 256 &(int)0.0367792
+cpp_int 256 ^(int)0.0232914
+cpp_int 256 gcd 7.88882
+cpp_int 512 + 0.0291058
+cpp_int 512 - 0.0380025
+cpp_int 512 * 0.337161
+cpp_int 512 / 0.487075
+cpp_int 512 str 0.00494162
+cpp_int 512 +(int)0.0201989
+cpp_int 512 -(int)0.0200688
+cpp_int 512 *(int)0.0311497
+cpp_int 512 /(int)0.375279
+cpp_int 512 % 0.459737
+cpp_int 512 | 0.0297101
+cpp_int 512 & 0.0297235
+cpp_int 512 ^ 0.0296913
+cpp_int 512 << 0.0328422
+cpp_int 512 >> 0.0234706
+cpp_int 512 %(int)0.194709
+cpp_int 512 |(int)0.0258992
+cpp_int 512 &(int)0.0529542
+cpp_int 512 ^(int)0.0258749
+cpp_int 512 gcd 19.7141
+cpp_int 1024 + 0.0410101
+cpp_int 1024 - 0.0576733
+cpp_int 1024 * 1.19319
+cpp_int 1024 / 0.850798
+cpp_int 1024 str 0.0149378
+cpp_int 1024 +(int)0.0222435
+cpp_int 1024 -(int)0.0219408
+cpp_int 1024 *(int)0.0435058
+cpp_int 1024 /(int)0.6795
+cpp_int 1024 % 0.800961
+cpp_int 1024 | 0.0369613
+cpp_int 1024 & 0.0368423
+cpp_int 1024 ^ 0.0371252
+cpp_int 1024 << 0.0474759
+cpp_int 1024 >> 0.0297527
+cpp_int 1024 %(int)0.360619
+cpp_int 1024 |(int)0.0326194
+cpp_int 1024 &(int)0.0801744
+cpp_int 1024 ^(int)0.0319848
+cpp_int 1024 gcd 53.3224
+fixed_int 64 + 0.00207275
+fixed_int 64 - 0.00214524
+fixed_int 64 * 0.00391097
+fixed_int 64 / 0.0608466
+fixed_int 64 str 0.000292286
+fixed_int 64 +(int)0.00357336
+fixed_int 64 -(int)0.00352796
+fixed_int 64 *(int)0.00292725
+fixed_int 64 /(int)0.0243018
+fixed_int 64 % 0.0603067
+fixed_int 64 | 0.00258063
+fixed_int 64 & 0.00257379
+fixed_int 64 ^ 0.00258525
+fixed_int 64 << 0.00134947
+fixed_int 64 >> 0.00560378
+fixed_int 64 %(int)0.0241499
+fixed_int 64 |(int)0.00201939
+fixed_int 64 &(int)0.00206716
+fixed_int 64 ^(int)0.00201848
+fixed_int 64 gcd 0.82127
+fixed_int 128 + 0.00325349
+fixed_int 128 - 0.00366953
+fixed_int 128 * 0.010445
+fixed_int 128 / 0.113697
+fixed_int 128 str 0.000564877
+fixed_int 128 +(int)0.00377625
+fixed_int 128 -(int)0.00360179
+fixed_int 128 *(int)0.00418426
+fixed_int 128 /(int)0.091141
+fixed_int 128 % 0.113804
+fixed_int 128 | 0.00360961
+fixed_int 128 & 0.00359913
+fixed_int 128 ^ 0.00361317
+fixed_int 128 << 0.0065905
+fixed_int 128 >> 0.00654308
+fixed_int 128 %(int)0.0809135
+fixed_int 128 |(int)0.00237125
+fixed_int 128 &(int)0.00231056
+fixed_int 128 ^(int)0.00190464
+fixed_int 128 gcd 2.05126
+fixed_int 256 + 0.00785776
+fixed_int 256 - 0.00635884
+fixed_int 256 * 0.0323875
+fixed_int 256 / 0.203194
+fixed_int 256 str 0.0013816
+fixed_int 256 +(int)0.00413397
+fixed_int 256 -(int)0.00379699
+fixed_int 256 *(int)0.00852456
+fixed_int 256 /(int)0.183053
+fixed_int 256 % 0.200368
+fixed_int 256 | 0.0105747
+fixed_int 256 & 0.0105856
+fixed_int 256 ^ 0.0105755
+fixed_int 256 << 0.00874545
+fixed_int 256 >> 0.00906624
+fixed_int 256 %(int)0.152826
+fixed_int 256 |(int)0.00261619
+fixed_int 256 &(int)0.00424202
+fixed_int 256 ^(int)0.00263274
+fixed_int 256 gcd 5.42715
+fixed_int 512 + 0.0131311
+fixed_int 512 - 0.0122513
+fixed_int 512 * 0.205979
+fixed_int 512 / 0.383601
+fixed_int 512 str 0.0043558
+fixed_int 512 +(int)0.00639746
+fixed_int 512 -(int)0.00641876
+fixed_int 512 *(int)0.0152369
+fixed_int 512 /(int)0.363289
+fixed_int 512 % 0.38201
+fixed_int 512 | 0.0131075
+fixed_int 512 & 0.0131292
+fixed_int 512 ^ 0.01314
+fixed_int 512 << 0.0130248
+fixed_int 512 >> 0.0131451
+fixed_int 512 %(int)0.304714
+fixed_int 512 |(int)0.00574368
+fixed_int 512 &(int)0.00810836
+fixed_int 512 ^(int)0.00576694
+fixed_int 512 gcd 16.6269
+fixed_int 1024 + 0.0322386
+fixed_int 1024 - 0.0312142
+fixed_int 1024 * 0.716002
+fixed_int 1024 / 0.728338
+fixed_int 1024 str 0.0135445
+fixed_int 1024 +(int)0.011986
+fixed_int 1024 -(int)0.0119838
+fixed_int 1024 *(int)0.0349878
+fixed_int 1024 /(int)0.708856
+fixed_int 1024 % 0.723622
+fixed_int 1024 | 0.0181468
+fixed_int 1024 & 0.0182648
+fixed_int 1024 ^ 0.018185
+fixed_int 1024 << 0.0252997
+fixed_int 1024 >> 0.0257832
+fixed_int 1024 %(int)0.597535
+fixed_int 1024 |(int)0.0116417
+fixed_int 1024 &(int)0.0172111
+fixed_int 1024 ^(int)0.011526
+fixed_int 1024 gcd 70.6396
+[section:integer_performance Integer Type Perfomance]
+[table Operator %
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.5779 (0.0951581s)][1.48514 (0.169015s)][1.59753 (0.306542s)][2.06645 (0.459737s)][2.79666 (0.800961s)]]
+[[fixed_int][[*1] (0.0603067s)][[*1] (0.113804s)][1.04421 (0.200368s)][1.71708 (0.38201s)][2.52662 (0.723622s)]]
+[[gmp_int][2.72898 (0.164576s)][1.41658 (0.161212s)][[*1] (0.191884s)][[*1] (0.222477s)][[*1] (0.286399s)]]
+]
+[table Operator %(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][[*1] (0.0229261s)][1.28944 (0.0476063s)][2.44735 (0.116093s)][3.21471 (0.194709s)][4.73812 (0.360619s)]]
+[[fixed_int][1.05338 (0.0241499s)][2.19159 (0.0809135s)][3.22171 (0.152826s)][5.03092 (0.304714s)][7.85093 (0.597535s)]]
+[[gmp_int][1.29749 (0.0297463s)][[*1] (0.03692s)][[*1] (0.0474363s)][[*1] (0.0605682s)][[*1] (0.0761102s)]]
+]
+[table Operator &
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][7.65289 (0.0196969s)][6.42545 (0.023126s)][2.4011 (0.0254172s)][2.26393 (0.0297235s)][2.01712 (0.0368423s)]]
+[[fixed_int][[*1] (0.00257379s)][[*1] (0.00359913s)][[*1] (0.0105856s)][[*1] (0.0131292s)][[*1] (0.0182648s)]]
+[[gmp_int][3.71307 (0.00955666s)][3.15518 (0.0113559s)][1.2071 (0.012778s)][1.25891 (0.0165285s)][1.2638 (0.023083s)]]
+]
+[table Operator &(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][10.8871 (0.0225055s)][11.6934 (0.0270183s)][8.67021 (0.0367792s)][6.53082 (0.0529542s)][4.65829 (0.0801744s)]]
+[[fixed_int][[*1] (0.00206716s)][[*1] (0.00231056s)][[*1] (0.00424202s)][[*1] (0.00810836s)][[*1] (0.0172111s)]]
+[[gmp_int][20.1865 (0.0417288s)][18.5392 (0.0428359s)][10.2956 (0.0436742s)][5.74703 (0.046599s)][2.90042 (0.0499195s)]]
+]
+[table Operator *
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][8.34111 (0.0326218s)][3.59818 (0.0375831s)][3.49662 (0.113247s)][3.40211 (0.337161s)][3.76364 (1.19319s)]]
+[[fixed_int][[*1] (0.00391097s)][[*1] (0.010445s)][[*1] (0.0323875s)][2.07843 (0.205979s)][2.25847 (0.716002s)]]
+[[gmp_int][2.87022 (0.0112253s)][1.54221 (0.0161084s)][1.28899 (0.0417471s)][[*1] (0.0991032s)][[*1] (0.31703s)]]
+]
+[table Operator *(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][5.15967 (0.0151037s)][4.21584 (0.0176402s)][2.33943 (0.0199426s)][2.04436 (0.0311497s)][1.67133 (0.0435058s)]]
+[[fixed_int][[*1] (0.00292725s)][[*1] (0.00418426s)][[*1] (0.00852456s)][[*1] (0.0152369s)][1.3441 (0.0349878s)]]
+[[gmp_int][3.01114 (0.00881438s)][2.72791 (0.0114143s)][1.60924 (0.0137181s)][1.1847 (0.0180512s)][[*1] (0.0260306s)]]
+]
+[table Operator +
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][7.37741 (0.0152915s)][5.2494 (0.0170788s)][2.95092 (0.0231877s)][2.21655 (0.0291058s)][1.27208 (0.0410101s)]]
+[[fixed_int][[*1] (0.00207275s)][[*1] (0.00325349s)][[*1] (0.00785776s)][[*1] (0.0131311s)][[*1] (0.0322386s)]]
+[[gmp_int][7.99998 (0.016582s)][5.62745 (0.0183088s)][2.86129 (0.0224834s)][2.11283 (0.0277439s)][1.23293 (0.0397479s)]]
+]
+[table Operator +(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][3.69474 (0.0132027s)][3.83536 (0.0144833s)][3.91229 (0.0161733s)][3.15733 (0.0201989s)][1.85579 (0.0222435s)]]
+[[fixed_int][[*1] (0.00357336s)][[*1] (0.00377625s)][[*1] (0.00413397s)][[*1] (0.00639746s)][[*1] (0.011986s)]]
+[[gmp_int][1.92643 (0.00688382s)][2.29418 (0.00866339s)][2.71097 (0.0112071s)][2.23261 (0.014283s)][1.58492 (0.0189969s)]]
+]
+[table Operator -
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][8.94166 (0.0191821s)][6.22351 (0.0228373s)][4.61443 (0.0293424s)][3.10192 (0.0380025s)][1.84766 (0.0576733s)]]
+[[fixed_int][[*1] (0.00214524s)][[*1] (0.00366953s)][[*1] (0.00635884s)][[*1] (0.0122513s)][[*1] (0.0312142s)]]
+[[gmp_int][8.13505 (0.0174517s)][5.15777 (0.0189266s)][3.94128 (0.025062s)][2.60278 (0.0318874s)][1.35297 (0.042232s)]]
+]
+[table Operator -(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][3.57555 (0.0126144s)][3.86529 (0.013922s)][4.56215 (0.0173225s)][3.12658 (0.0200688s)][1.83087 (0.0219408s)]]
+[[fixed_int][[*1] (0.00352796s)][[*1] (0.00360179s)][[*1] (0.00379699s)][[*1] (0.00641876s)][[*1] (0.0119838s)]]
+[[gmp_int][2.08226 (0.00734613s)][2.4833 (0.0089443s)][3.063 (0.0116302s)][2.33493 (0.0149874s)][1.62759 (0.0195046s)]]
+]
+[table Operator /
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.5631 (0.0951094s)][1.44205 (0.163958s)][1.655 (0.336287s)][1.77123 (0.487075s)][2.45907 (0.850798s)]]
+[[fixed_int][[*1] (0.0608466s)][[*1] (0.113697s)][[*1] (0.203194s)][1.39495 (0.383601s)][2.10512 (0.728338s)]]
+[[gmp_int][2.80954 (0.170951s)][1.68671 (0.191775s)][1.14992 (0.233656s)][[*1] (0.274993s)][[*1] (0.345984s)]]
+]
+[table Operator /(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.0209 (0.0491116s)][1.81816 (0.0972057s)][3.43412 (0.229286s)][4.13899 (0.375279s)][4.84836 (0.6795s)]]
+[[fixed_int][[*1] (0.0243018s)][1.70472 (0.091141s)][2.74167 (0.183053s)][4.00675 (0.363289s)][5.05782 (0.708856s)]]
+[[gmp_int][1.91611 (0.0465651s)][[*1] (0.0534638s)][[*1] (0.0667669s)][[*1] (0.0906691s)][[*1] (0.140151s)]]
+]
+[table Operator <<
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][13.292 (0.0179372s)][3.27363 (0.0215749s)][2.9043 (0.0253994s)][2.52151 (0.0328422s)][2.34293 (0.0474759s)]]
+[[fixed_int][[*1] (0.00134947s)][[*1] (0.0065905s)][[*1] (0.00874545s)][[*1] (0.0130248s)][1.24854 (0.0252997s)]]
+[[gmp_int][7.85814 (0.0106043s)][1.56732 (0.0103295s)][1.38897 (0.0121471s)][1.13928 (0.014839s)][[*1] (0.0202635s)]]
+]
+[table Operator >>
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.60907 (0.0146206s)][2.28025 (0.0149198s)][2.07275 (0.0172635s)][2.37318 (0.0234706s)][2.32609 (0.0297527s)]]
+[[fixed_int][[*1] (0.00560378s)][[*1] (0.00654308s)][1.08854 (0.00906624s)][1.32914 (0.0131451s)][2.01575 (0.0257832s)]]
+[[gmp_int][1.67542 (0.0093887s)][1.24317 (0.00813413s)][[*1] (0.00832878s)][[*1] (0.00988994s)][[*1] (0.0127909s)]]
+]
+[table Operator ^
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][8.06918 (0.0208608s)][6.34562 (0.0229278s)][2.44983 (0.0259082s)][2.25961 (0.0296913s)][2.04153 (0.0371252s)]]
+[[fixed_int][[*1] (0.00258525s)][[*1] (0.00361317s)][[*1] (0.0105755s)][[*1] (0.01314s)][[*1] (0.018185s)]]
+[[gmp_int][3.81916 (0.00987346s)][3.10299 (0.0112116s)][1.27226 (0.0134548s)][1.5894 (0.0208848s)][1.36422 (0.0248084s)]]
+]
+[table Operator ^(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.47925 (0.0191337s)][10.2109 (0.0194481s)][8.84686 (0.0232914s)][4.48677 (0.0258749s)][2.775 (0.0319848s)]]
+[[fixed_int][[*1] (0.00201848s)][[*1] (0.00190464s)][[*1] (0.00263274s)][[*1] (0.00576694s)][[*1] (0.011526s)]]
+[[gmp_int][20.1032 (0.0405779s)][21.9738 (0.0418522s)][16.1671 (0.0425636s)][7.91768 (0.0456608s)][4.2261 (0.0487102s)]]
+]
+[table Operator gcd
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][8.64165 (1.50205s)][7.81307 (3.36986s)][3.81369 (7.88882s)][4.20792 (19.7141s)][5.27284 (53.3224s)]]
+[[fixed_int][4.72495 (0.82127s)][4.75589 (2.05126s)][2.62364 (5.42715s)][3.54898 (16.6269s)][6.98527 (70.6396s)]]
+[[gmp_int][[*1] (0.173816s)][[*1] (0.43131s)][[*1] (2.06855s)][[*1] (4.68499s)][[*1] (10.1127s)]]
+]
+[table Operator str
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.46619 (0.000428547s)][1.98732 (0.000744647s)][3.17907 (0.00190436s)][3.81717 (0.00494162s)][5.50009 (0.0149378s)]]
+[[fixed_int][[*1] (0.000292286s)][1.50755 (0.000564877s)][2.30639 (0.0013816s)][3.36465 (0.0043558s)][4.98706 (0.0135445s)]]
+[[gmp_int][1.17587 (0.000343689s)][[*1] (0.000374699s)][[*1] (0.00059903s)][[*1] (0.00129458s)][[*1] (0.00271592s)]]
+]
+[table Operator |
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][7.73565 (0.0199629s)][6.36166 (0.0229631s)][2.43214 (0.0257191s)][2.26665 (0.0297101s)][2.0368 (0.0369613s)]]
+[[fixed_int][[*1] (0.00258063s)][[*1] (0.00360961s)][[*1] (0.0105747s)][[*1] (0.0131075s)][[*1] (0.0181468s)]]
+[[gmp_int][3.9353 (0.0101555s)][2.96987 (0.0107201s)][1.22452 (0.0129489s)][1.65632 (0.0217103s)][1.44352 (0.0261953s)]]
+]
+[table Operator |(int)
+[[Backend][64 Bits][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.20066 (0.0185797s)][8.21071 (0.0194697s)][8.92746 (0.0233559s)][4.50916 (0.0258992s)][2.80194 (0.0326194s)]]
+[[fixed_int][[*1] (0.00201939s)][[*1] (0.00237125s)][[*1] (0.00261619s)][[*1] (0.00574368s)][[*1] (0.0116417s)]]
+[[gmp_int][19.9733 (0.0403338s)][17.3819 (0.0412168s)][16.2676 (0.0425591s)][8.05945 (0.0462909s)][4.22404 (0.049175s)]]
+]
+[endsect]
diff --git a/libs/multiprecision/performance/performance_test-msvc-10.log b/libs/multiprecision/performance/performance_test-msvc-10.log
new file mode 100644
index 0000000000..3e271ff954
--- /dev/null
+++ b/libs/multiprecision/performance/performance_test-msvc-10.log
@@ -0,0 +1,1220 @@
+gmp_float 50 + 0.110988
+gmp_float 50 - 0.119898
+gmp_float 50 * 0.275044
+gmp_float 50 / 1.27708
+gmp_float 50 str 0.013276
+gmp_float 50 +(int)0.0330888
+gmp_float 50 -(int)0.134451
+gmp_float 50 *(int)0.0422135
+gmp_float 50 /(int)0.180393
+gmp_float 50 construct0.19737
+gmp_float 50 construct(unsigned)0.208078
+gmp_float 50 construct(unsigned long long)0.520025
+gmp_float 50 + 0.498089
+gmp_float 50 - 0.502235
+gmp_float 50 * 0.564768
+gmp_float 50 / 0.90324
+gmp_float 50 + 0.477999
+gmp_float 50 - 0.499682
+gmp_float 50 * 0.551747
+gmp_float 50 / 0.893752
+gmp_float 100 + 0.111217
+gmp_float 100 - 0.120498
+gmp_float 100 * 0.416175
+gmp_float 100 / 1.69515
+gmp_float 100 str 0.0202949
+gmp_float 100 +(int)0.0386882
+gmp_float 100 -(int)0.1351
+gmp_float 100 *(int)0.0493716
+gmp_float 100 /(int)0.23378
+gmp_float 100 construct0.196599
+gmp_float 100 construct(unsigned)0.207062
+gmp_float 100 construct(unsigned long long)0.51936
+gmp_float 100 + 0.517172
+gmp_float 100 - 0.509588
+gmp_float 100 * 0.575954
+gmp_float 100 / 1.04262
+gmp_float 100 + 0.476701
+gmp_float 100 - 0.503546
+gmp_float 100 * 0.564962
+gmp_float 100 / 1.03328
+gmp_float 500 + 0.15445
+gmp_float 500 - 0.164099
+gmp_float 500 * 3.32799
+gmp_float 500 / 8.12655
+gmp_float 500 str 0.141162
+gmp_float 500 +(int)0.0646201
+gmp_float 500 -(int)0.176876
+gmp_float 500 *(int)0.0857876
+gmp_float 500 /(int)0.710204
+gmp_float 500 construct0.206063
+gmp_float 500 construct(unsigned)0.217019
+gmp_float 500 construct(unsigned long long)0.538021
+gmp_float 500 + 0.552532
+gmp_float 500 - 0.555754
+gmp_float 500 * 0.717186
+gmp_float 500 / 2.24686
+gmp_float 500 + 0.490614
+gmp_float 500 - 0.547751
+gmp_float 500 * 0.700957
+gmp_float 500 / 2.24146
+gmp_int 128 + 0.0421662
+gmp_int 128 - 0.0411848
+gmp_int 128 * 0.0708996
+gmp_int 128 / 0.868916
+gmp_int 128 str 0.00185638
+gmp_int 128 +(int)0.0311237
+gmp_int 128 -(int)0.030585
+gmp_int 128 *(int)0.022756
+gmp_int 128 /(int)0.0560401
+gmp_int 128 construct0.196182
+gmp_int 128 construct(unsigned)0.206113
+gmp_int 128 construct(unsigned long long)0.719741
+gmp_int 128 % 0.64148
+gmp_int 128 | 0.0474678
+gmp_int 128 & 0.0538128
+gmp_int 128 ^ 0.0497194
+gmp_int 128 << 0.0273994
+gmp_int 128 >> 0.0288237
+gmp_int 128 %(int)0.0572117
+gmp_int 128 |(int)0.141119
+gmp_int 128 &(int)0.141306
+gmp_int 128 ^(int)0.143934
+gmp_int 128 gcd 2.45095
+gmp_int 128 + 0.71217
+gmp_int 128 - 0.687129
+gmp_int 128 * 0.716479
+gmp_int 128 / 1.04926
+gmp_int 128 + 0.68136
+gmp_int 128 - 0.681187
+gmp_int 128 * 3.1627
+gmp_int 128 / 0.685487
+gmp_int 256 + 0.0449584
+gmp_int 256 - 0.0461316
+gmp_int 256 * 0.134302
+gmp_int 256 / 0.951505
+gmp_int 256 str 0.00344576
+gmp_int 256 +(int)0.0428011
+gmp_int 256 -(int)0.0400434
+gmp_int 256 *(int)0.0282672
+gmp_int 256 /(int)0.0982823
+gmp_int 256 construct0.201199
+gmp_int 256 construct(unsigned)0.211295
+gmp_int 256 construct(unsigned long long)0.729487
+gmp_int 256 % 0.703592
+gmp_int 256 | 0.0618281
+gmp_int 256 & 0.0652169
+gmp_int 256 ^ 0.0630174
+gmp_int 256 << 0.031973
+gmp_int 256 >> 0.0310184
+gmp_int 256 %(int)0.10258
+gmp_int 256 |(int)0.142987
+gmp_int 256 &(int)0.139398
+gmp_int 256 ^(int)0.144825
+gmp_int 256 gcd 5.89505
+gmp_int 256 + 0.728978
+gmp_int 256 - 0.707806
+gmp_int 256 * 0.731454
+gmp_int 256 / 1.17203
+gmp_int 256 + 0.68929
+gmp_int 256 - 0.683532
+gmp_int 256 * 3.15114
+gmp_int 256 / 0.689516
+gmp_int 512 + 0.0522202
+gmp_int 512 - 0.0567637
+gmp_int 512 * 0.532277
+gmp_int 512 / 1.06442
+gmp_int 512 str 0.00618403
+gmp_int 512 +(int)0.0665539
+gmp_int 512 -(int)0.0578194
+gmp_int 512 *(int)0.0361075
+gmp_int 512 /(int)0.183564
+gmp_int 512 construct0.19783
+gmp_int 512 construct(unsigned)0.206944
+gmp_int 512 construct(unsigned long long)0.724649
+gmp_int 512 % 0.819828
+gmp_int 512 | 0.0856626
+gmp_int 512 & 0.092104
+gmp_int 512 ^ 0.0869819
+gmp_int 512 << 0.0471709
+gmp_int 512 >> 0.0337511
+gmp_int 512 %(int)0.188529
+gmp_int 512 |(int)0.155656
+gmp_int 512 &(int)0.142498
+gmp_int 512 ^(int)0.152773
+gmp_int 512 gcd 13.6993
+gmp_int 512 + 0.759532
+gmp_int 512 - 0.732529
+gmp_int 512 * 0.779921
+gmp_int 512 / 1.39149
+gmp_int 512 + 0.694235
+gmp_int 512 - 0.69246
+gmp_int 512 * 3.17094
+gmp_int 512 / 0.688995
+gmp_int 1024 + 0.0699873
+gmp_int 1024 - 0.0731244
+gmp_int 1024 * 1.57852
+gmp_int 1024 / 1.30215
+gmp_int 1024 str 0.0144523
+gmp_int 1024 +(int)0.108272
+gmp_int 1024 -(int)0.100541
+gmp_int 1024 *(int)0.0518882
+gmp_int 1024 /(int)0.352238
+gmp_int 1024 construct0.19744
+gmp_int 1024 construct(unsigned)0.216229
+gmp_int 1024 construct(unsigned long long)0.722262
+gmp_int 1024 % 1.01959
+gmp_int 1024 | 0.136082
+gmp_int 1024 & 0.144412
+gmp_int 1024 ^ 0.139109
+gmp_int 1024 << 0.0721984
+gmp_int 1024 >> 0.0388038
+gmp_int 1024 %(int)0.355222
+gmp_int 1024 |(int)0.163236
+gmp_int 1024 &(int)0.141249
+gmp_int 1024 ^(int)0.161662
+gmp_int 1024 gcd 33.2232
+gmp_int 1024 + 0.83035
+gmp_int 1024 - 0.78115
+gmp_int 1024 * 0.815503
+gmp_int 1024 / 1.84054
+gmp_int 1024 + 0.690013
+gmp_int 1024 - 0.690838
+gmp_int 1024 * 3.20893
+gmp_int 1024 / 0.707578
+cpp_int(unsigned, fixed)64 + 0.00232166
+cpp_int(unsigned, fixed)64 - 0.00234506
+cpp_int(unsigned, fixed)64 * 0.00470304
+cpp_int(unsigned, fixed)64 / 0.0714786
+cpp_int(unsigned, fixed)64 str 0.00256457
+cpp_int(unsigned, fixed)64 +(int)0.00162053
+cpp_int(unsigned, fixed)64 -(int)0.00163617
+cpp_int(unsigned, fixed)64 *(int)0.00236511
+cpp_int(unsigned, fixed)64 /(int)0.0299559
+cpp_int(unsigned, fixed)64 construct0.00111299
+cpp_int(unsigned, fixed)64 construct(unsigned)0.00110489
+cpp_int(unsigned, fixed)64 construct(unsigned long long)0.00240876
+cpp_int(unsigned, fixed)64 % 0.0702826
+cpp_int(unsigned, fixed)64 | 0.00265921
+cpp_int(unsigned, fixed)64 & 0.00261653
+cpp_int(unsigned, fixed)64 ^ 0.0040003
+cpp_int(unsigned, fixed)64 << 0.00161592
+cpp_int(unsigned, fixed)64 >> 0.00161599
+cpp_int(unsigned, fixed)64 %(int)0.0298064
+cpp_int(unsigned, fixed)64 |(int)0.00165538
+cpp_int(unsigned, fixed)64 &(int)0.00161431
+cpp_int(unsigned, fixed)64 ^(int)0.00184507
+cpp_int(unsigned, fixed)64 gcd 0.602722
+cpp_int(unsigned, fixed)64 + 0.00253726
+cpp_int(unsigned, fixed)64 - 0.00301519
+cpp_int(unsigned, fixed)64 * 0.00474872
+cpp_int(unsigned, fixed)64 / 0.0450108
+cpp_int(unsigned, fixed)64 + 0.0020173
+cpp_int(unsigned, fixed)64 - 0.00191079
+cpp_int(unsigned, fixed)64 * 0.00445077
+cpp_int(unsigned, fixed)64 / 0.0294528
+cpp_int(fixed) 64 + 0.00573474
+cpp_int(fixed) 64 - 0.0096272
+cpp_int(fixed) 64 * 0.00897607
+cpp_int(fixed) 64 / 0.0783882
+cpp_int(fixed) 64 str 0.00251659
+cpp_int(fixed) 64 +(int)0.00636247
+cpp_int(fixed) 64 -(int)0.00668367
+cpp_int(fixed) 64 *(int)0.00548722
+cpp_int(fixed) 64 /(int)0.0362985
+cpp_int(fixed) 64 construct0.00161745
+cpp_int(fixed) 64 construct(unsigned)0.00209147
+cpp_int(fixed) 64 construct(unsigned long long)0.00204998
+cpp_int(fixed) 64 % 0.0777437
+cpp_int(fixed) 64 | 0.0108982
+cpp_int(fixed) 64 & 0.0124165
+cpp_int(fixed) 64 ^ 0.0110313
+cpp_int(fixed) 64 << 0.00516511
+cpp_int(fixed) 64 >> 0.00399499
+cpp_int(fixed) 64 %(int)0.0341425
+cpp_int(fixed) 64 |(int)0.0111002
+cpp_int(fixed) 64 &(int)0.0104782
+cpp_int(fixed) 64 ^(int)0.0107199
+cpp_int(fixed) 64 gcd 0.604291
+cpp_int(fixed) 64 + 0.00605482
+cpp_int(fixed) 64 - 0.00714372
+cpp_int(fixed) 64 * 0.00873093
+cpp_int(fixed) 64 / 0.0510195
+cpp_int(fixed) 64 + 0.00430062
+cpp_int(fixed) 64 - 0.00387577
+cpp_int(fixed) 64 * 0.00567824
+cpp_int(fixed) 64 / 0.0320162
+cpp_int(fixed) 128 + 0.0358493
+cpp_int(fixed) 128 - 0.0397574
+cpp_int(fixed) 128 * 0.0672363
+cpp_int(fixed) 128 / 0.222933
+cpp_int(fixed) 128 str 0.0015613
+cpp_int(fixed) 128 +(int)0.0268311
+cpp_int(fixed) 128 -(int)0.0241848
+cpp_int(fixed) 128 *(int)0.0328109
+cpp_int(fixed) 128 /(int)0.137619
+cpp_int(fixed) 128 construct0.00164665
+cpp_int(fixed) 128 construct(unsigned)0.0015986
+cpp_int(fixed) 128 construct(unsigned long long)0.00312994
+cpp_int(fixed) 128 % 0.1971
+cpp_int(fixed) 128 | 0.0380136
+cpp_int(fixed) 128 & 0.0341411
+cpp_int(fixed) 128 ^ 0.0351059
+cpp_int(fixed) 128 << 0.0320915
+cpp_int(fixed) 128 >> 0.0293055
+cpp_int(fixed) 128 %(int)0.103684
+cpp_int(fixed) 128 |(int)0.0317854
+cpp_int(fixed) 128 &(int)0.0417383
+cpp_int(fixed) 128 ^(int)0.0312355
+cpp_int(fixed) 128 gcd 4.18006
+cpp_int(fixed) 128 + 0.0341301
+cpp_int(fixed) 128 - 0.0346952
+cpp_int(fixed) 128 * 0.0675308
+cpp_int(fixed) 128 / 0.466907
+cpp_int(fixed) 128 + 0.0168342
+cpp_int(fixed) 128 - 0.0169449
+cpp_int(fixed) 128 * 0.0673436
+cpp_int(fixed) 128 / 0.0327432
+cpp_int(fixed) 256 + 0.0552275
+cpp_int(fixed) 256 - 0.0560103
+cpp_int(fixed) 256 * 0.166666
+cpp_int(fixed) 256 / 0.349956
+cpp_int(fixed) 256 str 0.00297279
+cpp_int(fixed) 256 +(int)0.0410749
+cpp_int(fixed) 256 -(int)0.0368306
+cpp_int(fixed) 256 *(int)0.049867
+cpp_int(fixed) 256 /(int)0.253796
+cpp_int(fixed) 256 construct0.00363363
+cpp_int(fixed) 256 construct(unsigned)0.00370466
+cpp_int(fixed) 256 construct(unsigned long long)0.00388115
+cpp_int(fixed) 256 % 0.334027
+cpp_int(fixed) 256 | 0.0529581
+cpp_int(fixed) 256 & 0.0501131
+cpp_int(fixed) 256 ^ 0.0530521
+cpp_int(fixed) 256 << 0.0507053
+cpp_int(fixed) 256 >> 0.039006
+cpp_int(fixed) 256 %(int)0.200647
+cpp_int(fixed) 256 |(int)0.0466958
+cpp_int(fixed) 256 &(int)0.0539427
+cpp_int(fixed) 256 ^(int)0.0476923
+cpp_int(fixed) 256 gcd 10.2671
+cpp_int(fixed) 256 + 0.0452762
+cpp_int(fixed) 256 - 0.0444216
+cpp_int(fixed) 256 * 0.112885
+cpp_int(fixed) 256 / 1.36886
+cpp_int(fixed) 256 + 0.0170491
+cpp_int(fixed) 256 - 0.0176783
+cpp_int(fixed) 256 * 0.107306
+cpp_int(fixed) 256 / 0.0340708
+cpp_int(fixed) 512 + 0.0760722
+cpp_int(fixed) 512 - 0.0756027
+cpp_int(fixed) 512 * 0.500399
+cpp_int(fixed) 512 / 0.560837
+cpp_int(fixed) 512 str 0.00708386
+cpp_int(fixed) 512 +(int)0.0524416
+cpp_int(fixed) 512 -(int)0.0503396
+cpp_int(fixed) 512 *(int)0.0658566
+cpp_int(fixed) 512 /(int)0.446782
+cpp_int(fixed) 512 construct0.00576526
+cpp_int(fixed) 512 construct(unsigned)0.0058189
+cpp_int(fixed) 512 construct(unsigned long long)0.00556537
+cpp_int(fixed) 512 % 0.539708
+cpp_int(fixed) 512 | 0.0676884
+cpp_int(fixed) 512 & 0.0588367
+cpp_int(fixed) 512 ^ 0.0695132
+cpp_int(fixed) 512 << 0.0597514
+cpp_int(fixed) 512 >> 0.0515714
+cpp_int(fixed) 512 %(int)0.377704
+cpp_int(fixed) 512 |(int)0.0536974
+cpp_int(fixed) 512 &(int)0.070425
+cpp_int(fixed) 512 ^(int)0.0540962
+cpp_int(fixed) 512 gcd 26.2762
+cpp_int(fixed) 512 + 0.0571069
+cpp_int(fixed) 512 - 0.0563175
+cpp_int(fixed) 512 * 0.177444
+cpp_int(fixed) 512 / 3.1662
+cpp_int(fixed) 512 + 0.0172628
+cpp_int(fixed) 512 - 0.0180756
+cpp_int(fixed) 512 * 0.171821
+cpp_int(fixed) 512 / 0.0444905
+cpp_int(fixed) 1024 + 0.121124
+cpp_int(fixed) 1024 - 0.114246
+cpp_int(fixed) 1024 * 1.54633
+cpp_int(fixed) 1024 / 0.975643
+cpp_int(fixed) 1024 str 0.0172514
+cpp_int(fixed) 1024 +(int)0.0728817
+cpp_int(fixed) 1024 -(int)0.0621059
+cpp_int(fixed) 1024 *(int)0.0948565
+cpp_int(fixed) 1024 /(int)0.84764
+cpp_int(fixed) 1024 construct0.00535599
+cpp_int(fixed) 1024 construct(unsigned)0.00836042
+cpp_int(fixed) 1024 construct(unsigned long long)0.00577713
+cpp_int(fixed) 1024 % 0.94847
+cpp_int(fixed) 1024 | 0.100936
+cpp_int(fixed) 1024 & 0.0774574
+cpp_int(fixed) 1024 ^ 0.09783
+cpp_int(fixed) 1024 << 0.0677088
+cpp_int(fixed) 1024 >> 0.0626121
+cpp_int(fixed) 1024 %(int)0.743202
+cpp_int(fixed) 1024 |(int)0.0819107
+cpp_int(fixed) 1024 &(int)0.112823
+cpp_int(fixed) 1024 ^(int)0.0806317
+cpp_int(fixed) 1024 gcd 76.2849
+cpp_int(fixed) 1024 + 0.0636724
+cpp_int(fixed) 1024 - 0.06467
+cpp_int(fixed) 1024 * 0.303514
+cpp_int(fixed) 1024 / 8.04418
+cpp_int(fixed) 1024 + 0.0181245
+cpp_int(fixed) 1024 - 0.0190581
+cpp_int(fixed) 1024 * 0.299236
+cpp_int(fixed) 1024 / 0.106788
+cpp_int 128 + 0.0273725
+cpp_int 128 - 0.0303219
+cpp_int 128 * 0.0774619
+cpp_int 128 / 0.589941
+cpp_int 128 str 0.00189808
+cpp_int 128 +(int)0.0159069
+cpp_int 128 -(int)0.0151244
+cpp_int 128 *(int)0.0235876
+cpp_int 128 /(int)0.235955
+cpp_int 128 construct0.00293927
+cpp_int 128 construct(unsigned)0.00270684
+cpp_int 128 construct(unsigned long long)0.00719854
+cpp_int 128 % 0.37333
+cpp_int 128 | 0.030991
+cpp_int 128 & 0.031605
+cpp_int 128 ^ 0.0318172
+cpp_int 128 << 0.0256107
+cpp_int 128 >> 0.0237523
+cpp_int 128 %(int)0.104856
+cpp_int 128 |(int)0.0280516
+cpp_int 128 &(int)0.0377678
+cpp_int 128 ^(int)0.0283305
+cpp_int 128 gcd 4.98644
+cpp_int 128 + 0.0283071
+cpp_int 128 - 0.027289
+cpp_int 128 * 0.0584001
+cpp_int 128 / 0.733741
+cpp_int 128 + 0.0196594
+cpp_int 128 - 0.0210968
+cpp_int 128 * 7.6372
+cpp_int 128 / 0.0578293
+cpp_int 256 + 0.0384835
+cpp_int 256 - 0.0402028
+cpp_int 256 * 0.211395
+cpp_int 256 / 0.708882
+cpp_int 256 str 0.00391656
+cpp_int 256 +(int)0.0218386
+cpp_int 256 -(int)0.017199
+cpp_int 256 *(int)0.0318939
+cpp_int 256 /(int)0.35212
+cpp_int 256 construct0.00277479
+cpp_int 256 construct(unsigned)0.0030529
+cpp_int 256 construct(unsigned long long)0.00725455
+cpp_int 256 % 0.673748
+cpp_int 256 | 0.0429658
+cpp_int 256 & 0.0455929
+cpp_int 256 ^ 0.0425243
+cpp_int 256 << 0.0401135
+cpp_int 256 >> 0.0302534
+cpp_int 256 %(int)0.203012
+cpp_int 256 |(int)0.0363929
+cpp_int 256 &(int)0.0471524
+cpp_int 256 ^(int)0.0353555
+cpp_int 256 gcd 11.1816
+cpp_int 256 + 0.030223
+cpp_int 256 - 0.0319489
+cpp_int 256 * 0.0885733
+cpp_int 256 / 1.62706
+cpp_int 256 + 0.0215291
+cpp_int 256 - 0.0213343
+cpp_int 256 * 7.7121
+cpp_int 256 / 0.0615507
+cpp_int 512 + 0.0561351
+cpp_int 512 - 0.0543342
+cpp_int 512 * 0.703234
+cpp_int 512 / 0.924042
+cpp_int 512 str 0.00832019
+cpp_int 512 +(int)0.0316584
+cpp_int 512 -(int)0.0248084
+cpp_int 512 *(int)0.0427792
+cpp_int 512 /(int)0.568032
+cpp_int 512 construct0.0028102
+cpp_int 512 construct(unsigned)0.00288857
+cpp_int 512 construct(unsigned long long)0.00723891
+cpp_int 512 % 0.701584
+cpp_int 512 | 0.0537846
+cpp_int 512 & 0.0546439
+cpp_int 512 ^ 0.0542436
+cpp_int 512 << 0.0436188
+cpp_int 512 >> 0.0355247
+cpp_int 512 %(int)0.391566
+cpp_int 512 |(int)0.0418143
+cpp_int 512 &(int)0.0647085
+cpp_int 512 ^(int)0.041758
+cpp_int 512 gcd 27.2257
+cpp_int 512 + 0.0382495
+cpp_int 512 - 0.0386744
+cpp_int 512 * 0.14417
+cpp_int 512 / 3.61202
+cpp_int 512 + 0.0228565
+cpp_int 512 - 0.0222868
+cpp_int 512 * 7.72815
+cpp_int 512 / 0.0732298
+cpp_int 1024 + 0.0928746
+cpp_int 1024 - 0.0853837
+cpp_int 1024 * 2.6591
+cpp_int 1024 / 1.38142
+cpp_int 1024 str 0.0221599
+cpp_int 1024 +(int)0.0430289
+cpp_int 1024 -(int)0.0331224
+cpp_int 1024 *(int)0.0668616
+cpp_int 1024 /(int)0.989885
+cpp_int 1024 construct0.00277298
+cpp_int 1024 construct(unsigned)0.00265201
+cpp_int 1024 construct(unsigned long long)0.00732796
+cpp_int 1024 % 1.14369
+cpp_int 1024 | 0.0827684
+cpp_int 1024 & 0.0843863
+cpp_int 1024 ^ 0.08333
+cpp_int 1024 << 0.0628544
+cpp_int 1024 >> 0.044717
+cpp_int 1024 %(int)0.768511
+cpp_int 1024 |(int)0.0527075
+cpp_int 1024 &(int)0.10089
+cpp_int 1024 ^(int)0.0538323
+cpp_int 1024 gcd 73.3735
+cpp_int 1024 + 0.0463315
+cpp_int 1024 - 0.0468398
+cpp_int 1024 * 0.255279
+cpp_int 1024 / 8.42528
+cpp_int 1024 + 0.0227402
+cpp_int 1024 - 0.0234526
+cpp_int 1024 * 7.86395
+cpp_int 1024 / 0.123568
+cpp_rational 128 + 18.0021
+cpp_rational 128 - 18.0006
+cpp_rational 128 * 31.5924
+cpp_rational 128 / 65.714
+cpp_rational 128 str 0.020339
+cpp_rational 128 +(int)2.47739
+cpp_rational 128 -(int)2.47959
+cpp_rational 128 *(int)2.4377
+cpp_rational 128 /(int)2.50843
+cpp_rational 128 construct0.0102665
+cpp_rational 128 construct(unsigned)0.0624887
+cpp_rational 128 construct(unsigned long long)0.0658436
+cpp_rational 128 + 2.58812
+cpp_rational 128 - 2.60864
+cpp_rational 128 * 5.53837
+cpp_rational 128 / 5.63033
+cpp_rational 128 + 2.68363
+cpp_rational 128 - 2.72926
+cpp_rational 128 * 57.9393
+cpp_rational 128 / 58.0332
+cpp_rational 256 + 46.3981
+cpp_rational 256 - 46.4818
+cpp_rational 256 * 86.0189
+cpp_rational 256 / 172.8
+cpp_rational 256 str 0.0517328
+cpp_rational 256 +(int)2.92179
+cpp_rational 256 -(int)2.90579
+cpp_rational 256 *(int)2.91325
+cpp_rational 256 /(int)3.00689
+cpp_rational 256 construct0.0101737
+cpp_rational 256 construct(unsigned)0.0609531
+cpp_rational 256 construct(unsigned long long)0.0665504
+cpp_rational 256 + 3.0953
+cpp_rational 256 - 3.08277
+cpp_rational 256 * 6.78796
+cpp_rational 256 / 6.90941
+cpp_rational 256 + 3.15142
+cpp_rational 256 - 3.19882
+cpp_rational 256 * 59.3172
+cpp_rational 256 / 59.5431
+cpp_rational 512 + 108.57
+cpp_rational 512 - 108.81
+cpp_rational 512 * 202.007
+cpp_rational 512 / 348.46
+cpp_rational 512 str 0.119248
+cpp_rational 512 +(int)3.80252
+cpp_rational 512 -(int)3.80714
+cpp_rational 512 *(int)3.94768
+cpp_rational 512 /(int)4.00588
+cpp_rational 512 construct0.0101965
+cpp_rational 512 construct(unsigned)0.0613968
+cpp_rational 512 construct(unsigned long long)0.0659082
+cpp_rational 512 + 4.00751
+cpp_rational 512 - 4.0117
+cpp_rational 512 * 9.43852
+cpp_rational 512 / 9.39508
+cpp_rational 512 + 4.05684
+cpp_rational 512 - 4.08474
+cpp_rational 512 * 61.8998
+cpp_rational 512 / 61.9712
+cpp_rational 1024 + 252.723
+cpp_rational 1024 - 253.81
+cpp_rational 1024 * 484.128
+cpp_rational 1024 / 834.057
+cpp_rational 1024 str 0.286067
+cpp_rational 1024 +(int)5.51612
+cpp_rational 1024 -(int)5.51949
+cpp_rational 1024 *(int)5.87507
+cpp_rational 1024 /(int)5.92837
+cpp_rational 1024 construct0.0102909
+cpp_rational 1024 construct(unsigned)0.062674
+cpp_rational 1024 construct(unsigned long long)0.0659089
+cpp_rational 1024 + 5.7444
+cpp_rational 1024 - 5.73296
+cpp_rational 1024 * 15.1475
+cpp_rational 1024 / 14.9497
+cpp_rational 1024 + 5.80438
+cpp_rational 1024 - 5.86
+cpp_rational 1024 * 67.4139
+cpp_rational 1024 / 67.4254
+mpq_rational 128 + 3.16879
+mpq_rational 128 - 3.18835
+mpq_rational 128 * 5.96709
+mpq_rational 128 / 15.0571
+mpq_rational 128 str 0.0037011
+mpq_rational 128 +(int)0.669634
+mpq_rational 128 -(int)0.666993
+mpq_rational 128 *(int)1.18047
+mpq_rational 128 /(int)1.43177
+mpq_rational 128 construct0.383107
+mpq_rational 128 construct(unsigned)0.394551
+mpq_rational 128 construct(unsigned long long)2.13183
+mpq_rational 128 + 2.33701
+mpq_rational 128 - 2.33227
+mpq_rational 128 * 4.15268
+mpq_rational 128 / 4.26818
+mpq_rational 128 + 2.33097
+mpq_rational 128 - 2.31793
+mpq_rational 128 * 9.34086
+mpq_rational 128 / 9.74135
+mpq_rational 256 + 6.93507
+mpq_rational 256 - 6.90939
+mpq_rational 256 * 12.9674
+mpq_rational 256 / 27.1144
+mpq_rational 256 str 0.00573278
+mpq_rational 256 +(int)0.707818
+mpq_rational 256 -(int)0.719174
+mpq_rational 256 *(int)1.22229
+mpq_rational 256 /(int)1.46082
+mpq_rational 256 construct0.381537
+mpq_rational 256 construct(unsigned)0.390987
+mpq_rational 256 construct(unsigned long long)2.12727
+mpq_rational 256 + 2.4159
+mpq_rational 256 - 2.41594
+mpq_rational 256 * 4.3447
+mpq_rational 256 / 4.43342
+mpq_rational 256 + 2.40187
+mpq_rational 256 - 2.39792
+mpq_rational 256 * 9.51195
+mpq_rational 256 / 9.65697
+mpq_rational 512 + 16.0886
+mpq_rational 512 - 16.1169
+mpq_rational 512 * 29.597
+mpq_rational 512 / 54.8579
+mpq_rational 512 str 0.012222
+mpq_rational 512 +(int)0.812783
+mpq_rational 512 -(int)0.810939
+mpq_rational 512 *(int)1.37678
+mpq_rational 512 /(int)1.6328
+mpq_rational 512 construct0.381355
+mpq_rational 512 construct(unsigned)0.392309
+mpq_rational 512 construct(unsigned long long)2.1179
+mpq_rational 512 + 2.55999
+mpq_rational 512 - 2.52842
+mpq_rational 512 * 4.82251
+mpq_rational 512 / 4.88079
+mpq_rational 512 + 2.5091
+mpq_rational 512 - 2.50572
+mpq_rational 512 * 9.90285
+mpq_rational 512 / 10.0077
+mpq_rational 1024 + 38.8883
+mpq_rational 1024 - 38.9096
+mpq_rational 1024 * 71.0635
+mpq_rational 1024 / 123.985
+mpq_rational 1024 str 0.0291802
+mpq_rational 1024 +(int)0.906471
+mpq_rational 1024 -(int)0.908293
+mpq_rational 1024 *(int)1.52386
+mpq_rational 1024 /(int)1.78575
+mpq_rational 1024 construct0.383461
+mpq_rational 1024 construct(unsigned)0.393504
+mpq_rational 1024 construct(unsigned long long)2.12279
+mpq_rational 1024 + 2.67794
+mpq_rational 1024 - 2.65991
+mpq_rational 1024 * 5.4209
+mpq_rational 1024 / 5.47417
+mpq_rational 1024 + 2.66144
+mpq_rational 1024 - 2.64168
+mpq_rational 1024 * 10.4664
+mpq_rational 1024 / 10.6781
+tommath_int 128 + 0.0222815
+tommath_int 128 - 0.027712
+tommath_int 128 * 0.113094
+tommath_int 128 / 3.09636
+tommath_int 128 str 0.0175165
+tommath_int 128 +(int)0.205506
+tommath_int 128 -(int)0.203148
+tommath_int 128 *(int)0.245897
+tommath_int 128 /(int)2.08045
+tommath_int 128 construct0.207455
+tommath_int 128 construct(unsigned)0.477971
+tommath_int 128 construct(unsigned long long)0.709516
+tommath_int 128 % 3.15171
+tommath_int 128 | 0.153434
+tommath_int 128 & 0.153508
+tommath_int 128 ^ 0.153931
+tommath_int 128 << 0.0408165
+tommath_int 128 >> 0.324163
+tommath_int 128 %(int)2.11648
+tommath_int 128 |(int)0.376671
+tommath_int 128 &(int)0.389144
+tommath_int 128 ^(int)0.374303
+tommath_int 128 gcd 12.5322
+tommath_int 128 + 0.514965
+tommath_int 128 - 0.517555
+tommath_int 128 * 0.607102
+tommath_int 128 / 2.36098
+tommath_int 128 + 0.510608
+tommath_int 128 - 0.520979
+tommath_int 128 * 18.5642
+tommath_int 128 / 1.13357
+tommath_int 256 + 0.0322049
+tommath_int 256 - 0.0407704
+tommath_int 256 * 0.346903
+tommath_int 256 / 4.01311
+tommath_int 256 str 0.0409078
+tommath_int 256 +(int)0.211847
+tommath_int 256 -(int)0.206481
+tommath_int 256 *(int)0.26894
+tommath_int 256 /(int)2.7099
+tommath_int 256 construct0.208012
+tommath_int 256 construct(unsigned)0.470752
+tommath_int 256 construct(unsigned long long)0.709045
+tommath_int 256 % 4.08522
+tommath_int 256 | 0.170093
+tommath_int 256 & 0.176384
+tommath_int 256 ^ 0.172198
+tommath_int 256 << 0.0698155
+tommath_int 256 >> 0.383757
+tommath_int 256 %(int)2.74052
+tommath_int 256 |(int)0.375206
+tommath_int 256 &(int)0.389768
+tommath_int 256 ^(int)0.379255
+tommath_int 256 gcd 26.1755
+tommath_int 256 + 0.530504
+tommath_int 256 - 0.527832
+tommath_int 256 * 0.648438
+tommath_int 256 / 3.16803
+tommath_int 256 + 0.526199
+tommath_int 256 - 0.527479
+tommath_int 256 * 18.624
+tommath_int 256 / 1.1208
+tommath_int 512 + 0.0455267
+tommath_int 512 - 0.0515883
+tommath_int 512 * 0.999026
+tommath_int 512 / 5.95775
+tommath_int 512 str 0.111392
+tommath_int 512 +(int)0.227429
+tommath_int 512 -(int)0.219998
+tommath_int 512 *(int)0.31746
+tommath_int 512 /(int)4.1339
+tommath_int 512 construct0.205622
+tommath_int 512 construct(unsigned)0.473807
+tommath_int 512 construct(unsigned long long)0.703879
+tommath_int 512 % 5.70483
+tommath_int 512 | 0.179084
+tommath_int 512 & 0.182373
+tommath_int 512 ^ 0.183434
+tommath_int 512 << 0.0973643
+tommath_int 512 >> 0.398354
+tommath_int 512 %(int)3.96918
+tommath_int 512 |(int)0.381428
+tommath_int 512 &(int)0.40432
+tommath_int 512 ^(int)0.390434
+tommath_int 512 gcd 56.7747
+tommath_int 512 + 0.546222
+tommath_int 512 - 0.53408
+tommath_int 512 * 0.718764
+tommath_int 512 / 5.07545
+tommath_int 512 + 0.543084
+tommath_int 512 - 0.535411
+tommath_int 512 * 18.745
+tommath_int 512 / 1.15084
+tommath_int 1024 + 0.074223
+tommath_int 1024 - 0.0786205
+tommath_int 1024 * 3.20269
+tommath_int 1024 / 12.7383
+tommath_int 1024 str 0.345861
+tommath_int 1024 +(int)0.250477
+tommath_int 1024 -(int)0.2372
+tommath_int 1024 *(int)0.408933
+tommath_int 1024 /(int)9.04346
+tommath_int 1024 construct0.207377
+tommath_int 1024 construct(unsigned)0.475755
+tommath_int 1024 construct(unsigned long long)0.712949
+tommath_int 1024 % 12.6845
+tommath_int 1024 | 0.436588
+tommath_int 1024 & 0.429721
+tommath_int 1024 ^ 0.429478
+tommath_int 1024 << 0.167289
+tommath_int 1024 >> 0.570323
+tommath_int 1024 %(int)9.09202
+tommath_int 1024 |(int)0.622404
+tommath_int 1024 &(int)0.653128
+tommath_int 1024 ^(int)0.62285
+tommath_int 1024 gcd 132.299
+tommath_int 1024 + 0.578521
+tommath_int 1024 - 0.552649
+tommath_int 1024 * 0.871648
+tommath_int 1024 / 12.2672
+tommath_int 1024 + 0.568301
+tommath_int 1024 - 0.54931
+tommath_int 1024 * 19.0954
+tommath_int 1024 / 1.21165
+cpp_dec_float 50 + 0.0250949
+cpp_dec_float 50 - 0.0264782
+cpp_dec_float 50 * 0.163403
+cpp_dec_float 50 / 3.9502
+cpp_dec_float 50 str 0.0207318
+cpp_dec_float 50 +(int)0.0441266
+cpp_dec_float 50 -(int)0.0442578
+cpp_dec_float 50 *(int)0.234992
+cpp_dec_float 50 /(int)1.81469
+cpp_dec_float 50 construct0.00925753
+cpp_dec_float 50 construct(unsigned)0.0588752
+cpp_dec_float 50 construct(unsigned long long)0.0587691
+cpp_dec_float 50 + 0.0770875
+cpp_dec_float 50 - 0.0741921
+cpp_dec_float 50 * 0.329282
+cpp_dec_float 50 / 1.9701
+cpp_dec_float 50 + 0.0640148
+cpp_dec_float 50 - 0.0643402
+cpp_dec_float 50 * 0.321363
+cpp_dec_float 50 / 1.97464
+cpp_dec_float 100 + 0.0291508
+cpp_dec_float 100 - 0.0307447
+cpp_dec_float 100 * 0.284182
+cpp_dec_float 100 / 7.68823
+cpp_dec_float 100 str 0.0328218
+cpp_dec_float 100 +(int)0.0558389
+cpp_dec_float 100 -(int)0.0563278
+cpp_dec_float 100 *(int)0.460635
+cpp_dec_float 100 /(int)3.62471
+cpp_dec_float 100 construct0.0263234
+cpp_dec_float 100 construct(unsigned)0.0747853
+cpp_dec_float 100 construct(unsigned long long)0.076338
+cpp_dec_float 100 + 0.0845054
+cpp_dec_float 100 - 0.0844193
+cpp_dec_float 100 * 0.582119
+cpp_dec_float 100 / 3.8773
+cpp_dec_float 100 + 0.0708668
+cpp_dec_float 100 - 0.0730765
+cpp_dec_float 100 * 0.574512
+cpp_dec_float 100 / 3.83437
+cpp_dec_float 500 + 0.0630915
+cpp_dec_float 500 - 0.0651113
+cpp_dec_float 500 * 2.22501
+cpp_dec_float 500 / 50.6121
+cpp_dec_float 500 str 0.131293
+cpp_dec_float 500 +(int)0.0935946
+cpp_dec_float 500 -(int)0.0950432
+cpp_dec_float 500 *(int)4.36195
+cpp_dec_float 500 /(int)24.4855
+cpp_dec_float 500 construct0.0306104
+cpp_dec_float 500 construct(unsigned)0.114772
+cpp_dec_float 500 construct(unsigned long long)0.117075
+cpp_dec_float 500 + 0.12407
+cpp_dec_float 500 - 0.122646
+cpp_dec_float 500 * 4.75508
+cpp_dec_float 500 / 25.1602
+cpp_dec_float 500 + 0.0865073
+cpp_dec_float 500 - 0.0929075
+cpp_dec_float 500 * 4.74128
+cpp_dec_float 500 / 25.1175
+mpfr_float 50 + 0.0624318
+mpfr_float 50 - 0.0764497
+mpfr_float 50 * 0.342248
+mpfr_float 50 / 1.69721
+mpfr_float 50 str 0.0289013
+mpfr_float 50 +(int)0.121683
+mpfr_float 50 -(int)0.149605
+mpfr_float 50 *(int)0.1548
+mpfr_float 50 /(int)0.213367
+mpfr_float 50 construct0.214552
+mpfr_float 50 construct(unsigned)0.293892
+mpfr_float 50 construct(unsigned long long)0.638307
+mpfr_float 50 + 0.553442
+mpfr_float 50 - 0.565687
+mpfr_float 50 * 0.841214
+mpfr_float 50 / 1.26072
+mpfr_float 50 + 0.537349
+mpfr_float 50 - 0.561924
+mpfr_float 50 * 0.833423
+mpfr_float 50 / 1.25318
+mpfr_float 100 + 0.0669494
+mpfr_float 100 - 0.0820912
+mpfr_float 100 * 0.478422
+mpfr_float 100 / 2.33995
+mpfr_float 100 str 0.0390764
+mpfr_float 100 +(int)0.117387
+mpfr_float 100 -(int)0.150557
+mpfr_float 100 *(int)0.166496
+mpfr_float 100 /(int)0.267439
+mpfr_float 100 construct0.222594
+mpfr_float 100 construct(unsigned)0.297568
+mpfr_float 100 construct(unsigned long long)0.643108
+mpfr_float 100 + 0.573918
+mpfr_float 100 - 0.592139
+mpfr_float 100 * 0.978674
+mpfr_float 100 / 1.5879
+mpfr_float 100 + 0.561143
+mpfr_float 100 - 0.580528
+mpfr_float 100 * 0.97887
+mpfr_float 100 / 1.58378
+mpfr_float 500 + 0.0817812
+mpfr_float 500 - 0.0975533
+mpfr_float 500 * 3.8308
+mpfr_float 500 / 13.8283
+mpfr_float 500 str 0.156188
+mpfr_float 500 +(int)0.129266
+mpfr_float 500 -(int)0.16446
+mpfr_float 500 *(int)0.273431
+mpfr_float 500 /(int)0.731526
+mpfr_float 500 construct0.222587
+mpfr_float 500 construct(unsigned)0.311108
+mpfr_float 500 construct(unsigned long long)0.653074
+mpfr_float 500 + 0.667956
+mpfr_float 500 - 0.684152
+mpfr_float 500 * 1.2661
+mpfr_float 500 / 7.46167
+mpfr_float 500 + 0.642822
+mpfr_float 500 - 0.65164
+mpfr_float 500 * 1.25714
+mpfr_float 500 / 7.46171
+[section:float_performance Float Type Perfomance]
+[table Operator *
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.321363s)][1.0169 (0.574512s)][6.76401 (4.74128s)]]
+[[gmp_float][1.7169 (0.551747s)][[*1] (0.564962s)][[*1] (0.700957s)]]
+[[mpfr_float][2.5934 (0.833423s)][1.73263 (0.97887s)][1.79346 (1.25714s)]]
+]
+[table Operator *(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][5.56675 (0.234992s)][9.32996 (0.460635s)][50.8459 (4.36195s)]]
+[[gmp_float][[*1] (0.0422135s)][[*1] (0.0493716s)][[*1] (0.0857876s)]]
+[[mpfr_float][3.66707 (0.1548s)][3.37231 (0.166496s)][3.1873 (0.273431s)]]
+]
+[table Operator +
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0640148s)][[*1] (0.0708668s)][[*1] (0.0865073s)]]
+[[gmp_float][7.467 (0.477999s)][6.72671 (0.476701s)][5.67136 (0.490614s)]]
+[[mpfr_float][8.39413 (0.537349s)][7.91828 (0.561143s)][7.43085 (0.642822s)]]
+]
+[table Operator +(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.33358 (0.0441266s)][1.4433 (0.0558389s)][1.44838 (0.0935946s)]]
+[[gmp_float][[*1] (0.0330888s)][[*1] (0.0386882s)][[*1] (0.0646201s)]]
+[[mpfr_float][3.67747 (0.121683s)][3.03419 (0.117387s)][2.00041 (0.129266s)]]
+]
+[table Operator -
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0643402s)][[*1] (0.0730765s)][[*1] (0.0929075s)]]
+[[gmp_float][7.76625 (0.499682s)][6.89067 (0.503546s)][5.89566 (0.547751s)]]
+[[mpfr_float][8.73364 (0.561924s)][7.94411 (0.580528s)][7.01385 (0.65164s)]]
+]
+[table Operator -(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0442578s)][[*1] (0.0563278s)][[*1] (0.0950432s)]]
+[[gmp_float][3.0379 (0.134451s)][2.39847 (0.1351s)][1.86101 (0.176876s)]]
+[[mpfr_float][3.38031 (0.149605s)][2.67288 (0.150557s)][1.73037 (0.16446s)]]
+]
+[table Operator /
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][2.20938 (1.97464s)][3.71086 (3.83437s)][11.2059 (25.1175s)]]
+[[gmp_float][[*1] (0.893752s)][[*1] (1.03328s)][[*1] (2.24146s)]]
+[[mpfr_float][1.40216 (1.25318s)][1.53276 (1.58378s)][3.32895 (7.46171s)]]
+]
+[table Operator /(int)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][10.0596 (1.81469s)][15.5048 (3.62471s)][34.4767 (24.4855s)]]
+[[gmp_float][[*1] (0.180393s)][[*1] (0.23378s)][[*1] (0.710204s)]]
+[[mpfr_float][1.18279 (0.213367s)][1.14398 (0.267439s)][1.03002 (0.731526s)]]
+]
+[table Operator construct
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.00925753s)][[*1] (0.0263234s)][[*1] (0.0306104s)]]
+[[gmp_float][21.32 (0.19737s)][7.4686 (0.196599s)][6.73181 (0.206063s)]]
+[[mpfr_float][23.176 (0.214552s)][8.45613 (0.222594s)][7.27162 (0.222587s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0587691s)][[*1] (0.076338s)][[*1] (0.117075s)]]
+[[gmp_float][8.84863 (0.520025s)][6.80343 (0.51936s)][4.59554 (0.538021s)]]
+[[mpfr_float][10.8613 (0.638307s)][8.42448 (0.643108s)][5.57826 (0.653074s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][[*1] (0.0588752s)][[*1] (0.0747853s)][[*1] (0.114772s)]]
+[[gmp_float][3.53421 (0.208078s)][2.76875 (0.207062s)][1.89088 (0.217019s)]]
+[[mpfr_float][4.99178 (0.293892s)][3.97896 (0.297568s)][2.71067 (0.311108s)]]
+]
+[table Operator str
+[[Backend][50 Bits][100 Bits][500 Bits]]
+[[cpp_dec_float][1.5616 (0.0207318s)][1.61725 (0.0328218s)][[*1] (0.131293s)]]
+[[gmp_float][[*1] (0.013276s)][[*1] (0.0202949s)][1.07517 (0.141162s)]]
+[[mpfr_float][2.17696 (0.0289013s)][1.92543 (0.0390764s)][1.18962 (0.156188s)]]
+]
+[endsect]
+[section:integer_performance Integer Type Perfomance]
+[table Operator %
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][5.31184 (0.37333s)][1.99944e+236 (0.673748s)][2.08204e+236 (0.701584s)][3.39405e+236 (1.14369s)]]
+[[cpp_int(fixed)][1.10616 (0.0777437s)][5.8492e+235 (0.1971s)][9.91271e+235 (0.334027s)][1.60165e+236 (0.539708s)][-1.#INF (0.94847s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0702826s)]]
+[[gmp_int][9.12715 (0.64148s)][2.088e+236 (0.703592s)][2.43295e+236 (0.819828s)][3.02578e+236 (1.01959s)]]
+[[tommath_int][44.8434 (3.15171s)][1.21234e+237 (4.08522s)][1.69298e+237 (5.70483s)][3.7643e+237 (12.6845s)]]
+]
+[table Operator %(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][3.51789 (0.104856s)][-1.#INF (0.203012s)][-1.#INF (0.391566s)][-1.#INF (0.768511s)]]
+[[cpp_int(fixed)][1.14548 (0.0341425s)][-1.#INF (0.103684s)][-1.#INF (0.200647s)][-1.#INF (0.377704s)][-1.#INF (0.743202s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0298064s)]]
+[[gmp_int][1.91945 (0.0572117s)][-1.#INF (0.10258s)][-1.#INF (0.188529s)][-1.#INF (0.355222s)]]
+[[tommath_int][71.0078 (2.11648s)][-1.#INF (2.74052s)][-1.#INF (3.96918s)][-1.#INF (9.09202s)]]
+]
+[table Operator &
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][12.079 (0.031605s)][-1.11772e+007 (0.0455929s)][-1.33961e+007 (0.0546439s)][-2.06875e+007 (0.0843863s)]]
+[[cpp_int(fixed)][4.74538 (0.0124165s)][-8.36978e+006 (0.0341411s)][-1.22854e+007 (0.0501131s)][-1.4424e+007 (0.0588367s)][-1.#INF (0.0774574s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00261653s)]]
+[[gmp_int][20.5664 (0.0538128s)][-1.59881e+007 (0.0652169s)][-2.25796e+007 (0.092104s)][-3.5403e+007 (0.144412s)]]
+[[tommath_int][58.6685 (0.153508s)][-4.3241e+007 (0.176384s)][-4.47093e+007 (0.182373s)][-1.05347e+008 (0.429721s)]]
+]
+[table Operator &(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][23.3956 (0.0377678s)][-7.85844e+307 (0.0471524s)][-1.07843e+308 (0.0647085s)][-1.68143e+308 (0.10089s)]]
+[[cpp_int(fixed)][6.49083 (0.0104782s)][-6.95612e+307 (0.0417383s)][-8.99012e+307 (0.0539427s)][-1.17371e+308 (0.070425s)][-1.#INF (0.112823s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00161431s)]]
+[[gmp_int][87.5331 (0.141306s)][-1.#INF (0.139398s)][-1.#INF (0.142498s)][-1.#INF (0.141249s)]]
+[[tommath_int][241.059 (0.389144s)][-1.#INF (0.389768s)][-1.#INF (0.40432s)][-1.#INF (0.653128s)]]
+]
+[table Operator *
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1715.93 (7.6372s)][-4.15607e+276 (7.7121s)][-4.16472e+276 (7.72815s)][-4.23791e+276 (7.86395s)]]
+[[cpp_int(fixed)][1.27579 (0.00567824s)][-3.62916e+274 (0.0673436s)][-5.78275e+274 (0.107306s)][-9.2595e+274 (0.171821s)][-1.#INF (0.299236s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00445077s)]]
+[[gmp_int][710.595 (3.1627s)][-1.69816e+276 (3.15114s)][-1.70883e+276 (3.17094s)][-1.7293e+276 (3.20893s)]]
+[[tommath_int][4171.01 (18.5642s)][-1.00365e+277 (18.624s)][-1.01017e+277 (18.745s)][-1.02906e+277 (19.0954s)]]
+]
+[table Operator *(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.97316 (0.0235876s)][1.#INF (0.0318939s)][1.#INF (0.0427792s)][1.#INF (0.0668616s)]]
+[[cpp_int(fixed)][2.32007 (0.00548722s)][1.#INF (0.0328109s)][1.#INF (0.049867s)][1.#INF (0.0658566s)][-1.#INF (0.0948565s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00236511s)]]
+[[gmp_int][9.62157 (0.022756s)][1.#INF (0.0282672s)][1.#INF (0.0361075s)][1.#INF (0.0518882s)]]
+[[tommath_int][103.969 (0.245897s)][1.#INF (0.26894s)][1.#INF (0.31746s)][1.#INF (0.408933s)]]
+]
+[table Operator +
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.74543 (0.0196594s)][3.98952e+276 (0.0215291s)][4.2355e+276 (0.0228565s)][4.21393e+276 (0.0227402s)]]
+[[cpp_int(fixed)][2.13187 (0.00430062s)][3.11951e+276 (0.0168342s)][3.15933e+276 (0.0170491s)][3.19893e+276 (0.0172628s)][-1.#INF (0.0181245s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0020173s)]]
+[[gmp_int][337.759 (0.68136s)][1.27731e+278 (0.68929s)][1.28647e+278 (0.694235s)][1.27865e+278 (0.690013s)]]
+[[tommath_int][253.115 (0.510608s)][9.75089e+277 (0.526199s)][1.00638e+278 (0.543084s)][1.05311e+278 (0.568301s)]]
+]
+[table Operator +(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.81588 (0.0159069s)][-5.71737e+244 (0.0218386s)][-8.2882e+244 (0.0316584s)][-1.1265e+245 (0.0430289s)]]
+[[cpp_int(fixed)][3.92617 (0.00636247s)][-7.02443e+244 (0.0268311s)][-1.07535e+245 (0.0410749s)][-1.37293e+245 (0.0524416s)][-1.#INF (0.0728817s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00162053s)]]
+[[gmp_int][19.2059 (0.0311237s)][-1.12054e+245 (0.0428011s)][-1.74239e+245 (0.0665539s)][-2.83458e+245 (0.108272s)]]
+[[tommath_int][126.815 (0.205506s)][-5.54618e+245 (0.211847s)][-5.95413e+245 (0.227429s)][-6.55751e+245 (0.250477s)]]
+]
+[table Operator -
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][11.0409 (0.0210968s)][3.86227e+276 (0.0213343s)][4.03471e+276 (0.0222868s)][4.24576e+276 (0.0234526s)]]
+[[cpp_int(fixed)][2.02836 (0.00387577s)][3.06763e+276 (0.0169449s)][3.2004e+276 (0.0176783s)][3.27232e+276 (0.0180756s)][-1.#INF (0.0190581s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00191079s)]]
+[[gmp_int][356.496 (0.681187s)][1.23744e+278 (0.683532s)][1.2536e+278 (0.69246s)][1.25066e+278 (0.690838s)]]
+[[tommath_int][272.651 (0.520979s)][9.54925e+277 (0.527479s)][9.69283e+277 (0.535411s)][9.94446e+277 (0.54931s)]]
+]
+[table Operator -(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][9.24378 (0.0151244s)][-1.01975e-199 (0.017199s)][-1.47092e-199 (0.0248084s)][-1.96387e-199 (0.0331224s)]]
+[[cpp_int(fixed)][4.08494 (0.00668367s)][-1.43394e-199 (0.0241848s)][-2.18373e-199 (0.0368306s)][-2.98469e-199 (0.0503396s)][-1.#INF (0.0621059s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00163617s)]]
+[[gmp_int][18.693 (0.030585s)][-2.37422e-199 (0.0400434s)][-3.42818e-199 (0.0578194s)][-5.96116e-199 (0.100541s)]]
+[[tommath_int][124.161 (0.203148s)][-1.22425e-198 (0.206481s)][-1.30439e-198 (0.219998s)][-1.40639e-198 (0.2372s)]]
+]
+[table Operator /
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.96346 (0.0578293s)][-1.51814e+061 (0.0615507s)][-1.8062e+061 (0.0732298s)][-3.04778e+061 (0.123568s)]]
+[[cpp_int(fixed)][1.08704 (0.0320162s)][-8.07606e+060 (0.0327432s)][-8.40351e+060 (0.0340708s)][-1.09735e+061 (0.0444905s)][-1.#INF (0.106788s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0294528s)]]
+[[gmp_int][23.2741 (0.685487s)][-1.70068e+062 (0.689516s)][-1.6994e+062 (0.688995s)][-1.74523e+062 (0.707578s)]]
+[[tommath_int][38.4876 (1.13357s)][-2.76443e+062 (1.1208s)][-2.83854e+062 (1.15084s)][-2.98853e+062 (1.21165s)]]
+]
+[table Operator /(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][7.87676 (0.235955s)][1.#INF (0.35212s)][1.#INF (0.568032s)][1.#INF (0.989885s)]]
+[[cpp_int(fixed)][1.21173 (0.0362985s)][1.#INF (0.137619s)][1.#INF (0.253796s)][1.#INF (0.446782s)][-1.#INF (0.84764s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0299559s)]]
+[[gmp_int][1.87075 (0.0560401s)][1.#INF (0.0982823s)][1.#INF (0.183564s)][1.#INF (0.352238s)]]
+[[tommath_int][69.4504 (2.08045s)][1.#INF (2.7099s)][1.#INF (4.1339s)][1.#INF (9.04346s)]]
+]
+[table Operator <<
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][15.849 (0.0256107s)][-5.85461e+126 (0.0401135s)][-6.36621e+126 (0.0436188s)][-9.17366e+126 (0.0628544s)]]
+[[cpp_int(fixed)][3.19639 (0.00516511s)][-4.68379e+126 (0.0320915s)][-7.40049e+126 (0.0507053s)][-8.72078e+126 (0.0597514s)][-1.#INF (0.0677088s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00161592s)]]
+[[gmp_int][16.956 (0.0273994s)][-4.66649e+126 (0.031973s)][-6.88464e+126 (0.0471709s)][-1.05374e+127 (0.0721984s)]]
+[[tommath_int][25.259 (0.0408165s)][-1.01897e+127 (0.0698155s)][-1.42104e+127 (0.0973643s)][-2.4416e+127 (0.167289s)]]
+]
+[table Operator >>
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][14.6983 (0.0237523s)][-2.28921e+307 (0.0302534s)][-2.68808e+307 (0.0355247s)][-3.38364e+307 (0.044717s)]]
+[[cpp_int(fixed)][2.47217 (0.00399499s)][-2.21749e+307 (0.0293055s)][-2.9515e+307 (0.039006s)][-3.9023e+307 (0.0515714s)][-1.#INF (0.0626121s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00161599s)]]
+[[gmp_int][17.8366 (0.0288237s)][-2.3471e+307 (0.0310184s)][-2.55387e+307 (0.0337511s)][-2.9362e+307 (0.0388038s)]]
+[[tommath_int][200.597 (0.324163s)][-1.#INF (0.383757s)][-1.#INF (0.398354s)][-1.#INF (0.570323s)]]
+]
+[table Operator ^
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][7.95372 (0.0318172s)][1.21131 (0.0425243s)][1.02246 (0.0542436s)][1.19877 (0.08333s)]]
+[[cpp_int(fixed)][2.75762 (0.0110313s)][[*1] (0.0351059s)][[*1] (0.0530521s)][[*1] (0.0695132s)][-1.#INF (0.09783s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.0040003s)]]
+[[gmp_int][12.4289 (0.0497194s)][1.79507 (0.0630174s)][1.63955 (0.0869819s)][2.0012 (0.139109s)]]
+[[tommath_int][38.4798 (0.153931s)][4.9051 (0.172198s)][3.45761 (0.183434s)][6.17837 (0.429478s)]]
+]
+[table Operator ^(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][15.3547 (0.0283305s)][-8.92021e+307 (0.0353555s)][-1.05356e+308 (0.041758s)][-1.35819e+308 (0.0538323s)]]
+[[cpp_int(fixed)][5.81005 (0.0107199s)][-7.88073e+307 (0.0312355s)][-1.20328e+308 (0.0476923s)][-1.36485e+308 (0.0540962s)][-1.#INF (0.0806317s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00184507s)]]
+[[gmp_int][78.0102 (0.143934s)][-1.#INF (0.144825s)][-1.#INF (0.152773s)][-1.#INF (0.161662s)]]
+[[tommath_int][202.867 (0.374303s)][-1.#INF (0.379255s)][-1.#INF (0.390434s)][-1.#INF (0.62285s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.64088 (0.00293927s)][1.47161e+238 (0.00277479s)][1.49039e+238 (0.0028102s)][1.47064e+238 (0.00277298s)]]
+[[cpp_int(fixed)][1.45325 (0.00161745s)][8.73297e+237 (0.00164665s)][1.92709e+238 (0.00363363s)][3.0576e+238 (0.00576526s)][-1.#INF (0.00535599s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00111299s)]]
+[[gmp_int][176.266 (0.196182s)][1.06706e+240 (0.201199s)][1.04919e+240 (0.19783s)][1.04712e+240 (0.19744s)]]
+[[tommath_int][186.394 (0.207455s)][1.10319e+240 (0.208012s)][1.09052e+240 (0.205622s)][1.09982e+240 (0.207377s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][3.51152 (0.00719854s)][-2.80497e-148 (0.00725455s)][-2.79893e-148 (0.00723891s)][-2.83336e-148 (0.00732796s)]]
+[[cpp_int(fixed)][[*1] (0.00204998s)][-1.21019e-148 (0.00312994s)][-1.50065e-148 (0.00388115s)][-2.15185e-148 (0.00556537s)][-1.#INF (0.00577713s)]]
+[[cpp_int(unsigned, fixed)][1.17501 (0.00240876s)]]
+[[gmp_int][351.097 (0.719741s)][-2.82056e-146 (0.729487s)][-2.80186e-146 (0.724649s)][-2.79263e-146 (0.722262s)]]
+[[tommath_int][346.109 (0.709516s)][-2.74152e-146 (0.709045s)][-2.72155e-146 (0.703879s)][-2.75662e-146 (0.712949s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][2.44987 (0.00270684s)][1.90974 (0.0030529s)][[*1] (0.00288857s)][[*1] (0.00265201s)]]
+[[cpp_int(fixed)][1.89292 (0.00209147s)][[*1] (0.0015986s)][1.28253 (0.00370466s)][2.19414 (0.0058189s)][-1.#INF (0.00836042s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00110489s)]]
+[[gmp_int][186.546 (0.206113s)][132.175 (0.211295s)][71.6424 (0.206944s)][81.5339 (0.216229s)]]
+[[tommath_int][432.596 (0.477971s)][294.478 (0.470752s)][164.029 (0.473807s)][179.394 (0.475755s)]]
+]
+[table Operator gcd
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][8.27321 (4.98644s)][-1.#INF (11.1816s)][-1.#INF (27.2257s)][-1.#INF (73.3735s)]]
+[[cpp_int(fixed)][1.0026 (0.604291s)][-1.#INF (4.18006s)][-1.#INF (10.2671s)][-1.#INF (26.2762s)][-1.#INF (76.2849s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.602722s)]]
+[[gmp_int][4.06647 (2.45095s)][-1.#INF (5.89505s)][-1.#INF (13.6993s)][-1.#INF (33.2232s)]]
+[[tommath_int][20.7927 (12.5322s)][-1.#INF (26.1755s)][-1.#INF (56.7747s)][-1.#INF (132.299s)]]
+]
+[table Operator str
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][1.02246 (0.00189808s)][-3.42215e+178 (0.00391656s)][-7.26989e+178 (0.00832019s)][-1.93625e+179 (0.0221599s)]]
+[[cpp_int(fixed)][1.35564 (0.00251659s)][-1.36421e+178 (0.0015613s)][-2.59752e+178 (0.00297279s)][-6.18963e+178 (0.00708386s)][-1.#INF (0.0172514s)]]
+[[cpp_int(unsigned, fixed)][1.38149 (0.00256457s)]]
+[[gmp_int][[*1] (0.00185638s)][-3.01078e+178 (0.00344576s)][-5.40339e+178 (0.00618403s)][-1.26279e+179 (0.0144523s)]]
+[[tommath_int][9.43586 (0.0175165s)][-3.57438e+179 (0.0409078s)][-9.73304e+179 (0.111392s)][-3.02201e+180 (0.345861s)]]
+]
+[table Operator |
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][11.6542 (0.030991s)][-6.48076e+046 (0.0429658s)][-8.11261e+046 (0.0537846s)][-1.24844e+047 (0.0827684s)]]
+[[cpp_int(fixed)][4.09831 (0.0108982s)][-5.73378e+046 (0.0380136s)][-7.98794e+046 (0.0529581s)][-1.02098e+047 (0.0676884s)][-1.#INF (0.100936s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00265921s)]]
+[[gmp_int][17.8503 (0.0474678s)][-9.32586e+046 (0.0618281s)][-1.29209e+047 (0.0856626s)][-2.0526e+047 (0.136082s)]]
+[[tommath_int][57.6991 (0.153434s)][-2.5656e+047 (0.170093s)][-2.70121e+047 (0.179084s)][-6.58529e+047 (0.436588s)]]
+]
+[table Operator |(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_int][16.9457 (0.0280516s)][-4.17523e+307 (0.0363929s)][-4.79721e+307 (0.0418143s)][-6.04694e+307 (0.0527075s)]]
+[[cpp_int(fixed)][6.70551 (0.0111002s)][-3.64663e+307 (0.0317854s)][-5.35725e+307 (0.0466958s)][-6.16052e+307 (0.0536974s)][-1.#INF (0.0819107s)]]
+[[cpp_int(unsigned, fixed)][[*1] (0.00165538s)]]
+[[gmp_int][85.2488 (0.141119s)][-1.64044e+308 (0.142987s)][-1.78579e+308 (0.155656s)][-1.#INF (0.163236s)]]
+[[tommath_int][227.544 (0.376671s)][-1.#INF (0.375206s)][-1.#INF (0.381428s)][-1.#INF (0.622404s)]]
+]
+[endsect]
+[section:rational_performance Rational Type Perfomance]
+[table Operator *
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][6.20279 (57.9393s)][6.23608 (59.3172s)][6.25071 (61.8998s)][6.44097 (67.4139s)]]
+[[mpq_rational][[*1] (9.34086s)][[*1] (9.51195s)][[*1] (9.90285s)][[*1] (10.4664s)]]
+]
+[table Operator *(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][2.06502 (2.4377s)][2.38344 (2.91325s)][2.86734 (3.94768s)][3.8554 (5.87507s)]]
+[[mpq_rational][[*1] (1.18047s)][[*1] (1.22229s)][[*1] (1.37678s)][[*1] (1.52386s)]]
+]
+[table Operator +
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.1513 (2.68363s)][1.31207 (3.15142s)][1.61685 (4.05684s)][2.18092 (5.80438s)]]
+[[mpq_rational][[*1] (2.33097s)][[*1] (2.40187s)][[*1] (2.5091s)][[*1] (2.66144s)]]
+]
+[table Operator +(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][3.69962 (2.47739s)][4.12788 (2.92179s)][4.67839 (3.80252s)][6.08526 (5.51612s)]]
+[[mpq_rational][[*1] (0.669634s)][[*1] (0.707818s)][[*1] (0.812783s)][[*1] (0.906471s)]]
+]
+[table Operator -
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.17746 (2.72926s)][1.334 (3.19882s)][1.63017 (4.08474s)][2.21829 (5.86s)]]
+[[mpq_rational][[*1] (2.31793s)][[*1] (2.39792s)][[*1] (2.50572s)][[*1] (2.64168s)]]
+]
+[table Operator -(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][3.71756 (2.47959s)][4.04045 (2.90579s)][4.69474 (3.80714s)][6.07677 (5.51949s)]]
+[[mpq_rational][[*1] (0.666993s)][[*1] (0.719174s)][[*1] (0.810939s)][[*1] (0.908293s)]]
+]
+[table Operator /
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][5.95741 (58.0332s)][6.16582 (59.5431s)][6.19235 (61.9712s)][6.31439 (67.4254s)]]
+[[mpq_rational][[*1] (9.74135s)][[*1] (9.65697s)][[*1] (10.0077s)][[*1] (10.6781s)]]
+]
+[table Operator /(int)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][1.75198 (2.50843s)][2.05836 (3.00689s)][2.45339 (4.00588s)][3.31983 (5.92837s)]]
+[[mpq_rational][[*1] (1.43177s)][[*1] (1.46082s)][[*1] (1.6328s)][[*1] (1.78575s)]]
+]
+[table Operator construct
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0102665s)][[*1] (0.0101737s)][[*1] (0.0101965s)][[*1] (0.0102909s)]]
+[[mpq_rational][37.3164 (0.383107s)][37.5023 (0.381537s)][37.4005 (0.381355s)][37.2621 (0.383461s)]]
+]
+[table Operator construct(unsigned long long)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0658436s)][[*1] (0.0665504s)][[*1] (0.0659082s)][[*1] (0.0659089s)]]
+[[mpq_rational][32.3771 (2.13183s)][31.9648 (2.12727s)][32.1342 (2.1179s)][32.2079 (2.12279s)]]
+]
+[table Operator construct(unsigned)
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][[*1] (0.0624887s)][[*1] (0.0609531s)][[*1] (0.0613968s)][[*1] (0.062674s)]]
+[[mpq_rational][6.31396 (0.394551s)][6.41455 (0.390987s)][6.38973 (0.392309s)][6.27858 (0.393504s)]]
+]
+[table Operator str
+[[Backend][128 Bits][256 Bits][512 Bits][1024 Bits]]
+[[cpp_rational][5.4954 (0.020339s)][9.02403 (0.0517328s)][9.75685 (0.119248s)][9.80346 (0.286067s)]]
+[[mpq_rational][[*1] (0.0037011s)][[*1] (0.00573278s)][[*1] (0.012222s)][[*1] (0.0291802s)]]
+]
+[endsect]
diff --git a/libs/multiprecision/performance/performance_test.cpp b/libs/multiprecision/performance/performance_test.cpp
new file mode 100644
index 0000000000..be3daeee4d
--- /dev/null
+++ b/libs/multiprecision/performance/performance_test.cpp
@@ -0,0 +1,852 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_
+
+#define BOOST_CHRONO_HEADER_ONLY
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#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_BIN_FLOAT)
+# define TEST_MPF
+# define TEST_MPZ
+# define TEST_MPQ
+# define TEST_MPFR
+# define TEST_CPP_DEC_FLOAT
+# define TEST_MPQ
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF) || defined(TEST_MPZ) || defined(TEST_MPQ) || defined(TEST_MPZ_BOOST_RATIONAL)
+#include <boost/multiprecision/gmp.hpp>
+#include <boost/multiprecision/rational_adaptor.hpp>
+#endif
+#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
+#if defined(TEST_TOMMATH) || defined(TEST_TOMMATH_BOOST_RATIONAL)
+#include <boost/multiprecision/tommath.hpp>
+#include <boost/multiprecision/rational_adaptor.hpp>
+#endif
+#if defined(TEST_CPP_INT) || defined(TEST_CPP_INT_RATIONAL)
+#include <boost/multiprecision/cpp_int.hpp>
+#endif
+
+#include <boost/chrono.hpp>
+#include <vector>
+#include <map>
+#include <string>
+#include <cstring>
+#include <cctype>
+#include <iostream>
+#include <iomanip>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+
+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;
+};
+
+unsigned bits_wanted; // for integer types
+
+template <class T, int Type>
+struct tester
+{
+ tester()
+ {
+ a.assign(500, 0);
+ for(int i = 0; i < 500; ++i)
+ {
+ b.push_back(generate_random());
+ c.push_back(generate_random());
+ small.push_back(gen());
+ }
+ }
+ double test_add()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] + c[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_subtract()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] - c[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_add_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] + 1;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_subtract_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] - 1;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_multiply()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned k = 0; k < b.size(); ++k)
+ a[k] = b[k] * c[k];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_multiply_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] * 3;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_divide()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] / c[i] + b[i] / small[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_divide_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] / 3;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_str(const boost::mpl::false_&)
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = boost::lexical_cast<T>(boost::lexical_cast<std::string>(b[i]));
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_str(const boost::mpl::true_&)
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i].assign(b[i].str());
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_str()
+ {
+ return test_str(boost::is_class<T>());
+ }
+ //
+ // The following tests only work for integer types:
+ //
+ double test_mod()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] % c[i] + b[i] % small[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_mod_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] % 254;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_or()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] | c[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_or_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] | 234;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_and()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] & c[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_and_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] & 234;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_xor()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] ^ c[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_xor_int()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] ^ 234;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_complement()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = ~b[i];
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_left_shift()
+ {
+ int shift = std::numeric_limits<T>::is_bounded ? std::numeric_limits<T>::digits : bits_wanted;
+ shift /= 2;
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] << shift;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_right_shift()
+ {
+ int shift = std::numeric_limits<T>::is_bounded ? std::numeric_limits<T>::digits : bits_wanted;
+ shift /= 2;
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] >> shift;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_gcd()
+ {
+ using boost::math::gcd;
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = gcd(b[i], c[i]);
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_powm()
+ {
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 25; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = powm(b[i], b[i] / 2, c[i]);
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ double test_construct()
+ {
+ std::allocator<T> a;
+ T* pt = a.allocate(1000);
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < 1000; ++i)
+ new(pt+i) T();
+ for(unsigned i = 0; i < 1000; ++i)
+ a.destroy(pt+i);
+ }
+ double result = boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ a.deallocate(pt, 1000);
+ return result;
+ }
+ double test_construct_unsigned()
+ {
+ std::allocator<T> a;
+ T* pt = a.allocate(1000);
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < 1000; ++i)
+ new(pt+i) T(i);
+ for(unsigned i = 0; i < 1000; ++i)
+ a.destroy(pt+i);
+ }
+ double result = boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ a.deallocate(pt, 1000);
+ return result;
+ }
+ double test_construct_unsigned_ll()
+ {
+ std::allocator<T> a;
+ T* pt = a.allocate(1000);
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned long long j = 0; j < 1000; ++j)
+ new(pt+j) T(j);
+ for(unsigned j = 0; j < 1000; ++j)
+ a.destroy(pt+j);
+ }
+ double result = boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ a.deallocate(pt, 1000);
+ return result;
+ }
+
+ //
+ // Hetero operations:
+ //
+ template <class U>
+ static U get_hetero_test_value(boost::mpl::false_ const&)
+ {
+ return U(2) / 3;
+ }
+ template <class U>
+ static U get_hetero_test_value(boost::mpl::true_ const&)
+ {
+ return (std::numeric_limits<U>::max)() >> 4;
+ }
+ template <class U>
+ static U get_hetero_test_value()
+ {
+ return get_hetero_test_value<U>(boost::is_integral<U>());
+ }
+ template <class U>
+ double test_multiply_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] * val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_inplace_multiply_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i];
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] *= val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_add_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] + val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_inplace_add_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i];
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] += val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_subtract_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] - val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_inplace_subtract_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i];
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] -= val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_divide_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i] / val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+ template <class U>
+ double test_inplace_divide_hetero()
+ {
+ static const U val = get_hetero_test_value<U>();
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] = b[i];
+ stopwatch<boost::chrono::high_resolution_clock> w;
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ for(unsigned i = 0; i < b.size(); ++i)
+ a[i] /= val;
+ }
+ return boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ }
+private:
+ T generate_random()
+ {
+ return generate_random(boost::mpl::int_<Type>());
+ }
+ T generate_random(const boost::mpl::int_<boost::multiprecision::number_kind_floating_point>&)
+ {
+ T val = gen();
+ T prev_val = -1;
+ while(val != prev_val)
+ {
+ val *= (gen.max)();
+ prev_val = val;
+ val += gen();
+ }
+ int e;
+ val = frexp(val, &e);
+
+ typedef typename T::backend_type::exponent_type e_type;
+ static boost::random::uniform_int_distribution<e_type> ui(-30, 30);
+ return ldexp(val, static_cast<int>(ui(gen)));
+ }
+ T generate_random(const boost::mpl::int_<boost::multiprecision::number_kind_integer>&)
+ {
+ typedef boost::random::mt19937::result_type random_type;
+
+ T max_val;
+ unsigned digits;
+ if(std::numeric_limits<T>::is_bounded)
+ {
+ max_val = (std::numeric_limits<T>::max)();
+ digits = std::numeric_limits<T>::digits;
+ }
+ else
+ {
+ max_val = T(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ T val = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ val %= max_val;
+ return val;
+ }
+ T generate_random(const boost::mpl::int_<boost::multiprecision::number_kind_rational>&)
+ {
+ typedef boost::random::mt19937::result_type random_type;
+ typedef typename boost::multiprecision::component_type<T>::type IntType;
+
+ IntType max_val;
+ unsigned digits;
+ if(std::numeric_limits<IntType>::is_bounded)
+ {
+ max_val = (std::numeric_limits<IntType>::max)();
+ digits = std::numeric_limits<IntType>::digits;
+ }
+ else
+ {
+ max_val = IntType(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ IntType val = 0;
+ IntType denom = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ denom *= (gen.max)();
+ denom += gen();
+ }
+ if(denom == 0)
+ denom = 1;
+ val %= max_val;
+ denom %= max_val;
+ return T(val, denom);
+ }
+ std::vector<T> a, b, c, small;
+ static boost::random::mt19937 gen;
+};
+
+template <class N, int V>
+boost::random::mt19937 tester<N, V>::gen;
+
+const char* category_name(const boost::mpl::int_<boost::multiprecision::number_kind_integer>&)
+{
+ return "integer";
+}
+const char* category_name(const boost::mpl::int_<boost::multiprecision::number_kind_floating_point>&)
+{
+ return "float";
+}
+const char* category_name(const boost::mpl::int_<boost::multiprecision::number_kind_rational>&)
+{
+ return "rational";
+}
+
+//
+// Keys in order are:
+// Category
+// Operator
+// Type
+// Precision
+// Time
+//
+std::map<std::string, std::map<std::string, std::map<std::string, std::map<int, double> > > > result_table;
+
+void report_result(const char* cat, const char* type, const char* op, unsigned precision, double time)
+{
+ std::cout << std::left << std::setw(15) << type << std::setw(10) << precision << std::setw(35) << op << time << std::endl;
+ result_table[cat][op][type][precision] = time;
+}
+
+template <class Number, int N>
+void test_int_ops(tester<Number, N>& t, const char* type, unsigned precision, const boost::mpl::int_<boost::multiprecision::number_kind_integer>&)
+{
+ const char* cat = "integer";
+ report_result(cat, type, "%", precision, t.test_mod());
+ report_result(cat, type, "|", precision, t.test_or());
+ report_result(cat, type, "&", precision, t.test_and());
+ report_result(cat, type, "^", precision, t.test_xor());
+ //report_result(cat, type, "~", precision, t.test_complement());
+ report_result(cat, type, "<<", precision, t.test_left_shift());
+ report_result(cat, type, ">>", precision, t.test_right_shift());
+ // integer ops:
+ report_result(cat, type, "%(int)", precision, t.test_mod_int());
+ report_result(cat, type, "|(int)", precision, t.test_or_int());
+ report_result(cat, type, "&(int)", precision, t.test_and_int());
+ report_result(cat, type, "^(int)", precision, t.test_xor_int());
+ report_result(cat, type, "gcd", precision, t.test_gcd());
+ report_result(cat, type, "powm", precision, t.test_powm());
+}
+template <class Number, int N, class U>
+void test_int_ops(tester<Number, N>& t, const char* type, unsigned precision, const U&)
+{
+}
+
+template <class Number>
+void test(const char* type, unsigned precision)
+{
+ bits_wanted = precision;
+ tester<Number, boost::multiprecision::number_category<Number>::value> t;
+ const char* cat = category_name(typename boost::multiprecision::number_category<Number>::type());
+ //
+ // call t.test_multiply() first so that the destination operands are
+ // forced to perform whatever memory allocation may be needed. That way
+ // we measure only algorithm performance, and not memory allocation effects.
+ //
+ t.test_multiply();
+ //
+ // Now the actual tests:
+ //
+ report_result(cat, type, "+", precision, t.test_add());
+ report_result(cat, type, "-", precision, t.test_subtract());
+ report_result(cat, type, "*", precision, t.test_multiply());
+ report_result(cat, type, "/", precision, t.test_divide());
+ report_result(cat, type, "str", precision, t.test_str());
+ // integer ops:
+ report_result(cat, type, "+(int)", precision, t.test_add_int());
+ report_result(cat, type, "-(int)", precision, t.test_subtract_int());
+ report_result(cat, type, "*(int)", precision, t.test_multiply_int());
+ report_result(cat, type, "/(int)", precision, t.test_divide_int());
+ // construction and destruction:
+ report_result(cat, type, "construct", precision, t.test_construct());
+ report_result(cat, type, "construct(unsigned)", precision, t.test_construct_unsigned());
+ report_result(cat, type, "construct(unsigned long long)", precision, t.test_construct_unsigned_ll());
+ test_int_ops(t, type, precision, typename boost::multiprecision::number_category<Number>::type());
+ // Hetero ops:
+ report_result(cat, type, "+(unsigned long long)", precision, t.template test_add_hetero<unsigned long long>());
+ report_result(cat, type, "-(unsigned long long)", precision, t.template test_subtract_hetero<unsigned long long>());
+ report_result(cat, type, "*(unsigned long long)", precision, t.template test_multiply_hetero<unsigned long long>());
+ report_result(cat, type, "/(unsigned long long)", precision, t.template test_divide_hetero<unsigned long long>());
+ report_result(cat, type, "+=(unsigned long long)", precision, t.template test_inplace_add_hetero<unsigned long long>());
+ report_result(cat, type, "-=(unsigned long long)", precision, t.template test_inplace_subtract_hetero<unsigned long long>());
+ report_result(cat, type, "*=(unsigned long long)", precision, t.template test_inplace_multiply_hetero<unsigned long long>());
+ report_result(cat, type, "/=(unsigned long long)", precision, t.template test_inplace_divide_hetero<unsigned long long>());
+}
+
+void quickbook_results()
+{
+ //
+ // Keys in order are:
+ // Category
+ // Operator
+ // Type
+ // Precision
+ // Time
+ //
+ typedef std::map<std::string, std::map<std::string, std::map<std::string, std::map<int, double> > > >::const_iterator category_iterator;
+ typedef std::map<std::string, std::map<std::string, std::map<int, double> > >::const_iterator operator_iterator;
+ typedef std::map<std::string, std::map<int, double> >::const_iterator type_iterator;
+ typedef std::map<int, double>::const_iterator precision_iterator;
+
+ for(category_iterator i = result_table.begin(); i != result_table.end(); ++i)
+ {
+ std::string cat = i->first;
+ cat[0] = std::toupper(cat[0]);
+ std::cout << "[section:" << i->first << "_performance " << cat << " Type Perfomance]" << std::endl;
+
+ for(operator_iterator j = i->second.begin(); j != i->second.end(); ++j)
+ {
+ std::string op = j->first;
+ std::cout << "[table Operator " << op << std::endl;
+ std::cout << "[[Backend]";
+
+ for(precision_iterator k = j->second.begin()->second.begin(); k != j->second.begin()->second.end(); ++k)
+ {
+ std::cout << "[" << k->first << " Bits]";
+ }
+ std::cout << "]\n";
+
+ std::vector<double> best_times(j->second.begin()->second.size(), (std::numeric_limits<double>::max)());
+ for(unsigned m = 0; m < j->second.begin()->second.size(); ++m)
+ {
+ for(type_iterator k = j->second.begin(); k != j->second.end(); ++k)
+ {
+ precision_iterator l = k->second.begin();
+ std::advance(l, m);
+ if(best_times[m] > l->second)
+ best_times[m] = l->second ? l->second : best_times[m];
+ }
+ }
+
+ for(type_iterator k = j->second.begin(); k != j->second.end(); ++k)
+ {
+ std::cout << "[[" << k->first << "]";
+
+ unsigned m = 0;
+ for(precision_iterator l = k->second.begin(); l != k->second.end(); ++l)
+ {
+ double rel_time = l->second / best_times[m];
+ if(rel_time == 1)
+ std::cout << "[[*" << rel_time << "]";
+ else
+ std::cout << "[" << rel_time;
+ std::cout << " (" << l->second << "s)]";
+ ++m;
+ }
+
+ std::cout << "]\n";
+ }
+
+ std::cout << "]\n";
+ }
+
+ std::cout << "[endsect]" << std::endl;
+ }
+}
+
+
+int main()
+{
+#ifdef TEST_INT64
+ test<boost::uint64_t>("boost::uint64_t", 64);
+#endif
+#ifdef TEST_MPF
+ test<boost::multiprecision::mpf_float_50>("gmp_float", 50);
+ test<boost::multiprecision::mpf_float_100>("gmp_float", 100);
+ test<boost::multiprecision::mpf_float_500>("gmp_float", 500);
+#endif
+#ifdef TEST_MPZ
+ test<boost::multiprecision::mpz_int>("gmp_int", 128);
+ test<boost::multiprecision::mpz_int>("gmp_int", 256);
+ test<boost::multiprecision::mpz_int>("gmp_int", 512);
+ test<boost::multiprecision::mpz_int>("gmp_int", 1024);
+#endif
+#ifdef TEST_CPP_INT
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(unsigned, fixed)", 64);
+ //test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 64);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<128, 128, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 128);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<256, 256, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 256);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<512, 512, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 512);
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<1024, 1024, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void>, boost::multiprecision::et_off> >("cpp_int(fixed)", 1024);
+
+ test<boost::multiprecision::cpp_int>("cpp_int", 128);
+ test<boost::multiprecision::cpp_int>("cpp_int", 256);
+ test<boost::multiprecision::cpp_int>("cpp_int", 512);
+ test<boost::multiprecision::cpp_int>("cpp_int", 1024);
+#endif
+#ifdef TEST_CPP_INT_RATIONAL
+ test<boost::multiprecision::cpp_rational>("cpp_rational", 128);
+ test<boost::multiprecision::cpp_rational>("cpp_rational", 256);
+ test<boost::multiprecision::cpp_rational>("cpp_rational", 512);
+ test<boost::multiprecision::cpp_rational>("cpp_rational", 1024);
+#endif
+#ifdef TEST_MPQ
+ test<boost::multiprecision::mpq_rational>("mpq_rational", 128);
+ test<boost::multiprecision::mpq_rational>("mpq_rational", 256);
+ test<boost::multiprecision::mpq_rational>("mpq_rational", 512);
+ test<boost::multiprecision::mpq_rational>("mpq_rational", 1024);
+#endif
+#ifdef TEST_TOMMATH
+ test<boost::multiprecision::tom_int>("tommath_int", 128);
+ test<boost::multiprecision::tom_int>("tommath_int", 256);
+ test<boost::multiprecision::tom_int>("tommath_int", 512);
+ test<boost::multiprecision::tom_int>("tommath_int", 1024);
+ /*
+ //
+ // These are actually too slow to test!!!
+ //
+ test<boost::multiprecision::tom_rational>("tom_rational", 128);
+ test<boost::multiprecision::tom_rational>("tom_rational", 256);
+ test<boost::multiprecision::tom_rational>("tom_rational", 512);
+ test<boost::multiprecision::tom_rational>("tom_rational", 1024);
+ */
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>("cpp_dec_float", 50);
+ 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> > >("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);
+ test<boost::multiprecision::mpfr_float_500>("mpfr_float", 500);
+#endif
+ quickbook_results();
+ return 0;
+}
+
diff --git a/libs/multiprecision/performance/sf_performance-msvc-10.log b/libs/multiprecision/performance/sf_performance-msvc-10.log
new file mode 100644
index 0000000000..9dc8de7b18
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance-msvc-10.log
@@ -0,0 +1,69 @@
+0
+11
+24
+3
+13
+27
+Testing Bessel Functions.....
+Time for mpfr_float_50 = 6.47208 seconds
+Total allocations for mpfr_float_50 = 2684348
+Time for mpf_float_50 = 11.6627 seconds
+Total allocations for mpf_float_50 = 2601366
+Time for cpp_float_50 = 20.2855 seconds
+Total allocations for cpp_float_50 = 0
+Time for mpfr_class (50 digits) = 6.48063 seconds
+Total allocations for mpfr_class (50 digits) = 3946031
+Time for mpreal (50 digits) = 9.98151 seconds
+Total allocations for mpreal (50 digits) = 13223017
+Time for mpfr_float_100 = 10.154 seconds
+Total allocations for mpfr_float_50 = 3671485
+Time for mpf_float_100 = 8.51179 seconds
+Total allocations for mpf_float_100 = 3593669
+Time for cpp_float_100 = 21.0198 seconds
+Total allocations for cpp_float_100 = 0
+Time for mpfr_class (100 digits) = 9.80571 seconds
+Total allocations for mpfr_class (100 digits) = 5447348
+Time for mpreal (100 digits) = 13.7021 seconds
+Total allocations for mpreal (100 digits) = 16671065
+Testing Polynomial Evaluation.....
+Time for mpfr_float_50 = 0.00823841 seconds
+Total allocations for mpfr_float_50 = 2996
+Time for mpf_float_50 = 0.00401608 seconds
+Total allocations for mpf_float_50 = 2996
+Time for cpp_float_50 = 0.00492116 seconds
+Total allocations for cpp_float_50 = 0
+Time for mpfr_class (50 digits) = 0.00935629 seconds
+Total allocations for mpfr_class (50 digits) = 12976
+Time for mpreal (50 digits) = 0.0148374 seconds
+Total allocations for mpreal (50 digits = 27947
+Time for mpfr_float_100 = 0.00948452 seconds
+Total allocations for mpfr_float_100 = 2996
+Time for mpf_float_100 = 0.00390071 seconds
+Total allocations for mpf_float_100 = 2996
+Time for cpp_float_100 = 0.00893563 seconds
+Total allocations for cpp_float_100 = 0
+Time for mpfr_class (100 digits) = 0.0106166 seconds
+Total allocations for mpfr_class (100 digits) = 12976
+Time for mpreal (100 digits) = 0.0162364 seconds
+Total allocations for mpreal (100 digits) = 27947
+Testing Non-Central T.....
+Time for mpfr_float_50 = 258.087 seconds
+Total allocations for mpfr_float_50 = 139149049
+Time for mpf_float_50 = 197.303 seconds
+Total allocations for mpf_float_50 = 134600354
+Time for cpp_float_50 = 334.503 seconds
+Total allocations for cpp_float_50 = 0
+Time for mpfr_class (50 digits) = 266.389 seconds
+Total allocations for mpfr_class (50 digits) = 252401115
+Time for mpreal (50 digits) = 346.641 seconds
+Total allocations for mpreal (50 digits) = 447009420
+Time for mpfr_float_100 = 516.741 seconds
+Total allocations for mpfr_float_100 = 220400854
+Time for mpf_float_100 = 397.302 seconds
+Total allocations for mpf_float_100 = 212307349
+Time for cpp_float_100 = 1064.53 seconds
+Total allocations for cpp_float_100 = 0
+Time for mpfr_class (100 digits) = 525.74 seconds
+Total allocations for mpfr_class (100 digits) = 407154781
+Time for mpreal (100 digits) = 649.941 seconds
+Total allocations for mpreal (100 digits) = 724581024
diff --git a/libs/multiprecision/performance/sf_performance.cpp b/libs/multiprecision/performance/sf_performance.cpp
new file mode 100644
index 0000000000..95c08d1820
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance.cpp
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+unsigned allocation_count = 0;
+
+void *(*alloc_func_ptr) (size_t);
+void *(*realloc_func_ptr) (void *, size_t, size_t);
+void (*free_func_ptr) (void *, size_t);
+
+void *alloc_func(size_t n)
+{
+ ++allocation_count;
+ return (*alloc_func_ptr)(n);
+}
+
+void free_func(void * p, size_t n)
+{
+ (*free_func_ptr)(p, n);
+}
+
+void * realloc_func(void * p, size_t old, size_t n)
+{
+ ++allocation_count;
+ return (*realloc_func_ptr)(p, old, n);
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+#if defined(TEST_MPFR) || defined(TEST_MPFR_CLASS) || defined(TEST_MPREAL) || defined(TEST_MPF)
+ mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
+ mp_set_memory_functions(&alloc_func, &realloc_func, &free_func);
+#endif
+
+ basic_tests();
+ bessel_tests();
+ poly_tests();
+ nct_tests();
+}
+
diff --git a/libs/multiprecision/performance/sf_performance.hpp b/libs/multiprecision/performance/sf_performance.hpp
new file mode 100644
index 0000000000..4b056e1e25
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance.hpp
@@ -0,0 +1,214 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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_
+
+#define BOOST_MATH_MAX_ROOT_ITERATION_POLICY 750
+#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_BIN_FLOAT)
+# define TEST_MPFR
+# define TEST_MPF
+# define TEST_CPP_DEC_FLOAT
+# define TEST_CPP_BIN_FLOAT
+//# define TEST_MPFR_CLASS
+//# define TEST_MPREAL
+# define TEST_FLOAT
+#endif
+
+#ifdef TEST_FLOAT
+#include "arithmetic_backend.hpp"
+#endif
+#ifdef TEST_MPFR_CLASS
+#include <boost/math/bindings/mpfr.hpp>
+#endif
+#ifdef TEST_MPFR
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_MPREAL
+#include <boost/math/bindings/mpreal.hpp>
+#endif
+#ifdef TEST_MPF
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#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>
+#include <libs/math/test/table_type.hpp>
+#include <boost/chrono.hpp>
+#include <boost/array.hpp>
+#include <boost/thread.hpp>
+
+template <class Real>
+Real test_bessel();
+
+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;
+};
+
+template <class Real>
+Real test_bessel()
+{
+ try{
+# define T double
+# define SC_(x) x
+# include "libs/math/test/bessel_i_int_data.ipp"
+# include "libs/math/test/bessel_i_data.ipp"
+
+ Real r;
+
+ for(unsigned i = 0; i < bessel_i_int_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_i(Real(bessel_i_int_data[i][0]), Real(bessel_i_int_data[i][1]));
+ }
+ for(unsigned i = 0; i < bessel_i_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_i(Real(bessel_i_data[i][0]), Real(bessel_i_data[i][1]));
+ }
+
+#include "libs/math/test/bessel_j_int_data.ipp"
+ for(unsigned i = 0; i < bessel_j_int_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_j(Real(bessel_j_int_data[i][0]), Real(bessel_j_int_data[i][1]));
+ }
+
+#include "libs/math/test/bessel_j_data.ipp"
+ for(unsigned i = 0; i < bessel_j_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_j(Real(bessel_j_data[i][0]), Real(bessel_j_data[i][1]));
+ }
+
+#include "libs/math/test/bessel_j_large_data.ipp"
+ for(unsigned i = 0; i < bessel_j_large_data.size(); ++i)
+ {
+ r += boost::math::cyl_bessel_j(Real(bessel_j_large_data[i][0]), Real(bessel_j_large_data[i][1]));
+ }
+
+#include "libs/math/test/sph_bessel_data.ipp"
+ for(unsigned i = 0; i < sph_bessel_data.size(); ++i)
+ {
+ r += boost::math::sph_bessel(static_cast<unsigned>(sph_bessel_data[i][0]), Real(sph_bessel_data[i][1]));
+ }
+
+ return r;
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+ return 0;
+}
+
+template <class Real>
+Real test_polynomial()
+{
+ static const unsigned t[] = {
+ 2, 3, 4, 5, 6, 7, 8 };
+ Real result = 0;
+ for(Real k = 2; k < 1000; ++k)
+ result += boost::math::tools::evaluate_polynomial(t, k);
+
+ return result;
+}
+
+template <class Real>
+Real test_nct()
+{
+#define T double
+#include "libs/math/test/nct.ipp"
+
+ Real result = 0;
+ for(unsigned i = 0; i < nct.size(); ++i)
+ {
+ try{
+ result += quantile(boost::math::non_central_t_distribution<Real>(nct[i][0], nct[i][1]), nct[i][3]);
+ result += cdf(boost::math::non_central_t_distribution<Real>(nct[i][0], nct[i][1]), nct[i][2]);
+ }
+ catch(const std::exception&)
+ {}
+ }
+ return result;
+}
+
+extern unsigned allocation_count;
+
+template <class Real>
+void basic_allocation_test(const char* name, Real x)
+{
+ static const unsigned a[] = { 2, 3, 4, 5, 6, 7, 8 };
+ allocation_count = 0;
+ Real result = (((((a[6] * x + a[5]) * x + a[4]) * x + a[3]) * x + a[2]) * x + a[1]) * x + a[0];
+ std::cout << "Allocation count for type " << name << " = " << allocation_count << std::endl;
+}
+
+template <class Real>
+void poly_allocation_test(const char* name, Real x)
+{
+ static const unsigned a[] = { 2, 3, 4, 5, 6, 7, 8 };
+ allocation_count = 0;
+ Real result = boost::math::tools::evaluate_polynomial(a, x);
+ std::cout << "Allocation count for type " << name << " = " << allocation_count << std::endl;
+}
+
+template <class Real>
+void time_proc(const char* name, Real (*proc)(), unsigned threads = 1)
+{
+ try{
+ static Real total = 0;
+ allocation_count = 0;
+ boost::chrono::duration<double> time;
+ stopwatch<boost::chrono::high_resolution_clock> c;
+ total += proc();
+ time = c.elapsed();
+ std::cout << "Time for " << name << " = " << time << std::endl;
+ std::cout << "Total allocations for " << name << " = " << allocation_count << std::endl;
+
+ for(unsigned thread_count = 1; thread_count < threads; ++thread_count)
+ {
+ c.reset();
+ boost::thread_group g;
+ for(unsigned i = 0; i <= thread_count; ++i)
+ g.create_thread(proc);
+ g.join_all();
+ time = c.elapsed();
+ std::cout << "Time for " << name << " (" << (thread_count + 1) << " threads) = " << time << std::endl;
+ std::cout << "Total allocations for " << name << " = " << allocation_count << std::endl;
+ }
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << e.what() << std::endl;
+ }
+}
+
+using namespace boost::multiprecision;
+
+void basic_tests();
+void bessel_tests();
+void poly_tests();
+void nct_tests();
diff --git a/libs/multiprecision/performance/sf_performance_basic.cpp b/libs/multiprecision/performance/sf_performance_basic.cpp
new file mode 100644
index 0000000000..a433288fdb
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_basic.cpp
@@ -0,0 +1,49 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void basic_tests()
+{
+
+ std::cout << "Allocation Counts for Horner Evaluation:\n";
+#ifdef TEST_MPFR
+ basic_allocation_test("mpfr_float_50", mpfr_float_50(2));
+ basic_allocation_test("mpfr_float_50 - no expression templates", number<mpfr_float_backend<50>, et_off>(2));
+#endif
+#ifdef TEST_MPFR_CLASS
+ basic_allocation_test("mpfr_class", mpfr_class(2));
+#endif
+#ifdef TEST_MPREAL
+ basic_allocation_test("mpfr::mpreal", mpfr::mpreal(2));
+#endif
+
+ std::cout << "Allocation Counts for boost::math::tools::evaluate_polynomial:\n";
+#ifdef TEST_MPFR
+ poly_allocation_test("mpfr_float_50", mpfr_float_50(2));
+ poly_allocation_test("mpfr_float_50 - no expression templates", number<mpfr_float_backend<50>, et_off>(2));
+#endif
+#ifdef TEST_MPFR_CLASS
+ poly_allocation_test("mpfr_class", mpfr_class(2));
+#endif
+#ifdef TEST_MPREAL
+ poly_allocation_test("mpfr::mpreal", mpfr::mpreal(2));
+#endif
+
+ //
+ // Comparison for builtin floats:
+ //
+#ifdef TEST_FLOAT
+ time_proc("Bessel Functions - double", test_bessel<double>);
+ time_proc("Bessel Functions - real_concept", test_bessel<boost::math::concepts::real_concept>);
+ time_proc("Bessel Functions - arithmetic_backend<double>", test_bessel<number<arithmetic_backend<double>, et_on> >);
+ time_proc("Bessel Functions - arithmetic_backend<double> - no expression templates", test_bessel<number<arithmetic_backend<double>, et_off> >);
+
+ time_proc("Non-central T - double", test_nct<double>);
+ time_proc("Non-central T - real_concept", test_nct<boost::math::concepts::real_concept>);
+ time_proc("Non-central T - arithmetic_backend<double>", test_nct<number<arithmetic_backend<double>, et_on> >);
+ time_proc("Non-central T - arithmetic_backend<double> - no expression templates", test_nct<number<arithmetic_backend<double>, et_off> >);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel.cpp b/libs/multiprecision/performance/sf_performance_bessel.cpp
new file mode 100644
index 0000000000..817f5a56ab
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel.cpp
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_1();
+void bessel_tests_2();
+void bessel_tests_3();
+void bessel_tests_4();
+void bessel_tests_5();
+void bessel_tests_6();
+
+void bessel_tests()
+{
+ //
+ // 50 digits first:
+ //
+ std::cout << "Testing Bessel Functions at 50 digits....." << std::endl;
+#if defined(TEST_MPFR) || defined(TEST_MPFR_CLASS)
+ mpfr_set_default_prec(50 * 1000L / 301L);
+#endif
+#ifdef TEST_MPREAL
+ mpfr::mpreal::set_default_prec(50 * 1000L / 301L);
+#endif
+
+ bessel_tests_1();
+ bessel_tests_2();
+ bessel_tests_3();
+
+ //
+ // Then 100 digits:
+ //
+ std::cout << "Testing Bessel Functions at 100 digits....." << std::endl;
+#if defined(TEST_MPFR) || defined(TEST_MPFR_CLASS)
+ mpfr_set_default_prec(100 * 1000L / 301L);
+#endif
+ bessel_tests_4();
+ bessel_tests_5();
+ bessel_tests_6();
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel1.cpp b/libs/multiprecision/performance/sf_performance_bessel1.cpp
new file mode 100644
index 0000000000..6c13315f2d
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel1.cpp
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_1()
+{
+#ifdef TEST_MPFR
+#if MPFR_VERSION<MPFR_VERSION_NUM(3,0,0)
+ time_proc("mpfr_float_50", test_bessel<boost::multiprecision::mpfr_float_50>, 1);
+ time_proc("mpfr_float_50 (no expression templates)", test_bessel<number<mpfr_float_backend<50>, et_off> >, 1);
+ time_proc("static_mpfr_float_50", test_bessel<number<mpfr_float_backend<50, allocate_stack>, et_on> >, 1);
+ time_proc("static_mpfr_float_50 (no expression templates)", test_bessel<number<mpfr_float_backend<50, allocate_stack>, et_off> >, 1);
+#else
+ time_proc("mpfr_float_50", test_bessel<boost::multiprecision::mpfr_float_50>, mpfr_buildopt_tls_p() ? 3 : 1);
+ time_proc("mpfr_float_50 (no expression templates", test_bessel<number<mpfr_float_backend<50>, et_off> >, mpfr_buildopt_tls_p() ? 3 : 1);
+ time_proc("static_mpfr_float_50", test_bessel<number<mpfr_float_backend<50, allocate_stack>, et_on> >, mpfr_buildopt_tls_p() ? 3 : 1);
+ time_proc("static_mpfr_float_50 (no expression templates)", test_bessel<number<mpfr_float_backend<50, allocate_stack>, et_off> >, mpfr_buildopt_tls_p() ? 3 : 1);
+#endif
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel2.cpp b/libs/multiprecision/performance/sf_performance_bessel2.cpp
new file mode 100644
index 0000000000..13b0f597d9
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel2.cpp
@@ -0,0 +1,20 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_2()
+{
+#ifdef TEST_MPF
+ time_proc("mpf_float_50", test_bessel<mpf_float_50>, 3);
+ time_proc("mpf_float_50 (no expression templates", test_bessel<number<gmp_float<50>, et_off> >, 3);
+#endif
+#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
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel3.cpp b/libs/multiprecision/performance/sf_performance_bessel3.cpp
new file mode 100644
index 0000000000..67ee0fba63
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel3.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_3()
+{
+#ifdef TEST_MPFR_CLASS
+ time_proc("mpfr_class", test_bessel<mpfr_class>, mpfr_buildopt_tls_p() ? 3 : 1);
+#endif
+#ifdef TEST_MPREAL
+ time_proc("mpfr::mpreal", test_bessel<mpfr::mpreal>, mpfr_buildopt_tls_p() ? 3 : 1);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel4.cpp b/libs/multiprecision/performance/sf_performance_bessel4.cpp
new file mode 100644
index 0000000000..108d62e130
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel4.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_4()
+{
+#ifdef TEST_MPFR
+ time_proc("mpfr_float_100", test_bessel<mpfr_float_100>);
+ time_proc("mpfr_float_100 (no expression templates", test_bessel<number<mpfr_float_backend<100>, et_off> >);
+ time_proc("static_mpfr_float_100", test_bessel<static_mpfr_float_100>);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel5.cpp b/libs/multiprecision/performance/sf_performance_bessel5.cpp
new file mode 100644
index 0000000000..f1154b5929
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel5.cpp
@@ -0,0 +1,17 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_5()
+{
+#ifdef TEST_MPREAL
+ mpfr::mpreal::set_default_prec(100 * 1000L / 301L);
+#endif
+#ifdef TEST_MPF
+ time_proc("mpf_float_100", test_bessel<mpf_float_100>);
+ time_proc("mpf_float_100 (no expression templates", test_bessel<number<gmp_float<100>, et_off> >);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_bessel6.cpp b/libs/multiprecision/performance/sf_performance_bessel6.cpp
new file mode 100644
index 0000000000..342c10930f
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_bessel6.cpp
@@ -0,0 +1,22 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void bessel_tests_6()
+{
+#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
+#ifdef TEST_MPREAL
+ time_proc("mpfr::mpreal", test_bessel<mpfr::mpreal>);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct.cpp b/libs/multiprecision/performance/sf_performance_nct.cpp
new file mode 100644
index 0000000000..c0a713bad2
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct.cpp
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_1();
+void nct_tests_2();
+void nct_tests_3();
+void nct_tests_4();
+void nct_tests_5();
+void nct_tests_6();
+
+void nct_tests()
+{
+ //
+ // 50 digits first:
+ //
+ std::cout << "Testing Non-Central T at 50 digits....." << std::endl;
+#ifdef TEST_MPFR_CLASS
+ mpfr_set_default_prec(50 * 1000L / 301L);
+#endif
+
+ nct_tests_1();
+ nct_tests_2();
+ nct_tests_3();
+
+ //
+ // Then 100 digits:
+ //
+ std::cout << "Testing Non-Central T at 100 digits....." << std::endl;
+#ifdef TEST_MPFR_CLASS
+ mpfr_set_default_prec(100 * 1000L / 301L);
+#endif
+ nct_tests_4();
+ nct_tests_5();
+ nct_tests_6();
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct1.cpp b/libs/multiprecision/performance/sf_performance_nct1.cpp
new file mode 100644
index 0000000000..cde285c922
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct1.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_1()
+{
+#ifdef TEST_MPFR
+ time_proc("mpfr_float_50", test_nct<mpfr_float_50>);
+ time_proc("mpfr_float_50 (no expression templates", test_nct<number<mpfr_float_backend<50>, et_off> >);
+ time_proc("static_mpfr_float_50", test_nct<static_mpfr_float_50>);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct2.cpp b/libs/multiprecision/performance/sf_performance_nct2.cpp
new file mode 100644
index 0000000000..76142bea49
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct2.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_2()
+{
+#ifdef TEST_MPF
+ time_proc("mpf_float_50", test_nct<mpf_float_50>);
+ time_proc("mpf_float_50 (no expression templates", test_nct<number<gmp_float<50>, et_off> >);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct3.cpp b/libs/multiprecision/performance/sf_performance_nct3.cpp
new file mode 100644
index 0000000000..a229669aea
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct3.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_3()
+{
+#ifdef TEST_MPREAL
+ mpfr::mpreal::set_default_prec(50 * 1000L / 301L);
+#endif
+#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
+#ifdef TEST_MPREAL
+ time_proc("mpfr::mpreal", test_nct<mpfr::mpreal>);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct4.cpp b/libs/multiprecision/performance/sf_performance_nct4.cpp
new file mode 100644
index 0000000000..1ad302711a
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct4.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_4()
+{
+#ifdef TEST_MPFR
+ time_proc("mpfr_float_100", test_nct<mpfr_float_100>);
+ time_proc("mpfr_float_100 (no expression templates", test_nct<number<mpfr_float_backend<100>, et_off> >);
+ time_proc("static_mpfr_float_100", test_nct<static_mpfr_float_100>);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct5.cpp b/libs/multiprecision/performance/sf_performance_nct5.cpp
new file mode 100644
index 0000000000..c098ab201c
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct5.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_5()
+{
+#ifdef TEST_MPF
+ time_proc("mpf_float_100", test_nct<mpf_float_100>);
+ time_proc("mpf_float_100 (no expression templates", test_nct<number<gmp_float<100>, et_off> >);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_nct6.cpp b/libs/multiprecision/performance/sf_performance_nct6.cpp
new file mode 100644
index 0000000000..571ff56efa
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_nct6.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void nct_tests_6()
+{
+#ifdef TEST_MPREAL
+ mpfr::mpreal::set_default_prec(100 * 1000L / 301L);
+#endif
+#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
+#ifdef TEST_MPREAL
+ time_proc("mpfr::mpreal", test_nct<mpfr::mpreal>);
+#endif
+}
diff --git a/libs/multiprecision/performance/sf_performance_poly.cpp b/libs/multiprecision/performance/sf_performance_poly.cpp
new file mode 100644
index 0000000000..563ac6684b
--- /dev/null
+++ b/libs/multiprecision/performance/sf_performance_poly.cpp
@@ -0,0 +1,72 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "sf_performance.hpp"
+
+void poly_tests()
+{
+ //
+ // 50 digits first:
+ //
+ std::cout << "Testing Polynomial Evaluation at 50 digits....." << std::endl;
+#if defined(TEST_MPFR) || defined(TEST_MPFR_CLASS)
+ mpfr_set_default_prec(50 * 1000L / 301L);
+#endif
+#ifdef TEST_MPREAL
+ mpfr::mpreal::set_default_prec(50 * 1000L / 301L);
+#endif
+#ifdef TEST_MPFR
+ time_proc("mpfr_float_50", test_polynomial<mpfr_float_50>);
+ time_proc("mpfr_float_50 (no expression templates", test_polynomial<number<mpfr_float_backend<50>, et_off> >);
+ time_proc("static_mpfr_float_50", test_polynomial<static_mpfr_float_50>);
+#endif
+#ifdef TEST_MPF
+ time_proc("mpf_float_50", test_polynomial<mpf_float_50>);
+ time_proc("mpf_float_50 (no expression templates", test_polynomial<number<gmp_float<50>, et_off> >);
+#endif
+#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
+#ifdef TEST_MPREAL
+ time_proc("mpfr::mpreal", test_polynomial<mpfr::mpreal>);
+#endif
+ //
+ // Then 100 digits:
+ //
+ std::cout << "Testing Polynomial Evaluation at 100 digits....." << std::endl;
+#ifdef TEST_MPFR_CLASS
+ mpfr_set_default_prec(100 * 1000L / 301L);
+#endif
+#ifdef TEST_MPREAL
+ mpfr::mpreal::set_default_prec(100 * 1000L / 301L);
+#endif
+#ifdef TEST_MPFR
+ time_proc("mpfr_float_100", test_polynomial<mpfr_float_100>);
+ time_proc("mpfr_float_100 (no expression templates", test_polynomial<number<mpfr_float_backend<100>, et_off> >);
+ time_proc("static_mpfr_float_100", test_polynomial<static_mpfr_float_100>);
+#endif
+#ifdef TEST_MPF
+ time_proc("mpf_float_100", test_polynomial<mpf_float_100>);
+ time_proc("mpf_float_100 (no expression templates", test_polynomial<number<gmp_float<100>, et_off> >);
+#endif
+#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
+#ifdef TEST_MPREAL
+ time_proc("mpfr::mpreal", test_polynomial<mpfr::mpreal>);
+#endif
+}
diff --git a/libs/multiprecision/performance/voronoi_performance.cpp b/libs/multiprecision/performance/voronoi_performance.cpp
new file mode 100644
index 0000000000..a976578039
--- /dev/null
+++ b/libs/multiprecision/performance/voronoi_performance.cpp
@@ -0,0 +1,229 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef _MSC_VER
+#pragma warning(disable:4244)
+#endif
+
+#include <boost/polygon/detail/voronoi_predicates.hpp>
+#include <boost/polygon/detail/voronoi_structures.hpp>
+#include <boost/polygon/detail/skeleton_predicates.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int_distribution.hpp>
+#include <vector>
+#include <map>
+#include <boost/chrono.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+
+#ifdef TEST_GMP
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_TOMMATH
+#include <boost/multiprecision/tommath.hpp>
+#endif
+
+#include "arithmetic_backend.hpp"
+
+typedef boost::polygon::detail::point_2d<boost::int32_t> i_point;
+
+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;
+};
+
+std::vector<i_point> points;
+boost::random::mt19937 gen;
+
+template <class Big>
+struct cpp_int_voronoi_traits
+{
+ typedef boost::int32_t int_type;
+ typedef boost::int64_t int_x2_type;
+ typedef boost::uint64_t uint_x2_type;
+ typedef Big big_int_type;
+ typedef double fpt_type;
+ typedef boost::polygon::detail::extended_exponent_fpt<fpt_type> efpt_type;
+ typedef boost::polygon::detail::ulp_comparison<fpt_type> ulp_cmp_type;
+ struct to_fpt_converter_type
+ {
+ template <class B, boost::multiprecision::expression_template_option ET>
+ double operator ()(const boost::multiprecision::number<B, ET>& val)
+ {
+ return val.template convert_to<double>();
+ }
+ double operator ()(double val)
+ {
+ return val;
+ }
+ double operator()(const efpt_type& that) const
+ {
+ return that.d();
+ }
+ template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
+ double operator()(const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e)
+ {
+ typedef typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type r_t;
+ r_t r(e);
+ return r.template convert_to<double>();
+ }
+ };
+ struct to_efpt_converter_type
+ {
+ template <class B, boost::multiprecision::expression_template_option ET>
+ efpt_type operator ()(const boost::multiprecision::number<B, ET>& val)
+ {
+ return efpt_type(val.template convert_to<double>(), 0);
+ }
+ efpt_type operator ()(double val)
+ {
+ return efpt_type(val, 0);
+ }
+ template <class tag, class Arg1, class Arg2, class Arg3, class Arg4>
+ double operator()(const boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>& e)
+ {
+ typedef typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type r_t;
+ r_t r(e);
+ return efpt_type(r.template convert_to<double>(), 0);
+ }
+ };
+};
+
+template <class Big>
+struct native_int_voronoi_traits
+{
+ typedef boost::int32_t int_type;
+ typedef boost::int64_t int_x2_type;
+ typedef boost::uint64_t uint_x2_type;
+ typedef Big big_int_type;
+ typedef double fpt_type;
+ typedef boost::polygon::detail::extended_exponent_fpt<fpt_type> efpt_type;
+ typedef boost::polygon::detail::ulp_comparison<fpt_type> ulp_cmp_type;
+ struct to_fpt_converter_type
+ {
+ template <class T>
+ double operator ()(const T& val)const
+ {
+ return val;
+ }
+ double operator()(const efpt_type& that) const
+ {
+ return that.d();
+ }
+ };
+ struct to_efpt_converter_type
+ {
+ template <class T>
+ efpt_type operator ()(const T& val)const
+ {
+ return efpt_type(val, 0);
+ }
+ };
+};
+
+std::map<std::string, double> results;
+double min_time = (std::numeric_limits<double>::max)();
+
+template <class Traits>
+double test(const char* name)
+{
+ typedef boost::polygon::detail::voronoi_predicates<Traits> preds;
+ typedef boost::polygon::detail::circle_event<boost::int32_t> circle_event;
+ typedef boost::polygon::detail::site_event<boost::int32_t> site_event;
+ typedef typename preds::template mp_circle_formation_functor<site_event, circle_event> circle_pred;
+
+ boost::random::uniform_int_distribution<> dist(0, points.size() - 1);
+ circle_pred pc;
+ circle_event event;
+
+ stopwatch<boost::chrono::high_resolution_clock> w;
+
+ for(unsigned i = 0; i < 10000; ++i)
+ {
+ site_event s1(points[dist(gen)]);
+ site_event s2(points[dist(gen)]);
+ site_event s3(points[dist(gen)]);
+ pc.ppp(s1, s2, s3, event);
+ pc.pps(s1, s2, s3, 0, event);
+ pc.pss(s1, s2, s3, 0, event);
+ pc.sss(s1, s2, s3, event);
+ }
+ double d = boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count();
+ if(d < min_time)
+ min_time = d;
+ results[name] = d;
+ std::cout << "Time for " << std::setw(30) << std::left << name << " = " << d << std::endl;
+ return d;
+}
+
+void generate_quickbook()
+{
+ std::cout << "[table\n[[Integer Type][Relative Performance (Actual time in parenthesis)]]\n";
+
+ std::map<std::string, double>::const_iterator i(results.begin()), j(results.end());
+
+ while(i != j)
+ {
+ double rel = i->second / min_time;
+ std::cout << "[[" << i->first << "][" << rel << "(" << i->second << "s)]]\n";
+ ++i;
+ }
+
+ std::cout << "]\n";
+}
+
+
+int main()
+{
+ boost::random::uniform_int_distribution<> dist((std::numeric_limits<boost::int32_t>::min)() / 2, (std::numeric_limits<boost::int32_t>::max)() / 2);
+
+ for(unsigned i = 0; i < 100; ++i)
+ {
+ points.push_back(i_point(dist(gen), dist(gen)));
+ }
+
+ test<boost::polygon::detail::voronoi_ctype_traits<boost::int32_t> >("extended_int");
+
+ test<cpp_int_voronoi_traits<boost::multiprecision::int256_t> >("int256_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::int512_t> >("int512_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::int1024_t> >("int1024_t");
+
+ test<cpp_int_voronoi_traits<boost::multiprecision::checked_int256_t> >("checked_int256_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::checked_int512_t> >("checked_int512_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::checked_int1024_t> >("checked_int1024_t");
+
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<>, boost::multiprecision::et_off> > >("cpp_int");
+
+#ifdef TEST_GMP
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::gmp_int, boost::multiprecision::et_off> > >("mpz_int");
+#endif
+#ifdef TEST_TOMMATH
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::tommath_int, boost::multiprecision::et_off> > >("tom_int");
+#endif
+
+ generate_quickbook();
+
+ test<native_int_voronoi_traits<boost::int64_t> >("int64_t");
+ test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<boost::int64_t>, boost::multiprecision::et_off> > >("number<arithmetic_backend<boost::int64_t>, et_off>");
+ //test<cpp_int_voronoi_traits<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<boost::int64_t>, boost::multiprecision::et_on> > >("number<arithmetic_backend<boost::int64_t>, et_on>");
+
+ return 0;
+}
+
diff --git a/libs/multiprecision/test/Jamfile.v2 b/libs/multiprecision/test/Jamfile.v2
new file mode 100644
index 0000000000..5972b7762e
--- /dev/null
+++ b/libs/multiprecision/test/Jamfile.v2
@@ -0,0 +1,865 @@
+# copyright John Maddock 2011
+# 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.
+
+import modules ;
+import path ;
+import ../../config/checks/config : requires ;
+
+local ntl-path = [ modules.peek : NTL_PATH ] ;
+local gmp_path = [ modules.peek : GMP_PATH ] ;
+local mpfr_path = [ modules.peek : MPFR_PATH ] ;
+local mpfi_path = [ modules.peek : MPFI_PATH ] ;
+local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
+
+project : requirements
+ <include>$(gmp_path)
+ <include>$(gmp_path)/mpfr
+ <include>$(gmp_path)/gmpfrxx
+ <include>$(mpfr_path)
+ <include>$(mpfi_path)
+ <include>$(mpfi_path)/src
+ <include>$(tommath_path)
+ <include>../include
+ <include>../../..
+ # We set these to make it easier to set up and test GMP and MPFR under Win32:
+ <toolset>msvc:<runtime-link>static
+ <toolset>msvc:<link>static
+ <toolset>msvc:<warnings>all
+ <toolset>msvc:<cxxflags>/fp:precise
+ <toolset>intel-win:<runtime-link>static
+ <toolset>intel-win:<link>static
+ # Speed up compiles:
+ <toolset>msvc:<debug-symbols>off
+ <toolset>intel:<debug-symbols>off
+ <toolset>gcc:<cxxflags>-Wall
+ <toolset>gcc:<cxxflags>-Wextra
+ <toolset>intel:<define>SLOW_COMPILER
+ ;
+
+local enable-specfun = [ MATCH (--enable-specfun) : [ modules.peek : ARGV ] ] ;
+local disable-concepts = [ MATCH (--disable-concepts) : [ modules.peek : ARGV ] ] ;
+
+lib gmp : : <search>$(gmp_path) ;
+lib mpfr : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug ;
+lib mpfi : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug <search>$(mpfi_path) <search>$(mpfi_path)/src ;
+lib quadmath ;
+
+if $(tommath_path)
+{
+ lib tommath : [ GLOB $(tommath_path) : *.c ] ;
+ TOMMATH = tommath ;
+}
+else
+{
+ lib tommath : : <search>$(tommath_path) ;
+ TOMMATH = tommath ;
+}
+
+run test_arithmetic_backend_concept.cpp ;
+
+run test_arithmetic_cpp_dec_float_1.cpp ;
+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 ] ;
+run test_arithmetic_mpz_br.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
+run test_arithmetic_mpq.cpp gmp : : : [ check-target-builds ../config//has_gmp : : <build>no ] ;
+
+run test_arithmetic_mpfr.cpp mpfr gmp : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+run test_arithmetic_mpfr_50.cpp mpfr gmp : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+run test_arithmetic_mpfr_50_static.cpp mpfr gmp : : : [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+
+run test_arithmetic_tommath.cpp $(TOMMATH) : : : [ check-target-builds ../config//has_tommath : : <build>no ] ;
+run test_arithmetic_tommath_br.cpp $(TOMMATH) : : : [ check-target-builds ../config//has_tommath : : <build>no ] ;
+
+run test_arithmetic_cpp_int_1.cpp ;
+run test_arithmetic_cpp_int_2.cpp ;
+run test_arithmetic_cpp_int_3.cpp ;
+run test_arithmetic_cpp_int_4.cpp ;
+run test_arithmetic_cpp_int_5.cpp ;
+run test_arithmetic_cpp_int_6.cpp ;
+run test_arithmetic_cpp_int_7.cpp ;
+run test_arithmetic_cpp_int_8.cpp ;
+run test_arithmetic_cpp_int_9.cpp ;
+run test_arithmetic_cpp_int_10.cpp ;
+run test_arithmetic_cpp_int_11.cpp ;
+run test_arithmetic_cpp_int_12.cpp ;
+run test_arithmetic_cpp_int_13.cpp ;
+run test_arithmetic_cpp_int_14.cpp ;
+run test_arithmetic_cpp_int_15.cpp ;
+run test_arithmetic_cpp_int_16.cpp ;
+run test_arithmetic_cpp_int_17.cpp ;
+run test_arithmetic_cpp_int_18.cpp ;
+run test_arithmetic_cpp_int_br.cpp ;
+
+run test_arithmetic_ab_1.cpp ;
+run test_arithmetic_ab_2.cpp ;
+run test_arithmetic_ab_3.cpp ;
+
+run test_cpp_dec_float_round.cpp ;
+
+run test_arithmetic_logged_1.cpp ;
+run test_arithmetic_logged_2.cpp ;
+
+run test_arithmetic_dbg_adptr1.cpp ;
+run test_arithmetic_dbg_adptr2.cpp ;
+
+run test_arithmetic_mpfi_50.cpp mpfi mpfr gmp : : : [ check-target-builds ../config//has_mpfi : : <build>no ] ;
+
+run test_arithmetic_float_128.cpp quadmath : : : [ check-target-builds ../config//has_float128 : : <build>no ] ;
+run test_arithmetic_float_128.cpp : : : [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ] : test_arithmetic_intel_quad ;
+
+run test_numeric_limits.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_BACKEND
+ : test_numeric_limits_backend_concept ;
+
+run test_numeric_limits.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPF_50
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_numeric_limits_mpf50 ;
+
+run test_numeric_limits.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPF
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_numeric_limits_mpf ;
+
+run test_numeric_limits.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPZ
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_numeric_limits_mpz ;
+
+run test_numeric_limits.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPQ
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_numeric_limits_mpq ;
+
+run test_numeric_limits.cpp mpfr
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ : test_numeric_limits_mpfr ;
+
+run test_numeric_limits.cpp mpfr
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR_50
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ : test_numeric_limits_mpfr_50 ;
+
+run test_numeric_limits.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <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
+ : # requirements
+ <define>TEST_TOMMATH
+ [ check-target-builds ../config//has_tommath : : <build>no ]
+ : test_numeric_limits_tommath ;
+
+run test_numeric_limits.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_INT
+ : test_numeric_limits_cpp_int ;
+
+run test_numeric_limits.cpp mpfi mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFI_50
+ [ check-target-builds ../config//has_mpfi : : <build>no ]
+ : test_numeric_limits_mpfi_50 ;
+
+
+run test_numeric_limits.cpp quadmath
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT128
+ [ check-target-builds ../config//has_float128 : : <build>no ]
+ : test_numeric_limits_float128 ;
+run test_numeric_limits.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT128
+ [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+ : test_numeric_limits_intel_quad ;
+
+for local source in test_exp.cpp test_log.cpp test_pow.cpp test_sinh.cpp test_sqrt.cpp test_cosh.cpp test_tanh.cpp test_sin.cpp test_cos.cpp test_tan.cpp test_asin.cpp test_acos.cpp test_atan.cpp test_round.cpp test_fpclassify.cpp
+{
+ run $(source) gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ <define>TEST_MPF_50
+ : $(source:B)_mpf50 ;
+ run $(source) mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <define>TEST_MPFR_50
+ : $(source:B)_mpfr50 ;
+ run $(source) mpfi mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_mpfi : : <build>no ]
+ <define>TEST_MPFI_50
+ : $(source:B)_mpfi50 ;
+ run $(source)
+ : # command line
+ : # input files
+ : # 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
+ : # requirements
+ [ check-target-builds ../config//has_float128 : : <build>no ]
+ <define>TEST_FLOAT128
+ : $(source:B)_float128 ;
+ run $(source)
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+ <define>TEST_FLOAT128
+ : $(source:B)_intel_quad ;
+}
+
+run test_gmp_conversions.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ] ;
+
+run test_mpfr_conversions.cpp gmp mpfr
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+
+run test_constants.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPF_50
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_constants_mpf50 ;
+
+run test_constants.cpp mpfr
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR_50
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ : test_constants_mpfr_50 ;
+
+run test_constants.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_DEC_FLOAT
+ : test_constants_cpp_dec_float ;
+
+
+run test_move.cpp mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ : test_move_mpfr ;
+
+run test_move.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_GMP
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_move_gmp ;
+
+run test_move.cpp $(TOMMATH)
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_TOMMATH
+ [ check-target-builds ../config//has_tommath : : <build>no ]
+ : test_move_tommath ;
+
+run test_move.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_INT
+ : test_move_cpp_int ;
+
+run test_test.cpp ;
+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 : <cxxflags>-Qoption,cpp,--extended_float_type <define>HAVE_FLOAT128 : ]
+ [ requires cxx11_constexpr cxx11_user_defined_literals ] ;
+
+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
+ : test_float_io_cpp_dec_float ;
+
+run test_float_io.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPF_50
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_float_io_mpf ;
+
+run test_float_io.cpp mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFR_50
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ : test_float_io_mpfr ;
+
+run test_float_io.cpp mpfi mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPFI_50
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_mpfi : : <build>no ]
+ : test_float_io_mpfi ;
+
+run test_float_io.cpp quadmath
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT128
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_float128 : : <build>no ]
+ : test_float_io_float128 ;
+run test_float_io.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_FLOAT128
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+ : test_float_io_intel_quad ;
+
+run test_int_io.cpp $(TOMMATH)
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_TOMMATH
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_tommath : : <build>no ]
+ : test_int_io_tommath ;
+
+run test_int_io.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPZ
+ release # Otherwise runtime is slow
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ : test_int_io_mpz ;
+
+run test_int_io.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_INT
+ release # Otherwise runtime is slow
+ : test_int_io_cpp_int ;
+
+run test_cpp_int.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ release # otherwise runtime is too slow!!
+ <define>TEST1
+ : test_cpp_int_1
+ ;
+
+run test_cpp_int.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ release # otherwise runtime is too slow!!
+ <define>TEST2
+ : test_cpp_int_2
+ ;
+
+run test_cpp_int.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ release # otherwise runtime is too slow!!
+ <define>TEST3
+ : test_cpp_int_3
+ ;
+
+run test_checked_cpp_int.cpp ;
+
+run test_miller_rabin.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ release # otherwise runtime is too slow!!
+ ;
+
+run test_rational_io.cpp $(TOMMATH)
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_TOMMATH
+ [ check-target-builds ../config//has_tommath : : <build>no ]
+ release # Otherwise runtime is slow
+ : test_rational_io_tommath ;
+
+run test_rational_io.cpp gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_MPQ
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ release # Otherwise runtime is slow
+ : test_rational_io_mpz ;
+
+run test_rational_io.cpp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_INT
+ release # Otherwise runtime is slow
+ : test_rational_io_cpp_int ;
+
+run test_generic_conv.cpp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : <define>TEST_GMP <source>gmp : ]
+ [ check-target-builds ../config//has_tommath : <define>TEST_TOMMATH <source>$(TOMMATH) : ]
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>mpfr : ]
+ release # Otherwise runtime is slow
+ ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST1
+ release
+ : test_rat_float_interconv_1 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST2
+ release
+ : test_rat_float_interconv_2 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST3
+ release
+ : test_rat_float_interconv_3 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST4
+ release
+ : test_rat_float_interconv_4 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST5
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ release
+ : test_rat_float_interconv_5 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST6
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ release
+ : test_rat_float_interconv_6 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST7
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ release
+ : test_rat_float_interconv_7 ;
+
+run test_rat_float_interconv.cpp /boost/system//boost_system /boost/chrono//boost_chrono mpfr gmp
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST8
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ release
+ : test_rat_float_interconv_8 ;
+
+build-project ../example ;
+
+
+run test_cpp_int_conv.cpp ;
+run test_native_integer.cpp ;
+
+run test_mixed_cpp_int.cpp ;
+run test_mixed_float.cpp
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : <define>TEST_GMP <library>gmp : ]
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <library>mpfr <library>gmp : ] ;
+
+
+compile include_test/mpfr_include_test.cpp
+ : # requirements
+ [ check-target-builds ../config//has_mpfr : : <build>no ] ;
+compile include_test/gmp_include_test.cpp
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ] ;
+compile include_test/tommath_include_test.cpp
+ : # requirements
+ [ 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 ;
+#run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp ;
+run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp ;
+run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp ;
+run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp ;
+#run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp ;
+
+run ublas_interop/test1.cpp ublas_interop/test11.cpp ublas_interop/test12.cpp ublas_interop/test13.cpp : : : <define>TEST_ET=1 : ublas1_et ;
+run ublas_interop/test2.cpp ublas_interop/test21.cpp ublas_interop/test22.cpp ublas_interop/test23.cpp : : : <define>TEST_ET=1 : ublas2_et ;
+#run ublas_interop/test3.cpp ublas_interop/test31.cpp ublas_interop/test32.cpp ublas_interop/test33.cpp : : : <define>TEST_ET=1 : ublas3_et ;
+run ublas_interop/test4.cpp ublas_interop/test42.cpp ublas_interop/test43.cpp : : : <define>TEST_ET=1 : ublas3_et ;
+run ublas_interop/test5.cpp ublas_interop/test52.cpp ublas_interop/test53.cpp : : : <define>TEST_ET=1 : ublas4_et ;
+run ublas_interop/test6.cpp ublas_interop/test62.cpp ublas_interop/test63.cpp : : : <define>TEST_ET=1 : ublas5_et ;
+#run ublas_interop/test7.cpp ublas_interop/test71.cpp ublas_interop/test72.cpp ublas_interop/test73.cpp : : : <define>TEST_ET=1 : ublas6_et ;
+
+#
+# Serialization tests, run in release mode so we cycle through more values:
+#
+path-constant here : . ;
+run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 : test_cpp_int_serial_1 ;
+run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 : test_cpp_int_serial_2 ;
+run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST3 : test_cpp_int_serial_3 ;
+run test_cpp_int_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST4 : test_cpp_int_serial_4 ;
+run test_cpp_int_deserial.cpp ../../serialization/build//boost_serialization ../../filesystem/build//boost_filesystem : $(here) : : release ;
+run test_cpp_rat_serial.cpp ../../serialization/build//boost_serialization : : : release ;
+run test_adapt_serial.cpp ../../serialization/build//boost_serialization : : : release ;
+run test_cpp_dec_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 : test_cpp_dec_float_serial_1 ;
+run test_cpp_dec_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 : test_cpp_dec_float_serial_2 ;
+run test_float128_serial.cpp ../../serialization/build//boost_serialization quadmath : : : release [ check-target-builds ../config//has_float128 : : <build>no ] ;
+run test_cpp_bin_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST1 : test_bin_dec_float_serial_1 ;
+run test_cpp_bin_float_serial.cpp ../../serialization/build//boost_serialization : : : release <define>TEST2 : test_bin_dec_float_serial_2 ;
+
+
+if $(enable-specfun)
+{
+
+ for local source in [ glob math/*.cpp ]
+ {
+ run $(source) mpfr gmp
+ /boost/test//boost_unit_test_framework/<link>static
+ /boost/regex//boost_regex/<link>static
+ math/instances//test_instances_mpfr/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <define>TEST_MPFR_50
+ <optimization>speed
+ <define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<cxxflags>-bigobj
+ release
+ : $(source:B)_mpfr ;
+ run $(source) gmp
+ /boost/test//boost_unit_test_framework/<link>static
+ /boost/regex//boost_regex/<link>static
+ math/instances//test_instances_mpf/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ <optimization>speed
+ <define>TEST_MPF_50
+ <define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<cxxflags>-bigobj
+ release
+ : $(source:B)_mpf ;
+ run $(source) /boost/test//boost_unit_test_framework/<link>static
+ /boost/regex//boost_regex/<link>static
+ math/instances//test_instances_cpp_dec_float/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ <define>TEST_CPP_DEC_FLOAT
+ <define>BOOST_ALL_NO_LIB
+ <optimization>speed
+ <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
+ math/instances//test_instances_float128/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_float128 : : <build>no ]
+ <optimization>speed
+ <define>TEST_FLOAT128
+ <define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<cxxflags>-bigobj
+ release
+ : $(source:B)_float128 ;
+ run $(source)
+ /boost/test//boost_unit_test_framework/<link>static
+ /boost/regex//boost_regex/<link>static
+ math/instances//test_instances_intel_quad/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ [ check-target-builds ../config//has_intel_quad : <cxxflags>-Qoption,cpp,--extended_float_type : <build>no ] [ check-target-builds ../config//has_float128 : <source>quadmath ]
+ <optimization>speed
+ <define>TEST_FLOAT128
+ <define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<cxxflags>-bigobj
+ release
+ : $(source:B)_intel_quad ;
+ }
+ #
+ # High precision tests are rather different, as they test only one
+ # multiprecision type and are more a test of Boost.Math:
+ #
+ for local source in [ glob math/high_prec/*.cpp ]
+ {
+ run $(source)
+ /boost/test//boost_unit_test_framework/<link>static
+ /boost/regex//boost_regex/<link>static
+ : # command line
+ : # input files
+ : # requirements
+ <optimization>speed
+ <define>BOOST_ALL_NO_LIB
+ <toolset>msvc:<cxxflags>-bigobj
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <source>gmp <source>mpfr : ]
+ release ;
+ }
+}
+
+for local source in [ glob compile_fail/*.cpp ]
+{
+ compile-fail $(source)
+ :
+ [ check-target-builds ../config//has_gmp : <define>TEST_GMP <debug-symbols>off : ]
+ [ check-target-builds ../config//has_mpfr : <define>TEST_MPFR <debug-symbols>off : ]
+ ;
+}
+
+if ! $(disable-concepts)
+{
+
+ for local source in [ glob concepts/*.cpp ]
+ {
+
+ compile $(source) mpfr
+ : # requirements
+ <define>TEST_MPFR_50
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <debug-symbols>off
+ : $(source:B)_mpfr_50 ;
+
+ compile $(source) mpfr
+ : # requirements
+ <define>TEST_MPFR_6
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <debug-symbols>off
+ : $(source:B)_mpfr_6 ;
+
+ compile $(source) mpfr
+ : # requirements
+ <define>TEST_MPFR_15
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <debug-symbols>off
+ : $(source:B)_mpfr_15 ;
+
+ compile $(source) mpfr
+ : # requirements
+ <define>TEST_MPFR_17
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <debug-symbols>off
+ : $(source:B)_mpfr_17 ;
+
+ compile $(source) mpfr
+ : # requirements
+ <define>TEST_MPFR_30
+ [ check-target-builds ../config//has_mpfr : : <build>no ]
+ <debug-symbols>off
+ : $(source:B)_mpfr_30 ;
+
+ compile $(source) gmp
+ : # requirements
+ <define>TEST_MPF_50
+ [ check-target-builds ../config//has_gmp : : <build>no ]
+ <debug-symbols>off
+ : $(source:B)_mpf50 ;
+
+ compile $(source)
+ : # requirements
+ <define>TEST_CPP_DEC_FLOAT
+ <debug-symbols>off
+ : $(source:B)_cpp_dec_float ;
+
+ 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 ;
+
+ compile $(source)
+ : # requirements
+ <define>TEST_BACKEND
+ <debug-symbols>off
+ : $(source:B)_backend_concept ;
+
+ compile $(source)
+ : # requirements
+ <define>TEST_LOGGED_ADAPTER
+ <debug-symbols>off
+ : $(source:B)_logged_adaptor ;
+ }
+}
+
+
+
+
+
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_01.cpp b/libs/multiprecision/test/compile_fail/conv_fail_01.cpp
new file mode 100644
index 0000000000..c5edc3b0ed
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_01.cpp
@@ -0,0 +1,17 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+void foo(cpp_int i)
+{
+}
+
+int main()
+{
+ foo(2.3); // conversion from float is explicit
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_02.cpp b/libs/multiprecision/test/compile_fail/conv_fail_02.cpp
new file mode 100644
index 0000000000..79ffff2f84
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_02.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i == 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_03.cpp b/libs/multiprecision/test/compile_fail/conv_fail_03.cpp
new file mode 100644
index 0000000000..0fe8932019
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_03.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i != 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_04.cpp b/libs/multiprecision/test/compile_fail/conv_fail_04.cpp
new file mode 100644
index 0000000000..6bd72119bc
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_04.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i <= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_05.cpp b/libs/multiprecision/test/compile_fail/conv_fail_05.cpp
new file mode 100644
index 0000000000..23f49022e8
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_05.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i >= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_06.cpp b/libs/multiprecision/test/compile_fail/conv_fail_06.cpp
new file mode 100644
index 0000000000..78fea0f7c1
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_06.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i > 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_07.cpp b/libs/multiprecision/test/compile_fail/conv_fail_07.cpp
new file mode 100644
index 0000000000..af4286f481
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_07.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i < 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_08.cpp b/libs/multiprecision/test/compile_fail/conv_fail_08.cpp
new file mode 100644
index 0000000000..d741c6138a
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_08.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i = 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_09.cpp b/libs/multiprecision/test/compile_fail/conv_fail_09.cpp
new file mode 100644
index 0000000000..29ce8b7bf7
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_09.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i += 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_10.cpp b/libs/multiprecision/test/compile_fail/conv_fail_10.cpp
new file mode 100644
index 0000000000..d4376a2b84
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_10.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i -= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_11.cpp b/libs/multiprecision/test/compile_fail/conv_fail_11.cpp
new file mode 100644
index 0000000000..b07a8b89e4
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_11.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i *= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_12.cpp b/libs/multiprecision/test/compile_fail/conv_fail_12.cpp
new file mode 100644
index 0000000000..fbaf8fae9b
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_12.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i /= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_13.cpp b/libs/multiprecision/test/compile_fail/conv_fail_13.cpp
new file mode 100644
index 0000000000..1d705e7f2f
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_13.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i %= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_14.cpp b/libs/multiprecision/test/compile_fail/conv_fail_14.cpp
new file mode 100644
index 0000000000..54b8623253
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_14.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i |= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_15.cpp b/libs/multiprecision/test/compile_fail/conv_fail_15.cpp
new file mode 100644
index 0000000000..e225a870f0
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_15.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i ^= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_16.cpp b/libs/multiprecision/test/compile_fail/conv_fail_16.cpp
new file mode 100644
index 0000000000..0ba8c25ba7
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_16.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 2;
+ i &= 2.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_17.cpp b/libs/multiprecision/test/compile_fail/conv_fail_17.cpp
new file mode 100644
index 0000000000..0649a64de1
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_17.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(a);
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_18.cpp b/libs/multiprecision/test/compile_fail/conv_fail_18.cpp
new file mode 100644
index 0000000000..4335d9755b
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_18.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(2);
+ i = a;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_19.cpp b/libs/multiprecision/test/compile_fail/conv_fail_19.cpp
new file mode 100644
index 0000000000..2315252e47
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_19.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(a + b);
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_20.cpp b/libs/multiprecision/test/compile_fail/conv_fail_20.cpp
new file mode 100644
index 0000000000..24a63fa246
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_20.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i = a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_21.cpp b/libs/multiprecision/test/compile_fail/conv_fail_21.cpp
new file mode 100644
index 0000000000..8c845f1083
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_21.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i += a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_22.cpp b/libs/multiprecision/test/compile_fail/conv_fail_22.cpp
new file mode 100644
index 0000000000..d35e837e27
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_22.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i -= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_23.cpp b/libs/multiprecision/test/compile_fail/conv_fail_23.cpp
new file mode 100644
index 0000000000..3e5a9f5340
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_23.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i *= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_24.cpp b/libs/multiprecision/test/compile_fail/conv_fail_24.cpp
new file mode 100644
index 0000000000..a2581052da
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_24.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i /= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_25.cpp b/libs/multiprecision/test/compile_fail/conv_fail_25.cpp
new file mode 100644
index 0000000000..694ee71290
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_25.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i %= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_26.cpp b/libs/multiprecision/test/compile_fail/conv_fail_26.cpp
new file mode 100644
index 0000000000..0df397f42d
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_26.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i &= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_27.cpp b/libs/multiprecision/test/compile_fail/conv_fail_27.cpp
new file mode 100644
index 0000000000..3995389ddc
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_27.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i |= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_28.cpp b/libs/multiprecision/test/compile_fail/conv_fail_28.cpp
new file mode 100644
index 0000000000..4133aa1462
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_28.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2), b(3);
+ cpp_int i(3);
+ i ^= a * b;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_29.cpp b/libs/multiprecision/test/compile_fail/conv_fail_29.cpp
new file mode 100644
index 0000000000..854118fbad
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_29.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i + 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_30.cpp b/libs/multiprecision/test/compile_fail/conv_fail_30.cpp
new file mode 100644
index 0000000000..4ba78fe5a6
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_30.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 + i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_31.cpp b/libs/multiprecision/test/compile_fail/conv_fail_31.cpp
new file mode 100644
index 0000000000..56a1482804
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_31.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 - i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_32.cpp b/libs/multiprecision/test/compile_fail/conv_fail_32.cpp
new file mode 100644
index 0000000000..1769185f5f
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_32.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i - 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_33.cpp b/libs/multiprecision/test/compile_fail/conv_fail_33.cpp
new file mode 100644
index 0000000000..36758318a6
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_33.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i * 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_34.cpp b/libs/multiprecision/test/compile_fail/conv_fail_34.cpp
new file mode 100644
index 0000000000..7d178c4874
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_34.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 * i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_35.cpp b/libs/multiprecision/test/compile_fail/conv_fail_35.cpp
new file mode 100644
index 0000000000..67f6bdc82d
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_35.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 / i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_36.cpp b/libs/multiprecision/test/compile_fail/conv_fail_36.cpp
new file mode 100644
index 0000000000..3b175be85b
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_36.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i / 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_37.cpp b/libs/multiprecision/test/compile_fail/conv_fail_37.cpp
new file mode 100644
index 0000000000..164db0b9df
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_37.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i % 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_38.cpp b/libs/multiprecision/test/compile_fail/conv_fail_38.cpp
new file mode 100644
index 0000000000..a905e20e2e
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_38.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 % i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_39.cpp b/libs/multiprecision/test/compile_fail/conv_fail_39.cpp
new file mode 100644
index 0000000000..fa495d702b
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_39.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 & i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_40.cpp b/libs/multiprecision/test/compile_fail/conv_fail_40.cpp
new file mode 100644
index 0000000000..f3ccf05b65
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_40.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i & 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_41.cpp b/libs/multiprecision/test/compile_fail/conv_fail_41.cpp
new file mode 100644
index 0000000000..67c30945f3
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_41.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i | 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_42.cpp b/libs/multiprecision/test/compile_fail/conv_fail_42.cpp
new file mode 100644
index 0000000000..6ebe5f5bf6
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_42.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 | i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_43.cpp b/libs/multiprecision/test/compile_fail/conv_fail_43.cpp
new file mode 100644
index 0000000000..cac2c02054
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_43.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = 3.3 ^ i;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_44.cpp b/libs/multiprecision/test/compile_fail/conv_fail_44.cpp
new file mode 100644
index 0000000000..32a27593c0
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_44.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(3), j;
+ j = i ^ 3.3;
+}
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_45.cpp b/libs/multiprecision/test/compile_fail/conv_fail_45.cpp
new file mode 100644
index 0000000000..5e2f813aa8
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_45.cpp
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef TEST_GMP
+
+#include <boost/multiprecision/gmp.hpp>
+
+using namespace boost::multiprecision;
+
+void foo(mpz_int i);
+
+int main()
+{
+ mpf_t f
+ foo(f);
+}
+
+#else
+
+#error "Nothing to test without GMP!"
+
+#endif
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_46.cpp b/libs/multiprecision/test/compile_fail/conv_fail_46.cpp
new file mode 100644
index 0000000000..11530eb1b7
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_46.cpp
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef TEST_GMP
+
+#include <boost/multiprecision/gmp.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ mpf_t f;
+ mpz_int i;
+ i = f;
+}
+
+#else
+
+#error "Nothing to test without GMP!"
+
+#endif
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_47.cpp b/libs/multiprecision/test/compile_fail/conv_fail_47.cpp
new file mode 100644
index 0000000000..b385e98855
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_47.cpp
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef TEST_GMP
+
+#include <boost/multiprecision/gmp.hpp>
+
+using namespace boost::multiprecision;
+
+void foo(mpf_float_50);
+
+int main()
+{
+ mpf_float_100 f(2);
+ foo(f);
+}
+
+#else
+
+#error "Nothing to test without GMP!"
+
+#endif
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_48.cpp b/libs/multiprecision/test/compile_fail/conv_fail_48.cpp
new file mode 100644
index 0000000000..66828ca36f
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_48.cpp
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef TEST_GMP
+
+#include <boost/multiprecision/gmp.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ mpf_float_100 f(2);
+ mpf_float_50 f2;
+ f2 = f;
+}
+
+#else
+
+#error "Nothing to test without GMP!"
+
+#endif
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_49.cpp b/libs/multiprecision/test/compile_fail/conv_fail_49.cpp
new file mode 100644
index 0000000000..7f4bd612a7
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_49.cpp
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef TEST_MPFR
+
+#include <boost/multiprecision/mpfr.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ mpfr_float_100 f(2);
+ mpfr_float_50 f2;
+ f2 = f;
+}
+
+#else
+
+#error "Nothing to test without GMP!"
+
+#endif
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_50.cpp b/libs/multiprecision/test/compile_fail/conv_fail_50.cpp
new file mode 100644
index 0000000000..d0a52a58ee
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_50.cpp
@@ -0,0 +1,22 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#ifdef TEST_MPFR
+
+#include <boost/multiprecision/mpfr.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ mpfr_float_100 f(2);
+ mpfr_float_50 f2 = f;
+}
+
+#else
+
+#error "Nothing to test without GMP!"
+
+#endif
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_51.cpp b/libs/multiprecision/test/compile_fail/conv_fail_51.cpp
new file mode 100644
index 0000000000..77441672fe
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_51.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_100 f(2);
+ cpp_dec_float_50 f2 = f;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_52.cpp b/libs/multiprecision/test/compile_fail/conv_fail_52.cpp
new file mode 100644
index 0000000000..0f9edfb55d
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_52.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_100 f(2);
+ cpp_dec_float_50 f2;
+ f2 = f;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_53.cpp b/libs/multiprecision/test/compile_fail/conv_fail_53.cpp
new file mode 100644
index 0000000000..cd48feea08
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_53.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ int256_t i = 3;
+ int128_t j = i;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_54.cpp b/libs/multiprecision/test/compile_fail/conv_fail_54.cpp
new file mode 100644
index 0000000000..f75833637c
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_54.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ int256_t i = 3;
+ int128_t j;
+ j = i;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_55.cpp b/libs/multiprecision/test/compile_fail/conv_fail_55.cpp
new file mode 100644
index 0000000000..680306f1f0
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_55.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ int256_t i = 3;
+ uint256_t j;
+ j = i;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_56.cpp b/libs/multiprecision/test/compile_fail/conv_fail_56.cpp
new file mode 100644
index 0000000000..f33e832d07
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_56.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ int256_t i = 3;
+ uint256_t j = i;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_57.cpp b/libs/multiprecision/test/compile_fail/conv_fail_57.cpp
new file mode 100644
index 0000000000..04dcb4cf42
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_57.cpp
@@ -0,0 +1,15 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 3;
+ int256_t j = i;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_58.cpp b/libs/multiprecision/test/compile_fail/conv_fail_58.cpp
new file mode 100644
index 0000000000..00e0906092
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_58.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i = 3;
+ int256_t j;
+ j = i;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/conv_fail_59.cpp b/libs/multiprecision/test/compile_fail/conv_fail_59.cpp
new file mode 100644
index 0000000000..0870a7b4dd
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/conv_fail_59.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_int i(1), j(3);
+ void* p = i * j;
+}
diff --git a/libs/multiprecision/test/compile_fail/cpp_int_complement.cpp b/libs/multiprecision/test/compile_fail/cpp_int_complement.cpp
new file mode 100644
index 0000000000..195d94e71b
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/cpp_int_complement.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ checked_int256_t i;
+ i = ~i;
+}
diff --git a/libs/multiprecision/test/compile_fail/cpp_int_negate_1.cpp b/libs/multiprecision/test/compile_fail/cpp_int_negate_1.cpp
new file mode 100644
index 0000000000..35fa0abcce
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/cpp_int_negate_1.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ checked_uint256_t i;
+ i = -i;
+}
diff --git a/libs/multiprecision/test/compile_fail/cpp_int_negate_2.cpp b/libs/multiprecision/test/compile_fail/cpp_int_negate_2.cpp
new file mode 100644
index 0000000000..5b75cf09eb
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/cpp_int_negate_2.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ number<cpp_int_backend<32, 32, unsigned_magnitude>, et_on> i;
+ i = -i;
+}
diff --git a/libs/multiprecision/test/compile_fail/operator_fail_01.cpp b/libs/multiprecision/test/compile_fail/operator_fail_01.cpp
new file mode 100644
index 0000000000..8b13b385b9
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/operator_fail_01.cpp
@@ -0,0 +1,17 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ number<cpp_dec_float<50>, et_on> a(2);
+ number<cpp_dec_float<50>, et_off> b(2);
+
+ a = a + b;
+}
+
diff --git a/libs/multiprecision/test/compile_fail/operator_fail_02.cpp b/libs/multiprecision/test/compile_fail/operator_fail_02.cpp
new file mode 100644
index 0000000000..cd422e74ba
--- /dev/null
+++ b/libs/multiprecision/test/compile_fail/operator_fail_02.cpp
@@ -0,0 +1,18 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+
+using namespace boost::multiprecision;
+
+int main()
+{
+ cpp_dec_float_50 a(2);
+ cpp_int b(2);
+
+ a = a + b;
+}
+
diff --git a/libs/multiprecision/test/concepts/number_concept_check.cpp b/libs/multiprecision/test/concepts/number_concept_check.cpp
new file mode 100644
index 0000000000..5749765f58
--- /dev/null
+++ b/libs/multiprecision/test/concepts/number_concept_check.cpp
@@ -0,0 +1,255 @@
+// Copyright John Maddock 2011.
+// 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)
+
+//
+// This tests that cpp_dec_float_50 meets our
+// conceptual requirements.
+//
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+# pragma warning(disable:4800)
+# pragma warning(disable:4512)
+# pragma warning(disable:4127)
+# pragma warning(disable:4512)
+# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <libs/math/test/compile_test/poison.hpp>
+
+#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_BIN_FLOAT)
+# define TEST_MPF_50
+# define TEST_BACKEND
+# define TEST_MPZ
+# define TEST_MPFR_50
+# define TEST_MPFR_6
+# define TEST_MPFR_15
+# define TEST_MPFR_17
+# define TEST_MPFR_30
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/concepts/real_type_concept.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T t = 1;
+ t = abs(t);
+ t = abs(t*t);
+
+ t = fabs(t);
+ t = fabs(t*t);
+
+ t = sqrt(t);
+ t = sqrt(t*t);
+
+ t = floor(t);
+ t = floor(t*t);
+
+ t = ceil(t);
+ t = ceil(t*t);
+
+ t = trunc(t);
+ t = trunc(t*t);
+
+ t = round(t);
+ t = round(t*t);
+
+ t = exp(t);
+ t = exp(t*t);
+
+ t = log(t);
+ t = log(t*t);
+
+ t = log10(t);
+ t = log10(t*t);
+
+ t = cos(t);
+ t = cos(t*t);
+
+ t = sin(t);
+ t = sin(t*t);
+
+ t = tan(t);
+ t = tan(t*t);
+
+ t = asin(t);
+ t = asin(t*t);
+
+ t = atan(t);
+ t = atan(t*t);
+
+ t = acos(t);
+ t = acos(t*t);
+
+ t = cosh(t);
+ t = cosh(t*t);
+
+ t = sinh(t);
+ t = sinh(t*t);
+
+ t = tanh(t);
+ t = tanh(t*t);
+
+ double dval = 2;
+ t = pow(t, t);
+ t = pow(t, t*t);
+ t = pow(t, dval);
+ t = pow(t*t, t);
+ t = pow(t*t, t*t);
+ t = pow(t*t, dval);
+ t = pow(dval, t);
+ t = pow(dval, t*t);
+
+ t = atan2(t, t);
+ t = atan2(t, t*t);
+ t = atan2(t, dval);
+ t = atan2(t*t, t);
+ t = atan2(t*t, t*t);
+ t = atan2(t*t, dval);
+ t = atan2(dval, t);
+ t = atan2(dval, t*t);
+
+ t = fmod(t, t);
+ t = fmod(t, t*t);
+ t = fmod(t, dval);
+ t = fmod(t*t, t);
+ t = fmod(t*t, t*t);
+ t = fmod(t*t, dval);
+ t = fmod(dval, t);
+ t = fmod(dval, t*t);
+
+ typedef typename T::backend_type backend_type;
+ typedef typename backend_type::exponent_type exp_type;
+ exp_type e = 0;
+ int i = 0;
+
+ t = ldexp(t, i);
+ t = ldexp(t*t, i);
+ t = ldexp(t, e);
+ t = ldexp(t*t, e);
+
+ t = frexp(t, &i);
+ t = frexp(t*t, &i);
+ t = frexp(t, &e);
+ t = frexp(t*t, &e);
+
+ t = scalbn(t, i);
+ t = scalbn(t*t, i);
+ t = scalbn(t, e);
+ t = scalbn(t*t, e);
+
+ t = logb(t);
+ t = logb(t*t);
+ e = ilogb(t);
+ e = ilogb(t*t);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#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
+}
+
+int main()
+{
+#ifdef TEST_BACKEND
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::concepts::mp_number_float_architype>));
+#endif
+#ifdef TEST_MPF_50
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::mpf_float_50>));
+#endif
+#ifdef TEST_MPFR_50
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::mpfr_float_50>));
+#endif
+#ifdef TEST_MPFR_6
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> > >));
+#endif
+#ifdef TEST_MPFR_15
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> > >));
+#endif
+#ifdef TEST_MPFR_17
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> > >));
+#endif
+#ifdef TEST_MPFR_30
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> > >));
+#endif
+#ifdef TEST_MPFR_50
+ BOOST_CONCEPT_ASSERT((boost::math::concepts::RealTypeConcept<boost::multiprecision::mpfr_float_50>));
+#endif
+#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());
+#endif
+
+}
diff --git a/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp b/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp
new file mode 100644
index 0000000000..2d79d0725c
--- /dev/null
+++ b/libs/multiprecision/test/concepts/sf_concept_check_basic.cpp
@@ -0,0 +1,167 @@
+// Copyright John Maddock 2012.
+// 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)
+
+//
+// This tests that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+# pragma warning(disable:4800)
+# pragma warning(disable:4512)
+# pragma warning(disable:4127)
+# pragma warning(disable:4512)
+# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <libs/math/test/compile_test/poison.hpp>
+
+#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_BIN_FLOAT)
+# define TEST_MPF_50
+# define TEST_BACKEND
+# define TEST_MPZ
+# define TEST_MPFR_50
+# define TEST_MPFR_6
+# define TEST_MPFR_15
+# define TEST_MPFR_17
+# define TEST_MPFR_30
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ (boost::math::fpclassify)(v1);
+ (boost::math::isfinite)(v1);
+ (boost::math::isnormal)(v1);
+ (boost::math::isnan)(v1);
+ (boost::math::isinf)(v1);
+ (boost::math::signbit)(v1);
+ (boost::math::copysign)(v1, v2);
+ (boost::math::changesign)(v1);
+ (boost::math::sign)(v1);
+ boost::math::log1p(v1);
+ boost::math::expm1(v1);
+ boost::math::cbrt(v1);
+ boost::math::sqrt1pm1(v1);
+ boost::math::powm1(v1, v2);
+ boost::math::hypot(v1, v2);
+ boost::math::sinc_pi(v1);
+ boost::math::sinhc_pi(v1);
+ boost::math::asinh(v1);
+ boost::math::acosh(v1);
+ boost::math::atanh(v1);
+ boost::math::sin_pi(v1);
+ boost::math::cos_pi(v1);
+ boost::math::trunc(v1);
+ boost::math::itrunc(v1);
+ boost::math::ltrunc(v1);
+ boost::math::round(v1);
+ boost::math::iround(v1);
+ boost::math::lround(v1);
+ boost::math::modf(v1, &v1);
+ boost::math::modf(v1, &i);
+ long l;
+ boost::math::modf(v1, &l);
+#ifdef BOOST_HAS_LONG_LONG
+ boost::math::lltrunc(v1);
+ boost::math::llround(v1);
+ boost::long_long_type ll;
+ boost::math::modf(v1, &ll);
+#endif
+ boost::math::pow<2>(v1);
+ boost::math::nextafter(v1, v1);
+ boost::math::float_next(v1);
+ boost::math::float_prior(v1);
+ boost::math::float_distance(v1, v1);
+ // Misc functions that don't fit elsewhere:
+ boost::math::expint(v1);
+ boost::math::expint(i);
+ boost::math::expint(i, v2);
+ boost::math::expint(i, i);
+ boost::math::zeta(v1);
+ boost::math::zeta(i);
+ boost::math::owens_t(v1, v2);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp b/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp
new file mode 100644
index 0000000000..8743419f0b
--- /dev/null
+++ b/libs/multiprecision/test/concepts/sf_concept_check_bessel.cpp
@@ -0,0 +1,135 @@
+// Copyright John Maddock 2012.
+// 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)
+
+//
+// This tests that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+# pragma warning(disable:4800)
+# pragma warning(disable:4512)
+# pragma warning(disable:4127)
+# pragma warning(disable:4512)
+# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <libs/math/test/compile_test/poison.hpp>
+
+#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_BIN_FLOAT)
+# define TEST_MPF_50
+# define TEST_BACKEND
+# define TEST_MPZ
+# define TEST_MPFR_50
+# define TEST_MPFR_6
+# define TEST_MPFR_15
+# define TEST_MPFR_17
+# define TEST_MPFR_30
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+# include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i(0);
+ boost::math::cyl_neumann(v1, v2);
+ boost::math::cyl_neumann(i, v2);
+#ifndef SLOW_COMPILER
+ boost::math::cyl_bessel_j(v1, v2);
+ boost::math::cyl_bessel_j(i, v2);
+ boost::math::cyl_bessel_i(v1, v2);
+ boost::math::cyl_bessel_i(i, v2);
+ boost::math::cyl_bessel_k(v1, v2);
+ boost::math::cyl_bessel_k(i, v2);
+ boost::math::sph_bessel(i, v2);
+ boost::math::sph_bessel(i, 1);
+ boost::math::sph_neumann(i, v2);
+ boost::math::sph_neumann(i, i);
+ boost::math::airy_ai(v1);
+ boost::math::airy_bi(v1);
+ boost::math::airy_ai_prime(v1);
+ boost::math::airy_bi_prime(v1);
+#endif
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp b/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp
new file mode 100644
index 0000000000..0bd6d6f76c
--- /dev/null
+++ b/libs/multiprecision/test/concepts/sf_concept_check_elliptic.cpp
@@ -0,0 +1,139 @@
+// Copyright John Maddock 2012.
+// 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)
+
+//
+// This tests that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+# pragma warning(disable:4800)
+# pragma warning(disable:4512)
+# pragma warning(disable:4127)
+# pragma warning(disable:4512)
+# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <libs/math/test/compile_test/poison.hpp>
+
+#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_BIN_FLOAT)
+# define TEST_MPF_50
+# define TEST_BACKEND
+# define TEST_MPZ
+# define TEST_MPFR_50
+# define TEST_MPFR_6
+# define TEST_MPFR_15
+# define TEST_MPFR_17
+# define TEST_MPFR_30
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ boost::math::ellint_1(v1);
+ boost::math::ellint_1(v1, v2);
+ boost::math::ellint_2(v1);
+ boost::math::ellint_2(v1, v2);
+ boost::math::ellint_3(v1, v2);
+ boost::math::ellint_3(v1, v2, v3);
+ boost::math::ellint_rc(v1, v2);
+ boost::math::ellint_rd(v1, v2, v3);
+ boost::math::ellint_rf(v1, v2, v3);
+ boost::math::ellint_rj(v1, v2, v3, v1);
+ boost::math::jacobi_elliptic(v1, v2, &v1, &v2);
+ boost::math::jacobi_cd(v1, v2);
+ boost::math::jacobi_cn(v1, v2);
+ boost::math::jacobi_cs(v1, v2);
+ boost::math::jacobi_dc(v1, v2);
+ boost::math::jacobi_dn(v1, v2);
+ boost::math::jacobi_ds(v1, v2);
+ boost::math::jacobi_nc(v1, v2);
+ boost::math::jacobi_nd(v1, v2);
+ boost::math::jacobi_ns(v1, v2);
+ boost::math::jacobi_sc(v1, v2);
+ boost::math::jacobi_sd(v1, v2);
+ boost::math::jacobi_sn(v1, v2);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp b/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp
new file mode 100644
index 0000000000..fd07db1c4b
--- /dev/null
+++ b/libs/multiprecision/test/concepts/sf_concept_check_gamma.cpp
@@ -0,0 +1,157 @@
+// Copyright John Maddock 2012.
+// 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)
+
+//
+// This tests that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+# pragma warning(disable:4800)
+# pragma warning(disable:4512)
+# pragma warning(disable:4127)
+# pragma warning(disable:4512)
+# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <libs/math/test/compile_test/poison.hpp>
+
+#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_BIN_FLOAT)
+# define TEST_MPF_50
+# define TEST_BACKEND
+# define TEST_MPZ
+# define TEST_MPFR_50
+# define TEST_MPFR_6
+# define TEST_MPFR_15
+# define TEST_MPFR_17
+# define TEST_MPFR_30
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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_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
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ int i;
+ boost::math::tgamma(v1);
+ boost::math::tgamma1pm1(v1);
+ boost::math::lgamma(v1);
+ boost::math::lgamma(v1, &i);
+ boost::math::digamma(v1);
+ boost::math::tgamma_ratio(v1, v2);
+ boost::math::tgamma_delta_ratio(v1, v2);
+ boost::math::factorial<T>(i);
+ boost::math::unchecked_factorial<T>(i);
+ i = boost::math::max_factorial<T>::value;
+ boost::math::double_factorial<T>(i);
+ boost::math::rising_factorial(v1, i);
+ boost::math::falling_factorial(v1, i);
+#ifndef SLOW_COMPILER
+ boost::math::tgamma(v1, v2);
+ boost::math::tgamma_lower(v1, v2);
+ boost::math::gamma_p(v1, v2);
+ boost::math::gamma_q(v1, v2);
+ boost::math::gamma_p_inv(v1, v2);
+ boost::math::gamma_q_inv(v1, v2);
+ boost::math::gamma_p_inva(v1, v2);
+ boost::math::gamma_q_inva(v1, v2);
+ boost::math::erf(v1);
+ boost::math::erfc(v1);
+ boost::math::erf_inv(v1);
+ boost::math::erfc_inv(v1);
+ boost::math::beta(v1, v2);
+ boost::math::beta(v1, v2, v3);
+ boost::math::betac(v1, v2, v3);
+ boost::math::ibeta(v1, v2, v3);
+ boost::math::ibetac(v1, v2, v3);
+ boost::math::ibeta_inv(v1, v2, v3);
+ boost::math::ibetac_inv(v1, v2, v3);
+ boost::math::ibeta_inva(v1, v2, v3);
+ boost::math::ibetac_inva(v1, v2, v3);
+ boost::math::ibeta_invb(v1, v2, v3);
+ boost::math::ibetac_invb(v1, v2, v3);
+ boost::math::gamma_p_derivative(v2, v3);
+ boost::math::ibeta_derivative(v1, v2, v3);
+#endif
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp b/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp
new file mode 100644
index 0000000000..44414b9a2c
--- /dev/null
+++ b/libs/multiprecision/test/concepts/sf_concept_check_poly.cpp
@@ -0,0 +1,130 @@
+// Copyright John Maddock 2012.
+// 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)
+
+//
+// This tests that cpp_dec_float_50 meets our
+// conceptual requirements when used with Boost.Math.
+//
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+# pragma warning(disable:4800)
+# pragma warning(disable:4512)
+# pragma warning(disable:4127)
+# pragma warning(disable:4512)
+# pragma warning(disable:4503) // decorated name length exceeded, name was truncated
+#endif
+
+#include <libs/math/test/compile_test/poison.hpp>
+
+#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_BIN_FLOAT)
+# define TEST_MPF_50
+# define TEST_BACKEND
+# define TEST_MPZ
+# define TEST_MPFR_50
+# define TEST_MPFR_6
+# define TEST_MPFR_15
+# define TEST_MPFR_17
+# define TEST_MPFR_30
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+#include <boost/multiprecision/logged_adaptor.hpp>
+#endif
+
+#include <boost/math/special_functions.hpp>
+
+template <class T>
+void test_extra(T)
+{
+ T v1, v2, v3;
+ boost::math::legendre_p(1, v1);
+ boost::math::legendre_p(1, 0, v1);
+ boost::math::legendre_q(1, v1);
+ boost::math::legendre_next(2, v1, v2, v3);
+ boost::math::legendre_next(2, 2, v1, v2, v3);
+ boost::math::laguerre(1, v1);
+ boost::math::laguerre(2, 1, v1);
+ boost::math::laguerre(2u, 1u, v1);
+ boost::math::laguerre_next(2, v1, v2, v3);
+ boost::math::laguerre_next(2, 1, v1, v2, v3);
+ boost::math::hermite(1, v1);
+ boost::math::hermite_next(2, v1, v2, v3);
+ boost::math::spherical_harmonic_r(2, 1, v1, v2);
+ boost::math::spherical_harmonic_i(2, 1, v1, v2);
+}
+
+void foo()
+{
+#ifdef TEST_BACKEND
+ test_extra(boost::multiprecision::concepts::mp_number_float_architype());
+#endif
+#ifdef TEST_MPF_50
+ test_extra(boost::multiprecision::mpf_float_50());
+#endif
+#ifdef TEST_MPFR_50
+ test_extra(boost::multiprecision::mpfr_float_50());
+#endif
+#ifdef TEST_MPFR_6
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<6> >());
+#endif
+#ifdef TEST_MPFR_15
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<15> >());
+#endif
+#ifdef TEST_MPFR_17
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<17> >());
+#endif
+#ifdef TEST_MPFR_30
+ test_extra(boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> >());
+#endif
+#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
+#ifdef TEST_LOGGED_ADAPTER
+ typedef boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > num_t;
+ test_extra(num_t());
+#endif
+}
+
+int main()
+{
+ foo();
+}
diff --git a/libs/multiprecision/test/coverage/Makefile b/libs/multiprecision/test/coverage/Makefile
new file mode 100644
index 0000000000..d3825ea759
--- /dev/null
+++ b/libs/multiprecision/test/coverage/Makefile
@@ -0,0 +1,313 @@
+# copyright John Maddock 2012
+# 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.
+
+
+SOURCES=\
+../../../../boost/multiprecision/mpfr.hpp\
+../../../../boost/multiprecision/tommath.hpp\
+../../../../boost/multiprecision/number.hpp\
+../../../../boost/multiprecision/cpp_dec_float.hpp\
+../../../../boost/multiprecision/gmp.hpp\
+../../../../boost/multiprecision/random.hpp\
+../../../../boost/multiprecision/cpp_int.hpp\
+../../../../boost/multiprecision/miller_rabin.hpp\
+../../../../boost/multiprecision/rational_adaptor.hpp\
+../../../../boost/multiprecision/concepts/mp_number_archetypes.hpp\
+../../../../boost/multiprecision/detail/big_lanczos.hpp\
+../../../../boost/multiprecision/detail/digits.hpp\
+../../../../boost/multiprecision/detail/no_et_ops.hpp\
+../../../../boost/multiprecision/detail/number_base.hpp\
+../../../../boost/multiprecision/detail/generic_interconvert.hpp\
+../../../../boost/multiprecision/detail/number_compare.hpp\
+../../../../boost/multiprecision/detail/default_ops.hpp\
+../../../../boost/multiprecision/detail/integer_ops.hpp\
+../../../../boost/multiprecision/detail/functions/constants.hpp\
+../../../../boost/multiprecision/detail/functions/pow.hpp\
+../../../../boost/multiprecision/detail/functions/trig.hpp\
+../../../../boost/multiprecision/traits/explicit_conversion.hpp\
+../../../../boost/multiprecision/traits/is_restricted_conversion.hpp
+
+coverage : run
+ gcov test_arithmetic_cpp_int_1 test_arithmetic_cpp_int_2 test_arithmetic_cpp_int_3 \
+ gcov test_arithmetic_cpp_int_4 test_arithmetic_cpp_int_5 test_arithmetic_cpp_int_6 \
+ gcov test_arithmetic_cpp_int_7 test_arithmetic_cpp_int_8 test_arithmetic_cpp_int_9 \
+ gcov test_arithmetic_cpp_int_10 test_arithmetic_cpp_int_11 test_arithmetic_cpp_int_12 \
+ gcov test_arithmetic_cpp_int_13 test_arithmetic_cpp_int_14 test_arithmetic_cpp_int_15 \
+ gcov test_arithmetic_cpp_int_16 test_arithmetic_cpp_int_17 test_arithmetic_cpp_int_18 \
+ test_arithmetic_cpp_dec_float_1 test_arithmetic_cpp_dec_float_2 test_arithmetic_cpp_dec_float_3\
+ test_arithmetic_concept test_arithmetic_mpz test_arithmetic_mpf \
+ test_arithmetic_mpf_50 test_arithmetic_mpq test_arithmetic_mpfr test_arithmetic_mpfr_50 test_cpp_int \
+ test_int_io test_float_io test_rational_io test_gmp_conversions test_mpfr_conversions test_cpp_int_conv
+
+test_arithmetic_cpp_int_1.o : ../test_arithmetic_cpp_int_1.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_1 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_1.o -c ../test_arithmetic_cpp_int_1.cpp
+
+test_arithmetic_cpp_int_1 : test_arithmetic_cpp_int_1.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_1 test_arithmetic_cpp_int_1.o
+
+test_arithmetic_cpp_int_2.o : ../test_arithmetic_cpp_int_2.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_2 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_2.o -c ../test_arithmetic_cpp_int_2.cpp
+
+test_arithmetic_cpp_int_2 : test_arithmetic_cpp_int_2.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_2 test_arithmetic_cpp_int_2.o
+
+test_arithmetic_cpp_int_3.o : ../test_arithmetic_cpp_int_3.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_3.o -c ../test_arithmetic_cpp_int_3.cpp
+
+test_arithmetic_cpp_int_3 : test_arithmetic_cpp_int_3.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_3 test_arithmetic_cpp_int_3.o
+
+test_arithmetic_cpp_int_4.o : ../test_arithmetic_cpp_int_4.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_4.o -c ../test_arithmetic_cpp_int_4.cpp
+
+test_arithmetic_cpp_int_4 : test_arithmetic_cpp_int_4.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_4 test_arithmetic_cpp_int_4.o
+
+test_arithmetic_cpp_int_5.o : ../test_arithmetic_cpp_int_5.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_5.o -c ../test_arithmetic_cpp_int_5.cpp
+
+test_arithmetic_cpp_int_5 : test_arithmetic_cpp_int_5.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_5 test_arithmetic_cpp_int_5.o
+
+test_arithmetic_cpp_int_6.o : ../test_arithmetic_cpp_int_6.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_6.o -c ../test_arithmetic_cpp_int_6.cpp
+
+test_arithmetic_cpp_int_6 : test_arithmetic_cpp_int_6.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_6 test_arithmetic_cpp_int_6.o
+
+test_arithmetic_cpp_int_7.o : ../test_arithmetic_cpp_int_7.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_7.o -c ../test_arithmetic_cpp_int_7.cpp
+
+test_arithmetic_cpp_int_7 : test_arithmetic_cpp_int_7.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_7 test_arithmetic_cpp_int_7.o
+
+test_arithmetic_cpp_int_8.o : ../test_arithmetic_cpp_int_8.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_8.o -c ../test_arithmetic_cpp_int_8.cpp
+
+test_arithmetic_cpp_int_8 : test_arithmetic_cpp_int_8.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_8 test_arithmetic_cpp_int_8.o
+
+test_arithmetic_cpp_int_9.o : ../test_arithmetic_cpp_int_9.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_9.o -c ../test_arithmetic_cpp_int_9.cpp
+
+test_arithmetic_cpp_int_9 : test_arithmetic_cpp_int_9.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_9 test_arithmetic_cpp_int_9.o
+
+test_arithmetic_cpp_int_10.o : ../test_arithmetic_cpp_int_10.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_10.o -c ../test_arithmetic_cpp_int_10.cpp
+
+test_arithmetic_cpp_int_10 : test_arithmetic_cpp_int_10.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_10 test_arithmetic_cpp_int_10.o
+
+test_arithmetic_cpp_int_11.o : ../test_arithmetic_cpp_int_11.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_11.o -c ../test_arithmetic_cpp_int_12.cpp
+
+test_arithmetic_cpp_int_11 : test_arithmetic_cpp_int_11.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_11 test_arithmetic_cpp_int_11.o
+
+test_arithmetic_cpp_int_12.o : ../test_arithmetic_cpp_int_12.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_12.o -c ../test_arithmetic_cpp_int_12.cpp
+
+test_arithmetic_cpp_int_12 : test_arithmetic_cpp_int_12.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_12 test_arithmetic_cpp_int_12.o
+
+test_arithmetic_cpp_int_13.o : ../test_arithmetic_cpp_int_13.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_13.o -c ../test_arithmetic_cpp_int_13.cpp
+
+test_arithmetic_cpp_int_13 : test_arithmetic_cpp_int_13.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_13 test_arithmetic_cpp_int_13.o
+
+test_arithmetic_cpp_int_14.o : ../test_arithmetic_cpp_int_14.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_14.o -c ../test_arithmetic_cpp_int_14.cpp
+
+test_arithmetic_cpp_int_14 : test_arithmetic_cpp_int_14.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_14 test_arithmetic_cpp_int_14.o
+
+test_arithmetic_cpp_int_15.o : ../test_arithmetic_cpp_int_15.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_15.o -c ../test_arithmetic_cpp_int_15.cpp
+
+test_arithmetic_cpp_int_15 : test_arithmetic_cpp_int_15.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_15 test_arithmetic_cpp_int_15.o
+
+test_arithmetic_cpp_int_16.o : ../test_arithmetic_cpp_int_16.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_16.o -c ../test_arithmetic_cpp_int_16.cpp
+
+test_arithmetic_cpp_int_16 : test_arithmetic_cpp_int_16.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_16 test_arithmetic_cpp_int_16.o
+
+test_arithmetic_cpp_int_17.o : ../test_arithmetic_cpp_int_17.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_17.o -c ../test_arithmetic_cpp_int_17.cpp
+
+test_arithmetic_cpp_int_17 : test_arithmetic_cpp_int_17.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_17 test_arithmetic_cpp_int_17.o
+
+test_arithmetic_cpp_int_18.o : ../test_arithmetic_cpp_int_18.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_INT_3 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_int_18.o -c ../test_arithmetic_cpp_int_18.cpp
+
+test_arithmetic_cpp_int_18 : test_arithmetic_cpp_int_18.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_int_18 test_arithmetic_cpp_int_18.o
+
+test_arithmetic_cpp_dec_float_1.o : ../test_arithmetic_cpp_dec_float_1.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_DEC_FLOAT --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_dec_float_1.o -c ../test_arithmetic_cpp_dec_float_1.cpp
+
+test_arithmetic_cpp_dec_float_1 : test_arithmetic_cpp_dec_float_1.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_dec_float_1 test_arithmetic_cpp_dec_float_1.o
+
+test_arithmetic_cpp_dec_float_2.o : ../test_arithmetic_cpp_dec_float_2.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_DEC_FLOAT --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_dec_float_2.o -c ../test_arithmetic_cpp_dec_float_2.cpp
+
+test_arithmetic_cpp_dec_float_2 : test_arithmetic_cpp_dec_float_2.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_dec_float_2 test_arithmetic_cpp_dec_float_2.o
+
+test_arithmetic_cpp_dec_float_3.o : ../test_arithmetic_cpp_dec_float_3.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_CPP_DEC_FLOAT --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_cpp_dec_float_3.o -c ../test_arithmetic_cpp_dec_float_3.cpp
+
+test_arithmetic_cpp_dec_float_3 : test_arithmetic_cpp_dec_float_3.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_cpp_dec_float_3 test_arithmetic_cpp_dec_float_3.o
+
+test_arithmetic_concept.o : ../test_arithmetic_backend_concept.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_BACKEND --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_concept.o -c ../test_arithmetic_backend_concept.cpp
+
+test_arithmetic_concept : test_arithmetic_concept.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_concept test_arithmetic_concept.o
+
+test_arithmetic_mpz.o : ../test_arithmetic_mpz.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_MPZ --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_mpz.o -c ../test_arithmetic_mpz.cpp
+
+test_arithmetic_mpz : test_arithmetic_mpz.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_mpz test_arithmetic_mpz.o -lgmp
+
+test_arithmetic_mpf.o : ../test_arithmetic_mpf.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_MPF --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_mpf.o -c ../test_arithmetic_mpf.cpp
+
+test_arithmetic_mpf : test_arithmetic_mpf.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_mpf test_arithmetic_mpf.o -lgmp
+
+test_arithmetic_mpf_50.o : ../test_arithmetic_mpf_50.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_MPF_50 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_mpf_50.o -c ../test_arithmetic_mpf_50.cpp
+
+test_arithmetic_mpf_50 : test_arithmetic_mpf_50.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_mpf_50 test_arithmetic_mpf_50.o -lgmp
+
+test_arithmetic_mpq.o : ../test_arithmetic_mpq.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_MPQ --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_mpq.o -c ../test_arithmetic_mpq.cpp
+
+test_arithmetic_mpq : test_arithmetic_mpq.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_mpq test_arithmetic_mpq.o -lgmp
+
+test_arithmetic_mpfr.o : ../test_arithmetic_mpfr.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_MPFR --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_mpfr.o -c ../test_arithmetic_mpfr.cpp
+
+test_arithmetic_mpfr : test_arithmetic_mpfr.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_mpfr test_arithmetic_mpfr.o -lmpfr -lgmp
+
+test_arithmetic_mpfr_50.o : ../test_arithmetic_mpfr_50.cpp $(SOURCES)
+ g++ -std=gnu++0x -DTEST_MPFR_50 --coverage -g -I../../../.. -I../../../../../../trunk -o test_arithmetic_mpfr_50.o -c ../test_arithmetic_mpfr_50.cpp
+
+test_arithmetic_mpfr_50 : test_arithmetic_mpfr_50.o
+ g++ -std=gnu++0x --coverage -o test_arithmetic_mpfr_50 test_arithmetic_mpfr_50.o -lmpfr -lgmp
+
+test_cpp_int.o : ../test_cpp_int.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -g -I../../../.. -I../../../../../../trunk -o test_cpp_int.o -c ../test_cpp_int.cpp
+
+test_cpp_int : test_cpp_int.o
+ g++ -std=gnu++0x --coverage -o test_cpp_int test_cpp_int.o -lgmp
+
+test_int_io.o : ../test_int_io.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -DTEST_MPZ -DTEST_CPP_INT -g -I../../../.. -I../../../../../../trunk -o test_int_io.o -c ../test_int_io.cpp
+
+test_int_io : test_int_io.o
+ g++ -std=gnu++0x --coverage -o test_int_io test_int_io.o -lgmp
+
+test_float_io.o : ../test_float_io.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -g -DTEST_MPF_50 -DTEST_CPP_DEC_FLOAT -DTEST_MPFR_50 -I../../../.. -I../../../../../../trunk -o test_float_io.o -c ../test_float_io.cpp
+
+test_float_io : test_float_io.o
+ g++ -std=gnu++0x --coverage -o test_float_io test_float_io.o -lmpfr -lgmp
+
+test_rational_io.o : ../test_rational_io.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -DTEST_MPQ -DTEST_CPP_INT -g -I../../../.. -I../../../../../../trunk -o test_rational_io.o -c ../test_rational_io.cpp
+
+test_rational_io : test_rational_io.o
+ g++ -std=gnu++0x --coverage -o test_rational_io test_rational_io.o -lgmp
+
+test_gmp_conversions.o : ../test_gmp_conversions.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -g -I../../../.. -I../../../../../../trunk -o test_gmp_conversions.o -c ../test_gmp_conversions.cpp
+
+test_gmp_conversions : test_gmp_conversions.o
+ g++ -std=gnu++0x --coverage -o test_gmp_conversions test_gmp_conversions.o -lgmp
+
+test_mpfr_conversions.o : ../test_mpfr_conversions.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -g -I../../../.. -I../../../../../../trunk -o test_mpfr_conversions.o -c ../test_mpfr_conversions.cpp
+
+test_mpfr_conversions : test_mpfr_conversions.o
+ g++ -std=gnu++0x --coverage -o test_mpfr_conversions test_mpfr_conversions.o -lmpfr -lgmp
+
+test_cpp_int_conv.o : ../test_cpp_int_conv.cpp $(SOURCES)
+ g++ -std=gnu++0x --coverage -g -I../../../.. -I../../../../../../trunk -o test_cpp_int_conv.o -c ../test_cpp_int_conv.cpp
+
+test_cpp_int_conv : test_cpp_int_conv.o
+ g++ -std=gnu++0x --coverage -o test_cpp_int_conv test_cpp_int_conv.o
+
+run : test_arithmetic_cpp_int_1 test_arithmetic_cpp_int_2 test_arithmetic_cpp_int_3 \
+ test_arithmetic_cpp_int_4 test_arithmetic_cpp_int_5 test_arithmetic_cpp_int_6 \
+ test_arithmetic_cpp_int_7 test_arithmetic_cpp_int_8 test_arithmetic_cpp_int_9 \
+ test_arithmetic_cpp_int_10 test_arithmetic_cpp_int_11 test_arithmetic_cpp_int_12 \
+ test_arithmetic_cpp_int_13 test_arithmetic_cpp_int_14 test_arithmetic_cpp_int_15 \
+ test_arithmetic_cpp_int_16 test_arithmetic_cpp_int_17 test_arithmetic_cpp_int_18 \
+ test_arithmetic_cpp_dec_float_1 test_arithmetic_cpp_dec_float_2 test_arithmetic_cpp_dec_float_3 test_arithmetic_concept \
+ test_arithmetic_mpz test_arithmetic_mpf test_arithmetic_mpf_50 test_arithmetic_mpq test_arithmetic_mpfr test_arithmetic_mpfr_50 \
+ test_cpp_int test_int_io test_float_io test_rational_io test_gmp_conversions test_mpfr_conversions test_cpp_int_conv
+ ./test_arithmetic_cpp_int_1
+ ./test_arithmetic_cpp_int_2
+ ./test_arithmetic_cpp_int_3
+ ./test_arithmetic_cpp_int_4
+ ./test_arithmetic_cpp_int_5
+ ./test_arithmetic_cpp_int_6
+ ./test_arithmetic_cpp_int_7
+ ./test_arithmetic_cpp_int_8
+ ./test_arithmetic_cpp_int_9
+ ./test_arithmetic_cpp_int_10
+ ./test_arithmetic_cpp_int_11
+ ./test_arithmetic_cpp_int_12
+ ./test_arithmetic_cpp_int_13
+ ./test_arithmetic_cpp_int_14
+ ./test_arithmetic_cpp_int_15
+ ./test_arithmetic_cpp_int_16
+ ./test_arithmetic_cpp_int_17
+ ./test_arithmetic_cpp_int_18
+ ./test_arithmetic_cpp_dec_float_1
+ ./test_arithmetic_cpp_dec_float_2
+ ./test_arithmetic_cpp_dec_float_3
+ ./test_arithmetic_concept
+ ./test_arithmetic_mpz
+ ./test_arithmetic_mpf
+ ./test_arithmetic_mpf_50
+ ./test_arithmetic_mpq
+ ./test_arithmetic_mpfr
+ ./test_arithmetic_mpfr_50
+ ./test_cpp_int
+ ./test_int_io
+ ./test_float_io
+ ./test_rational_io
+ ./test_gmp_conversions
+ ./test_mpfr_conversions
+ ./test_cpp_int_conv
+
+clean :
+ rm -rf *.o *.gc* test_arithmetic_cpp_int_1 test_arithmetic_cpp_int_2 test_arithmetic_cpp_int_3 \
+ test_arithmetic_cpp_int_4 test_arithmetic_cpp_int_5 test_arithmetic_cpp_int_6 \
+ test_arithmetic_cpp_int_7 test_arithmetic_cpp_int_8 test_arithmetic_cpp_int_9 \
+ test_arithmetic_cpp_int_10 test_arithmetic_cpp_int_11 test_arithmetic_cpp_int_12 \
+ test_arithmetic_cpp_int_13 test_arithmetic_cpp_int_14 test_arithmetic_cpp_int_15 \
+ test_arithmetic_cpp_int_16 test_arithmetic_cpp_int_17 test_arithmetic_cpp_int_18 \
+ test_arithmetic_cpp_dec_float test_arithmetic_concept test_arithmetic_mpz \
+ test_arithmetic_mpf test_arithmetic_mpf_50 test_arithmetic_mpq test_arithmetic_mpfr test_arithmetic_mpfr_50 test_cpp_int\
+ test_int_io test_float_io test_rational_io test_gmp_conversions test_mpfr_conversions test_cpp_int_conv
+
+
+
+
+
diff --git a/libs/multiprecision/test/cpp_int1024_serial32.txt b/libs/multiprecision/test/cpp_int1024_serial32.txt
new file mode 100644
index 0000000000..d9e8452cb3
--- /dev/null
+++ b/libs/multiprecision/test/cpp_int1024_serial32.txt
@@ -0,0 +1 @@
+22 serialization::archive 10 0 0 0 0 0 108 240 216 207 212 25 178 183 244 196 236 95 147 174 198 156 135 30 192 249 71 150 58 81 90 83 157 31 192 97 218 61 242 6 92 59 181 100 93 130 250 188 246 144 44 168 35 244 193 47 12 158 190 153 204 174 128 206 100 236 32 18 126 89 123 194 22 35 211 231 76 148 27 235 109 5 183 33 227 88 207 58 215 251 252 155 139 128 94 102 109 67 113 84 50 31 117 129 72 215 77 164 152 225 243 6 0 0 0 1 108 240 216 207 212 25 178 183 244 196 236 95 147 174 198 156 135 30 192 249 71 150 58 81 90 83 157 31 192 97 218 61 242 6 92 59 181 100 93 130 250 188 246 144 44 168 35 244 193 47 12 158 190 153 204 174 128 206 100 236 32 18 126 89 123 194 22 35 211 231 76 148 27 235 109 5 183 33 227 88 207 58 215 251 252 155 139 128 94 102 109 67 113 84 50 31 117 129 72 215 77 164 152 225 243 6 0 0 0 0 20 233 110 98 40 22 77 153 193 59 146 80 175 250 132 156 155 86 10 0 0 1 20 233 110 98 40 22 77 153 193 59 146 80 175 250 132 156 155 86 10 0 0 0 116 195 197 234 211 167 46 136 167 128 33 88 13 108 237 91 62 12 92 69 154 204 29 67 225 108 76 250 33 86 106 195 35 211 56 231 162 75 128 234 92 136 184 82 7 210 243 108 153 53 77 201 114 146 101 203 238 16 127 62 157 89 147 7 159 33 49 73 121 45 71 184 101 48 57 231 136 53 32 117 91 72 53 49 149 132 120 220 38 202 141 199 61 152 225 162 88 241 96 97 235 194 95 106 102 77 171 141 79 25 171 118 0 150 152 162 225 1 116 195 197 234 211 167 46 136 167 128 33 88 13 108 237 91 62 12 92 69 154 204 29 67 225 108 76 250 33 86 106 195 35 211 56 231 162 75 128 234 92 136 184 82 7 210 243 108 153 53 77 201 114 146 101 203 238 16 127 62 157 89 147 7 159 33 49 73 121 45 71 184 101 48 57 231 136 53 32 117 91 72 53 49 149 132 120 220 38 202 141 199 61 152 225 162 88 241 96 97 235 194 95 106 102 77 171 141 79 25 171 118 0 150 152 162 225 0 108 52 251 142 48 154 38 230 245 135 197 116 187 16 93 121 73 166 67 73 14 108 247 153 173 155 1 1 27 39 117 50 208 104 14 143 42 205 185 79 111 156 236 127 179 134 12 211 3 186 248 224 18 111 115 8 241 120 193 95 162 144 223 81 125 100 15 75 159 151 135 167 7 105 70 42 112 187 150 50 81 238 10 88 7 185 247 8 238 5 251 173 132 245 18 238 209 93 5 153 183 17 250 77 56 125 31 2 0 1 108 52 251 142 48 154 38 230 245 135 197 116 187 16 93 121 73 166 67 73 14 108 247 153 173 155 1 1 27 39 117 50 208 104 14 143 42 205 185 79 111 156 236 127 179 134 12 211 3 186 248 224 18 111 115 8 241 120 193 95 162 144 223 81 125 100 15 75 159 151 135 167 7 105 70 42 112 187 150 50 81 238 10 88 7 185 247 8 238 5 251 173 132 245 18 238 209 93 5 153 183 17 250 77 56 125 31 2 0 0 20 197 207 215 162 39 250 228 2 55 205 156 2 210 250 185 127 9 0 0 0 1 20 197 207 215 162 39 250 228 2 55 205 156 2 210 250 185 127 9 0 0 0 0 124 24 227 82 233 197 174 88 134 19 71 12 155 49 99 207 184 189 139 213 148 142 65 83 22 86 59 113 20 118 242 15 207 165 34 25 223 113 59 30 140 39 47 19 17 91 233 70 193 187 55 81 125 94 114 235 6 80 26 251 206 129 223 96 50 3 188 107 248 74 130 151 7 40 68 162 241 8 76 185 168 192 189 109 17 104 12 100 42 186 31 15 28 113 72 249 213 10 120 161 189 54 95 145 140 93 52 223 83 153 80 25 250 68 102 71 63 122 51 3 222 201 139 253 189 1 124 24 227 82 233 197 174 88 134 19 71 12 155 49 99 207 184 189 139 213 148 142 65 83 22 86 59 113 20 118 242 15 207 165 34 25 223 113 59 30 140 39 47 19 17 91 233 70 193 187 55 81 125 94 114 235 6 80 26 251 206 129 223 96 50 3 188 107 248 74 130 151 7 40 68 162 241 8 76 185 168 192 189 109 17 104 12 100 42 186 31 15 28 113 72 249 213 10 120 161 189 54 95 145 140 93 52 223 83 153 80 25 250 68 102 71 63 122 51 3 222 201 139 253 189 0 120 84 215 85 155 83 224 217 17 152 203 112 82 122 193 196 197 212 174 168 135 168 249 185 103 45 35 64 229 91 250 210 186 58 210 182 98 118 15 126 35 18 69 254 92 98 253 202 81 186 80 212 23 15 9 32 39 1 22 16 116 63 86 191 203 58 113 189 250 81 8 87 78 224 55 184 247 69 246 57 99 3 71 4 32 58 206 214 203 112 60 52 83 234 29 3 197 37 251 251 84 166 130 63 190 142 0 143 110 160 134 104 117 192 171 252 58 243 0 0 0 1 120 84 215 85 155 83 224 217 17 152 203 112 82 122 193 196 197 212 174 168 135 168 249 185 103 45 35 64 229 91 250 210 186 58 210 182 98 118 15 126 35 18 69 254 92 98 253 202 81 186 80 212 23 15 9 32 39 1 22 16 116 63 86 191 203 58 113 189 250 81 8 87 78 224 55 184 247 69 246 57 99 3 71 4 32 58 206 214 203 112 60 52 83 234 29 3 197 37 251 251 84 166 130 63 190 142 0 143 110 160 134 104 117 192 171 252 58 243 0 0 0 0 32 75 106 211 223 67 33 39 159 137 42 62 13 132 4 148 172 13 129 231 52 23 5 189 177 132 71 127 112 12 0 0 0 1 32 75 106 211 223 67 33 39 159 137 42 62 13 132 4 148 172 13 129 231 52 23 5 189 177 132 71 127 112 12 0 0 0 0 84 71 66 188 102 218 45 89 79 100 203 161 190 29 126 44 173 44 86 244 243 53 45 157 176 5 233 73 112 206 44 106 109 159 71 109 87 77 104 184 44 147 80 22 206 180 74 221 169 143 209 179 215 195 26 222 89 28 178 48 206 169 22 229 44 34 14 33 215 159 185 161 56 150 95 20 128 199 66 223 66 113 0 0 0 1 84 71 66 188 102 218 45 89 79 100 203 161 190 29 126 44 173 44 86 244 243 53 45 157 176 5 233 73 112 206 44 106 109 159 71 109 87 77 104 184 44 147 80 22 206 180 74 221 169 143 209 179 215 195 26 222 89 28 178 48 206 169 22 229 44 34 14 33 215 159 185 161 56 150 95 20 128 199 66 223 66 113 0 0 0 0 40 74 104 149 210 252 235 123 239 168 56 124 239 105 91 87 48 183 253 146 69 244 5 94 42 167 100 207 53 34 116 207 197 97 199 198 121 102 204 246 31 1 40 74 104 149 210 252 235 123 239 168 56 124 239 105 91 87 48 183 253 146 69 244 5 94 42 167 100 207 53 34 116 207 197 97 199 198 121 102 204 246 31 0 16 127 135 241 163 116 139 210 196 195 216 24 255 21 0 0 0 1 16 127 135 241 163 116 139 210 196 195 216 24 255 21 0 0 0 0 72 150 29 179 100 132 144 156 216 95 57 162 101 198 179 215 51 244 149 122 162 171 105 83 53 56 158 83 10 80 190 228 125 131 48 41 93 2 177 156 179 17 217 253 155 46 30 105 35 223 134 100 76 170 35 206 233 252 210 117 27 160 154 210 45 234 95 74 76 159 147 2 0 1 72 150 29 179 100 132 144 156 216 95 57 162 101 198 179 215 51 244 149 122 162 171 105 83 53 56 158 83 10 80 190 228 125 131 48 41 93 2 177 156 179 17 217 253 155 46 30 105 35 223 134 100 76 170 35 206 233 252 210 117 27 160 154 210 45 234 95 74 76 159 147 2 0 0 36 220 123 216 188 130 233 64 162 111 163 35 146 32 32 192 228 163 205 248 224 147 90 97 37 29 2 241 105 156 63 40 242 105 209 126 40 1 36 220 123 216 188 130 233 64 162 111 163 35 146 32 32 192 228 163 205 248 224 147 90 97 37 29 2 241 105 156 63 40 242 105 209 126 40 0 28 230 134 234 52 30 2 41 143 232 97 74 82 171 119 128 41 82 147 155 86 202 151 8 81 3 0 0 0 1 28 230 134 234 52 30 2 41 143 232 97 74 82 171 119 128 41 82 147 155 86 202 151 8 81 3 0 0 0 0 72 15 249 15 27 178 199 148 79 23 3 197 198 33 75 3 164 156 4 165 168 224 178 69 133 25 107 103 207 249 91 170 31 103 38 157 136 237 182 137 145 28 255 143 214 212 22 229 64 150 206 235 209 33 197 227 224 182 51 28 205 88 80 228 111 77 96 3 34 184 34 1 0 1 72 15 249 15 27 178 199 148 79 23 3 197 198 33 75 3 164 156 4 165 168 224 178 69 133 25 107 103 207 249 91 170 31 103 38 157 136 237 182 137 145 28 255 143 214 212 22 229 64 150 206 235 209 33 197 227 224 182 51 28 205 88 80 228 111 77 96 3 34 184 34 1 0 0 128 218 44 245 9 8 123 94 221 100 47 84 11 243 15 172 179 239 47 175 194 3 71 55 191 38 122 159 236 92 247 18 47 19 56 134 218 188 171 164 240 122 46 184 162 129 134 174 138 64 233 80 170 255 199 102 146 231 63 160 16 196 95 226 19 153 123 117 200 46 233 120 129 83 125 132 105 126 85 36 229 17 65 127 187 245 154 8 240 255 6 80 120 99 170 69 125 132 67 244 85 139 199 7 155 182 253 26 132 174 228 45 164 121 122 120 13 138 138 103 108 205 110 58 205 79 100 212 0 1 128 218 44 245 9 8 123 94 221 100 47 84 11 243 15 172 179 239 47 175 194 3 71 55 191 38 122 159 236 92 247 18 47 19 56 134 218 188 171 164 240 122 46 184 162 129 134 174 138 64 233 80 170 255 199 102 146 231 63 160 16 196 95 226 19 153 123 117 200 46 233 120 129 83 125 132 105 126 85 36 229 17 65 127 187 245 154 8 240 255 6 80 120 99 170 69 125 132 67 244 85 139 199 7 155 182 253 26 132 174 228 45 164 121 122 120 13 138 138 103 108 205 110 58 205 79 100 212 0 0 124 42 11 175 85 234 29 127 39 168 190 213 6 131 53 241 65 78 99 129 50 177 192 60 169 254 225 53 185 10 30 128 144 147 118 226 21 168 226 101 136 76 35 162 12 195 5 204 132 123 33 134 136 228 63 232 165 209 64 49 61 69 88 217 222 49 226 15 38 80 170 183 154 76 90 32 162 103 214 88 163 4 232 2 248 216 110 84 43 233 82 171 178 169 49 99 13 2 111 187 145 184 169 169 143 134 196 5 58 127 58 229 193 147 117 193 58 158 31 111 94 152 222 23 0 1 124 42 11 175 85 234 29 127 39 168 190 213 6 131 53 241 65 78 99 129 50 177 192 60 169 254 225 53 185 10 30 128 144 147 118 226 21 168 226 101 136 76 35 162 12 195 5 204 132 123 33 134 136 228 63 232 165 209 64 49 61 69 88 217 222 49 226 15 38 80 170 183 154 76 90 32 162 103 214 88 163 4 232 2 248 216 110 84 43 233 82 171 178 169 49 99 13 2 111 187 145 184 169 169 143 134 196 5 58 127 58 229 193 147 117 193 58 158 31 111 94 152 222 23 0 0 128 117 32 231 128 78 121 139 240 228 103 68 36 169 251 164 16 50 57 142 227 5 246 77 80 110 198 12 68 1 149 50 69 54 143 139 95 198 108 21 41 162 236 219 40 173 104 226 58 15 180 5 40 31 118 13 168 210 43 211 239 7 182 203 237 162 68 33 8 250 179 25 22 162 85 109 252 238 129 170 97 47 77 76 109 6 111 254 168 196 19 35 76 81 88 241 48 255 104 111 142 75 147 180 52 99 76 255 134 237 245 122 252 21 255 187 122 115 41 176 130 69 131 13 23 37 127 20 3 1 128 117 32 231 128 78 121 139 240 228 103 68 36 169 251 164 16 50 57 142 227 5 246 77 80 110 198 12 68 1 149 50 69 54 143 139 95 198 108 21 41 162 236 219 40 173 104 226 58 15 180 5 40 31 118 13 168 210 43 211 239 7 182 203 237 162 68 33 8 250 179 25 22 162 85 109 252 238 129 170 97 47 77 76 109 6 111 254 168 196 19 35 76 81 88 241 48 255 104 111 142 75 147 180 52 99 76 255 134 237 245 122 252 21 255 187 122 115 41 176 130 69 131 13 23 37 127 20 3 0 124 225 196 245 38 129 95 130 255 14 194 101 192 198 28 5 135 65 33 59 109 254 232 229 27 245 239 185 134 58 127 181 232 77 234 159 110 69 82 234 174 133 243 107 210 244 202 250 155 41 109 253 34 38 165 23 103 75 242 126 154 90 16 155 40 180 198 123 44 56 133 74 228 20 41 104 110 42 251 181 50 43 108 181 28 98 126 48 202 202 240 10 236 228 75 105 111 132 35 221 75 171 251 197 139 242 114 49 206 195 33 149 113 119 94 226 71 220 139 93 218 202 156 199 9 1 124 225 196 245 38 129 95 130 255 14 194 101 192 198 28 5 135 65 33 59 109 254 232 229 27 245 239 185 134 58 127 181 232 77 234 159 110 69 82 234 174 133 243 107 210 244 202 250 155 41 109 253 34 38 165 23 103 75 242 126 154 90 16 155 40 180 198 123 44 56 133 74 228 20 41 104 110 42 251 181 50 43 108 181 28 98 126 48 202 202 240 10 236 228 75 105 111 132 35 221 75 171 251 197 139 242 114 49 206 195 33 149 113 119 94 226 71 220 139 93 218 202 156 199 9 0 124 130 190 211 115 201 224 67 206 209 66 76 220 164 193 3 192 104 19 174 139 21 103 49 247 223 227 161 141 190 242 11 120 201 238 152 120 157 159 206 140 138 29 151 173 117 118 102 209 136 234 50 127 131 161 166 19 148 165 245 82 205 11 104 226 229 91 148 136 10 234 81 120 171 169 131 54 235 207 59 211 127 77 24 204 157 197 253 233 237 199 174 3 72 33 142 5 218 73 26 111 135 205 112 166 233 98 13 15 33 27 131 103 119 191 23 179 123 179 24 99 136 111 206 103 1 124 130 190 211 115 201 224 67 206 209 66 76 220 164 193 3 192 104 19 174 139 21 103 49 247 223 227 161 141 190 242 11 120 201 238 152 120 157 159 206 140 138 29 151 173 117 118 102 209 136 234 50 127 131 161 166 19 148 165 245 82 205 11 104 226 229 91 148 136 10 234 81 120 171 169 131 54 235 207 59 211 127 77 24 204 157 197 253 233 237 199 174 3 72 33 142 5 218 73 26 111 135 205 112 166 233 98 13 15 33 27 131 103 119 191 23 179 123 179 24 99 136 111 206 103 0 24 236 146 150 122 80 138 70 55 218 171 50 71 53 136 214 55 85 125 93 128 4 0 0 0 1 24 236 146 150 122 80 138 70 55 218 171 50 71 53 136 214 55 85 125 93 128 4 0 0 0 0 96 168 120 24 52 192 139 221 73 242 242 97 74 214 206 178 206 134 205 255 80 249 81 103 62 255 235 105 87 255 215 122 234 6 85 194 142 4 80 39 228 210 83 78 57 126 13 175 79 207 117 247 77 43 53 164 8 185 89 108 206 201 3 63 111 26 179 169 0 252 20 51 5 213 56 133 204 63 19 45 245 58 168 12 87 82 182 175 2 1 111 83 252 59 0 0 0 1 96 168 120 24 52 192 139 221 73 242 242 97 74 214 206 178 206 134 205 255 80 249 81 103 62 255 235 105 87 255 215 122 234 6 85 194 142 4 80 39 228 210 83 78 57 126 13 175 79 207 117 247 77 43 53 164 8 185 89 108 206 201 3 63 111 26 179 169 0 252 20 51 5 213 56 133 204 63 19 45 245 58 168 12 87 82 182 175 2 1 111 83 252 59 0 0 0 0 128 185 132 187 44 241 228 100 105 22 119 238 94 124 126 113 117 10 214 51 133 149 172 201 211 213 121 160 34 164 142 116 97 112 84 155 255 6 108 94 78 4 233 188 142 66 190 97 40 135 40 45 103 104 89 35 225 9 229 254 125 210 134 186 83 219 39 156 96 79 116 202 44 226 193 33 197 237 19 205 187 104 142 222 208 110 38 156 236 173 194 237 92 12 94 102 228 230 145 128 127 23 155 108 123 159 28 189 122 77 188 51 141 193 44 74 135 72 161 176 196 25 238 215 249 1 0 0 0 1 128 185 132 187 44 241 228 100 105 22 119 238 94 124 126 113 117 10 214 51 133 149 172 201 211 213 121 160 34 164 142 116 97 112 84 155 255 6 108 94 78 4 233 188 142 66 190 97 40 135 40 45 103 104 89 35 225 9 229 254 125 210 134 186 83 219 39 156 96 79 116 202 44 226 193 33 197 237 19 205 187 104 142 222 208 110 38 156 236 173 194 237 92 12 94 102 228 230 145 128 127 23 155 108 123 159 28 189 122 77 188 51 141 193 44 74 135 72 161 176 196 25 238 215 249 1 0 0 0 0 128 196 189 1 242 155 244 232 152 101 227 3 217 39 244 236 150 9 178 16 175 212 22 120 54 105 227 225 242 229 156 121 86 139 227 54 127 184 190 41 133 3 17 52 18 138 148 221 246 233 48 84 88 59 192 24 21 252 227 123 179 109 113 77 255 247 152 43 152 181 143 190 106 157 133 109 3 97 155 223 142 24 220 123 209 115 48 134 39 181 47 225 199 64 0 47 19 50 112 64 18 160 79 199 188 82 123 15 244 22 146 43 21 149 157 118 9 188 127 178 30 174 37 125 174 1 17 0 0 1 128 196 189 1 242 155 244 232 152 101 227 3 217 39 244 236 150 9 178 16 175 212 22 120 54 105 227 225 242 229 156 121 86 139 227 54 127 184 190 41 133 3 17 52 18 138 148 221 246 233 48 84 88 59 192 24 21 252 227 123 179 109 113 77 255 247 152 43 152 181 143 190 106 157 133 109 3 97 155 223 142 24 220 123 209 115 48 134 39 181 47 225 199 64 0 47 19 50 112 64 18 160 79 199 188 82 123 15 244 22 146 43 21 149 157 118 9 188 127 178 30 174 37 125 174 1 17 0 0 0 124 125 72 103 215 83 251 97 191 63 231 211 75 247 3 48 39 242 99 75 38 207 10 64 114 118 90 122 122 77 183 190 7 147 103 181 244 49 65 243 162 67 68 8 208 134 116 48 95 95 233 35 252 112 16 102 203 11 124 40 193 161 239 28 210 11 139 204 89 203 38 245 182 150 96 26 18 46 113 77 175 20 177 91 174 135 42 135 219 19 174 215 57 19 213 152 24 76 23 175 160 29 5 177 176 24 219 163 255 97 214 199 54 191 77 15 45 73 191 156 156 85 231 7 0 1 124 125 72 103 215 83 251 97 191 63 231 211 75 247 3 48 39 242 99 75 38 207 10 64 114 118 90 122 122 77 183 190 7 147 103 181 244 49 65 243 162 67 68 8 208 134 116 48 95 95 233 35 252 112 16 102 203 11 124 40 193 161 239 28 210 11 139 204 89 203 38 245 182 150 96 26 18 46 113 77 175 20 177 91 174 135 42 135 219 19 174 215 57 19 213 152 24 76 23 175 160 29 5 177 176 24 219 163 255 97 214 199 54 191 77 15 45 73 191 156 156 85 231 7 0 0 16 252 17 170 79 122 224 151 223 165 53 141 155 37 87 4 0 1 16 252 17 170 79 122 224 151 223 165 53 141 155 37 87 4 0 0 64 137 35 96 204 136 177 189 143 1 212 169 28 91 106 152 238 147 179 84 155 35 195 77 99 22 143 175 243 178 108 188 125 52 89 146 208 125 21 94 228 98 194 201 165 96 57 144 208 56 103 133 48 45 120 4 182 247 48 112 89 188 153 1 0 1 64 137 35 96 204 136 177 189 143 1 212 169 28 91 106 152 238 147 179 84 155 35 195 77 99 22 143 175 243 178 108 188 125 52 89 146 208 125 21 94 228 98 194 201 165 96 57 144 208 56 103 133 48 45 120 4 182 247 48 112 89 188 153 1 0 0 104 243 59 23 181 19 206 54 217 4 43 183 169 25 245 43 129 181 198 110 56 213 123 240 160 71 185 170 96 174 21 188 158 209 73 67 245 248 18 139 233 181 53 185 30 209 172 198 74 139 145 21 133 168 4 186 236 48 15 19 25 234 227 177 154 240 64 215 74 77 178 193 160 155 223 234 55 201 144 185 140 71 87 18 218 192 168 98 86 67 205 126 50 211 88 59 69 53 208 210 119 1 82 1 0 1 104 243 59 23 181 19 206 54 217 4 43 183 169 25 245 43 129 181 198 110 56 213 123 240 160 71 185 170 96 174 21 188 158 209 73 67 245 248 18 139 233 181 53 185 30 209 172 198 74 139 145 21 133 168 4 186 236 48 15 19 25 234 227 177 154 240 64 215 74 77 178 193 160 155 223 234 55 201 144 185 140 71 87 18 218 192 168 98 86 67 205 126 50 211 88 59 69 53 208 210 119 1 82 1 0 0 104 30 237 199 208 43 126 134 188 221 77 44 64 109 31 47 206 70 172 101 140 66 232 0 138 101 218 81 243 45 157 119 221 30 64 253 209 50 12 45 150 152 200 9 167 220 210 114 70 151 149 141 34 162 151 188 82 189 246 149 204 99 143 240 240 11 119 55 107 27 196 176 61 52 227 44 160 102 215 226 28 36 252 136 5 162 100 95 194 183 2 28 199 117 193 177 41 170 115 62 93 181 186 1 0 1 104 30 237 199 208 43 126 134 188 221 77 44 64 109 31 47 206 70 172 101 140 66 232 0 138 101 218 81 243 45 157 119 221 30 64 253 209 50 12 45 150 152 200 9 167 220 210 114 70 151 149 141 34 162 151 188 82 189 246 149 204 99 143 240 240 11 119 55 107 27 196 176 61 52 227 44 160 102 215 226 28 36 252 136 5 162 100 95 194 183 2 28 199 117 193 177 41 170 115 62 93 181 186 1 0 0 40 53 120 130 161 159 72 98 85 190 182 236 225 240 60 214 46 141 103 182 195 63 222 96 51 133 198 58 90 110 132 208 137 203 153 172 98 79 220 0 0 1 40 53 120 130 161 159 72 98 85 190 182 236 225 240 60 214 46 141 103 182 195 63 222 96 51 133 198 58 90 110 132 208 137 203 153 172 98 79 220 0 0 0 20 118 29 12 161 58 173 221 244 97 16 129 132 213 223 100 52 220 195 7 0 1 20 118 29 12 161 58 173 221 244 97 16 129 132 213 223 100 52 220 195 7 0 0 4 48 0 0 0 1 4 48 0 0 0 0 56 231 92 254 163 124 164 150 140 111 46 208 48 245 131 79 191 167 93 72 251 225 197 183 198 127 122 236 47 16 214 74 14 201 193 171 20 118 155 238 33 155 90 192 58 99 154 59 127 53 8 120 227 43 170 1 0 1 56 231 92 254 163 124 164 150 140 111 46 208 48 245 131 79 191 167 93 72 251 225 197 183 198 127 122 236 47 16 214 74 14 201 193 171 20 118 155 238 33 155 90 192 58 99 154 59 127 53 8 120 227 43 170 1 0 0 16 251 177 154 124 124 51 12 184 170 246 21 206 136 0 6 0 1 16 251 177 154 124 124 51 12 184 170 246 21 206 136 0 6 0 0 120 135 228 154 97 97 37 218 64 185 90 19 175 246 80 210 161 113 157 100 67 139 11 67 170 100 55 10 137 62 200 98 216 164 1 43 71 31 156 64 144 57 219 81 105 211 65 2 203 127 45 87 116 177 120 38 220 221 127 219 9 89 68 112 249 96 102 183 83 157 239 104 243 95 199 142 2 33 66 225 186 67 111 177 72 133 48 17 239 26 98 202 8 125 61 65 118 6 55 147 154 167 90 0 162 128 74 17 187 146 174 37 228 190 12 117 100 32 3 0 0 1 120 135 228 154 97 97 37 218 64 185 90 19 175 246 80 210 161 113 157 100 67 139 11 67 170 100 55 10 137 62 200 98 216 164 1 43 71 31 156 64 144 57 219 81 105 211 65 2 203 127 45 87 116 177 120 38 220 221 127 219 9 89 68 112 249 96 102 183 83 157 239 104 243 95 199 142 2 33 66 225 186 67 111 177 72 133 48 17 239 26 98 202 8 125 61 65 118 6 55 147 154 167 90 0 162 128 74 17 187 146 174 37 228 190 12 117 100 32 3 0 0 0 84 26 161 163 242 118 221 0 66 192 252 133 199 57 227 98 231 11 157 63 23 214 37 26 128 100 49 131 94 235 250 249 147 154 51 50 25 98 235 243 5 108 187 118 252 12 79 151 103 7 110 124 8 167 181 214 104 91 65 119 78 66 98 82 217 239 238 114 229 245 1 243 155 98 149 133 248 106 172 101 16 223 244 0 0 1 84 26 161 163 242 118 221 0 66 192 252 133 199 57 227 98 231 11 157 63 23 214 37 26 128 100 49 131 94 235 250 249 147 154 51 50 25 98 235 243 5 108 187 118 252 12 79 151 103 7 110 124 8 167 181 214 104 91 65 119 78 66 98 82 217 239 238 114 229 245 1 243 155 98 149 133 248 106 172 101 16 223 244 0 0 0 104 51 242 193 71 40 33 244 183 39 87 209 231 123 23 102 244 164 169 195 247 118 193 238 212 202 61 62 28 173 71 226 3 123 32 247 24 21 127 54 196 17 12 180 107 10 66 175 208 88 113 145 18 93 77 231 82 5 172 142 122 173 202 80 213 151 67 189 246 154 57 40 60 62 225 173 49 197 99 197 109 106 160 126 116 179 205 235 122 139 21 129 249 231 216 211 119 4 117 66 52 193 10 0 0 1 104 51 242 193 71 40 33 244 183 39 87 209 231 123 23 102 244 164 169 195 247 118 193 238 212 202 61 62 28 173 71 226 3 123 32 247 24 21 127 54 196 17 12 180 107 10 66 175 208 88 113 145 18 93 77 231 82 5 172 142 122 173 202 80 213 151 67 189 246 154 57 40 60 62 225 173 49 197 99 197 109 106 160 126 116 179 205 235 122 139 21 129 249 231 216 211 119 4 117 66 52 193 10 0 0 0 116 117 133 12 7 22 147 126 60 222 126 15 234 208 110 144 185 13 98 7 11 209 57 121 79 194 58 253 148 206 85 251 165 5 213 112 244 92 244 25 196 40 68 91 10 147 74 13 72 165 3 119 45 32 170 129 46 133 146 166 13 69 50 36 228 124 251 190 233 4 155 225 95 178 231 135 226 223 143 88 24 162 178 240 101 140 125 124 184 151 110 254 193 242 30 230 88 55 219 178 42 54 111 9 248 91 46 181 248 183 164 152 211 7 0 0 0 1 116 117 133 12 7 22 147 126 60 222 126 15 234 208 110 144 185 13 98 7 11 209 57 121 79 194 58 253 148 206 85 251 165 5 213 112 244 92 244 25 196 40 68 91 10 147 74 13 72 165 3 119 45 32 170 129 46 133 146 166 13 69 50 36 228 124 251 190 233 4 155 225 95 178 231 135 226 223 143 88 24 162 178 240 101 140 125 124 184 151 110 254 193 242 30 230 88 55 219 178 42 54 111 9 248 91 46 181 248 183 164 152 211 7 0 0 0 0 124 63 77 192 16 39 116 41 118 84 43 197 253 236 106 62 1 183 234 241 28 170 49 21 191 231 212 161 33 61 235 39 160 228 125 57 52 78 189 69 47 1 79 177 75 103 238 153 2 38 182 148 88 116 210 38 64 96 188 136 248 75 74 182 169 213 110 205 104 170 28 203 171 146 250 72 188 184 135 129 123 246 18 94 241 239 179 131 133 192 152 204 226 228 3 166 119 222 138 54 116 129 186 64 160 210 30 139 163 195 186 2 85 155 194 170 83 132 36 74 216 27 254 85 0 1 124 63 77 192 16 39 116 41 118 84 43 197 253 236 106 62 1 183 234 241 28 170 49 21 191 231 212 161 33 61 235 39 160 228 125 57 52 78 189 69 47 1 79 177 75 103 238 153 2 38 182 148 88 116 210 38 64 96 188 136 248 75 74 182 169 213 110 205 104 170 28 203 171 146 250 72 188 184 135 129 123 246 18 94 241 239 179 131 133 192 152 204 226 228 3 166 119 222 138 54 116 129 186 64 160 210 30 139 163 195 186 2 85 155 194 170 83 132 36 74 216 27 254 85 0 0 68 216 172 85 194 158 216 82 110 65 133 85 128 49 103 72 173 54 61 199 26 210 206 103 163 37 220 221 193 233 238 254 54 206 213 124 6 203 165 26 21 241 141 165 246 128 184 43 72 242 66 159 97 79 134 33 147 97 136 247 186 217 103 81 199 29 0 0 0 1 68 216 172 85 194 158 216 82 110 65 133 85 128 49 103 72 173 54 61 199 26 210 206 103 163 37 220 221 193 233 238 254 54 206 213 124 6 203 165 26 21 241 141 165 246 128 184 43 72 242 66 159 97 79 134 33 147 97 136 247 186 217 103 81 199 29 0 0 0 0 88 198 204 237 247 146 195 97 49 165 23 187 22 34 150 126 136 183 220 165 82 194 13 172 190 161 249 20 192 177 147 243 49 113 56 111 194 238 6 98 97 129 35 110 42 246 44 179 219 221 190 182 94 40 254 25 246 171 109 11 181 1 138 90 3 209 233 133 179 57 67 179 0 223 103 18 74 138 136 231 35 199 161 29 157 1 0 0 0 1 88 198 204 237 247 146 195 97 49 165 23 187 22 34 150 126 136 183 220 165 82 194 13 172 190 161 249 20 192 177 147 243 49 113 56 111 194 238 6 98 97 129 35 110 42 246 44 179 219 221 190 182 94 40 254 25 246 171 109 11 181 1 138 90 3 209 233 133 179 57 67 179 0 223 103 18 74 138 136 231 35 199 161 29 157 1 0 0 0 0 104 200 111 223 113 76 183 17 189 185 203 122 115 218 100 205 191 105 223 132 140 147 126 199 180 195 206 12 73 110 39 71 147 85 229 115 193 236 45 39 98 81 104 24 231 243 122 80 84 171 200 163 28 188 108 159 81 0 102 179 40 112 195 41 169 248 78 181 155 111 130 188 233 129 78 9 71 59 223 40 71 154 214 88 94 144 232 156 144 221 110 76 114 52 34 145 84 178 218 142 15 103 173 3 0 1 104 200 111 223 113 76 183 17 189 185 203 122 115 218 100 205 191 105 223 132 140 147 126 199 180 195 206 12 73 110 39 71 147 85 229 115 193 236 45 39 98 81 104 24 231 243 122 80 84 171 200 163 28 188 108 159 81 0 102 179 40 112 195 41 169 248 78 181 155 111 130 188 233 129 78 9 71 59 223 40 71 154 214 88 94 144 232 156 144 221 110 76 114 52 34 145 84 178 218 142 15 103 173 3 0 0 8 177 137 11 132 66 0 0 0 1 8 177 137 11 132 66 0 0 0 0 48 33 167 44 60 43 5 212 10 233 199 142 141 206 188 38 153 75 245 28 138 78 90 196 228 196 226 63 171 99 123 61 129 93 169 246 14 54 98 199 66 102 119 74 122 163 104 13 0 1 48 33 167 44 60 43 5 212 10 233 199 142 141 206 188 38 153 75 245 28 138 78 90 196 228 196 226 63 171 99 123 61 129 93 169 246 14 54 98 199 66 102 119 74 122 163 104 13 0 0 112 13 142 178 152 223 193 158 172 255 203 197 100 76 79 42 99 97 196 198 42 60 211 249 142 174 154 123 158 254 134 251 235 151 207 55 209 178 137 7 234 137 81 211 255 191 135 78 179 11 30 121 13 152 88 34 61 56 32 249 153 111 6 135 83 62 197 83 191 163 251 20 161 116 248 36 161 123 44 251 45 216 82 212 120 237 125 134 142 89 7 182 228 191 54 121 104 50 110 8 142 248 42 214 76 253 13 190 143 50 0 0 0 1 112 13 142 178 152 223 193 158 172 255 203 197 100 76 79 42 99 97 196 198 42 60 211 249 142 174 154 123 158 254 134 251 235 151 207 55 209 178 137 7 234 137 81 211 255 191 135 78 179 11 30 121 13 152 88 34 61 56 32 249 153 111 6 135 83 62 197 83 191 163 251 20 161 116 248 36 161 123 44 251 45 216 82 212 120 237 125 134 142 89 7 182 228 191 54 121 104 50 110 8 142 248 42 214 76 253 13 190 143 50 0 0 0 0 28 135 115 67 224 57 26 67 50 161 116 97 239 175 143 9 168 232 95 142 29 48 16 121 194 48 241 158 6 1 28 135 115 67 224 57 26 67 50 161 116 97 239 175 143 9 168 232 95 142 29 48 16 121 194 48 241 158 6 0 120 179 69 194 42 93 120 64 237 75 176 251 199 63 49 12 217 68 117 60 17 14 70 160 57 29 60 226 156 164 120 98 6 241 147 20 139 159 7 106 210 46 18 44 209 147 45 254 121 230 97 80 19 35 222 34 109 179 236 84 205 123 213 217 33 100 118 217 223 98 205 210 213 162 16 151 66 225 173 235 73 110 112 76 172 232 124 30 64 29 119 3 178 184 119 33 176 53 248 40 157 126 127 125 242 209 202 221 233 124 59 53 81 231 151 52 49 122 224 122 27 1 120 179 69 194 42 93 120 64 237 75 176 251 199 63 49 12 217 68 117 60 17 14 70 160 57 29 60 226 156 164 120 98 6 241 147 20 139 159 7 106 210 46 18 44 209 147 45 254 121 230 97 80 19 35 222 34 109 179 236 84 205 123 213 217 33 100 118 217 223 98 205 210 213 162 16 151 66 225 173 235 73 110 112 76 172 232 124 30 64 29 119 3 178 184 119 33 176 53 248 40 157 126 127 125 242 209 202 221 233 124 59 53 81 231 151 52 49 122 224 122 27 0 88 202 249 247 72 190 100 43 14 53 119 130 14 137 197 240 200 81 190 103 225 158 134 179 33 43 177 147 126 191 141 162 245 224 193 132 144 147 134 16 189 234 157 212 246 176 172 112 191 110 66 141 195 94 234 133 171 20 190 248 55 25 132 147 148 135 183 201 74 89 229 183 214 200 16 91 233 10 37 163 27 133 153 134 93 213 152 142 7 1 88 202 249 247 72 190 100 43 14 53 119 130 14 137 197 240 200 81 190 103 225 158 134 179 33 43 177 147 126 191 141 162 245 224 193 132 144 147 134 16 189 234 157 212 246 176 172 112 191 110 66 141 195 94 234 133 171 20 190 248 55 25 132 147 148 135 183 201 74 89 229 183 214 200 16 91 233 10 37 163 27 133 153 134 93 213 152 142 7 0 88 77 103 16 15 148 98 115 149 166 118 218 10 199 232 124 175 175 165 211 217 182 127 122 39 230 51 107 111 80 51 18 145 177 162 46 2 119 80 163 33 253 187 253 121 34 222 134 85 8 230 102 107 120 117 240 151 81 89 38 47 90 107 129 149 16 144 78 38 26 58 78 61 163 182 119 241 129 192 139 249 183 46 39 109 17 15 240 0 1 88 77 103 16 15 148 98 115 149 166 118 218 10 199 232 124 175 175 165 211 217 182 127 122 39 230 51 107 111 80 51 18 145 177 162 46 2 119 80 163 33 253 187 253 121 34 222 134 85 8 230 102 107 120 117 240 151 81 89 38 47 90 107 129 149 16 144 78 38 26 58 78 61 163 182 119 241 129 192 139 249 183 46 39 109 17 15 240 0 0 52 234 213 76 110 121 53 109 162 71 58 96 120 32 67 142 4 161 13 37 85 104 226 206 115 224 160 35 117 179 108 202 225 198 59 157 91 182 20 254 20 5 196 54 221 64 27 198 127 155 96 99 2 1 52 234 213 76 110 121 53 109 162 71 58 96 120 32 67 142 4 161 13 37 85 104 226 206 115 224 160 35 117 179 108 202 225 198 59 157 91 182 20 254 20 5 196 54 221 64 27 198 127 155 96 99 2 0 100 130 27 80 132 149 206 104 74 186 108 76 162 61 90 101 136 56 238 26 128 103 13 215 175 217 2 94 203 185 103 235 57 73 179 67 251 148 153 157 188 175 176 9 190 11 144 240 204 176 77 140 59 173 23 41 195 49 211 129 99 226 89 41 61 117 216 244 229 187 66 250 141 7 162 242 64 30 74 137 170 157 234 46 180 106 67 91 184 254 133 132 150 83 202 121 109 229 1 0 0 1 100 130 27 80 132 149 206 104 74 186 108 76 162 61 90 101 136 56 238 26 128 103 13 215 175 217 2 94 203 185 103 235 57 73 179 67 251 148 153 157 188 175 176 9 190 11 144 240 204 176 77 140 59 173 23 41 195 49 211 129 99 226 89 41 61 117 216 244 229 187 66 250 141 7 162 242 64 30 74 137 170 157 234 46 180 106 67 91 184 254 133 132 150 83 202 121 109 229 1 0 0 0 96 180 177 20 52 197 85 168 138 255 101 101 71 208 219 45 169 123 61 167 239 15 8 52 226 172 233 153 47 28 118 122 247 246 33 225 192 78 230 61 188 196 197 48 3 32 37 12 172 242 129 25 220 16 26 252 131 142 114 105 69 201 34 95 85 12 39 146 145 217 235 38 66 245 145 202 77 22 159 59 0 129 139 201 197 42 198 93 48 54 136 29 220 157 47 43 0 1 96 180 177 20 52 197 85 168 138 255 101 101 71 208 219 45 169 123 61 167 239 15 8 52 226 172 233 153 47 28 118 122 247 246 33 225 192 78 230 61 188 196 197 48 3 32 37 12 172 242 129 25 220 16 26 252 131 142 114 105 69 201 34 95 85 12 39 146 145 217 235 38 66 245 145 202 77 22 159 59 0 129 139 201 197 42 198 93 48 54 136 29 220 157 47 43 0 0 96 228 177 197 157 201 233 218 33 173 105 143 149 114 247 135 47 252 136 226 112 224 250 62 15 148 29 202 26 68 127 193 62 109 233 165 67 21 221 99 246 160 113 232 255 240 215 55 219 168 67 172 220 239 70 18 44 75 90 190 126 188 2 138 148 81 54 76 45 139 27 198 140 152 73 84 62 77 207 250 184 202 70 93 74 35 192 212 68 254 66 167 55 43 72 51 1 1 96 228 177 197 157 201 233 218 33 173 105 143 149 114 247 135 47 252 136 226 112 224 250 62 15 148 29 202 26 68 127 193 62 109 233 165 67 21 221 99 246 160 113 232 255 240 215 55 219 168 67 172 220 239 70 18 44 75 90 190 126 188 2 138 148 81 54 76 45 139 27 198 140 152 73 84 62 77 207 250 184 202 70 93 74 35 192 212 68 254 66 167 55 43 72 51 1 0 64 214 194 164 243 67 99 159 221 32 79 138 118 10 246 26 53 220 63 121 128 209 86 55 147 46 21 147 111 73 114 48 231 199 129 181 226 153 2 49 119 72 168 113 113 77 187 140 153 22 15 24 250 59 186 131 64 170 188 226 4 136 0 0 0 1 64 214 194 164 243 67 99 159 221 32 79 138 118 10 246 26 53 220 63 121 128 209 86 55 147 46 21 147 111 73 114 48 231 199 129 181 226 153 2 49 119 72 168 113 113 77 187 140 153 22 15 24 250 59 186 131 64 170 188 226 4 136 0 0 0 0 52 137 1 85 110 191 240 53 229 183 92 119 252 131 102 74 251 188 32 178 3 182 241 244 250 87 89 25 222 123 231 114 153 55 41 42 92 80 171 133 162 143 161 81 69 72 198 206 202 152 186 2 0 1 52 137 1 85 110 191 240 53 229 183 92 119 252 131 102 74 251 188 32 178 3 182 241 244 250 87 89 25 222 123 231 114 153 55 41 42 92 80 171 133 162 143 161 81 69 72 198 206 202 152 186 2 0 0 56 211 76 143 162 185 129 219 122 124 64 67 106 130 145 59 54 198 182 118 11 1 159 173 227 145 183 65 74 210 107 97 244 37 234 225 245 194 126 48 168 194 239 99 117 113 246 7 68 90 122 30 120 121 204 1 0 1 56 211 76 143 162 185 129 219 122 124 64 67 106 130 145 59 54 198 182 118 11 1 159 173 227 145 183 65 74 210 107 97 244 37 234 225 245 194 126 48 168 194 239 99 117 113 246 7 68 90 122 30 120 121 204 1 0 0 84 105 73 115 54 214 7 115 255 61 66 95 124 249 26 243 37 155 74 9 85 217 163 49 217 173 61 95 67 196 72 63 156 172 27 80 167 165 134 208 52 201 202 92 55 128 155 17 60 176 105 63 30 206 211 19 235 211 182 152 83 135 179 180 37 195 226 138 134 144 171 149 80 65 145 226 242 243 230 43 132 178 250 39 215 1 84 105 73 115 54 214 7 115 255 61 66 95 124 249 26 243 37 155 74 9 85 217 163 49 217 173 61 95 67 196 72 63 156 172 27 80 167 165 134 208 52 201 202 92 55 128 155 17 60 176 105 63 30 206 211 19 235 211 182 152 83 135 179 180 37 195 226 138 134 144 171 149 80 65 145 226 242 243 230 43 132 178 250 39 215 0 24 238 147 112 201 202 57 233 73 216 169 141 254 73 1 28 115 92 180 201 139 174 21 11 0 1 24 238 147 112 201 202 57 233 73 216 169 141 254 73 1 28 115 92 180 201 139 174 21 11 0 0 24 11 98 186 29 212 176 86 13 53 40 93 147 195 178 153 54 152 222 244 40 193 19 0 0 1 24 11 98 186 29 212 176 86 13 53 40 93 147 195 178 153 54 152 222 244 40 193 19 0 0 0 40 247 180 251 141 141 62 11 228 178 124 25 179 207 78 30 191 6 166 89 240 173 89 181 244 213 201 90 164 248 113 18 220 53 196 159 235 161 36 114 0 1 40 247 180 251 141 141 62 11 228 178 124 25 179 207 78 30 191 6 166 89 240 173 89 181 244 213 201 90 164 248 113 18 220 53 196 159 235 161 36 114 0 0 92 197 219 246 150 141 204 249 197 122 42 147 254 26 80 88 29 210 60 108 233 49 53 58 229 228 74 204 32 164 150 72 227 75 126 222 254 223 216 61 51 43 121 144 51 162 181 207 169 112 177 75 201 49 79 92 41 7 31 62 225 233 82 103 28 12 148 8 127 39 116 68 202 216 227 213 140 255 16 22 227 223 27 82 6 151 211 143 89 62 252 11 0 1 92 197 219 246 150 141 204 249 197 122 42 147 254 26 80 88 29 210 60 108 233 49 53 58 229 228 74 204 32 164 150 72 227 75 126 222 254 223 216 61 51 43 121 144 51 162 181 207 169 112 177 75 201 49 79 92 41 7 31 62 225 233 82 103 28 12 148 8 127 39 116 68 202 216 227 213 140 255 16 22 227 223 27 82 6 151 211 143 89 62 252 11 0 0 104 84 85 201 229 80 220 110 27 89 135 96 8 25 169 247 170 52 98 214 179 116 102 103 90 190 212 155 200 5 237 5 33 189 15 223 142 50 1 136 100 122 203 43 219 41 31 201 158 108 205 137 41 171 131 15 69 19 41 170 64 244 118 157 0 134 78 207 249 103 223 37 193 0 163 144 187 16 102 223 27 90 215 43 229 11 42 66 58 117 150 42 248 101 141 189 6 240 7 0 242 197 127 1 0 1 104 84 85 201 229 80 220 110 27 89 135 96 8 25 169 247 170 52 98 214 179 116 102 103 90 190 212 155 200 5 237 5 33 189 15 223 142 50 1 136 100 122 203 43 219 41 31 201 158 108 205 137 41 171 131 15 69 19 41 170 64 244 118 157 0 134 78 207 249 103 223 37 193 0 163 144 187 16 102 223 27 90 215 43 229 11 42 66 58 117 150 42 248 101 141 189 6 240 7 0 242 197 127 1 0 0 8 185 243 251 131 7 0 0 0 1 8 185 243 251 131 7 0 0 0 0 44 188 64 12 102 153 116 180 169 232 182 207 120 2 241 87 106 199 3 100 211 214 177 149 40 69 55 14 15 24 136 141 41 198 26 255 238 213 146 192 182 42 0 0 0 1 44 188 64 12 102 153 116 180 169 232 182 207 120 2 241 87 106 199 3 100 211 214 177 149 40 69 55 14 15 24 136 141 41 198 26 255 238 213 146 192 182 42 0 0 0 0 36 60 69 243 184 98 7 253 248 147 154 234 108 139 170 83 33 71 50 181 137 96 0 97 65 238 127 238 220 145 220 30 197 164 169 50 39 1 36 60 69 243 184 98 7 253 248 147 154 234 108 139 170 83 33 71 50 181 137 96 0 97 65 238 127 238 220 145 220 30 197 164 169 50 39 0 112 226 167 90 98 229 230 91 40 155 26 167 140 217 74 204 150 223 188 123 34 82 92 87 7 182 125 184 131 72 19 168 23 168 126 18 67 33 218 228 80 219 32 115 52 91 153 74 185 188 251 88 141 206 245 147 186 188 9 11 227 190 147 53 27 159 175 207 126 95 65 244 167 190 77 129 82 251 142 246 254 93 98 112 160 141 225 214 75 62 208 202 45 97 98 146 177 111 133 60 28 249 233 207 10 171 89 174 70 14 94 129 40 1 112 226 167 90 98 229 230 91 40 155 26 167 140 217 74 204 150 223 188 123 34 82 92 87 7 182 125 184 131 72 19 168 23 168 126 18 67 33 218 228 80 219 32 115 52 91 153 74 185 188 251 88 141 206 245 147 186 188 9 11 227 190 147 53 27 159 175 207 126 95 65 244 167 190 77 129 82 251 142 246 254 93 98 112 160 141 225 214 75 62 208 202 45 97 98 146 177 111 133 60 28 249 233 207 10 171 89 174 70 14 94 129 40 0 8 109 138 127 241 182 108 3 0 1 8 109 138 127 241 182 108 3 0 0 20 253 248 186 235 248 125 194 176 203 231 91 182 41 233 0 226 122 118 84 2 1 20 253 248 186 235 248 125 194 176 203 231 91 182 41 233 0 226 122 118 84 2 0 16 230 16 7 220 125 232 51 204 126 74 73 232 59 0 0 0 1 16 230 16 7 220 125 232 51 204 126 74 73 232 59 0 0 0 0 128 96 188 53 88 57 212 250 97 99 241 119 39 211 59 47 120 144 156 173 166 143 114 227 10 41 16 55 214 158 53 92 82 10 117 44 252 226 154 161 113 202 150 106 200 19 38 79 40 100 2 216 168 103 49 218 150 159 173 218 238 0 59 105 125 25 202 77 232 122 113 96 184 174 146 91 150 158 119 220 235 41 130 173 153 183 164 219 127 2 22 89 184 116 175 152 236 46 180 242 142 205 40 40 121 115 78 145 79 246 133 130 224 161 140 56 114 143 192 138 82 110 74 44 22 99 135 217 2 1 128 96 188 53 88 57 212 250 97 99 241 119 39 211 59 47 120 144 156 173 166 143 114 227 10 41 16 55 214 158 53 92 82 10 117 44 252 226 154 161 113 202 150 106 200 19 38 79 40 100 2 216 168 103 49 218 150 159 173 218 238 0 59 105 125 25 202 77 232 122 113 96 184 174 146 91 150 158 119 220 235 41 130 173 153 183 164 219 127 2 22 89 184 116 175 152 236 46 180 242 142 205 40 40 121 115 78 145 79 246 133 130 224 161 140 56 114 143 192 138 82 110 74 44 22 99 135 217 2 0 108 183 215 158 47 73 44 220 50 163 229 15 148 225 154 78 50 189 136 15 137 135 196 30 145 70 78 206 57 19 181 129 163 193 193 234 155 1 250 142 170 197 218 122 99 180 214 31 196 167 42 38 254 90 90 60 16 232 180 119 19 88 155 128 27 128 25 230 39 205 154 156 158 153 88 120 44 1 136 211 209 30 179 28 159 46 164 62 97 233 105 33 20 253 209 183 59 98 45 110 88 170 73 103 237 172 14 0 0 1 108 183 215 158 47 73 44 220 50 163 229 15 148 225 154 78 50 189 136 15 137 135 196 30 145 70 78 206 57 19 181 129 163 193 193 234 155 1 250 142 170 197 218 122 99 180 214 31 196 167 42 38 254 90 90 60 16 232 180 119 19 88 155 128 27 128 25 230 39 205 154 156 158 153 88 120 44 1 136 211 209 30 179 28 159 46 164 62 97 233 105 33 20 253 209 183 59 98 45 110 88 170 73 103 237 172 14 0 0 0 108 109 39 198 116 134 109 137 3 154 63 133 155 109 82 108 240 13 83 246 109 126 71 168 5 252 39 139 51 83 180 93 45 15 158 50 208 87 19 218 21 230 235 83 238 84 254 144 65 87 7 55 39 65 75 33 1 137 221 191 101 104 101 15 201 217 163 216 64 237 92 24 199 180 178 166 245 190 146 159 89 122 28 142 102 176 245 112 28 239 140 93 48 144 224 181 154 244 92 174 112 189 17 186 11 61 0 0 0 1 108 109 39 198 116 134 109 137 3 154 63 133 155 109 82 108 240 13 83 246 109 126 71 168 5 252 39 139 51 83 180 93 45 15 158 50 208 87 19 218 21 230 235 83 238 84 254 144 65 87 7 55 39 65 75 33 1 137 221 191 101 104 101 15 201 217 163 216 64 237 92 24 199 180 178 166 245 190 146 159 89 122 28 142 102 176 245 112 28 239 140 93 48 144 224 181 154 244 92 174 112 189 17 186 11 61 0 0 0 0 92 115 25 74 181 122 105 117 16 23 160 104 186 173 148 142 130 124 69 176 164 120 37 35 164 26 5 203 211 81 114 102 172 157 224 92 119 72 40 156 152 170 218 239 244 122 119 68 255 223 165 182 239 221 222 170 86 17 177 252 123 251 137 160 2 17 88 15 181 45 222 85 1 145 242 26 221 26 143 50 5 231 126 165 15 88 139 246 42 136 0 0 0 1 92 115 25 74 181 122 105 117 16 23 160 104 186 173 148 142 130 124 69 176 164 120 37 35 164 26 5 203 211 81 114 102 172 157 224 92 119 72 40 156 152 170 218 239 244 122 119 68 255 223 165 182 239 221 222 170 86 17 177 252 123 251 137 160 2 17 88 15 181 45 222 85 1 145 242 26 221 26 143 50 5 231 126 165 15 88 139 246 42 136 0 0 0 0 20 11 96 10 112 174 90 0 74 17 97 66 74 95 235 134 176 1 0 0 0 1 20 11 96 10 112 174 90 0 74 17 97 66 74 95 235 134 176 1 0 0 0 0 44 154 185 66 152 86 30 237 20 211 200 92 232 231 159 111 104 239 215 186 246 153 131 145 191 158 17 100 149 87 115 114 80 153 175 127 213 20 30 55 123 56 0 0 0 1 44 154 185 66 152 86 30 237 20 211 200 92 232 231 159 111 104 239 215 186 246 153 131 145 191 158 17 100 149 87 115 114 80 153 175 127 213 20 30 55 123 56 0 0 0 0 100 200 46 197 117 247 255 182 227 22 29 184 198 24 211 143 87 190 175 196 153 250 144 95 50 47 199 87 38 91 196 72 184 66 112 224 205 213 241 213 215 217 50 114 236 249 135 67 151 218 231 131 138 171 95 70 223 55 110 156 24 86 4 116 64 213 4 169 211 115 62 175 39 13 169 242 237 56 166 5 99 183 238 116 46 114 188 183 203 8 57 40 83 132 247 182 225 184 108 0 0 1 100 200 46 197 117 247 255 182 227 22 29 184 198 24 211 143 87 190 175 196 153 250 144 95 50 47 199 87 38 91 196 72 184 66 112 224 205 213 241 213 215 217 50 114 236 249 135 67 151 218 231 131 138 171 95 70 223 55 110 156 24 86 4 116 64 213 4 169 211 115 62 175 39 13 169 242 237 56 166 5 99 183 238 116 46 114 188 183 203 8 57 40 83 132 247 182 225 184 108 0 0 0 124 94 235 124 73 23 127 111 55 10 111 84 126 170 16 77 106 181 163 73 165 249 170 40 170 90 228 108 176 252 39 45 191 204 225 251 145 26 45 5 233 1 112 57 57 75 136 241 126 114 242 43 156 144 93 196 214 225 123 243 163 118 208 74 233 52 78 129 73 101 32 94 180 49 175 158 209 26 110 42 125 133 11 133 252 19 105 165 220 63 81 214 85 35 166 157 95 220 199 190 78 235 205 161 109 38 86 178 173 75 16 150 107 115 202 87 90 44 122 250 44 242 3 0 0 1 124 94 235 124 73 23 127 111 55 10 111 84 126 170 16 77 106 181 163 73 165 249 170 40 170 90 228 108 176 252 39 45 191 204 225 251 145 26 45 5 233 1 112 57 57 75 136 241 126 114 242 43 156 144 93 196 214 225 123 243 163 118 208 74 233 52 78 129 73 101 32 94 180 49 175 158 209 26 110 42 125 133 11 133 252 19 105 165 220 63 81 214 85 35 166 157 95 220 199 190 78 235 205 161 109 38 86 178 173 75 16 150 107 115 202 87 90 44 122 250 44 242 3 0 0 0 64 33 38 244 173 112 88 99 122 250 156 144 15 79 132 196 15 41 75 133 177 70 36 29 76 228 221 155 246 69 197 87 207 178 221 150 150 163 43 125 211 170 119 162 199 18 140 88 14 141 156 131 55 86 105 131 87 183 202 138 193 250 146 7 0 1 64 33 38 244 173 112 88 99 122 250 156 144 15 79 132 196 15 41 75 133 177 70 36 29 76 228 221 155 246 69 197 87 207 178 221 150 150 163 43 125 211 170 119 162 199 18 140 88 14 141 156 131 55 86 105 131 87 183 202 138 193 250 146 7 0 0 8 193 65 150 116 8 0 0 0 1 8 193 65 150 116 8 0 0 0 0 88 222 76 87 0 39 117 3 50 43 76 65 78 229 242 96 28 45 68 9 84 77 32 141 102 105 143 7 223 208 38 17 171 1 5 64 101 80 4 202 47 105 247 32 207 194 242 83 135 163 54 216 178 26 17 93 139 73 169 226 217 99 11 82 47 3 157 215 215 153 31 216 121 218 217 197 70 198 39 255 50 228 150 229 67 199 1 0 0 1 88 222 76 87 0 39 117 3 50 43 76 65 78 229 242 96 28 45 68 9 84 77 32 141 102 105 143 7 223 208 38 17 171 1 5 64 101 80 4 202 47 105 247 32 207 194 242 83 135 163 54 216 178 26 17 93 139 73 169 226 217 99 11 82 47 3 157 215 215 153 31 216 121 218 217 197 70 198 39 255 50 228 150 229 67 199 1 0 0 0 60 132 11 227 148 45 72 132 90 43 39 166 76 172 224 159 49 82 126 46 147 149 229 112 96 19 103 129 209 180 204 78 161 218 161 137 155 40 142 2 48 80 224 51 94 209 169 119 94 212 151 125 134 39 145 109 231 4 0 0 0 1 60 132 11 227 148 45 72 132 90 43 39 166 76 172 224 159 49 82 126 46 147 149 229 112 96 19 103 129 209 180 204 78 161 218 161 137 155 40 142 2 48 80 224 51 94 209 169 119 94 212 151 125 134 39 145 109 231 4 0 0 0 0 20 123 47 118 34 191 206 207 171 213 67 79 77 219 89 68 92 2 0 0 0 1 20 123 47 118 34 191 206 207 171 213 67 79 77 219 89 68 92 2 0 0 0 0 52 181 219 18 61 30 154 15 167 192 14 196 148 216 66 206 1 98 115 173 137 197 47 49 228 38 188 178 148 202 18 96 2 103 255 202 246 177 221 107 35 180 27 33 72 172 31 69 128 123 0 0 0 1 52 181 219 18 61 30 154 15 167 192 14 196 148 216 66 206 1 98 115 173 137 197 47 49 228 38 188 178 148 202 18 96 2 103 255 202 246 177 221 107 35 180 27 33 72 172 31 69 128 123 0 0 0 0 28 7 82 250 163 171 151 193 242 222 208 224 252 8 145 119 231 240 219 237 115 112 17 84 150 54 234 247 1 1 28 7 82 250 163 171 151 193 242 222 208 224 252 8 145 119 231 240 219 237 115 112 17 84 150 54 234 247 1 0 100 106 128 3 1 188 158 131 102 30 13 165 34 56 140 67 110 15 41 20 34 218 85 212 56 208 97 6 198 121 86 231 16 60 41 116 51 112 68 146 225 249 153 79 173 152 178 167 118 161 49 82 252 223 181 39 89 10 249 163 146 32 111 19 91 56 141 207 248 45 150 31 199 164 135 69 61 48 86 28 152 157 46 95 110 240 67 68 230 61 162 195 46 59 109 223 151 104 231 1 0 1 100 106 128 3 1 188 158 131 102 30 13 165 34 56 140 67 110 15 41 20 34 218 85 212 56 208 97 6 198 121 86 231 16 60 41 116 51 112 68 146 225 249 153 79 173 152 178 167 118 161 49 82 252 223 181 39 89 10 249 163 146 32 111 19 91 56 141 207 248 45 150 31 199 164 135 69 61 48 86 28 152 157 46 95 110 240 67 68 230 61 162 195 46 59 109 223 151 104 231 1 0 0 8 71 170 230 149 60 169 8 0 1 8 71 170 230 149 60 169 8 0 0 104 197 60 13 194 96 169 102 36 193 199 30 151 61 112 84 43 43 191 194 1 161 56 139 53 115 136 32 148 17 113 135 55 123 181 224 91 143 170 42 70 154 95 146 126 90 132 159 105 180 251 18 41 35 80 231 44 31 43 32 145 245 182 101 28 236 119 33 66 1 225 23 219 129 219 214 243 191 203 150 13 208 77 171 34 153 52 224 233 94 147 246 3 95 62 22 212 102 7 164 241 174 21 0 0 1 104 197 60 13 194 96 169 102 36 193 199 30 151 61 112 84 43 43 191 194 1 161 56 139 53 115 136 32 148 17 113 135 55 123 181 224 91 143 170 42 70 154 95 146 126 90 132 159 105 180 251 18 41 35 80 231 44 31 43 32 145 245 182 101 28 236 119 33 66 1 225 23 219 129 219 214 243 191 203 150 13 208 77 171 34 153 52 224 233 94 147 246 3 95 62 22 212 102 7 164 241 174 21 0 0 0 8 255 177 136 137 82 0 0 0 1 8 255 177 136 137 82 0 0 0 0 28 244 28 97 243 182 228 22 188 140 208 197 48 85 163 246 9 179 58 95 58 150 166 115 224 1 0 0 0 1 28 244 28 97 243 182 228 22 188 140 208 197 48 85 163 246 9 179 58 95 58 150 166 115 224 1 0 0 0 0 56 18 166 152 245 55 183 20 61 65 95 235 22 101 208 144 158 244 134 73 6 107 252 90 131 187 46 111 218 192 193 204 157 69 78 249 68 158 131 231 84 169 155 246 223 255 125 237 56 39 124 83 222 2 0 0 0 1 56 18 166 152 245 55 183 20 61 65 95 235 22 101 208 144 158 244 134 73 6 107 252 90 131 187 46 111 218 192 193 204 157 69 78 249 68 158 131 231 84 169 155 246 223 255 125 237 56 39 124 83 222 2 0 0 0 0 64 125 215 194 190 138 172 44 82 18 4 12 27 37 152 98 142 28 176 36 149 113 6 134 186 247 114 113 24 143 28 126 9 132 211 32 84 48 255 229 143 210 55 139 145 108 151 47 228 54 230 198 125 130 0 191 218 241 25 250 223 160 158 116 0 1 64 125 215 194 190 138 172 44 82 18 4 12 27 37 152 98 142 28 176 36 149 113 6 134 186 247 114 113 24 143 28 126 9 132 211 32 84 48 255 229 143 210 55 139 145 108 151 47 228 54 230 198 125 130 0 191 218 241 25 250 223 160 158 116 0 0 60 3 57 187 171 211 24 69 12 134 135 186 26 223 242 182 51 228 122 123 228 34 89 39 47 189 254 2 149 226 207 2 67 99 42 86 56 191 230 17 56 161 156 156 78 118 244 228 6 251 250 232 155 46 194 10 138 122 135 43 0 1 60 3 57 187 171 211 24 69 12 134 135 186 26 223 242 182 51 228 122 123 228 34 89 39 47 189 254 2 149 226 207 2 67 99 42 86 56 191 230 17 56 161 156 156 78 118 244 228 6 251 250 232 155 46 194 10 138 122 135 43 0 0 60 172 126 95 38 172 16 35 220 31 69 231 168 50 246 181 132 163 59 105 107 11 195 114 20 55 43 40 50 235 159 196 170 131 133 34 254 126 123 149 223 8 155 192 190 96 9 65 243 130 152 203 23 54 157 5 6 21 0 0 0 1 60 172 126 95 38 172 16 35 220 31 69 231 168 50 246 181 132 163 59 105 107 11 195 114 20 55 43 40 50 235 159 196 170 131 133 34 254 126 123 149 223 8 155 192 190 96 9 65 243 130 152 203 23 54 157 5 6 21 0 0 0 0 64 2 111 152 136 184 111 221 198 128 165 251 127 213 81 172 8 106 234 51 14 82 18 6 231 152 0 230 43 112 55 155 160 105 77 184 34 204 159 232 23 202 84 150 215 63 252 216 202 135 94 254 143 56 128 190 119 156 93 36 146 106 50 31 0 1 64 2 111 152 136 184 111 221 198 128 165 251 127 213 81 172 8 106 234 51 14 82 18 6 231 152 0 230 43 112 55 155 160 105 77 184 34 204 159 232 23 202 84 150 215 63 252 216 202 135 94 254 143 56 128 190 119 156 93 36 146 106 50 31 0 0 84 67 179 87 45 0 244 146 0 251 216 55 206 169 143 153 155 204 98 242 127 58 228 9 185 140 50 24 85 71 140 103 173 214 208 88 197 18 88 42 237 5 249 171 151 55 8 19 64 247 14 51 205 117 38 200 199 107 98 33 41 209 251 142 166 190 178 246 165 231 178 156 209 134 137 201 40 51 114 105 214 176 192 40 0 1 84 67 179 87 45 0 244 146 0 251 216 55 206 169 143 153 155 204 98 242 127 58 228 9 185 140 50 24 85 71 140 103 173 214 208 88 197 18 88 42 237 5 249 171 151 55 8 19 64 247 14 51 205 117 38 200 199 107 98 33 41 209 251 142 166 190 178 246 165 231 178 156 209 134 137 201 40 51 114 105 214 176 192 40 0 0 104 210 223 181 52 158 133 105 60 206 60 97 88 35 84 39 241 68 117 46 200 25 178 180 2 135 170 228 237 78 95 141 220 192 61 243 38 81 141 157 147 134 105 20 141 231 139 98 217 141 233 206 38 63 88 41 115 146 165 44 212 80 120 9 35 155 237 10 49 241 130 64 144 5 183 157 196 6 21 107 70 41 197 111 109 215 116 229 241 167 89 202 52 203 220 160 217 246 30 235 144 235 19 0 0 1 104 210 223 181 52 158 133 105 60 206 60 97 88 35 84 39 241 68 117 46 200 25 178 180 2 135 170 228 237 78 95 141 220 192 61 243 38 81 141 157 147 134 105 20 141 231 139 98 217 141 233 206 38 63 88 41 115 146 165 44 212 80 120 9 35 155 237 10 49 241 130 64 144 5 183 157 196 6 21 107 70 41 197 111 109 215 116 229 241 167 89 202 52 203 220 160 217 246 30 235 144 235 19 0 0 0 92 152 150 20 214 127 232 198 173 9 79 27 3 184 211 18 63 222 243 206 88 162 250 92 190 84 152 234 94 69 155 44 142 240 190 37 73 181 195 210 164 18 87 93 129 136 94 136 136 217 218 51 29 223 183 84 208 218 2 84 239 77 91 212 169 82 20 75 248 125 91 121 11 45 39 139 41 225 254 195 35 239 16 190 22 173 227 229 119 204 69 22 0 1 92 152 150 20 214 127 232 198 173 9 79 27 3 184 211 18 63 222 243 206 88 162 250 92 190 84 152 234 94 69 155 44 142 240 190 37 73 181 195 210 164 18 87 93 129 136 94 136 136 217 218 51 29 223 183 84 208 218 2 84 239 77 91 212 169 82 20 75 248 125 91 121 11 45 39 139 41 225 254 195 35 239 16 190 22 173 227 229 119 204 69 22 0 0 120 44 138 21 104 121 166 168 12 110 50 53 151 231 148 52 129 170 198 240 95 34 68 28 124 55 201 57 159 127 63 21 5 63 2 162 178 197 92 197 192 93 104 136 44 43 255 49 242 182 132 190 94 80 205 87 26 3 171 184 215 205 47 219 227 179 185 205 230 127 65 231 66 123 92 125 163 244 195 94 188 196 160 223 181 5 166 64 111 85 190 120 122 41 201 0 186 192 106 199 252 164 20 92 37 80 149 48 19 150 123 103 189 229 79 223 27 244 74 0 0 1 120 44 138 21 104 121 166 168 12 110 50 53 151 231 148 52 129 170 198 240 95 34 68 28 124 55 201 57 159 127 63 21 5 63 2 162 178 197 92 197 192 93 104 136 44 43 255 49 242 182 132 190 94 80 205 87 26 3 171 184 215 205 47 219 227 179 185 205 230 127 65 231 66 123 92 125 163 244 195 94 188 196 160 223 181 5 166 64 111 85 190 120 122 41 201 0 186 192 106 199 252 164 20 92 37 80 149 48 19 150 123 103 189 229 79 223 27 244 74 0 0 0 100 245 181 98 66 108 43 27 238 39 17 236 216 168 31 46 226 159 160 142 67 146 30 10 164 14 213 242 136 234 225 199 106 255 33 115 237 228 171 8 216 45 122 202 182 141 16 25 154 11 32 53 253 203 2 153 173 247 193 28 139 204 11 42 191 71 206 216 60 1 99 141 204 17 235 245 239 210 176 83 155 175 144 26 254 215 45 202 84 103 74 45 94 174 24 228 158 37 0 0 0 1 100 245 181 98 66 108 43 27 238 39 17 236 216 168 31 46 226 159 160 142 67 146 30 10 164 14 213 242 136 234 225 199 106 255 33 115 237 228 171 8 216 45 122 202 182 141 16 25 154 11 32 53 253 203 2 153 173 247 193 28 139 204 11 42 191 71 206 216 60 1 99 141 204 17 235 245 239 210 176 83 155 175 144 26 254 215 45 202 84 103 74 45 94 174 24 228 158 37 0 0 0 0 104 57 246 11 97 62 119 196 46 75 16 79 108 49 113 219 104 188 179 248 78 58 245 127 216 140 166 196 171 132 59 25 253 51 249 216 140 222 121 230 30 172 32 207 74 205 85 44 90 36 173 79 87 194 82 25 79 135 112 132 221 164 76 173 137 126 195 194 92 248 173 9 87 209 223 59 125 95 65 85 163 122 135 111 167 236 33 52 80 27 61 178 237 205 251 204 39 240 191 179 209 167 168 143 7 1 104 57 246 11 97 62 119 196 46 75 16 79 108 49 113 219 104 188 179 248 78 58 245 127 216 140 166 196 171 132 59 25 253 51 249 216 140 222 121 230 30 172 32 207 74 205 85 44 90 36 173 79 87 194 82 25 79 135 112 132 221 164 76 173 137 126 195 194 92 248 173 9 87 209 223 59 125 95 65 85 163 122 135 111 167 236 33 52 80 27 61 178 237 205 251 204 39 240 191 179 209 167 168 143 7 0 36 163 89 48 170 102 43 220 156 66 109 77 113 21 188 67 203 215 226 3 205 170 236 98 121 244 145 200 70 209 174 177 8 139 184 149 27 1 36 163 89 48 170 102 43 220 156 66 109 77 113 21 188 67 203 215 226 3 205 170 236 98 121 244 145 200 70 209 174 177 8 139 184 149 27 0 92 53 9 22 111 90 93 185 232 66 232 61 190 77 71 90 216 56 212 22 125 84 142 129 138 224 63 243 92 90 116 216 187 231 68 78 132 78 241 87 154 62 85 115 206 103 51 246 75 206 191 127 30 122 123 36 8 228 202 50 139 177 122 8 243 137 70 204 22 54 249 70 184 115 203 134 211 234 65 106 138 66 20 24 187 65 57 199 142 254 18 13 0 1 92 53 9 22 111 90 93 185 232 66 232 61 190 77 71 90 216 56 212 22 125 84 142 129 138 224 63 243 92 90 116 216 187 231 68 78 132 78 241 87 154 62 85 115 206 103 51 246 75 206 191 127 30 122 123 36 8 228 202 50 139 177 122 8 243 137 70 204 22 54 249 70 184 115 203 134 211 234 65 106 138 66 20 24 187 65 57 199 142 254 18 13 0 0 88 149 88 176 69 223 36 37 144 73 234 120 8 99 221 137 178 30 189 44 46 85 157 48 42 245 113 38 233 244 178 224 211 47 14 147 125 42 18 227 2 75 4 61 200 33 227 150 10 58 244 38 21 49 115 166 218 124 93 108 5 73 235 24 7 87 152 177 21 225 23 170 204 54 120 154 213 94 174 62 0 72 37 253 148 145 218 243 1 1 88 149 88 176 69 223 36 37 144 73 234 120 8 99 221 137 178 30 189 44 46 85 157 48 42 245 113 38 233 244 178 224 211 47 14 147 125 42 18 227 2 75 4 61 200 33 227 150 10 58 244 38 21 49 115 166 218 124 93 108 5 73 235 24 7 87 152 177 21 225 23 170 204 54 120 154 213 94 174 62 0 72 37 253 148 145 218 243 1 0 4 30 0 0 0 1 4 30 0 0 0 0 84 155 231 228 201 142 243 71 208 249 176 228 44 166 218 152 155 74 36 194 74 148 67 125 239 134 32 23 215 211 53 175 202 69 44 53 118 45 165 95 123 12 108 231 154 213 28 20 163 249 156 33 65 206 61 154 174 104 60 98 109 32 78 242 212 129 149 248 201 134 148 123 181 199 217 155 194 96 140 22 149 241 60 138 83 1 84 155 231 228 201 142 243 71 208 249 176 228 44 166 218 152 155 74 36 194 74 148 67 125 239 134 32 23 215 211 53 175 202 69 44 53 118 45 165 95 123 12 108 231 154 213 28 20 163 249 156 33 65 206 61 154 174 104 60 98 109 32 78 242 212 129 149 248 201 134 148 123 181 199 217 155 194 96 140 22 149 241 60 138 83 0 92 144 67 10 47 192 191 82 221 35 118 53 159 135 152 112 38 73 15 23 69 58 219 225 247 78 102 170 227 6 163 149 12 249 225 137 246 239 39 40 234 163 207 114 112 115 115 194 219 16 202 159 189 202 35 212 109 38 217 132 76 179 231 7 209 218 188 27 208 113 230 164 84 51 101 32 180 123 194 122 68 150 119 65 252 204 137 177 46 234 227 67 1 1 92 144 67 10 47 192 191 82 221 35 118 53 159 135 152 112 38 73 15 23 69 58 219 225 247 78 102 170 227 6 163 149 12 249 225 137 246 239 39 40 234 163 207 114 112 115 115 194 219 16 202 159 189 202 35 212 109 38 217 132 76 179 231 7 209 218 188 27 208 113 230 164 84 51 101 32 180 123 194 122 68 150 119 65 252 204 137 177 46 234 227 67 1 0 24 72 56 22 141 170 58 90 163 187 180 242 135 44 169 146 74 211 248 249 78 94 0 0 0 1 24 72 56 22 141 170 58 90 163 187 180 242 135 44 169 146 74 211 248 249 78 94 0 0 0 0 84 212 210 42 73 12 25 196 31 47 75 120 243 73 247 127 147 72 96 165 96 14 69 196 39 172 6 5 194 11 134 119 124 92 255 174 158 25 36 41 88 174 179 156 60 218 178 156 41 175 187 120 209 98 0 19 182 231 198 178 95 52 119 23 97 47 127 143 101 176 216 52 159 106 61 182 27 146 186 142 96 231 29 27 0 1 84 212 210 42 73 12 25 196 31 47 75 120 243 73 247 127 147 72 96 165 96 14 69 196 39 172 6 5 194 11 134 119 124 92 255 174 158 25 36 41 88 174 179 156 60 218 178 156 41 175 187 120 209 98 0 19 182 231 198 178 95 52 119 23 97 47 127 143 101 176 216 52 159 106 61 182 27 146 186 142 96 231 29 27 0 0 16 202 192 8 50 72 83 78 188 175 88 50 125 131 102 195 3 1 16 202 192 8 50 72 83 78 188 175 88 50 125 131 102 195 3 0 60 129 235 99 25 168 162 143 14 181 191 24 1 54 4 85 204 63 111 78 71 241 253 45 225 56 177 121 166 226 7 163 1 182 155 9 74 40 35 9 9 175 144 171 35 224 162 163 133 97 35 188 126 220 236 73 96 97 129 14 0 1 60 129 235 99 25 168 162 143 14 181 191 24 1 54 4 85 204 63 111 78 71 241 253 45 225 56 177 121 166 226 7 163 1 182 155 9 74 40 35 9 9 175 144 171 35 224 162 163 133 97 35 188 126 220 236 73 96 97 129 14 0 0 64 108 92 234 131 231 188 232 51 18 198 215 40 15 157 152 141 79 144 203 196 249 187 115 41 230 177 33 50 91 32 10 169 73 162 155 234 98 212 245 92 106 18 104 75 83 194 149 253 23 63 13 64 214 243 154 201 132 100 31 187 255 119 206 203 1 64 108 92 234 131 231 188 232 51 18 198 215 40 15 157 152 141 79 144 203 196 249 187 115 41 230 177 33 50 91 32 10 169 73 162 155 234 98 212 245 92 106 18 104 75 83 194 149 253 23 63 13 64 214 243 154 201 132 100 31 187 255 119 206 203 0 100 234 116 169 65 23 182 136 224 163 211 105 192 204 31 82 240 175 46 102 159 95 158 50 9 145 106 22 60 50 33 177 26 225 82 114 86 212 7 154 44 212 126 161 171 72 116 119 246 52 229 38 173 55 41 107 40 184 253 98 215 24 91 66 142 30 173 123 90 125 69 86 227 60 60 95 206 124 147 44 60 155 141 241 90 83 7 53 206 71 46 134 127 122 180 31 53 82 214 176 0 1 100 234 116 169 65 23 182 136 224 163 211 105 192 204 31 82 240 175 46 102 159 95 158 50 9 145 106 22 60 50 33 177 26 225 82 114 86 212 7 154 44 212 126 161 171 72 116 119 246 52 229 38 173 55 41 107 40 184 253 98 215 24 91 66 142 30 173 123 90 125 69 86 227 60 60 95 206 124 147 44 60 155 141 241 90 83 7 53 206 71 46 134 127 122 180 31 53 82 214 176 0 0 124 246 224 179 231 248 85 24 201 210 110 165 232 153 136 96 155 10 189 255 115 232 19 11 61 42 152 98 194 221 200 42 3 215 220 12 102 106 69 77 69 216 253 146 196 230 240 63 118 205 224 76 129 107 174 183 121 74 199 99 224 180 49 180 47 34 35 35 224 247 193 61 42 51 142 16 105 58 239 223 3 189 5 85 19 221 249 251 255 86 9 113 209 31 184 51 28 17 30 9 254 164 62 237 123 73 56 8 110 166 164 217 88 106 22 85 183 98 156 139 221 73 253 52 0 1 124 246 224 179 231 248 85 24 201 210 110 165 232 153 136 96 155 10 189 255 115 232 19 11 61 42 152 98 194 221 200 42 3 215 220 12 102 106 69 77 69 216 253 146 196 230 240 63 118 205 224 76 129 107 174 183 121 74 199 99 224 180 49 180 47 34 35 35 224 247 193 61 42 51 142 16 105 58 239 223 3 189 5 85 19 221 249 251 255 86 9 113 209 31 184 51 28 17 30 9 254 164 62 237 123 73 56 8 110 166 164 217 88 106 22 85 183 98 156 139 221 73 253 52 0 0 76 114 71 65 89 237 36 19 196 155 136 82 8 202 243 70 78 29 120 129 104 2 108 32 185 184 120 36 214 143 191 219 217 92 173 243 221 253 134 71 240 107 182 126 78 197 54 130 17 174 97 201 95 84 153 156 87 239 78 186 103 226 240 168 109 214 167 102 253 22 173 79 216 165 16 0 0 1 76 114 71 65 89 237 36 19 196 155 136 82 8 202 243 70 78 29 120 129 104 2 108 32 185 184 120 36 214 143 191 219 217 92 173 243 221 253 134 71 240 107 182 126 78 197 54 130 17 174 97 201 95 84 153 156 87 239 78 186 103 226 240 168 109 214 167 102 253 22 173 79 216 165 16 0 0 0 44 205 174 153 159 175 148 18 158 235 107 21 147 172 130 150 6 109 216 1 3 85 18 35 218 2 59 66 219 110 2 146 243 32 186 68 69 178 58 234 207 205 114 206 3 1 44 205 174 153 159 175 148 18 158 235 107 21 147 172 130 150 6 109 216 1 3 85 18 35 218 2 59 66 219 110 2 146 243 32 186 68 69 178 58 234 207 205 114 206 3 0 116 6 227 111 143 56 164 39 218 18 125 60 7 225 195 8 232 184 177 163 16 21 29 165 72 172 201 28 230 132 0 86 23 246 125 104 127 83 109 13 113 149 216 245 166 173 128 120 168 110 19 178 216 69 212 66 94 179 133 240 181 66 121 14 166 89 77 60 143 152 41 85 140 62 121 51 44 123 188 123 173 52 74 2 31 233 7 229 187 139 234 225 45 79 247 235 210 113 240 84 200 66 137 125 254 189 83 79 17 221 213 32 54 4 0 0 0 1 116 6 227 111 143 56 164 39 218 18 125 60 7 225 195 8 232 184 177 163 16 21 29 165 72 172 201 28 230 132 0 86 23 246 125 104 127 83 109 13 113 149 216 245 166 173 128 120 168 110 19 178 216 69 212 66 94 179 133 240 181 66 121 14 166 89 77 60 143 152 41 85 140 62 121 51 44 123 188 123 173 52 74 2 31 233 7 229 187 139 234 225 45 79 247 235 210 113 240 84 200 66 137 125 254 189 83 79 17 221 213 32 54 4 0 0 0 0 76 180 196 94 156 54 195 58 2 39 205 18 27 183 204 87 155 155 103 140 143 118 225 162 141 198 191 103 246 251 35 33 200 114 204 108 157 138 202 183 109 135 225 247 167 85 247 149 166 13 150 140 115 191 119 88 74 150 209 45 234 64 143 177 65 18 230 195 62 134 19 33 86 117 177 249 0 1 76 180 196 94 156 54 195 58 2 39 205 18 27 183 204 87 155 155 103 140 143 118 225 162 141 198 191 103 246 251 35 33 200 114 204 108 157 138 202 183 109 135 225 247 167 85 247 149 166 13 150 140 115 191 119 88 74 150 209 45 234 64 143 177 65 18 230 195 62 134 19 33 86 117 177 249 0 0 104 77 194 158 250 209 247 60 209 53 237 237 50 69 209 78 167 168 156 255 102 176 89 29 124 236 2 92 64 171 213 222 61 154 151 17 221 163 26 188 48 218 181 25 207 24 78 174 96 77 4 92 36 81 77 82 53 226 55 109 24 229 73 137 228 213 186 236 231 140 148 101 63 106 130 255 94 160 246 229 63 254 107 254 48 15 56 43 131 180 38 166 178 234 233 86 61 2 85 154 172 81 81 66 9 1 104 77 194 158 250 209 247 60 209 53 237 237 50 69 209 78 167 168 156 255 102 176 89 29 124 236 2 92 64 171 213 222 61 154 151 17 221 163 26 188 48 218 181 25 207 24 78 174 96 77 4 92 36 81 77 82 53 226 55 109 24 229 73 137 228 213 186 236 231 140 148 101 63 106 130 255 94 160 246 229 63 254 107 254 48 15 56 43 131 180 38 166 178 234 233 86 61 2 85 154 172 81 81 66 9 0 32 159 255 244 214 47 170 4 34 47 46 170 236 221 0 119 135 29 199 192 21 169 211 135 216 147 25 112 187 63 0 0 0 1 32 159 255 244 214 47 170 4 34 47 46 170 236 221 0 119 135 29 199 192 21 169 211 135 216 147 25 112 187 63 0 0 0 0 4 136 102 2 0 1 4 136 102 2 0 0 100 182 114 42 214 204 210 88 197 7 199 39 124 27 200 142 13 162 188 42 112 118 92 202 215 78 160 112 52 72 100 65 30 205 199 86 182 35 211 245 70 139 86 183 94 139 115 30 32 188 225 10 237 169 169 192 188 84 209 158 78 210 48 148 84 141 6 11 247 62 239 52 100 249 186 173 138 163 134 212 20 243 14 250 162 155 177 89 175 243 3 44 202 80 198 163 43 3 0 0 0 1 100 182 114 42 214 204 210 88 197 7 199 39 124 27 200 142 13 162 188 42 112 118 92 202 215 78 160 112 52 72 100 65 30 205 199 86 182 35 211 245 70 139 86 183 94 139 115 30 32 188 225 10 237 169 169 192 188 84 209 158 78 210 48 148 84 141 6 11 247 62 239 52 100 249 186 173 138 163 134 212 20 243 14 250 162 155 177 89 175 243 3 44 202 80 198 163 43 3 0 0 0 0 108 99 120 242 101 168 63 63 168 132 177 224 65 190 4 179 252 98 42 247 140 190 31 23 0 117 179 116 199 98 202 211 102 139 65 63 177 51 13 22 232 149 208 247 101 128 25 173 165 160 191 102 145 173 51 230 242 244 7 170 233 242 115 73 120 62 67 64 36 3 41 74 159 24 59 71 166 190 104 193 40 86 159 53 253 65 67 111 21 48 43 46 214 182 41 210 212 59 110 156 33 239 225 212 27 107 0 0 0 1 108 99 120 242 101 168 63 63 168 132 177 224 65 190 4 179 252 98 42 247 140 190 31 23 0 117 179 116 199 98 202 211 102 139 65 63 177 51 13 22 232 149 208 247 101 128 25 173 165 160 191 102 145 173 51 230 242 244 7 170 233 242 115 73 120 62 67 64 36 3 41 74 159 24 59 71 166 190 104 193 40 86 159 53 253 65 67 111 21 48 43 46 214 182 41 210 212 59 110 156 33 239 225 212 27 107 0 0 0 0 36 182 35 41 118 252 144 79 94 31 128 26 169 129 98 79 185 77 204 158 170 99 105 83 166 57 204 35 71 231 68 17 161 7 0 0 0 1 36 182 35 41 118 252 144 79 94 31 128 26 169 129 98 79 185 77 204 158 170 99 105 83 166 57 204 35 71 231 68 17 161 7 0 0 0 0 108 19 121 68 172 165 141 93 53 202 225 143 125 21 127 168 150 223 142 78 163 244 135 194 197 17 161 238 159 225 207 232 231 141 188 186 185 170 238 141 145 164 234 7 144 31 97 144 227 0 100 164 181 137 33 28 59 136 10 218 56 168 254 166 106 145 203 39 49 163 15 174 143 31 5 178 130 153 84 87 87 61 221 163 29 252 65 53 122 68 235 160 127 229 67 219 215 172 22 9 124 37 73 237 104 38 0 0 0 1 108 19 121 68 172 165 141 93 53 202 225 143 125 21 127 168 150 223 142 78 163 244 135 194 197 17 161 238 159 225 207 232 231 141 188 186 185 170 238 141 145 164 234 7 144 31 97 144 227 0 100 164 181 137 33 28 59 136 10 218 56 168 254 166 106 145 203 39 49 163 15 174 143 31 5 178 130 153 84 87 87 61 221 163 29 252 65 53 122 68 235 160 127 229 67 219 215 172 22 9 124 37 73 237 104 38 0 0 0 0 68 131 157 197 45 185 223 236 53 246 15 184 5 182 184 23 147 3 15 46 179 218 118 209 114 37 235 220 187 201 154 47 207 166 122 35 26 91 3 127 154 179 249 232 233 237 129 34 68 202 138 161 0 13 77 112 252 203 92 187 188 230 39 55 132 247 0 0 0 1 68 131 157 197 45 185 223 236 53 246 15 184 5 182 184 23 147 3 15 46 179 218 118 209 114 37 235 220 187 201 154 47 207 166 122 35 26 91 3 127 154 179 249 232 233 237 129 34 68 202 138 161 0 13 77 112 252 203 92 187 188 230 39 55 132 247 0 0 0 0 124 215 194 0 199 219 223 102 242 204 248 124 17 112 73 119 161 49 131 84 207 207 67 43 12 67 150 210 126 148 3 13 241 16 225 134 108 33 87 2 157 76 211 58 133 210 144 225 220 56 131 147 199 231 84 32 218 43 221 252 165 30 119 252 165 229 211 167 197 150 182 197 108 234 8 252 127 239 35 237 26 80 187 183 139 105 103 168 55 42 221 202 112 37 234 50 199 248 234 249 61 133 62 20 172 135 114 63 241 161 127 1 136 155 71 88 83 222 156 240 240 1 0 0 0 1 124 215 194 0 199 219 223 102 242 204 248 124 17 112 73 119 161 49 131 84 207 207 67 43 12 67 150 210 126 148 3 13 241 16 225 134 108 33 87 2 157 76 211 58 133 210 144 225 220 56 131 147 199 231 84 32 218 43 221 252 165 30 119 252 165 229 211 167 197 150 182 197 108 234 8 252 127 239 35 237 26 80 187 183 139 105 103 168 55 42 221 202 112 37 234 50 199 248 234 249 61 133 62 20 172 135 114 63 241 161 127 1 136 155 71 88 83 222 156 240 240 1 0 0 0 0 92 77 228 31 76 241 138 249 4 98 9 115 184 112 82 183 229 236 138 162 82 102 251 28 188 12 113 181 158 79 211 194 251 196 166 73 83 83 80 42 120 93 243 152 162 232 39 205 85 189 126 54 242 156 193 86 191 44 44 252 55 14 21 27 116 194 191 250 7 74 203 105 99 89 106 178 14 2 236 178 68 170 192 252 120 41 130 72 87 206 11 0 0 1 92 77 228 31 76 241 138 249 4 98 9 115 184 112 82 183 229 236 138 162 82 102 251 28 188 12 113 181 158 79 211 194 251 196 166 73 83 83 80 42 120 93 243 152 162 232 39 205 85 189 126 54 242 156 193 86 191 44 44 252 55 14 21 27 116 194 191 250 7 74 203 105 99 89 106 178 14 2 236 178 68 170 192 252 120 41 130 72 87 206 11 0 0 0 56 134 225 44 69 119 64 234 84 89 109 244 85 126 103 94 170 253 103 245 228 230 48 38 166 108 164 43 22 74 31 25 224 196 60 126 145 211 177 41 97 248 197 232 65 242 142 255 87 64 104 166 218 221 0 0 0 1 56 134 225 44 69 119 64 234 84 89 109 244 85 126 103 94 170 253 103 245 228 230 48 38 166 108 164 43 22 74 31 25 224 196 60 126 145 211 177 41 97 248 197 232 65 242 142 255 87 64 104 166 218 221 0 0 0 0 116 229 172 191 36 121 40 254 104 25 228 24 190 128 20 169 193 240 145 60 136 35 241 68 254 62 193 45 112 102 236 245 29 64 94 62 47 36 42 252 13 28 27 219 9 245 94 181 136 19 177 1 212 5 30 243 157 117 94 95 128 151 156 4 203 11 190 27 0 62 198 137 167 143 73 204 232 2 248 129 253 159 82 186 78 87 59 101 197 100 160 249 30 152 93 125 199 107 24 125 64 176 236 44 0 171 123 140 55 132 181 2 66 228 115 0 0 1 116 229 172 191 36 121 40 254 104 25 228 24 190 128 20 169 193 240 145 60 136 35 241 68 254 62 193 45 112 102 236 245 29 64 94 62 47 36 42 252 13 28 27 219 9 245 94 181 136 19 177 1 212 5 30 243 157 117 94 95 128 151 156 4 203 11 190 27 0 62 198 137 167 143 73 204 232 2 248 129 253 159 82 186 78 87 59 101 197 100 160 249 30 152 93 125 199 107 24 125 64 176 236 44 0 171 123 140 55 132 181 2 66 228 115 0 0 0 56 242 178 209 149 127 105 215 100 20 77 91 129 188 44 67 89 61 245 2 145 100 176 98 45 200 226 215 226 171 178 81 56 196 210 25 211 24 236 80 114 182 153 187 70 254 227 193 36 163 1 237 117 87 122 2 0 1 56 242 178 209 149 127 105 215 100 20 77 91 129 188 44 67 89 61 245 2 145 100 176 98 45 200 226 215 226 171 178 81 56 196 210 25 211 24 236 80 114 182 153 187 70 254 227 193 36 163 1 237 117 87 122 2 0 0 124 134 51 146 212 174 146 101 32 54 80 14 156 174 236 212 195 81 90 58 116 149 201 205 7 130 14 255 190 241 205 207 249 221 121 67 167 233 3 91 49 79 77 255 115 246 112 74 5 197 106 119 29 238 202 62 53 27 223 236 152 234 237 36 19 234 248 83 103 87 80 106 110 27 202 134 182 123 143 10 59 147 105 206 20 112 193 190 220 192 38 172 241 167 90 129 71 185 246 137 86 12 195 102 17 186 107 173 97 103 140 196 114 119 155 196 217 44 13 55 170 195 147 93 0 1 124 134 51 146 212 174 146 101 32 54 80 14 156 174 236 212 195 81 90 58 116 149 201 205 7 130 14 255 190 241 205 207 249 221 121 67 167 233 3 91 49 79 77 255 115 246 112 74 5 197 106 119 29 238 202 62 53 27 223 236 152 234 237 36 19 234 248 83 103 87 80 106 110 27 202 134 182 123 143 10 59 147 105 206 20 112 193 190 220 192 38 172 241 167 90 129 71 185 246 137 86 12 195 102 17 186 107 173 97 103 140 196 114 119 155 196 217 44 13 55 170 195 147 93 0 0 76 252 151 248 45 49 178 79 128 161 10 102 252 132 63 0 196 234 37 213 196 19 233 200 48 79 135 72 224 67 120 56 21 130 243 118 44 119 71 20 190 181 163 216 126 133 133 98 134 74 16 85 129 28 141 49 184 195 10 187 170 152 61 100 174 129 141 139 49 17 137 166 184 197 148 14 0 1 76 252 151 248 45 49 178 79 128 161 10 102 252 132 63 0 196 234 37 213 196 19 233 200 48 79 135 72 224 67 120 56 21 130 243 118 44 119 71 20 190 181 163 216 126 133 133 98 134 74 16 85 129 28 141 49 184 195 10 187 170 152 61 100 174 129 141 139 49 17 137 166 184 197 148 14 0 0 72 201 189 132 146 184 73 235 58 191 160 218 55 99 221 69 240 85 82 95 206 66 232 212 65 234 63 77 180 226 245 185 90 39 91 117 118 212 95 63 202 231 49 115 110 103 125 28 251 84 217 64 21 37 74 176 91 16 243 99 51 19 229 146 28 76 167 138 98 3 86 2 0 1 72 201 189 132 146 184 73 235 58 191 160 218 55 99 221 69 240 85 82 95 206 66 232 212 65 234 63 77 180 226 245 185 90 39 91 117 118 212 95 63 202 231 49 115 110 103 125 28 251 84 217 64 21 37 74 176 91 16 243 99 51 19 229 146 28 76 167 138 98 3 86 2 0 0 24 4 127 113 119 170 147 209 114 124 184 151 70 216 77 57 33 8 170 193 201 10 0 0 0 1 24 4 127 113 119 170 147 209 114 124 184 151 70 216 77 57 33 8 170 193 201 10 0 0 0 0 20 221 119 146 70 38 139 89 31 158 39 212 71 222 63 236 44 183 75 0 0 1 20 221 119 146 70 38 139 89 31 158 39 212 71 222 63 236 44 183 75 0 0 0 100 15 190 40 142 118 234 227 167 165 244 200 26 49 57 37 9 217 227 141 192 139 18 100 130 160 53 103 125 170 120 113 53 121 232 23 248 218 111 12 114 85 152 168 69 138 153 228 55 175 99 6 29 234 191 118 238 18 250 139 127 248 148 96 36 236 164 252 127 71 230 13 95 200 86 106 201 201 168 74 148 207 42 56 34 173 114 89 220 58 197 209 56 194 93 253 36 57 2 0 0 1 100 15 190 40 142 118 234 227 167 165 244 200 26 49 57 37 9 217 227 141 192 139 18 100 130 160 53 103 125 170 120 113 53 121 232 23 248 218 111 12 114 85 152 168 69 138 153 228 55 175 99 6 29 234 191 118 238 18 250 139 127 248 148 96 36 236 164 252 127 71 230 13 95 200 86 106 201 201 168 74 148 207 42 56 34 173 114 89 220 58 197 209 56 194 93 253 36 57 2 0 0 0 20 241 138 87 82 7 150 25 154 252 91 216 29 106 84 123 71 145 238 230 5 1 20 241 138 87 82 7 150 25 154 252 91 216 29 106 84 123 71 145 238 230 5 0 32 151 63 193 99 4 229 248 206 122 164 94 141 132 110 0 199 239 244 9 150 62 180 68 138 132 112 26 31 217 46 0 0 1 32 151 63 193 99 4 229 248 206 122 164 94 141 132 110 0 199 239 244 9 150 62 180 68 138 132 112 26 31 217 46 0 0 0 36 151 219 5 222 229 79 21 136 176 12 133 59 166 175 203 218 102 58 176 141 26 127 152 21 81 49 214 17 132 22 14 243 177 3 0 0 1 36 151 219 5 222 229 79 21 136 176 12 133 59 166 175 203 218 102 58 176 141 26 127 152 21 81 49 214 17 132 22 14 243 177 3 0 0 0 104 6 168 179 178 70 132 236 140 85 20 22 237 179 132 40 18 248 209 250 75 115 245 45 67 206 107 231 237 102 198 61 0 53 181 149 233 167 119 49 80 107 58 194 191 82 80 182 33 90 50 185 65 82 236 47 123 143 42 21 75 76 220 97 26 140 95 213 177 133 178 200 249 254 187 252 127 168 64 33 103 133 36 183 203 53 160 28 249 121 153 43 163 187 30 115 14 218 222 176 173 69 117 99 12 1 104 6 168 179 178 70 132 236 140 85 20 22 237 179 132 40 18 248 209 250 75 115 245 45 67 206 107 231 237 102 198 61 0 53 181 149 233 167 119 49 80 107 58 194 191 82 80 182 33 90 50 185 65 82 236 47 123 143 42 21 75 76 220 97 26 140 95 213 177 133 178 200 249 254 187 252 127 168 64 33 103 133 36 183 203 53 160 28 249 121 153 43 163 187 30 115 14 218 222 176 173 69 117 99 12 0 108 2 212 34 173 196 82 79 56 112 170 220 63 200 109 239 119 47 163 110 174 76 171 32 84 196 96 74 147 73 116 212 7 81 2 123 170 250 193 70 154 132 132 185 57 39 161 95 139 69 234 233 243 142 195 223 169 214 193 142 130 202 53 250 215 1 232 72 89 42 138 164 214 96 81 207 117 204 208 64 159 221 205 19 127 120 90 20 23 72 45 155 78 40 43 86 112 83 186 201 240 77 86 191 92 249 160 247 61 1 108 2 212 34 173 196 82 79 56 112 170 220 63 200 109 239 119 47 163 110 174 76 171 32 84 196 96 74 147 73 116 212 7 81 2 123 170 250 193 70 154 132 132 185 57 39 161 95 139 69 234 233 243 142 195 223 169 214 193 142 130 202 53 250 215 1 232 72 89 42 138 164 214 96 81 207 117 204 208 64 159 221 205 19 127 120 90 20 23 72 45 155 78 40 43 86 112 83 186 201 240 77 86 191 92 249 160 247 61 0 128 102 251 156 92 43 108 29 62 40 215 42 15 198 118 248 50 157 25 129 219 206 70 124 249 193 82 122 51 209 211 166 198 129 204 78 210 123 124 106 191 69 198 115 9 187 105 170 16 189 25 66 30 61 214 177 166 27 0 66 226 174 106 52 23 197 236 68 43 88 169 245 109 62 252 144 219 129 154 127 116 74 210 197 53 171 56 209 150 200 215 71 80 187 84 179 235 71 14 27 0 159 145 132 91 170 69 4 77 60 185 156 0 93 72 67 68 185 235 189 29 178 144 42 227 35 59 27 0 1 128 102 251 156 92 43 108 29 62 40 215 42 15 198 118 248 50 157 25 129 219 206 70 124 249 193 82 122 51 209 211 166 198 129 204 78 210 123 124 106 191 69 198 115 9 187 105 170 16 189 25 66 30 61 214 177 166 27 0 66 226 174 106 52 23 197 236 68 43 88 169 245 109 62 252 144 219 129 154 127 116 74 210 197 53 171 56 209 150 200 215 71 80 187 84 179 235 71 14 27 0 159 145 132 91 170 69 4 77 60 185 156 0 93 72 67 68 185 235 189 29 178 144 42 227 35 59 27 0 0 36 22 179 130 104 210 45 171 95 5 140 87 49 187 173 206 147 141 26 50 138 30 228 117 173 59 57 138 187 138 30 79 102 10 0 0 0 1 36 22 179 130 104 210 45 171 95 5 140 87 49 187 173 206 147 141 26 50 138 30 228 117 173 59 57 138 187 138 30 79 102 10 0 0 0 0 44 245 222 165 23 160 186 7 2 211 238 67 132 133 157 254 89 199 178 45 73 151 206 197 254 6 172 31 88 199 204 161 72 65 160 25 246 142 223 123 52 172 12 6 0 1 44 245 222 165 23 160 186 7 2 211 238 67 132 133 157 254 89 199 178 45 73 151 206 197 254 6 172 31 88 199 204 161 72 65 160 25 246 142 223 123 52 172 12 6 0 0 108 222 47 68 13 28 124 145 191 235 84 137 87 165 230 34 132 42 90 242 140 248 118 51 137 4 68 91 156 194 220 89 46 217 200 72 50 124 24 209 194 179 150 236 12 223 90 150 72 220 112 234 137 123 179 108 65 16 250 73 68 13 219 174 119 68 216 117 5 143 105 238 147 162 128 99 201 30 204 31 130 46 147 73 191 185 192 73 212 83 18 90 106 146 126 18 59 63 194 86 25 42 52 82 92 6 0 0 0 1 108 222 47 68 13 28 124 145 191 235 84 137 87 165 230 34 132 42 90 242 140 248 118 51 137 4 68 91 156 194 220 89 46 217 200 72 50 124 24 209 194 179 150 236 12 223 90 150 72 220 112 234 137 123 179 108 65 16 250 73 68 13 219 174 119 68 216 117 5 143 105 238 147 162 128 99 201 30 204 31 130 46 147 73 191 185 192 73 212 83 18 90 106 146 126 18 59 63 194 86 25 42 52 82 92 6 0 0 0 0 40 74 204 182 19 172 57 74 106 161 11 250 172 174 63 33 117 146 108 133 108 20 20 28 215 14 216 35 120 250 72 181 31 75 237 185 64 125 38 30 0 1 40 74 204 182 19 172 57 74 106 161 11 250 172 174 63 33 117 146 108 133 108 20 20 28 215 14 216 35 120 250 72 181 31 75 237 185 64 125 38 30 0 0 32 39 90 158 132 213 173 24 145 199 200 240 251 85 122 152 148 224 56 26 234 37 58 180 82 137 37 60 8 144 85 118 5 1 32 39 90 158 132 213 173 24 145 199 200 240 251 85 122 152 148 224 56 26 234 37 58 180 82 137 37 60 8 144 85 118 5 0 4 138 84 0 0 1 4 138 84 0 0 0 120 6 116 242 108 248 14 140 127 243 249 231 147 68 151 120 38 231 8 34 6 106 4 211 91 3 66 139 242 76 75 130 178 43 63 174 27 78 5 184 165 84 187 23 158 140 41 71 59 22 178 59 239 6 145 6 103 216 172 37 75 231 145 41 56 213 208 27 181 52 16 183 237 193 209 238 106 47 104 214 15 82 217 35 168 104 64 76 104 111 95 151 127 241 27 86 63 95 186 251 237 14 164 119 230 211 234 83 245 143 10 244 120 135 32 125 144 92 8 189 0 1 120 6 116 242 108 248 14 140 127 243 249 231 147 68 151 120 38 231 8 34 6 106 4 211 91 3 66 139 242 76 75 130 178 43 63 174 27 78 5 184 165 84 187 23 158 140 41 71 59 22 178 59 239 6 145 6 103 216 172 37 75 231 145 41 56 213 208 27 181 52 16 183 237 193 209 238 106 47 104 214 15 82 217 35 168 104 64 76 104 111 95 151 127 241 27 86 63 95 186 251 237 14 164 119 230 211 234 83 245 143 10 244 120 135 32 125 144 92 8 189 0 0 28 169 164 216 5 23 138 199 97 227 119 26 63 15 87 131 107 175 132 108 223 46 17 101 176 195 214 100 232 1 28 169 164 216 5 23 138 199 97 227 119 26 63 15 87 131 107 175 132 108 223 46 17 101 176 195 214 100 232 0 48 8 170 244 92 198 184 32 64 24 118 241 85 66 189 103 28 33 244 60 230 74 7 243 100 2 1 93 74 149 165 150 65 102 220 228 186 83 101 123 141 123 109 182 122 105 0 0 0 1 48 8 170 244 92 198 184 32 64 24 118 241 85 66 189 103 28 33 244 60 230 74 7 243 100 2 1 93 74 149 165 150 65 102 220 228 186 83 101 123 141 123 109 182 122 105 0 0 0 0 120 12 158 20 122 77 167 176 86 158 51 230 99 136 241 101 17 244 121 59 87 103 26 111 205 53 244 235 242 229 169 15 224 95 241 248 47 71 217 197 177 238 46 133 175 43 178 246 61 15 216 239 68 140 164 169 9 17 109 185 231 2 170 188 140 250 123 194 232 88 232 26 60 214 152 106 181 39 234 136 137 58 62 209 190 251 104 89 19 70 178 56 124 109 18 185 167 142 60 123 228 26 54 187 187 148 203 130 114 248 49 111 198 191 107 86 222 3 0 0 0 1 120 12 158 20 122 77 167 176 86 158 51 230 99 136 241 101 17 244 121 59 87 103 26 111 205 53 244 235 242 229 169 15 224 95 241 248 47 71 217 197 177 238 46 133 175 43 178 246 61 15 216 239 68 140 164 169 9 17 109 185 231 2 170 188 140 250 123 194 232 88 232 26 60 214 152 106 181 39 234 136 137 58 62 209 190 251 104 89 19 70 178 56 124 109 18 185 167 142 60 123 228 26 54 187 187 148 203 130 114 248 49 111 198 191 107 86 222 3 0 0 0 0 28 105 179 233 126 169 174 183 251 227 117 195 127 211 122 235 34 108 161 29 184 19 156 152 225 139 6 0 0 1 28 105 179 233 126 169 174 183 251 227 117 195 127 211 122 235 34 108 161 29 184 19 156 152 225 139 6 0 0 0 112 107 214 160 47 12 148 181 229 136 85 57 117 58 49 175 91 20 92 201 244 247 222 130 215 158 98 242 146 190 210 201 180 77 219 243 130 159 138 227 73 54 255 186 170 144 106 170 66 197 143 127 162 210 122 37 99 171 90 242 115 145 250 57 97 176 167 16 225 132 49 247 59 22 25 236 36 64 252 125 139 145 215 22 92 228 240 79 244 183 178 12 93 194 169 217 159 169 69 179 171 96 5 35 137 33 198 85 237 12 0 0 0 1 112 107 214 160 47 12 148 181 229 136 85 57 117 58 49 175 91 20 92 201 244 247 222 130 215 158 98 242 146 190 210 201 180 77 219 243 130 159 138 227 73 54 255 186 170 144 106 170 66 197 143 127 162 210 122 37 99 171 90 242 115 145 250 57 97 176 167 16 225 132 49 247 59 22 25 236 36 64 252 125 139 145 215 22 92 228 240 79 244 183 178 12 93 194 169 217 159 169 69 179 171 96 5 35 137 33 198 85 237 12 0 0 0 0 36 151 236 140 234 49 95 40 136 48 181 242 198 107 168 119 133 33 148 222 230 48 187 177 235 54 92 147 200 220 8 9 80 3 0 0 0 1 36 151 236 140 234 49 95 40 136 48 181 242 198 107 168 119 133 33 148 222 230 48 187 177 235 54 92 147 200 220 8 9 80 3 0 0 0 0 124 86 110 24 37 97 222 163 92 216 221 199 229 79 95 24 16 74 176 194 98 40 169 140 19 1 205 231 70 185 36 255 18 60 202 214 208 120 214 232 112 172 228 176 230 94 127 136 74 11 44 237 249 68 118 244 151 238 132 77 38 186 252 14 206 146 197 57 245 192 244 29 199 74 59 195 148 69 151 165 29 107 182 98 147 191 148 189 200 184 33 221 44 102 236 230 236 155 131 213 212 11 163 71 97 118 61 218 110 71 189 129 17 181 221 250 137 80 48 231 83 123 104 6 0 1 124 86 110 24 37 97 222 163 92 216 221 199 229 79 95 24 16 74 176 194 98 40 169 140 19 1 205 231 70 185 36 255 18 60 202 214 208 120 214 232 112 172 228 176 230 94 127 136 74 11 44 237 249 68 118 244 151 238 132 77 38 186 252 14 206 146 197 57 245 192 244 29 199 74 59 195 148 69 151 165 29 107 182 98 147 191 148 189 200 184 33 221 44 102 236 230 236 155 131 213 212 11 163 71 97 118 61 218 110 71 189 129 17 181 221 250 137 80 48 231 83 123 104 6 0 0 80 243 176 186 126 186 98 210 179 162 140 92 40 240 184 134 105 0 157 103 36 223 108 115 65 73 109 222 11 169 151 183 215 249 45 86 167 172 26 95 222 130 112 5 193 174 61 230 154 13 242 26 53 125 184 23 119 6 116 85 81 153 220 146 138 224 238 242 57 50 24 89 106 223 20 181 86 96 139 192 0 1 80 243 176 186 126 186 98 210 179 162 140 92 40 240 184 134 105 0 157 103 36 223 108 115 65 73 109 222 11 169 151 183 215 249 45 86 167 172 26 95 222 130 112 5 193 174 61 230 154 13 242 26 53 125 184 23 119 6 116 85 81 153 220 146 138 224 238 242 57 50 24 89 106 223 20 181 86 96 139 192 0 0 100 118 189 65 124 187 124 164 181 40 78 215 14 181 239 248 104 169 212 147 203 95 26 103 54 4 23 49 26 46 240 31 57 71 166 134 221 134 146 219 246 49 7 96 225 138 247 198 120 76 183 208 201 100 120 240 147 60 217 93 237 131 48 5 244 23 233 221 83 229 102 159 120 118 222 134 200 86 131 193 55 124 183 137 148 160 79 166 91 219 240 18 236 83 72 210 216 101 108 113 68 1 100 118 189 65 124 187 124 164 181 40 78 215 14 181 239 248 104 169 212 147 203 95 26 103 54 4 23 49 26 46 240 31 57 71 166 134 221 134 146 219 246 49 7 96 225 138 247 198 120 76 183 208 201 100 120 240 147 60 217 93 237 131 48 5 244 23 233 221 83 229 102 159 120 118 222 134 200 86 131 193 55 124 183 137 148 160 79 166 91 219 240 18 236 83 72 210 216 101 108 113 68 0 64 6 22 71 2 163 86 17 242 164 39 109 95 160 109 98 241 37 105 112 221 113 19 63 140 96 143 87 147 41 36 27 242 55 158 16 197 226 52 235 172 133 128 179 181 251 150 32 196 95 149 76 252 69 10 230 30 27 76 224 226 22 0 0 0 1 64 6 22 71 2 163 86 17 242 164 39 109 95 160 109 98 241 37 105 112 221 113 19 63 140 96 143 87 147 41 36 27 242 55 158 16 197 226 52 235 172 133 128 179 181 251 150 32 196 95 149 76 252 69 10 230 30 27 76 224 226 22 0 0 0 0 128 30 130 103 205 32 243 152 123 79 104 19 33 177 209 230 129 178 23 223 13 94 146 223 35 144 45 101 240 232 191 92 122 248 142 90 70 70 227 195 145 191 197 239 106 26 240 233 128 67 75 182 93 107 72 57 103 203 190 221 242 163 253 180 159 146 253 103 81 208 252 1 223 226 217 70 222 240 174 35 247 131 232 230 20 50 149 109 33 236 254 14 141 202 198 2 116 168 2 254 234 211 168 142 232 27 76 165 171 140 74 161 29 242 180 17 221 182 28 140 165 153 167 81 47 103 223 10 0 1 128 30 130 103 205 32 243 152 123 79 104 19 33 177 209 230 129 178 23 223 13 94 146 223 35 144 45 101 240 232 191 92 122 248 142 90 70 70 227 195 145 191 197 239 106 26 240 233 128 67 75 182 93 107 72 57 103 203 190 221 242 163 253 180 159 146 253 103 81 208 252 1 223 226 217 70 222 240 174 35 247 131 232 230 20 50 149 109 33 236 254 14 141 202 198 2 116 168 2 254 234 211 168 142 232 27 76 165 171 140 74 161 29 242 180 17 221 182 28 140 165 153 167 81 47 103 223 10 0 0 48 150 89 14 218 228 227 23 162 153 39 113 34 98 183 194 25 93 68 57 205 28 17 6 69 82 191 227 207 100 5 188 188 211 209 220 205 0 146 180 251 104 31 119 91 104 1 0 0 1 48 150 89 14 218 228 227 23 162 153 39 113 34 98 183 194 25 93 68 57 205 28 17 6 69 82 191 227 207 100 5 188 188 211 209 220 205 0 146 180 251 104 31 119 91 104 1 0 0 0 12 3 75 50 16 21 240 211 149 188 0 0 0 1 12 3 75 50 16 21 240 211 149 188 0 0 0 0 108 9 115 108 68 232 102 178 176 69 243 217 106 209 14 224 172 167 195 216 60 119 98 115 232 110 47 157 119 32 78 224 248 168 59 100 46 75 172 15 39 92 41 128 82 192 201 101 82 196 22 185 109 161 212 23 243 181 215 188 245 6 226 125 224 129 249 88 9 231 215 83 203 0 1 5 225 190 75 41 64 109 105 106 37 227 156 251 13 180 250 104 241 34 187 224 79 84 147 11 127 35 64 121 111 143 12 0 0 1 108 9 115 108 68 232 102 178 176 69 243 217 106 209 14 224 172 167 195 216 60 119 98 115 232 110 47 157 119 32 78 224 248 168 59 100 46 75 172 15 39 92 41 128 82 192 201 101 82 196 22 185 109 161 212 23 243 181 215 188 245 6 226 125 224 129 249 88 9 231 215 83 203 0 1 5 225 190 75 41 64 109 105 106 37 227 156 251 13 180 250 104 241 34 187 224 79 84 147 11 127 35 64 121 111 143 12 0 0 0 104 240 35 102 147 107 156 95 120 67 253 248 209 46 242 211 131 200 126 89 191 255 206 143 125 130 26 163 12 32 199 40 52 166 9 162 113 48 113 189 72 74 18 54 6 99 229 23 115 221 174 124 195 235 108 45 255 154 244 4 181 164 158 200 138 77 6 47 98 56 178 18 75 69 235 225 139 243 201 174 122 249 136 131 59 94 43 192 187 209 135 159 123 162 213 155 59 184 180 92 174 163 38 0 0 1 104 240 35 102 147 107 156 95 120 67 253 248 209 46 242 211 131 200 126 89 191 255 206 143 125 130 26 163 12 32 199 40 52 166 9 162 113 48 113 189 72 74 18 54 6 99 229 23 115 221 174 124 195 235 108 45 255 154 244 4 181 164 158 200 138 77 6 47 98 56 178 18 75 69 235 225 139 243 201 174 122 249 136 131 59 94 43 192 187 209 135 159 123 162 213 155 59 184 180 92 174 163 38 0 0 0 76 34 44 18 251 194 132 188 93 116 144 0 196 15 253 248 161 78 252 35 178 201 70 179 45 245 2 116 179 119 55 186 117 38 191 38 14 139 33 131 60 35 40 0 31 70 182 70 55 167 178 147 137 65 30 203 93 63 183 214 107 14 138 249 141 189 54 170 164 36 100 151 195 142 247 0 1 1 76 34 44 18 251 194 132 188 93 116 144 0 196 15 253 248 161 78 252 35 178 201 70 179 45 245 2 116 179 119 55 186 117 38 191 38 14 139 33 131 60 35 40 0 31 70 182 70 55 167 178 147 137 65 30 203 93 63 183 214 107 14 138 249 141 189 54 170 164 36 100 151 195 142 247 0 1 0 76 79 161 242 148 36 174 71 109 70 137 27 172 124 50 231 16 178 199 67 3 78 176 12 53 168 39 253 247 13 21 191 128 38 67 12 15 248 234 73 154 95 171 123 99 52 42 32 229 121 208 121 181 151 154 103 80 7 41 152 206 129 106 69 208 252 39 163 130 241 51 69 244 247 1 5 121 1 76 79 161 242 148 36 174 71 109 70 137 27 172 124 50 231 16 178 199 67 3 78 176 12 53 168 39 253 247 13 21 191 128 38 67 12 15 248 234 73 154 95 171 123 99 52 42 32 229 121 208 121 181 151 154 103 80 7 41 152 206 129 106 69 208 252 39 163 130 241 51 69 244 247 1 5 121 0 72 100 73 185 231 4 112 172 84 227 126 234 51 137 221 166 192 16 157 41 74 141 121 176 14 135 245 170 38 223 239 224 207 235 164 137 197 183 43 64 0 12 216 240 6 61 23 238 237 201 225 110 75 253 193 88 168 185 218 43 229 167 97 130 102 214 215 134 90 204 214 6 0 1 72 100 73 185 231 4 112 172 84 227 126 234 51 137 221 166 192 16 157 41 74 141 121 176 14 135 245 170 38 223 239 224 207 235 164 137 197 183 43 64 0 12 216 240 6 61 23 238 237 201 225 110 75 253 193 88 168 185 218 43 229 167 97 130 102 214 215 134 90 204 214 6 0 0 96 219 203 221 208 224 159 230 219 11 100 135 13 4 127 208 103 80 48 213 73 245 143 157 122 152 178 240 239 253 126 244 30 239 102 14 87 67 14 70 171 224 149 9 84 107 219 85 124 178 61 180 47 218 225 163 193 116 189 130 11 146 64 142 109 98 176 49 26 100 226 15 127 68 213 132 163 70 52 46 10 247 185 6 76 76 180 190 205 124 250 143 171 106 50 0 0 1 96 219 203 221 208 224 159 230 219 11 100 135 13 4 127 208 103 80 48 213 73 245 143 157 122 152 178 240 239 253 126 244 30 239 102 14 87 67 14 70 171 224 149 9 84 107 219 85 124 178 61 180 47 218 225 163 193 116 189 130 11 146 64 142 109 98 176 49 26 100 226 15 127 68 213 132 163 70 52 46 10 247 185 6 76 76 180 190 205 124 250 143 171 106 50 0 0 0 120 217 116 20 196 181 6 137 250 178 207 36 29 215 183 251 28 156 129 254 149 110 35 250 145 188 199 148 182 206 23 143 174 147 1 195 119 32 158 253 47 241 245 160 161 23 172 143 224 166 48 241 224 180 60 40 55 163 113 65 217 210 254 250 75 125 222 20 146 22 127 207 180 19 232 245 117 4 55 117 208 11 134 81 103 44 211 65 174 30 21 186 123 156 224 41 168 144 253 5 228 247 219 192 43 85 242 13 199 36 248 50 226 239 233 47 12 212 3 0 0 1 120 217 116 20 196 181 6 137 250 178 207 36 29 215 183 251 28 156 129 254 149 110 35 250 145 188 199 148 182 206 23 143 174 147 1 195 119 32 158 253 47 241 245 160 161 23 172 143 224 166 48 241 224 180 60 40 55 163 113 65 217 210 254 250 75 125 222 20 146 22 127 207 180 19 232 245 117 4 55 117 208 11 134 81 103 44 211 65 174 30 21 186 123 156 224 41 168 144 253 5 228 247 219 192 43 85 242 13 199 36 248 50 226 239 233 47 12 212 3 0 0 0 92 94 102 6 123 33 254 222 92 46 211 170 116 91 71 221 6 87 3 144 77 231 38 4 248 202 135 81 159 100 30 21 111 114 225 52 100 98 124 212 26 0 192 179 224 123 152 186 35 198 14 32 169 2 28 91 12 93 226 2 56 176 203 77 155 47 63 21 131 158 27 252 110 108 46 2 205 114 62 224 151 97 97 251 197 34 255 29 36 247 1 0 0 1 92 94 102 6 123 33 254 222 92 46 211 170 116 91 71 221 6 87 3 144 77 231 38 4 248 202 135 81 159 100 30 21 111 114 225 52 100 98 124 212 26 0 192 179 224 123 152 186 35 198 14 32 169 2 28 91 12 93 226 2 56 176 203 77 155 47 63 21 131 158 27 252 110 108 46 2 205 114 62 224 151 97 97 251 197 34 255 29 36 247 1 0 0 0 40 213 155 45 217 157 63 158 214 179 178 45 31 167 171 88 99 135 205 98 19 102 250 247 155 144 144 184 108 185 216 134 183 188 174 39 244 81 0 0 0 1 40 213 155 45 217 157 63 158 214 179 178 45 31 167 171 88 99 135 205 98 19 102 250 247 155 144 144 184 108 185 216 134 183 188 174 39 244 81 0 0 0 0 88 143 221 144 99 71 55 91 51 132 189 170 46 209 246 137 32 255 61 37 105 68 54 129 75 74 69 209 169 194 207 43 51 79 37 156 64 84 31 147 49 63 100 147 137 157 156 108 126 196 246 233 144 88 124 237 160 146 162 62 111 128 118 225 95 72 29 227 189 100 72 148 6 238 216 74 124 168 129 102 216 225 99 39 71 85 27 125 1 1 88 143 221 144 99 71 55 91 51 132 189 170 46 209 246 137 32 255 61 37 105 68 54 129 75 74 69 209 169 194 207 43 51 79 37 156 64 84 31 147 49 63 100 147 137 157 156 108 126 196 246 233 144 88 124 237 160 146 162 62 111 128 118 225 95 72 29 227 189 100 72 148 6 238 216 74 124 168 129 102 216 225 99 39 71 85 27 125 1 0 100 154 59 8 214 250 135 152 185 224 10 174 79 58 146 203 236 143 30 28 53 247 75 23 46 61 14 153 250 130 43 106 99 3 114 97 134 236 14 79 134 253 241 239 191 59 197 179 112 33 255 64 2 35 190 107 61 57 182 11 43 73 118 122 234 246 107 208 63 148 121 113 255 201 200 66 134 64 61 39 183 76 142 5 123 90 113 163 171 46 238 92 52 235 152 239 73 131 0 0 0 1 100 154 59 8 214 250 135 152 185 224 10 174 79 58 146 203 236 143 30 28 53 247 75 23 46 61 14 153 250 130 43 106 99 3 114 97 134 236 14 79 134 253 241 239 191 59 197 179 112 33 255 64 2 35 190 107 61 57 182 11 43 73 118 122 234 246 107 208 63 148 121 113 255 201 200 66 134 64 61 39 183 76 142 5 123 90 113 163 171 46 238 92 52 235 152 239 73 131 0 0 0 0 52 1 38 134 41 29 170 88 160 233 145 132 85 205 36 47 50 209 38 92 196 100 126 18 43 149 60 250 154 84 98 23 80 203 61 86 37 43 121 198 250 148 214 237 218 106 31 30 52 22 223 4 0 1 52 1 38 134 41 29 170 88 160 233 145 132 85 205 36 47 50 209 38 92 196 100 126 18 43 149 60 250 154 84 98 23 80 203 61 86 37 43 121 198 250 148 214 237 218 106 31 30 52 22 223 4 0 0 100 215 110 214 250 112 196 210 135 44 106 41 81 231 208 226 187 180 124 169 6 101 223 131 248 7 59 123 141 245 45 155 111 191 45 243 237 47 248 47 233 222 27 53 116 18 174 176 121 70 241 49 29 54 248 100 119 186 7 84 242 46 154 182 14 231 49 213 37 52 160 79 242 253 165 71 241 87 50 98 158 58 249 163 206 75 138 146 172 232 178 183 137 30 153 204 59 17 0 0 0 1 100 215 110 214 250 112 196 210 135 44 106 41 81 231 208 226 187 180 124 169 6 101 223 131 248 7 59 123 141 245 45 155 111 191 45 243 237 47 248 47 233 222 27 53 116 18 174 176 121 70 241 49 29 54 248 100 119 186 7 84 242 46 154 182 14 231 49 213 37 52 160 79 242 253 165 71 241 87 50 98 158 58 249 163 206 75 138 146 172 232 178 183 137 30 153 204 59 17 0 0 0 0 72 226 229 244 239 100 207 243 201 63 193 44 114 73 253 9 63 199 34 184 12 34 181 93 167 70 38 119 43 136 85 61 200 200 27 101 128 179 178 146 168 152 45 163 217 123 227 167 40 116 43 26 248 220 216 17 126 35 228 188 102 203 130 134 149 10 8 144 5 253 158 4 186 1 72 226 229 244 239 100 207 243 201 63 193 44 114 73 253 9 63 199 34 184 12 34 181 93 167 70 38 119 43 136 85 61 200 200 27 101 128 179 178 146 168 152 45 163 217 123 227 167 40 116 43 26 248 220 216 17 126 35 228 188 102 203 130 134 149 10 8 144 5 253 158 4 186 0 52 94 1 134 237 212 63 41 32 13 66 189 152 40 150 138 20 124 116 62 140 23 229 83 230 85 61 202 206 29 102 39 28 182 37 173 34 29 120 65 193 196 145 186 204 173 159 132 183 115 0 0 0 1 52 94 1 134 237 212 63 41 32 13 66 189 152 40 150 138 20 124 116 62 140 23 229 83 230 85 61 202 206 29 102 39 28 182 37 173 34 29 120 65 193 196 145 186 204 173 159 132 183 115 0 0 0 0 28 172 92 233 22 126 43 253 105 39 155 94 185 44 226 60 168 170 203 19 17 108 152 224 242 209 228 43 0 1 28 172 92 233 22 126 43 253 105 39 155 94 185 44 226 60 168 170 203 19 17 108 152 224 242 209 228 43 0 0 76 76 207 112 0 53 15 20 52 176 51 179 204 201 221 199 215 198 47 180 117 63 178 218 237 224 7 238 83 244 101 132 225 169 14 209 41 140 228 33 125 131 46 213 26 149 30 9 194 107 82 49 220 69 57 63 176 58 107 164 112 122 14 78 212 162 39 156 86 247 229 146 165 114 0 0 0 1 76 76 207 112 0 53 15 20 52 176 51 179 204 201 221 199 215 198 47 180 117 63 178 218 237 224 7 238 83 244 101 132 225 169 14 209 41 140 228 33 125 131 46 213 26 149 30 9 194 107 82 49 220 69 57 63 176 58 107 164 112 122 14 78 212 162 39 156 86 247 229 146 165 114 0 0 0 0 68 251 218 113 128 106 254 150 82 225 107 92 157 216 88 77 244 99 157 1 98 151 72 130 185 194 141 147 195 242 231 156 213 157 138 94 239 99 178 106 231 226 192 202 146 27 248 176 225 209 153 7 186 7 50 120 183 212 126 50 190 105 134 94 43 155 64 125 6 1 68 251 218 113 128 106 254 150 82 225 107 92 157 216 88 77 244 99 157 1 98 151 72 130 185 194 141 147 195 242 231 156 213 157 138 94 239 99 178 106 231 226 192 202 146 27 248 176 225 209 153 7 186 7 50 120 183 212 126 50 190 105 134 94 43 155 64 125 6 0 12 209 108 141 185 23 199 10 211 38 178 0 0 1 12 209 108 141 185 23 199 10 211 38 178 0 0 0 52 154 210 229 202 23 25 195 186 179 6 6 199 170 59 41 215 172 79 12 201 40 201 127 61 38 143 15 80 87 105 227 146 32 219 224 101 136 180 226 214 34 112 110 89 114 34 177 212 74 212 106 6 1 52 154 210 229 202 23 25 195 186 179 6 6 199 170 59 41 215 172 79 12 201 40 201 127 61 38 143 15 80 87 105 227 146 32 219 224 101 136 180 226 214 34 112 110 89 114 34 177 212 74 212 106 6 0 8 100 135 7 25 201 86 188 2 1 8 100 135 7 25 201 86 188 2 0 48 109 14 55 6 23 219 83 134 16 29 117 179 205 24 254 117 81 245 228 115 29 245 23 120 19 143 171 136 217 234 105 176 54 200 15 132 252 117 219 34 127 228 168 111 203 2 0 0 1 48 109 14 55 6 23 219 83 134 16 29 117 179 205 24 254 117 81 245 228 115 29 245 23 120 19 143 171 136 217 234 105 176 54 200 15 132 252 117 219 34 127 228 168 111 203 2 0 0 0 68 189 190 26 27 18 245 206 184 37 205 141 131 212 0 127 17 122 35 32 152 79 200 69 20 74 161 75 208 251 152 129 241 33 169 49 200 168 98 138 154 1 201 2 137 248 97 109 91 51 92 185 150 229 58 56 137 252 73 190 235 237 144 130 251 152 190 194 0 1 68 189 190 26 27 18 245 206 184 37 205 141 131 212 0 127 17 122 35 32 152 79 200 69 20 74 161 75 208 251 152 129 241 33 169 49 200 168 98 138 154 1 201 2 137 248 97 109 91 51 92 185 150 229 58 56 137 252 73 190 235 237 144 130 251 152 190 194 0 0 76 207 251 128 22 249 241 160 213 177 156 81 63 226 211 104 180 224 253 194 155 185 4 55 89 47 114 245 7 150 248 180 92 51 125 222 246 36 165 153 246 217 229 236 207 71 52 111 220 127 235 87 138 209 205 186 72 20 6 162 209 199 59 28 143 29 40 129 110 196 31 138 191 210 255 29 45 1 76 207 251 128 22 249 241 160 213 177 156 81 63 226 211 104 180 224 253 194 155 185 4 55 89 47 114 245 7 150 248 180 92 51 125 222 246 36 165 153 246 217 229 236 207 71 52 111 220 127 235 87 138 209 205 186 72 20 6 162 209 199 59 28 143 29 40 129 110 196 31 138 191 210 255 29 45 0 100 34 105 251 242 196 29 25 191 13 57 197 24 56 214 71 179 84 16 80 235 205 101 211 115 134 253 214 216 165 198 158 63 242 99 11 173 46 16 134 146 11 55 237 102 192 144 220 243 114 208 229 213 0 218 193 226 110 51 184 76 183 51 12 136 3 140 173 50 245 19 16 15 166 7 51 67 86 66 36 164 78 174 152 214 177 106 255 43 110 199 185 127 79 12 140 96 198 60 160 102 1 100 34 105 251 242 196 29 25 191 13 57 197 24 56 214 71 179 84 16 80 235 205 101 211 115 134 253 214 216 165 198 158 63 242 99 11 173 46 16 134 146 11 55 237 102 192 144 220 243 114 208 229 213 0 218 193 226 110 51 184 76 183 51 12 136 3 140 173 50 245 19 16 15 166 7 51 67 86 66 36 164 78 174 152 214 177 106 255 43 110 199 185 127 79 12 140 96 198 60 160 102 0 48 151 50 240 113 2 240 195 92 196 249 19 127 144 80 105 89 196 158 41 252 36 228 125 87 223 38 175 180 160 171 217 8 107 79 15 49 18 96 89 233 92 36 110 25 144 127 0 0 1 48 151 50 240 113 2 240 195 92 196 249 19 127 144 80 105 89 196 158 41 252 36 228 125 87 223 38 175 180 160 171 217 8 107 79 15 49 18 96 89 233 92 36 110 25 144 127 0 0 0 120 220 111 204 84 44 130 217 213 198 206 117 146 194 10 147 26 202 239 193 244 37 205 135 142 56 32 249 87 168 225 194 69 224 42 44 177 94 77 94 53 91 119 184 126 54 91 178 96 62 34 235 141 251 16 10 187 157 41 198 141 167 60 123 73 194 190 232 21 131 122 95 94 19 80 131 0 80 156 191 71 14 30 148 74 123 179 226 24 229 233 126 54 51 237 55 92 191 74 239 104 108 155 8 161 36 74 77 55 133 160 139 207 243 154 53 85 221 49 167 10 1 120 220 111 204 84 44 130 217 213 198 206 117 146 194 10 147 26 202 239 193 244 37 205 135 142 56 32 249 87 168 225 194 69 224 42 44 177 94 77 94 53 91 119 184 126 54 91 178 96 62 34 235 141 251 16 10 187 157 41 198 141 167 60 123 73 194 190 232 21 131 122 95 94 19 80 131 0 80 156 191 71 14 30 148 74 123 179 226 24 229 233 126 54 51 237 55 92 191 74 239 104 108 155 8 161 36 74 77 55 133 160 139 207 243 154 53 85 221 49 167 10 0 124 66 181 48 69 164 115 164 70 89 243 215 101 175 87 235 67 90 105 180 75 47 179 125 207 87 227 224 42 29 17 96 44 75 24 133 40 113 24 135 93 121 59 20 187 166 95 86 53 166 161 86 99 27 119 194 156 39 207 117 76 162 208 78 38 249 64 104 247 119 216 98 220 191 85 93 88 71 67 153 91 210 137 198 13 84 67 129 197 58 103 183 253 111 51 7 9 158 89 134 12 78 19 173 133 159 221 103 18 198 238 156 111 121 141 61 104 245 244 206 7 118 23 61 26 1 124 66 181 48 69 164 115 164 70 89 243 215 101 175 87 235 67 90 105 180 75 47 179 125 207 87 227 224 42 29 17 96 44 75 24 133 40 113 24 135 93 121 59 20 187 166 95 86 53 166 161 86 99 27 119 194 156 39 207 117 76 162 208 78 38 249 64 104 247 119 216 98 220 191 85 93 88 71 67 153 91 210 137 198 13 84 67 129 197 58 103 183 253 111 51 7 9 158 89 134 12 78 19 173 133 159 221 103 18 198 238 156 111 121 141 61 104 245 244 206 7 118 23 61 26 0 20 53 158 199 70 207 47 204 168 124 200 230 150 58 31 240 105 24 0 0 0 1 20 53 158 199 70 207 47 204 168 124 200 230 150 58 31 240 105 24 0 0 0 0 20 44 216 57 222 28 184 85 185 207 83 175 57 221 190 218 247 150 5 9 117 1 20 44 216 57 222 28 184 85 185 207 83 175 57 221 190 218 247 150 5 9 117 0 76 175 96 135 121 157 156 226 243 56 243 161 244 255 180 122 46 138 241 238 214 239 108 19 34 52 247 13 21 71 51 38 3 155 181 28 151 11 194 1 127 89 168 237 141 215 157 75 68 132 79 117 113 7 76 199 243 237 109 44 236 225 116 106 60 77 216 199 25 21 97 116 178 189 0 0 0 1 76 175 96 135 121 157 156 226 243 56 243 161 244 255 180 122 46 138 241 238 214 239 108 19 34 52 247 13 21 71 51 38 3 155 181 28 151 11 194 1 127 89 168 237 141 215 157 75 68 132 79 117 113 7 76 199 243 237 109 44 236 225 116 106 60 77 216 199 25 21 97 116 178 189 0 0 0 0 52 202 229 137 148 154 5 233 137 136 40 13 16 169 117 12 152 29 203 90 68 73 225 131 236 45 230 124 112 148 9 55 131 227 132 115 213 238 10 238 61 255 35 176 204 139 43 31 180 151 38 28 0 1 52 202 229 137 148 154 5 233 137 136 40 13 16 169 117 12 152 29 203 90 68 73 225 131 236 45 230 124 112 148 9 55 131 227 132 115 213 238 10 238 61 255 35 176 204 139 43 31 180 151 38 28 0 0 60 235 98 102 1 125 196 43 138 213 140 187 232 56 154 133 53 67 83 164 240 80 16 61 51 160 252 62 34 180 200 255 184 169 84 36 69 72 6 78 7 150 152 1 13 250 97 34 132 97 157 173 219 115 157 86 128 104 9 243 111 1 60 235 98 102 1 125 196 43 138 213 140 187 232 56 154 133 53 67 83 164 240 80 16 61 51 160 252 62 34 180 200 255 184 169 84 36 69 72 6 78 7 150 152 1 13 250 97 34 132 97 157 173 219 115 157 86 128 104 9 243 111 0 52 110 238 199 119 170 141 33 211 193 225 211 65 71 230 113 169 249 100 145 146 90 130 63 193 239 121 202 133 82 133 133 53 185 111 84 99 172 253 212 36 243 170 231 244 134 94 195 226 84 11 0 0 1 52 110 238 199 119 170 141 33 211 193 225 211 65 71 230 113 169 249 100 145 146 90 130 63 193 239 121 202 133 82 133 133 53 185 111 84 99 172 253 212 36 243 170 231 244 134 94 195 226 84 11 0 0 0 4 106 26 0 0 1 4 106 26 0 0 0 96 55 152 73 157 134 83 107 104 157 196 53 164 2 160 29 214 41 144 154 185 26 161 178 109 113 19 105 96 157 167 54 34 103 42 200 114 164 164 104 227 67 103 2 210 8 116 188 135 174 40 62 91 190 166 226 195 250 41 221 152 30 57 61 233 241 101 130 10 63 191 169 19 148 16 188 139 65 132 105 232 99 49 96 137 153 204 114 212 66 194 182 129 146 0 0 0 1 96 55 152 73 157 134 83 107 104 157 196 53 164 2 160 29 214 41 144 154 185 26 161 178 109 113 19 105 96 157 167 54 34 103 42 200 114 164 164 104 227 67 103 2 210 8 116 188 135 174 40 62 91 190 166 226 195 250 41 221 152 30 57 61 233 241 101 130 10 63 191 169 19 148 16 188 139 65 132 105 232 99 49 96 137 153 204 114 212 66 194 182 129 146 0 0 0 0 44 215 234 168 32 222 91 186 69 25 72 240 30 59 198 171 46 112 186 148 235 6 205 150 234 108 20 173 83 144 129 239 167 253 152 161 53 229 15 251 248 211 51 238 4 1 44 215 234 168 32 222 91 186 69 25 72 240 30 59 198 171 46 112 186 148 235 6 205 150 234 108 20 173 83 144 129 239 167 253 152 161 53 229 15 251 248 211 51 238 4 0 52 189 135 39 96 175 218 106 164 199 43 5 248 111 65 179 200 109 31 254 255 126 80 190 92 65 237 178 43 23 153 58 10 9 97 226 246 198 243 117 174 24 218 33 231 128 164 157 128 151 190 0 0 1 52 189 135 39 96 175 218 106 164 199 43 5 248 111 65 179 200 109 31 254 255 126 80 190 92 65 237 178 43 23 153 58 10 9 97 226 246 198 243 117 174 24 218 33 231 128 164 157 128 151 190 0 0 0 24 239 56 183 78 45 154 165 142 40 239 207 3 167 77 151 86 239 3 11 209 79 0 0 0 1 24 239 56 183 78 45 154 165 142 40 239 207 3 167 77 151 86 239 3 11 209 79 0 0 0 0 120 130 184 128 68 207 249 83 80 33 163 142 32 202 202 145 151 232 83 195 182 58 116 163 243 175 189 47 35 208 19 5 175 59 26 2 94 105 183 66 152 203 200 32 2 26 199 8 181 211 38 92 194 207 149 100 136 89 145 224 231 176 230 123 222 97 24 81 114 242 42 179 218 87 154 251 235 53 36 114 72 81 186 89 13 87 192 22 111 97 8 245 31 80 244 208 101 196 210 93 76 175 182 133 13 74 7 144 34 186 229 253 42 25 120 196 253 145 203 34 0 1 120 130 184 128 68 207 249 83 80 33 163 142 32 202 202 145 151 232 83 195 182 58 116 163 243 175 189 47 35 208 19 5 175 59 26 2 94 105 183 66 152 203 200 32 2 26 199 8 181 211 38 92 194 207 149 100 136 89 145 224 231 176 230 123 222 97 24 81 114 242 42 179 218 87 154 251 235 53 36 114 72 81 186 89 13 87 192 22 111 97 8 245 31 80 244 208 101 196 210 93 76 175 182 133 13 74 7 144 34 186 229 253 42 25 120 196 253 145 203 34 0 0 104 177 43 20 0 140 140 47 23 231 84 40 77 91 102 55 158 233 117 153 218 25 252 97 80 128 163 220 227 30 148 92 31 92 123 175 218 18 184 223 122 242 27 52 233 221 142 227 84 175 165 149 51 30 52 3 112 242 251 194 123 45 37 79 48 197 65 154 217 117 129 115 239 202 140 4 219 13 126 27 135 146 152 96 151 82 124 223 118 24 195 194 175 191 121 134 29 81 56 114 151 40 33 0 0 1 104 177 43 20 0 140 140 47 23 231 84 40 77 91 102 55 158 233 117 153 218 25 252 97 80 128 163 220 227 30 148 92 31 92 123 175 218 18 184 223 122 242 27 52 233 221 142 227 84 175 165 149 51 30 52 3 112 242 251 194 123 45 37 79 48 197 65 154 217 117 129 115 239 202 140 4 219 13 126 27 135 146 152 96 151 82 124 223 118 24 195 194 175 191 121 134 29 81 56 114 151 40 33 0 0 0 56 226 202 173 6 149 116 30 177 236 7 160 65 73 122 165 121 36 223 128 217 110 236 2 31 124 183 89 207 252 6 59 84 137 76 50 38 76 184 223 208 6 130 201 233 242 76 37 234 218 223 126 70 103 75 198 17 1 56 226 202 173 6 149 116 30 177 236 7 160 65 73 122 165 121 36 223 128 217 110 236 2 31 124 183 89 207 252 6 59 84 137 76 50 38 76 184 223 208 6 130 201 233 242 76 37 234 218 223 126 70 103 75 198 17 0 40 143 226 94 34 87 62 30 33 239 85 79 57 245 111 192 126 163 234 125 86 103 149 210 150 242 12 158 215 135 158 29 55 151 47 136 29 80 31 37 252 1 40 143 226 94 34 87 62 30 33 239 85 79 57 245 111 192 126 163 234 125 86 103 149 210 150 242 12 158 215 135 158 29 55 151 47 136 29 80 31 37 252 0 112 181 27 23 157 82 76 57 33 149 24 89 155 221 152 127 94 66 164 208 210 148 182 78 234 184 210 234 72 255 16 100 229 47 58 156 105 247 59 66 253 245 169 65 48 79 130 122 51 190 191 81 1 34 200 63 2 65 127 95 41 111 129 132 49 253 173 167 197 104 55 130 14 224 162 119 109 66 142 188 11 186 58 39 173 207 179 212 181 61 158 3 218 40 241 226 184 47 0 88 220 135 180 224 61 164 169 34 189 151 91 0 0 1 112 181 27 23 157 82 76 57 33 149 24 89 155 221 152 127 94 66 164 208 210 148 182 78 234 184 210 234 72 255 16 100 229 47 58 156 105 247 59 66 253 245 169 65 48 79 130 122 51 190 191 81 1 34 200 63 2 65 127 95 41 111 129 132 49 253 173 167 197 104 55 130 14 224 162 119 109 66 142 188 11 186 58 39 173 207 179 212 181 61 158 3 218 40 241 226 184 47 0 88 220 135 180 224 61 164 169 34 189 151 91 0 0 0 68 245 37 28 124 5 215 158 136 244 187 142 156 141 44 84 13 112 140 11 136 159 80 12 232 82 107 30 135 75 126 13 223 106 21 218 151 253 45 223 202 227 61 206 171 121 209 68 8 191 131 100 178 102 54 84 51 65 145 226 154 248 80 115 68 154 209 63 76 1 68 245 37 28 124 5 215 158 136 244 187 142 156 141 44 84 13 112 140 11 136 159 80 12 232 82 107 30 135 75 126 13 223 106 21 218 151 253 45 223 202 227 61 206 171 121 209 68 8 191 131 100 178 102 54 84 51 65 145 226 154 248 80 115 68 154 209 63 76 0 80 135 137 38 34 14 3 46 79 186 179 131 28 57 25 247 29 19 45 197 193 203 121 109 165 119 101 172 185 115 171 154 177 182 27 155 85 37 5 182 213 87 183 42 234 134 15 60 0 46 192 218 165 41 22 150 148 218 236 133 178 67 163 140 233 134 213 210 71 193 23 166 26 63 204 170 123 79 127 246 26 1 80 135 137 38 34 14 3 46 79 186 179 131 28 57 25 247 29 19 45 197 193 203 121 109 165 119 101 172 185 115 171 154 177 182 27 155 85 37 5 182 213 87 183 42 234 134 15 60 0 46 192 218 165 41 22 150 148 218 236 133 178 67 163 140 233 134 213 210 71 193 23 166 26 63 204 170 123 79 127 246 26 0 24 161 11 98 151 34 241 111 106 193 28 3 100 220 97 185 34 185 14 129 244 209 10 0 0 1 24 161 11 98 151 34 241 111 106 193 28 3 100 220 97 185 34 185 14 129 244 209 10 0 0 0 16 130 229 241 126 185 171 21 95 192 161 17 185 7 19 79 20 1 16 130 229 241 126 185 171 21 95 192 161 17 185 7 19 79 20 0 80 9 13 228 66 211 156 80 135 182 180 214 181 47 183 227 46 41 12 246 131 232 90 158 5 19 60 63 252 117 169 61 164 189 193 27 141 183 254 18 152 59 130 30 176 181 167 165 190 60 186 198 100 145 152 47 75 69 203 253 237 35 74 191 49 205 55 93 241 175 147 35 169 57 234 147 255 216 2 0 0 1 80 9 13 228 66 211 156 80 135 182 180 214 181 47 183 227 46 41 12 246 131 232 90 158 5 19 60 63 252 117 169 61 164 189 193 27 141 183 254 18 152 59 130 30 176 181 167 165 190 60 186 198 100 145 152 47 75 69 203 253 237 35 74 191 49 205 55 93 241 175 147 35 169 57 234 147 255 216 2 0 0 0 64 141 139 202 76 43 47 180 136 161 170 209 0 136 207 136 36 208 145 71 130 83 221 226 101 19 151 187 159 109 224 255 62 88 129 165 22 98 27 176 90 80 16 65 129 69 250 183 187 147 190 130 199 5 11 138 101 83 65 161 2 6 0 0 0 1 64 141 139 202 76 43 47 180 136 161 170 209 0 136 207 136 36 208 145 71 130 83 221 226 101 19 151 187 159 109 224 255 62 88 129 165 22 98 27 176 90 80 16 65 129 69 250 183 187 147 190 130 199 5 11 138 101 83 65 161 2 6 0 0 0 0 36 187 72 171 67 22 57 200 41 156 125 20 118 214 230 17 121 132 100 6 245 170 66 142 117 245 148 173 113 251 22 92 19 155 30 0 0 1 36 187 72 171 67 22 57 200 41 156 125 20 118 214 230 17 121 132 100 6 245 170 66 142 117 245 148 173 113 251 22 92 19 155 30 0 0 0 44 101 58 72 216 138 4 45 140 222 69 239 13 13 50 235 67 209 36 214 49 165 77 35 96 140 27 164 215 181 180 73 146 42 130 29 96 159 153 232 94 77 175 255 20 1 44 101 58 72 216 138 4 45 140 222 69 239 13 13 50 235 67 209 36 214 49 165 77 35 96 140 27 164 215 181 180 73 146 42 130 29 96 159 153 232 94 77 175 255 20 0 84 219 224 155 211 221 151 19 144 234 158 11 45 122 35 132 149 62 141 108 208 26 84 49 255 193 206 21 192 119 23 25 107 230 224 23 255 211 84 131 200 163 22 3 191 95 246 22 164 37 9 116 62 212 138 8 160 64 31 218 139 106 242 89 216 218 255 147 91 71 129 205 194 18 209 161 119 85 170 226 225 162 83 212 20 1 84 219 224 155 211 221 151 19 144 234 158 11 45 122 35 132 149 62 141 108 208 26 84 49 255 193 206 21 192 119 23 25 107 230 224 23 255 211 84 131 200 163 22 3 191 95 246 22 164 37 9 116 62 212 138 8 160 64 31 218 139 106 242 89 216 218 255 147 91 71 129 205 194 18 209 161 119 85 170 226 225 162 83 212 20 0 68 14 156 116 249 212 16 111 35 17 9 212 224 210 14 154 158 72 254 112 138 10 30 123 27 209 114 67 151 154 58 185 70 230 39 91 161 175 96 144 42 108 176 175 129 131 222 206 150 81 39 184 66 31 183 226 159 121 73 128 206 177 92 204 53 155 0 167 103 1 68 14 156 116 249 212 16 111 35 17 9 212 224 210 14 154 158 72 254 112 138 10 30 123 27 209 114 67 151 154 58 185 70 230 39 91 161 175 96 144 42 108 176 175 129 131 222 206 150 81 39 184 66 31 183 226 159 121 73 128 206 177 92 204 53 155 0 167 103 0 92 24 127 183 77 135 143 95 88 89 95 188 40 117 29 239 121 158 197 98 117 88 96 129 197 2 191 220 182 209 38 73 53 151 197 255 5 2 62 107 10 40 43 253 32 105 98 219 212 155 202 52 7 137 199 16 43 208 83 186 41 89 60 249 93 40 107 182 175 147 127 53 185 207 74 51 82 246 167 59 57 221 250 206 122 32 222 85 116 2 0 0 0 1 92 24 127 183 77 135 143 95 88 89 95 188 40 117 29 239 121 158 197 98 117 88 96 129 197 2 191 220 182 209 38 73 53 151 197 255 5 2 62 107 10 40 43 253 32 105 98 219 212 155 202 52 7 137 199 16 43 208 83 186 41 89 60 249 93 40 107 182 175 147 127 53 185 207 74 51 82 246 167 59 57 221 250 206 122 32 222 85 116 2 0 0 0 0 92 147 237 31 71 216 196 26 132 246 73 163 25 96 43 245 7 209 8 5 54 169 7 250 78 177 89 40 0 243 40 2 158 24 11 198 234 171 172 170 64 188 187 101 123 162 237 222 202 89 40 19 173 38 211 166 45 226 3 80 235 195 110 200 92 16 163 19 117 163 211 172 5 18 87 238 191 193 83 143 189 110 113 70 107 147 246 94 49 35 15 198 45 1 92 147 237 31 71 216 196 26 132 246 73 163 25 96 43 245 7 209 8 5 54 169 7 250 78 177 89 40 0 243 40 2 158 24 11 198 234 171 172 170 64 188 187 101 123 162 237 222 202 89 40 19 173 38 211 166 45 226 3 80 235 195 110 200 92 16 163 19 117 163 211 172 5 18 87 238 191 193 83 143 189 110 113 70 107 147 246 94 49 35 15 198 45 0 96 64 61 164 44 87 227 172 18 31 65 156 146 28 18 93 184 64 206 182 188 247 38 246 148 197 40 179 134 87 253 99 200 144 207 105 35 236 191 211 141 2 166 22 69 97 111 181 148 114 108 196 62 4 205 40 5 94 207 78 159 83 52 193 205 124 45 112 37 168 234 114 146 238 213 231 94 67 171 153 42 253 122 194 188 137 165 213 50 253 178 210 172 158 19 49 97 1 96 64 61 164 44 87 227 172 18 31 65 156 146 28 18 93 184 64 206 182 188 247 38 246 148 197 40 179 134 87 253 99 200 144 207 105 35 236 191 211 141 2 166 22 69 97 111 181 148 114 108 196 62 4 205 40 5 94 207 78 159 83 52 193 205 124 45 112 37 168 234 114 146 238 213 231 94 67 171 153 42 253 122 194 188 137 165 213 50 253 178 210 172 158 19 49 97 0 128 18 25 43 69 203 163 208 25 129 70 179 87 12 27 80 85 159 26 23 217 250 145 72 121 50 16 37 139 240 158 153 146 201 8 164 249 47 152 57 202 235 15 58 45 34 201 248 69 113 190 138 170 65 10 208 146 132 110 25 228 113 14 229 109 123 49 220 88 192 96 240 71 116 139 193 10 198 27 240 251 107 253 255 213 42 221 24 113 228 220 232 119 71 248 233 220 92 90 99 190 197 160 163 32 110 191 182 102 164 156 66 22 63 71 173 246 104 8 68 245 41 178 81 182 144 193 28 0 1 128 18 25 43 69 203 163 208 25 129 70 179 87 12 27 80 85 159 26 23 217 250 145 72 121 50 16 37 139 240 158 153 146 201 8 164 249 47 152 57 202 235 15 58 45 34 201 248 69 113 190 138 170 65 10 208 146 132 110 25 228 113 14 229 109 123 49 220 88 192 96 240 71 116 139 193 10 198 27 240 251 107 253 255 213 42 221 24 113 228 220 232 119 71 248 233 220 92 90 99 190 197 160 163 32 110 191 182 102 164 156 66 22 63 71 173 246 104 8 68 245 41 178 81 182 144 193 28 0 0 60 106 111 228 235 51 226 122 218 7 64 133 195 240 189 43 175 243 131 132 104 152 3 70 2 1 203 253 95 8 193 163 40 223 43 68 152 88 4 207 245 179 156 172 179 217 24 72 255 34 91 50 116 117 25 16 159 79 126 0 0 1 60 106 111 228 235 51 226 122 218 7 64 133 195 240 189 43 175 243 131 132 104 152 3 70 2 1 203 253 95 8 193 163 40 223 43 68 152 88 4 207 245 179 156 172 179 217 24 72 255 34 91 50 116 117 25 16 159 79 126 0 0 0 96 242 78 165 200 211 109 6 120 204 217 25 19 113 152 179 73 130 49 149 173 66 167 106 162 150 87 123 191 217 234 1 44 116 181 9 66 210 127 251 186 48 185 108 188 94 122 96 63 201 235 22 186 67 42 225 10 180 91 176 96 61 82 61 81 28 92 254 57 197 179 147 78 166 147 71 129 176 7 57 241 168 104 58 31 131 207 114 100 228 122 222 33 1 0 0 0 1 96 242 78 165 200 211 109 6 120 204 217 25 19 113 152 179 73 130 49 149 173 66 167 106 162 150 87 123 191 217 234 1 44 116 181 9 66 210 127 251 186 48 185 108 188 94 122 96 63 201 235 22 186 67 42 225 10 180 91 176 96 61 82 61 81 28 92 254 57 197 179 147 78 166 147 71 129 176 7 57 241 168 104 58 31 131 207 114 100 228 122 222 33 1 0 0 0 0 12 97 77 106 250 36 19 39 116 255 76 19 0 1 12 97 77 106 250 36 19 39 116 255 76 19 0 0 120 111 83 184 168 71 100 200 47 99 200 7 122 64 223 9 88 127 36 176 17 86 69 21 128 134 171 205 233 96 184 231 129 34 199 145 56 105 1 143 43 41 220 152 215 178 124 68 220 20 206 108 104 17 70 117 37 42 80 169 70 134 89 10 29 153 175 13 143 30 175 166 31 179 51 111 40 201 178 167 176 195 238 36 55 237 111 116 105 132 211 219 6 26 164 101 240 113 151 131 108 247 150 189 114 192 163 218 28 145 0 191 98 2 111 27 49 39 0 0 0 1 120 111 83 184 168 71 100 200 47 99 200 7 122 64 223 9 88 127 36 176 17 86 69 21 128 134 171 205 233 96 184 231 129 34 199 145 56 105 1 143 43 41 220 152 215 178 124 68 220 20 206 108 104 17 70 117 37 42 80 169 70 134 89 10 29 153 175 13 143 30 175 166 31 179 51 111 40 201 178 167 176 195 238 36 55 237 111 116 105 132 211 219 6 26 164 101 240 113 151 131 108 247 150 189 114 192 163 218 28 145 0 191 98 2 111 27 49 39 0 0 0 0 32 81 112 148 108 23 32 68 197 136 108 75 125 74 153 138 193 143 46 240 12 147 141 114 195 168 154 52 204 254 27 0 0 1 32 81 112 148 108 23 32 68 197 136 108 75 125 74 153 138 193 143 46 240 12 147 141 114 195 168 154 52 204 254 27 0 0 0 68 229 45 84 95 24 25 32 216 165 111 25 116 164 115 152 232 97 207 181 82 250 83 172 4 143 100 89 243 176 103 143 89 97 174 71 138 98 227 83 33 167 157 210 208 119 156 79 89 223 158 79 207 126 107 230 151 179 67 137 75 82 190 93 51 33 0 0 0 1 68 229 45 84 95 24 25 32 216 165 111 25 116 164 115 152 232 97 207 181 82 250 83 172 4 143 100 89 243 176 103 143 89 97 174 71 138 98 227 83 33 167 157 210 208 119 156 79 89 223 158 79 207 126 107 230 151 179 67 137 75 82 190 93 51 33 0 0 0 0 120 221 101 250 13 148 219 147 8 203 24 156 18 193 222 45 207 235 157 11 245 111 54 46 193 242 190 64 24 32 5 137 205 125 176 100 17 201 24 239 205 106 167 230 189 153 124 31 64 237 182 168 183 7 51 170 88 147 80 176 116 117 47 23 224 52 179 41 43 139 109 178 28 245 173 29 90 7 170 105 16 115 2 213 39 87 247 94 160 195 0 33 49 96 68 43 87 69 180 255 100 174 99 176 29 24 104 158 236 125 224 97 89 243 65 242 94 178 0 0 0 1 120 221 101 250 13 148 219 147 8 203 24 156 18 193 222 45 207 235 157 11 245 111 54 46 193 242 190 64 24 32 5 137 205 125 176 100 17 201 24 239 205 106 167 230 189 153 124 31 64 237 182 168 183 7 51 170 88 147 80 176 116 117 47 23 224 52 179 41 43 139 109 178 28 245 173 29 90 7 170 105 16 115 2 213 39 87 247 94 160 195 0 33 49 96 68 43 87 69 180 255 100 174 99 176 29 24 104 158 236 125 224 97 89 243 65 242 94 178 0 0 0 0 72 184 253 189 224 206 45 217 58 19 82 204 156 74 148 217 108 38 0 212 209 189 122 237 87 236 106 6 235 35 39 176 243 21 191 101 210 52 159 254 224 228 116 193 110 127 138 238 156 91 101 182 243 43 212 2 192 249 29 46 143 26 92 106 122 73 98 4 82 141 13 112 16 1 72 184 253 189 224 206 45 217 58 19 82 204 156 74 148 217 108 38 0 212 209 189 122 237 87 236 106 6 235 35 39 176 243 21 191 101 210 52 159 254 224 228 116 193 110 127 138 238 156 91 101 182 243 43 212 2 192 249 29 46 143 26 92 106 122 73 98 4 82 141 13 112 16 0 20 141 65 210 229 224 235 23 20 177 164 60 252 191 64 31 44 84 216 95 0 1 20 141 65 210 229 224 235 23 20 177 164 60 252 191 64 31 44 84 216 95 0 0 68 48 154 41 124 74 158 181 70 130 132 240 230 198 88 167 2 237 114 242 9 139 158 87 188 104 154 110 210 176 38 252 92 77 243 54 213 93 179 111 60 173 65 242 154 5 78 138 79 93 20 212 247 205 148 243 182 244 13 15 150 159 207 103 38 24 0 0 0 1 68 48 154 41 124 74 158 181 70 130 132 240 230 198 88 167 2 237 114 242 9 139 158 87 188 104 154 110 210 176 38 252 92 77 243 54 213 93 179 111 60 173 65 242 154 5 78 138 79 93 20 212 247 205 148 243 182 244 13 15 150 159 207 103 38 24 0 0 0 0 108 78 251 44 163 60 65 61 73 160 130 160 8 28 61 196 90 12 152 7 115 142 7 114 17 198 170 252 19 236 254 162 201 32 45 18 43 189 44 46 90 207 184 59 237 162 203 126 224 42 136 170 154 0 222 28 154 135 82 229 44 204 68 59 154 17 125 179 36 205 42 28 134 10 215 115 12 32 14 56 173 76 9 183 175 169 7 152 168 55 94 109 58 166 129 180 156 71 14 106 140 11 108 205 121 170 23 0 0 1 108 78 251 44 163 60 65 61 73 160 130 160 8 28 61 196 90 12 152 7 115 142 7 114 17 198 170 252 19 236 254 162 201 32 45 18 43 189 44 46 90 207 184 59 237 162 203 126 224 42 136 170 154 0 222 28 154 135 82 229 44 204 68 59 154 17 125 179 36 205 42 28 134 10 215 115 12 32 14 56 173 76 9 183 175 169 7 152 168 55 94 109 58 166 129 180 156 71 14 106 140 11 108 205 121 170 23 0 0 0 60 99 133 203 247 192 63 4 144 228 175 21 211 17 186 191 58 203 241 243 89 132 220 36 39 238 217 164 218 253 0 222 143 219 114 227 127 56 66 234 167 126 143 213 130 213 113 84 86 215 204 56 188 57 9 152 64 225 239 108 6 1 60 99 133 203 247 192 63 4 144 228 175 21 211 17 186 191 58 203 241 243 89 132 220 36 39 238 217 164 218 253 0 222 143 219 114 227 127 56 66 234 167 126 143 213 130 213 113 84 86 215 204 56 188 57 9 152 64 225 239 108 6 0 72 77 228 188 235 97 138 100 91 238 49 139 79 56 188 11 184 173 83 39 221 20 245 96 38 125 60 181 72 3 128 43 118 106 90 15 200 8 233 181 34 5 7 174 190 71 134 170 210 207 164 152 232 51 89 112 82 165 188 21 114 191 123 230 238 197 193 95 140 244 0 0 0 1 72 77 228 188 235 97 138 100 91 238 49 139 79 56 188 11 184 173 83 39 221 20 245 96 38 125 60 181 72 3 128 43 118 106 90 15 200 8 233 181 34 5 7 174 190 71 134 170 210 207 164 152 232 51 89 112 82 165 188 21 114 191 123 230 238 197 193 95 140 244 0 0 0 0 72 200 145 197 200 104 129 137 228 214 164 61 15 232 3 217 235 218 189 116 152 154 227 248 233 253 158 5 97 255 64 215 227 139 23 14 251 106 37 121 16 114 173 198 111 218 117 222 246 94 169 123 172 250 61 68 19 205 181 67 85 17 104 14 254 137 136 84 247 78 166 0 0 1 72 200 145 197 200 104 129 137 228 214 164 61 15 232 3 217 235 218 189 116 152 154 227 248 233 253 158 5 97 255 64 215 227 139 23 14 251 106 37 121 16 114 173 198 111 218 117 222 246 94 169 123 172 250 61 68 19 205 181 67 85 17 104 14 254 137 136 84 247 78 166 0 0 0 128 191 181 108 55 139 94 198 152 77 78 82 43 3 109 236 227 118 234 47 173 167 61 164 86 55 233 192 147 235 37 168 97 183 33 155 177 136 201 235 222 168 48 190 137 110 204 183 228 175 147 199 33 208 144 139 202 91 20 77 67 243 128 152 254 108 127 176 61 57 40 166 158 31 208 193 11 83 26 80 21 170 235 14 210 177 151 96 197 239 137 246 114 65 165 208 148 237 25 245 124 152 104 92 83 194 136 203 136 100 251 64 2 205 220 145 219 198 171 222 38 134 250 16 34 65 224 146 28 1 128 191 181 108 55 139 94 198 152 77 78 82 43 3 109 236 227 118 234 47 173 167 61 164 86 55 233 192 147 235 37 168 97 183 33 155 177 136 201 235 222 168 48 190 137 110 204 183 228 175 147 199 33 208 144 139 202 91 20 77 67 243 128 152 254 108 127 176 61 57 40 166 158 31 208 193 11 83 26 80 21 170 235 14 210 177 151 96 197 239 137 246 114 65 165 208 148 237 25 245 124 152 104 92 83 194 136 203 136 100 251 64 2 205 220 145 219 198 171 222 38 134 250 16 34 65 224 146 28 0 60 63 224 19 125 187 26 164 208 55 163 27 59 187 247 242 95 30 57 122 111 64 134 84 248 151 190 15 136 136 161 61 28 228 22 27 68 11 3 140 252 156 29 4 41 11 48 15 96 244 213 20 233 6 76 130 58 119 15 0 0 1 60 63 224 19 125 187 26 164 208 55 163 27 59 187 247 242 95 30 57 122 111 64 134 84 248 151 190 15 136 136 161 61 28 228 22 27 68 11 3 140 252 156 29 4 41 11 48 15 96 244 213 20 233 6 76 130 58 119 15 0 0 0 12 199 42 98 80 178 185 90 221 165 35 3 0 1 12 199 42 98 80 178 185 90 221 165 35 3 0 0 112 211 92 224 84 192 161 220 29 37 84 220 160 179 136 96 15 250 25 26 167 119 216 78 12 23 28 94 80 65 148 105 37 226 205 178 88 179 130 190 233 252 123 197 227 186 157 58 116 47 213 216 8 19 202 72 179 134 248 62 205 139 137 198 65 155 154 205 249 99 56 187 14 119 158 233 203 37 34 208 100 56 19 122 70 223 132 177 96 84 56 150 254 49 2 204 7 119 253 28 226 37 130 47 153 193 3 66 88 188 3 0 0 1 112 211 92 224 84 192 161 220 29 37 84 220 160 179 136 96 15 250 25 26 167 119 216 78 12 23 28 94 80 65 148 105 37 226 205 178 88 179 130 190 233 252 123 197 227 186 157 58 116 47 213 216 8 19 202 72 179 134 248 62 205 139 137 198 65 155 154 205 249 99 56 187 14 119 158 233 203 37 34 208 100 56 19 122 70 223 132 177 96 84 56 150 254 49 2 204 7 119 253 28 226 37 130 47 153 193 3 66 88 188 3 0 0 0 60 140 122 119 39 180 83 252 77 149 191 129 134 12 141 62 96 133 98 170 229 37 197 136 97 68 58 105 144 236 92 39 65 44 221 243 133 48 202 183 51 237 155 98 163 154 52 14 169 35 49 67 177 150 145 49 75 8 0 0 0 1 60 140 122 119 39 180 83 252 77 149 191 129 134 12 141 62 96 133 98 170 229 37 197 136 97 68 58 105 144 236 92 39 65 44 221 243 133 48 202 183 51 237 155 98 163 154 52 14 169 35 49 67 177 150 145 49 75 8 0 0 0 0 80 9 61 184 172 233 13 43 45 30 119 185 68 107 159 107 243 178 49 80 0 96 120 155 240 156 53 48 213 202 121 253 151 95 14 88 52 193 70 56 174 121 49 216 9 237 188 33 131 0 202 142 97 27 187 215 252 182 119 74 239 189 124 236 151 198 110 105 243 51 188 18 131 2 91 205 73 28 4 0 0 1 80 9 61 184 172 233 13 43 45 30 119 185 68 107 159 107 243 178 49 80 0 96 120 155 240 156 53 48 213 202 121 253 151 95 14 88 52 193 70 56 174 121 49 216 9 237 188 33 131 0 202 142 97 27 187 215 252 182 119 74 239 189 124 236 151 198 110 105 243 51 188 18 131 2 91 205 73 28 4 0 0 0 16 137 77 210 245 248 194 39 160 111 226 179 107 25 44 0 0 1 16 137 77 210 245 248 194 39 160 111 226 179 107 25 44 0 0 0 64 90 160 7 65 4 255 208 168 205 179 4 240 248 31 206 47 175 22 191 41 103 114 135 198 218 147 111 186 210 117 127 71 122 113 161 142 45 56 90 182 5 196 124 208 246 99 179 100 179 27 123 2 247 71 97 127 214 218 135 188 45 50 128 224 1 64 90 160 7 65 4 255 208 168 205 179 4 240 248 31 206 47 175 22 191 41 103 114 135 198 218 147 111 186 210 117 127 71 122 113 161 142 45 56 90 182 5 196 124 208 246 99 179 100 179 27 123 2 247 71 97 127 214 218 135 188 45 50 128 224 0 124 32 154 212 74 8 112 124 62 201 195 129 67 76 87 211 0 54 149 15 2 59 137 176 18 143 114 152 101 173 81 166 31 220 98 29 15 12 143 193 186 10 214 32 46 186 56 227 96 71 41 12 224 186 32 190 104 219 81 226 245 30 187 162 67 12 238 66 40 214 182 170 73 67 29 245 229 231 140 16 172 204 90 196 85 159 37 247 5 72 91 26 80 132 221 105 222 230 137 161 192 217 213 175 8 134 107 130 255 104 27 119 215 213 254 251 29 13 165 7 158 123 144 75 0 1 124 32 154 212 74 8 112 124 62 201 195 129 67 76 87 211 0 54 149 15 2 59 137 176 18 143 114 152 101 173 81 166 31 220 98 29 15 12 143 193 186 10 214 32 46 186 56 227 96 71 41 12 224 186 32 190 104 219 81 226 245 30 187 162 67 12 238 66 40 214 182 170 73 67 29 245 229 231 140 16 172 204 90 196 85 159 37 247 5 72 91 26 80 132 221 105 222 230 137 161 192 217 213 175 8 134 107 130 255 104 27 119 215 213 254 251 29 13 165 7 158 123 144 75 0 0 128 239 164 224 84 239 190 177 240 167 255 153 207 198 235 157 218 101 209 117 110 57 158 113 160 68 242 223 109 247 33 237 229 57 186 145 95 59 2 2 106 153 109 194 24 239 241 188 61 245 211 125 238 32 54 37 170 29 197 209 243 122 188 213 28 57 75 147 38 170 70 103 138 223 146 28 2 3 91 146 155 55 185 226 218 164 234 79 158 254 61 31 183 119 148 157 226 56 110 177 236 227 71 43 83 82 161 247 161 196 1 164 120 80 136 191 208 140 164 14 207 160 41 164 244 119 14 0 0 1 128 239 164 224 84 239 190 177 240 167 255 153 207 198 235 157 218 101 209 117 110 57 158 113 160 68 242 223 109 247 33 237 229 57 186 145 95 59 2 2 106 153 109 194 24 239 241 188 61 245 211 125 238 32 54 37 170 29 197 209 243 122 188 213 28 57 75 147 38 170 70 103 138 223 146 28 2 3 91 146 155 55 185 226 218 164 234 79 158 254 61 31 183 119 148 157 226 56 110 177 236 227 71 43 83 82 161 247 161 196 1 164 120 80 136 191 208 140 164 14 207 160 41 164 244 119 14 0 0 0 4 117 0 0 0 1 4 117 0 0 0 0 8 167 54 193 64 7 0 0 0 1 8 167 54 193 64 7 0 0 0 0 100 163 255 64 83 203 87 36 149 94 156 52 123 63 158 204 53 182 225 176 27 17 88 255 208 169 246 109 207 8 64 136 93 175 10 180 61 49 204 55 239 115 146 100 212 148 94 230 159 166 203 181 245 53 40 149 146 56 136 42 224 170 147 35 157 91 64 177 60 196 240 153 231 11 78 17 76 195 177 43 46 180 131 25 83 109 63 119 225 27 57 57 188 91 199 152 23 5 174 91 1 1 100 163 255 64 83 203 87 36 149 94 156 52 123 63 158 204 53 182 225 176 27 17 88 255 208 169 246 109 207 8 64 136 93 175 10 180 61 49 204 55 239 115 146 100 212 148 94 230 159 166 203 181 245 53 40 149 146 56 136 42 224 170 147 35 157 91 64 177 60 196 240 153 231 11 78 17 76 195 177 43 46 180 131 25 83 109 63 119 225 27 57 57 188 91 199 152 23 5 174 91 1 0 128 208 138 109 225 227 64 152 153 2 96 34 145 164 157 131 115 155 183 104 200 193 145 244 83 249 93 179 164 174 212 200 81 147 54 91 88 194 241 160 176 132 66 20 118 17 178 241 133 189 166 164 150 50 53 47 1 210 38 252 20 112 90 129 36 107 137 165 239 174 138 211 103 99 134 246 76 212 170 81 144 177 228 153 120 20 106 60 41 27 26 142 218 209 123 220 154 21 104 181 204 11 114 252 113 18 117 199 212 53 240 129 51 13 132 82 236 158 244 158 200 100 104 97 216 25 1 0 0 1 128 208 138 109 225 227 64 152 153 2 96 34 145 164 157 131 115 155 183 104 200 193 145 244 83 249 93 179 164 174 212 200 81 147 54 91 88 194 241 160 176 132 66 20 118 17 178 241 133 189 166 164 150 50 53 47 1 210 38 252 20 112 90 129 36 107 137 165 239 174 138 211 103 99 134 246 76 212 170 81 144 177 228 153 120 20 106 60 41 27 26 142 218 209 123 220 154 21 104 181 204 11 114 252 113 18 117 199 212 53 240 129 51 13 132 82 236 158 244 158 200 100 104 97 216 25 1 0 0 0 108 88 85 211 200 39 154 110 112 105 110 167 223 36 85 108 22 191 129 29 63 186 205 74 174 242 107 26 190 218 113 172 16 57 224 133 51 114 134 142 127 13 144 200 97 128 128 218 245 64 148 11 69 93 180 151 220 172 202 66 76 33 187 244 229 35 36 242 82 235 185 65 36 190 117 245 110 49 206 180 71 37 57 255 79 12 219 105 17 123 252 191 204 128 157 112 79 129 176 184 68 206 60 102 245 5 0 0 0 1 108 88 85 211 200 39 154 110 112 105 110 167 223 36 85 108 22 191 129 29 63 186 205 74 174 242 107 26 190 218 113 172 16 57 224 133 51 114 134 142 127 13 144 200 97 128 128 218 245 64 148 11 69 93 180 151 220 172 202 66 76 33 187 244 229 35 36 242 82 235 185 65 36 190 117 245 110 49 206 180 71 37 57 255 79 12 219 105 17 123 252 191 204 128 157 112 79 129 176 184 68 206 60 102 245 5 0 0 0 0 48 148 74 37 131 247 53 39 99 216 223 47 18 9 18 136 179 193 37 55 33 91 7 244 148 62 42 57 238 215 181 93 98 8 101 69 225 214 132 204 75 52 125 56 24 213 200 8 0 1 48 148 74 37 131 247 53 39 99 216 223 47 18 9 18 136 179 193 37 55 33 91 7 244 148 62 42 57 238 215 181 93 98 8 101 69 225 214 132 204 75 52 125 56 24 213 200 8 0 0 112 64 220 239 97 7 93 87 27 105 63 207 167 21 133 15 227 58 185 168 161 239 33 193 128 172 161 15 59 239 186 103 81 115 178 232 138 149 139 198 145 252 165 58 125 110 48 134 211 40 242 174 206 78 255 94 75 31 44 237 250 204 57 72 109 14 12 198 119 229 200 254 145 184 208 143 78 161 97 105 128 146 153 84 125 239 129 93 98 110 23 17 170 158 50 181 141 42 47 152 191 196 3 192 174 110 71 240 178 232 63 60 2 1 112 64 220 239 97 7 93 87 27 105 63 207 167 21 133 15 227 58 185 168 161 239 33 193 128 172 161 15 59 239 186 103 81 115 178 232 138 149 139 198 145 252 165 58 125 110 48 134 211 40 242 174 206 78 255 94 75 31 44 237 250 204 57 72 109 14 12 198 119 229 200 254 145 184 208 143 78 161 97 105 128 146 153 84 125 239 129 93 98 110 23 17 170 158 50 181 141 42 47 152 191 196 3 192 174 110 71 240 178 232 63 60 2 0 88 246 113 176 137 13 123 106 26 224 128 91 228 193 243 252 242 15 62 220 212 178 30 202 11 111 66 230 161 177 241 60 253 100 208 201 117 225 216 68 197 128 174 145 95 149 128 91 24 175 176 25 111 104 124 66 50 242 232 64 14 195 239 251 14 206 116 190 242 168 216 235 100 161 227 42 119 101 187 234 141 57 76 100 11 246 212 179 0 1 88 246 113 176 137 13 123 106 26 224 128 91 228 193 243 252 242 15 62 220 212 178 30 202 11 111 66 230 161 177 241 60 253 100 208 201 117 225 216 68 197 128 174 145 95 149 128 91 24 175 176 25 111 104 124 66 50 242 232 64 14 195 239 251 14 206 116 190 242 168 216 235 100 161 227 42 119 101 187 234 141 57 76 100 11 246 212 179 0 0 12 55 56 172 187 58 164 70 156 120 82 181 1 1 12 55 56 172 187 58 164 70 156 120 82 181 1 0 48 220 172 17 9 205 156 24 242 134 168 180 223 153 206 236 236 90 205 11 224 120 98 214 90 123 243 129 201 165 220 225 6 36 19 55 134 83 178 129 164 32 109 15 112 3 0 0 0 1 48 220 172 17 9 205 156 24 242 134 168 180 223 153 206 236 236 90 205 11 224 120 98 214 90 123 243 129 201 165 220 225 6 36 19 55 134 83 178 129 164 32 109 15 112 3 0 0 0 0 52 193 141 127 34 209 21 199 67 68 204 143 241 45 80 225 214 45 100 21 48 33 106 113 2 148 20 23 159 40 68 202 237 170 200 232 238 164 242 236 171 136 93 52 242 83 251 122 237 48 94 107 2 1 52 193 141 127 34 209 21 199 67 68 204 143 241 45 80 225 214 45 100 21 48 33 106 113 2 148 20 23 159 40 68 202 237 170 200 232 238 164 242 236 171 136 93 52 242 83 251 122 237 48 94 107 2 0 112 207 93 175 32 64 88 139 55 246 244 132 171 62 72 184 11 242 187 171 224 39 148 96 224 166 191 87 37 46 103 39 90 112 54 172 23 47 108 13 198 12 169 216 111 103 124 235 201 195 16 145 148 127 191 56 185 218 102 131 173 6 53 96 126 92 36 77 124 130 17 196 69 227 95 129 211 148 22 209 224 108 6 158 123 117 167 143 244 183 183 224 114 73 162 213 215 117 83 229 22 1 63 246 155 62 220 132 1 179 0 0 0 1 112 207 93 175 32 64 88 139 55 246 244 132 171 62 72 184 11 242 187 171 224 39 148 96 224 166 191 87 37 46 103 39 90 112 54 172 23 47 108 13 198 12 169 216 111 103 124 235 201 195 16 145 148 127 191 56 185 218 102 131 173 6 53 96 126 92 36 77 124 130 17 196 69 227 95 129 211 148 22 209 224 108 6 158 123 117 167 143 244 183 183 224 114 73 162 213 215 117 83 229 22 1 63 246 155 62 220 132 1 179 0 0 0 0 36 28 191 13 194 165 182 248 57 186 139 244 112 207 96 200 175 106 69 10 84 43 142 147 3 182 157 30 118 79 126 104 103 178 4 0 0 1 36 28 191 13 194 165 182 248 57 186 139 244 112 207 96 200 175 106 69 10 84 43 142 147 3 182 157 30 118 79 126 104 103 178 4 0 0 0 8 212 78 222 60 176 142 1 0 1 8 212 78 222 60 176 142 1 0 0 104 145 100 67 42 119 254 160 245 196 55 20 64 100 33 63 183 247 83 171 250 148 186 67 236 130 147 92 200 183 110 211 65 19 126 207 82 103 84 16 52 82 16 73 99 33 53 16 184 44 239 234 154 184 25 81 99 110 127 146 231 156 136 36 208 247 98 178 87 0 213 166 40 147 186 233 193 12 80 213 75 67 53 102 157 20 22 155 226 99 40 237 217 91 216 187 183 209 192 42 100 71 58 1 0 1 104 145 100 67 42 119 254 160 245 196 55 20 64 100 33 63 183 247 83 171 250 148 186 67 236 130 147 92 200 183 110 211 65 19 126 207 82 103 84 16 52 82 16 73 99 33 53 16 184 44 239 234 154 184 25 81 99 110 127 146 231 156 136 36 208 247 98 178 87 0 213 166 40 147 186 233 193 12 80 213 75 67 53 102 157 20 22 155 226 99 40 237 217 91 216 187 183 209 192 42 100 71 58 1 0 0 88 125 231 30 134 199 198 64 150 204 149 136 212 55 251 17 236 75 172 60 103 13 112 161 248 228 121 4 183 230 238 235 81 68 11 65 213 88 3 234 7 110 178 57 19 166 16 98 54 80 226 89 131 81 212 59 162 55 8 27 204 124 98 217 79 46 181 86 195 56 99 31 161 60 165 222 210 115 82 149 178 121 38 60 117 25 0 0 0 1 88 125 231 30 134 199 198 64 150 204 149 136 212 55 251 17 236 75 172 60 103 13 112 161 248 228 121 4 183 230 238 235 81 68 11 65 213 88 3 234 7 110 178 57 19 166 16 98 54 80 226 89 131 81 212 59 162 55 8 27 204 124 98 217 79 46 181 86 195 56 99 31 161 60 165 222 210 115 82 149 178 121 38 60 117 25 0 0 0 0 56 55 79 115 254 18 45 144 84 54 237 229 99 113 73 136 188 244 213 254 183 151 168 225 91 201 252 214 57 183 27 164 26 210 240 237 171 92 108 203 191 175 120 3 12 116 19 67 245 233 249 115 5 240 214 35 0 1 56 55 79 115 254 18 45 144 84 54 237 229 99 113 73 136 188 244 213 254 183 151 168 225 91 201 252 214 57 183 27 164 26 210 240 237 171 92 108 203 191 175 120 3 12 116 19 67 245 233 249 115 5 240 214 35 0 0 96 149 115 162 199 81 74 3 202 108 176 213 7 202 56 50 54 238 173 104 162 72 222 19 198 247 157 194 69 205 163 168 225 51 180 210 187 109 152 138 75 137 178 226 20 227 183 17 221 228 33 75 27 234 181 159 148 112 168 204 13 44 22 165 143 41 73 80 229 106 191 38 16 134 93 174 157 141 69 61 203 130 122 44 39 131 2 164 80 62 160 63 47 120 166 28 140 1 96 149 115 162 199 81 74 3 202 108 176 213 7 202 56 50 54 238 173 104 162 72 222 19 198 247 157 194 69 205 163 168 225 51 180 210 187 109 152 138 75 137 178 226 20 227 183 17 221 228 33 75 27 234 181 159 148 112 168 204 13 44 22 165 143 41 73 80 229 106 191 38 16 134 93 174 157 141 69 61 203 130 122 44 39 131 2 164 80 62 160 63 47 120 166 28 140 0 120 177 73 66 225 183 251 124 47 179 14 57 160 213 173 196 252 133 171 44 98 102 65 108 221 64 128 144 3 168 15 10 125 144 93 198 204 237 212 228 129 58 93 188 102 216 32 20 56 110 5 186 118 149 188 145 246 98 31 144 172 117 122 179 94 110 54 137 100 169 159 233 64 176 40 159 107 80 248 222 131 122 156 155 179 205 124 225 233 168 165 4 29 207 254 20 155 7 94 221 210 178 187 38 94 68 88 18 166 136 0 118 237 105 249 139 19 14 0 0 0 1 120 177 73 66 225 183 251 124 47 179 14 57 160 213 173 196 252 133 171 44 98 102 65 108 221 64 128 144 3 168 15 10 125 144 93 198 204 237 212 228 129 58 93 188 102 216 32 20 56 110 5 186 118 149 188 145 246 98 31 144 172 117 122 179 94 110 54 137 100 169 159 233 64 176 40 159 107 80 248 222 131 122 156 155 179 205 124 225 233 168 165 4 29 207 254 20 155 7 94 221 210 178 187 38 94 68 88 18 166 136 0 118 237 105 249 139 19 14 0 0 0 0 20 144 98 85 217 149 150 223 122 8 206 59 47 131 103 65 155 173 0 0 0 1 20 144 98 85 217 149 150 223 122 8 206 59 47 131 103 65 155 173 0 0 0 0 24 220 124 42 149 85 78 138 33 185 250 196 15 48 72 171 163 134 2 88 6 85 142 130 2 1 24 220 124 42 149 85 78 138 33 185 250 196 15 48 72 171 163 134 2 88 6 85 142 130 2 0 128 212 122 169 156 54 138 107 16 121 38 59 69 203 193 117 75 63 180 179 47 63 118 224 1 181 147 133 85 37 60 119 246 102 174 58 174 167 181 225 245 128 208 200 176 210 149 71 173 107 114 230 170 178 95 214 144 188 159 164 164 189 64 23 6 49 14 195 137 72 104 1 156 208 120 58 123 105 78 15 149 254 83 83 82 154 175 59 38 12 161 82 182 68 227 130 172 160 38 178 36 70 164 50 135 65 11 243 87 239 25 151 184 247 104 210 135 241 219 1 53 174 119 60 149 230 43 0 0 1 128 212 122 169 156 54 138 107 16 121 38 59 69 203 193 117 75 63 180 179 47 63 118 224 1 181 147 133 85 37 60 119 246 102 174 58 174 167 181 225 245 128 208 200 176 210 149 71 173 107 114 230 170 178 95 214 144 188 159 164 164 189 64 23 6 49 14 195 137 72 104 1 156 208 120 58 123 105 78 15 149 254 83 83 82 154 175 59 38 12 161 82 182 68 227 130 172 160 38 178 36 70 164 50 135 65 11 243 87 239 25 151 184 247 104 210 135 241 219 1 53 174 119 60 149 230 43 0 0 0 36 100 188 84 92 121 120 255 45 117 214 25 143 9 160 32 125 250 37 133 240 255 252 20 126 29 171 3 237 205 240 235 36 208 143 0 0 1 36 100 188 84 92 121 120 255 45 117 214 25 143 9 160 32 125 250 37 133 240 255 252 20 126 29 171 3 237 205 240 235 36 208 143 0 0 0 16 204 130 239 246 187 158 93 86 47 108 73 1 13 0 0 0 1 16 204 130 239 246 187 158 93 86 47 108 73 1 13 0 0 0 0 20 202 131 231 76 126 186 127 132 23 187 208 204 73 5 178 40 150 139 35 0 1 20 202 131 231 76 126 186 127 132 23 187 208 204 73 5 178 40 150 139 35 0 0 40 107 133 121 0 139 12 135 132 162 235 102 36 43 184 250 87 59 67 137 202 96 199 100 109 243 118 70 114 158 224 173 101 40 37 48 74 1 0 0 0 1 40 107 133 121 0 139 12 135 132 162 235 102 36 43 184 250 87 59 67 137 202 96 199 100 109 243 118 70 114 158 224 173 101 40 37 48 74 1 0 0 0 0 20 102 233 199 173 120 192 172 230 96 54 194 151 124 92 161 206 20 63 0 0 1 20 102 233 199 173 120 192 172 230 96 54 194 151 124 92 161 206 20 63 0 0 0 104 100 11 95 76 33 185 232 209 233 63 34 185 176 109 189 253 110 207 211 238 172 100 29 184 164 214 167 6 238 105 2 20 159 93 77 69 163 157 21 207 95 133 129 211 104 170 34 230 70 233 190 110 110 143 167 140 190 151 103 146 32 227 27 255 248 240 157 241 20 32 236 100 44 139 162 28 213 191 101 140 119 176 40 84 199 138 241 56 14 243 128 9 9 244 235 30 65 225 224 112 146 250 26 0 1 104 100 11 95 76 33 185 232 209 233 63 34 185 176 109 189 253 110 207 211 238 172 100 29 184 164 214 167 6 238 105 2 20 159 93 77 69 163 157 21 207 95 133 129 211 104 170 34 230 70 233 190 110 110 143 167 140 190 151 103 146 32 227 27 255 248 240 157 241 20 32 236 100 44 139 162 28 213 191 101 140 119 176 40 84 199 138 241 56 14 243 128 9 9 244 235 30 65 225 224 112 146 250 26 0 0 112 182 231 30 134 177 100 37 122 104 11 71 195 133 25 28 169 0 181 147 130 44 177 101 57 112 42 199 21 101 103 140 223 42 216 201 189 53 195 100 237 238 71 248 113 40 44 240 38 199 64 195 184 81 25 41 68 92 218 4 53 122 241 204 51 58 42 144 93 242 88 103 109 196 188 0 52 79 84 246 121 89 177 54 12 27 96 80 73 210 243 157 157 69 16 99 156 41 206 86 47 228 138 204 240 83 60 157 254 252 73 192 5 1 112 182 231 30 134 177 100 37 122 104 11 71 195 133 25 28 169 0 181 147 130 44 177 101 57 112 42 199 21 101 103 140 223 42 216 201 189 53 195 100 237 238 71 248 113 40 44 240 38 199 64 195 184 81 25 41 68 92 218 4 53 122 241 204 51 58 42 144 93 242 88 103 109 196 188 0 52 79 84 246 121 89 177 54 12 27 96 80 73 210 243 157 157 69 16 99 156 41 206 86 47 228 138 204 240 83 60 157 254 252 73 192 5 0 12 197 213 123 115 98 52 254 70 238 15 1 0 1 12 197 213 123 115 98 52 254 70 238 15 1 0 0 76 210 145 122 99 89 37 131 47 52 147 113 130 64 191 58 127 124 89 27 75 1 37 219 223 7 191 140 168 223 254 58 21 31 33 247 253 167 137 36 155 41 0 231 239 197 12 2 35 195 249 194 240 216 58 92 5 213 221 245 127 195 161 21 118 66 85 175 221 8 222 64 201 103 150 0 0 1 76 210 145 122 99 89 37 131 47 52 147 113 130 64 191 58 127 124 89 27 75 1 37 219 223 7 191 140 168 223 254 58 21 31 33 247 253 167 137 36 155 41 0 231 239 197 12 2 35 195 249 194 240 216 58 92 5 213 221 245 127 195 161 21 118 66 85 175 221 8 222 64 201 103 150 0 0 0 84 102 17 96 82 154 52 112 87 18 167 167 218 54 218 124 208 194 201 83 97 231 176 221 100 220 46 62 248 6 192 115 8 87 141 125 98 123 239 88 101 67 173 98 197 3 232 107 94 225 39 234 38 220 115 81 68 201 24 107 126 207 211 147 102 232 111 120 175 151 194 198 220 102 170 182 69 63 31 181 226 6 0 0 0 1 84 102 17 96 82 154 52 112 87 18 167 167 218 54 218 124 208 194 201 83 97 231 176 221 100 220 46 62 248 6 192 115 8 87 141 125 98 123 239 88 101 67 173 98 197 3 232 107 94 225 39 234 38 220 115 81 68 201 24 107 126 207 211 147 102 232 111 120 175 151 194 198 220 102 170 182 69 63 31 181 226 6 0 0 0 0 72 145 142 130 152 168 95 187 252 167 72 111 60 173 234 4 233 25 77 201 212 221 165 137 12 169 149 226 137 232 12 31 136 171 31 255 243 138 160 179 185 30 246 120 97 97 100 77 175 51 130 43 32 46 143 163 120 150 96 104 169 233 159 139 198 126 120 21 227 79 54 10 0 1 72 145 142 130 152 168 95 187 252 167 72 111 60 173 234 4 233 25 77 201 212 221 165 137 12 169 149 226 137 232 12 31 136 171 31 255 243 138 160 179 185 30 246 120 97 97 100 77 175 51 130 43 32 46 143 163 120 150 96 104 169 233 159 139 198 126 120 21 227 79 54 10 0 0 4 209 5 0 0 1 4 209 5 0 0 0 20 69 29 214 123 179 196 196 154 251 96 42 73 71 146 179 99 47 210 101 0 1 20 69 29 214 123 179 196 196 154 251 96 42 73 71 146 179 99 47 210 101 0 0 88 205 231 92 64 63 136 90 54 204 92 82 240 111 88 87 211 205 64 177 174 111 246 250 90 188 132 108 77 132 226 209 192 221 34 204 124 101 65 183 13 73 28 188 123 178 61 12 115 7 113 85 201 249 122 39 164 5 195 152 12 24 213 221 225 91 183 40 236 164 234 105 15 207 109 160 192 144 206 42 56 17 71 51 153 182 149 229 1 1 88 205 231 92 64 63 136 90 54 204 92 82 240 111 88 87 211 205 64 177 174 111 246 250 90 188 132 108 77 132 226 209 192 221 34 204 124 101 65 183 13 73 28 188 123 178 61 12 115 7 113 85 201 249 122 39 164 5 195 152 12 24 213 221 225 91 183 40 236 164 234 105 15 207 109 160 192 144 206 42 56 17 71 51 153 182 149 229 1 0 112 75 185 2 45 158 234 42 220 77 129 40 207 111 250 118 209 102 233 123 133 227 197 44 57 196 23 50 237 189 56 114 42 117 188 70 201 140 176 85 119 26 80 196 78 38 152 73 81 60 72 29 44 30 96 127 77 209 43 84 19 238 161 199 121 222 254 69 226 80 194 175 85 135 165 209 175 199 237 223 219 141 82 63 115 118 194 96 58 8 45 138 219 118 118 250 164 228 179 178 255 210 12 129 255 206 164 214 156 233 1 0 0 1 112 75 185 2 45 158 234 42 220 77 129 40 207 111 250 118 209 102 233 123 133 227 197 44 57 196 23 50 237 189 56 114 42 117 188 70 201 140 176 85 119 26 80 196 78 38 152 73 81 60 72 29 44 30 96 127 77 209 43 84 19 238 161 199 121 222 254 69 226 80 194 175 85 135 165 209 175 199 237 223 219 141 82 63 115 118 194 96 58 8 45 138 219 118 118 250 164 228 179 178 255 210 12 129 255 206 164 214 156 233 1 0 0 0 72 170 113 192 138 104 174 124 39 73 93 28 193 169 216 164 220 91 84 152 21 86 210 138 141 248 203 166 85 144 162 254 201 183 85 193 224 116 40 113 190 178 244 129 164 250 249 19 14 209 96 142 161 190 213 129 69 159 67 19 1 205 41 215 144 51 30 49 29 6 0 0 0 1 72 170 113 192 138 104 174 124 39 73 93 28 193 169 216 164 220 91 84 152 21 86 210 138 141 248 203 166 85 144 162 254 201 183 85 193 224 116 40 113 190 178 244 129 164 250 249 19 14 209 96 142 161 190 213 129 69 159 67 19 1 205 41 215 144 51 30 49 29 6 0 0 0 0 80 187 125 249 0 237 185 92 151 185 34 111 175 129 204 191 155 242 60 103 220 201 34 29 144 204 63 230 124 192 11 86 89 46 248 84 65 216 118 216 186 101 34 52 12 183 171 200 31 196 236 206 37 26 50 4 49 58 103 122 211 219 34 244 124 191 195 111 184 185 248 253 224 239 127 121 202 148 98 106 14 1 80 187 125 249 0 237 185 92 151 185 34 111 175 129 204 191 155 242 60 103 220 201 34 29 144 204 63 230 124 192 11 86 89 46 248 84 65 216 118 216 186 101 34 52 12 183 171 200 31 196 236 206 37 26 50 4 49 58 103 122 211 219 34 244 124 191 195 111 184 185 248 253 224 239 127 121 202 148 98 106 14 0 60 139 102 172 114 149 72 104 165 114 58 106 15 225 235 97 205 254 36 224 45 49 116 146 137 86 251 107 88 136 139 83 17 137 15 7 72 222 67 112 165 159 252 189 213 77 46 142 192 37 63 205 124 221 187 30 104 5 0 0 0 1 60 139 102 172 114 149 72 104 165 114 58 106 15 225 235 97 205 254 36 224 45 49 116 146 137 86 251 107 88 136 139 83 17 137 15 7 72 222 67 112 165 159 252 189 213 77 46 142 192 37 63 205 124 221 187 30 104 5 0 0 0 0 48 193 117 186 128 69 247 91 107 62 131 175 40 131 137 103 76 253 5 75 34 122 71 127 130 217 242 2 7 156 145 247 63 191 243 59 172 98 22 239 18 159 250 155 96 146 0 0 0 1 48 193 117 186 128 69 247 91 107 62 131 175 40 131 137 103 76 253 5 75 34 122 71 127 130 217 242 2 7 156 145 247 63 191 243 59 172 98 22 239 18 159 250 155 96 146 0 0 0 0 28 47 51 76 163 249 78 98 148 84 63 232 105 55 224 47 211 142 180 28 84 89 211 77 14 249 46 0 0 1 28 47 51 76 163 249 78 98 148 84 63 232 105 55 224 47 211 142 180 28 84 89 211 77 14 249 46 0 0 0 68 201 214 155 246 50 22 166 239 223 78 244 233 195 105 89 119 99 157 184 116 51 233 12 83 167 255 76 111 102 220 89 20 93 143 234 73 99 250 59 120 26 217 181 201 39 66 23 209 115 214 70 225 241 60 167 247 136 252 1 227 55 151 13 131 195 45 0 0 1 68 201 214 155 246 50 22 166 239 223 78 244 233 195 105 89 119 99 157 184 116 51 233 12 83 167 255 76 111 102 220 89 20 93 143 234 73 99 250 59 120 26 217 181 201 39 66 23 209 115 214 70 225 241 60 167 247 136 252 1 227 55 151 13 131 195 45 0 0 0 20 23 30 33 8 157 238 224 164 246 31 43 191 176 252 7 205 45 242 0 0 1 20 23 30 33 8 157 238 224 164 246 31 43 191 176 252 7 205 45 242 0 0 0 52 54 228 32 91 115 93 129 151 246 253 217 44 135 61 82 191 178 138 66 53 138 127 124 132 49 110 155 83 6 68 149 49 137 123 196 184 39 167 125 47 74 249 193 203 43 79 83 101 134 133 9 11 1 52 54 228 32 91 115 93 129 151 246 253 217 44 135 61 82 191 178 138 66 53 138 127 124 132 49 110 155 83 6 68 149 49 137 123 196 184 39 167 125 47 74 249 193 203 43 79 83 101 134 133 9 11 0 52 77 188 100 119 111 50 9 100 13 63 121 125 142 166 34 201 103 64 166 45 83 205 159 233 137 246 116 27 220 206 160 89 216 10 52 203 22 78 211 51 23 240 179 183 83 170 242 111 240 0 0 0 1 52 77 188 100 119 111 50 9 100 13 63 121 125 142 166 34 201 103 64 166 45 83 205 159 233 137 246 116 27 220 206 160 89 216 10 52 203 22 78 211 51 23 240 179 183 83 170 242 111 240 0 0 0 0 12 183 62 167 189 129 14 105 162 209 89 0 0 1 12 183 62 167 189 129 14 105 162 209 89 0 0 0 100 118 204 239 47 128 120 188 223 1 55 39 227 110 234 226 46 9 49 105 96 118 213 142 45 148 25 46 222 99 148 85 221 31 128 11 140 49 253 179 116 86 166 9 89 85 77 43 213 244 104 94 141 180 94 152 53 231 238 203 17 49 2 219 158 139 90 32 173 163 68 117 8 23 52 205 75 107 41 4 131 110 118 52 89 83 200 125 45 226 180 48 90 244 16 175 35 209 5 0 0 1 100 118 204 239 47 128 120 188 223 1 55 39 227 110 234 226 46 9 49 105 96 118 213 142 45 148 25 46 222 99 148 85 221 31 128 11 140 49 253 179 116 86 166 9 89 85 77 43 213 244 104 94 141 180 94 152 53 231 238 203 17 49 2 219 158 139 90 32 173 163 68 117 8 23 52 205 75 107 41 4 131 110 118 52 89 83 200 125 45 226 180 48 90 244 16 175 35 209 5 0 0 0 32 141 129 3 16 248 10 239 222 142 76 62 151 42 178 39 242 64 15 167 154 168 11 249 175 85 5 12 3 103 49 42 0 1 32 141 129 3 16 248 10 239 222 142 76 62 151 42 178 39 242 64 15 167 154 168 11 249 175 85 5 12 3 103 49 42 0 0 8 123 78 196 123 153 10 0 0 1 8 123 78 196 123 153 10 0 0 0 16 144 212 195 123 171 191 34 243 189 164 67 38 150 212 224 39 1 16 144 212 195 123 171 191 34 243 189 164 67 38 150 212 224 39 0 32 187 134 178 60 106 197 246 170 105 173 38 215 230 126 251 232 114 84 137 220 128 251 54 111 198 172 1 114 19 30 189 175 1 32 187 134 178 60 106 197 246 170 105 173 38 215 230 126 251 232 114 84 137 220 128 251 54 111 198 172 1 114 19 30 189 175 0 24 143 215 216 189 149 84 197 67 202 64 106 120 162 162 86 42 64 51 134 144 124 43 171 16 1 24 143 215 216 189 149 84 197 67 202 64 106 120 162 162 86 42 64 51 134 144 124 43 171 16 0 68 139 212 65 201 234 213 89 222 141 127 253 158 87 57 57 116 99 73 197 165 146 10 238 243 162 67 87 231 145 147 216 148 210 201 209 126 220 255 168 121 230 233 9 201 51 185 90 86 120 23 45 86 96 77 163 130 157 206 192 50 201 33 37 54 59 0 0 0 1 68 139 212 65 201 234 213 89 222 141 127 253 158 87 57 57 116 99 73 197 165 146 10 238 243 162 67 87 231 145 147 216 148 210 201 209 126 220 255 168 121 230 233 9 201 51 185 90 86 120 23 45 86 96 77 163 130 157 206 192 50 201 33 37 54 59 0 0 0 0 32 23 231 42 113 193 81 226 51 220 131 214 166 146 8 75 191 48 0 176 34 36 39 225 46 186 62 45 29 56 240 98 0 1 32 23 231 42 113 193 81 226 51 220 131 214 166 146 8 75 191 48 0 176 34 36 39 225 46 186 62 45 29 56 240 98 0 0 108 227 163 90 90 118 151 96 241 208 91 153 230 68 148 109 36 156 59 108 3 56 117 211 213 19 39 240 123 158 82 0 37 126 14 223 103 223 22 131 216 204 69 250 101 220 238 12 18 77 151 114 103 62 43 207 60 13 44 63 145 155 196 15 104 68 124 226 214 9 255 2 209 143 177 56 5 128 66 245 24 171 251 123 103 175 179 158 169 79 76 238 144 42 92 164 86 181 59 182 45 185 118 125 221 29 2 0 0 1 108 227 163 90 90 118 151 96 241 208 91 153 230 68 148 109 36 156 59 108 3 56 117 211 213 19 39 240 123 158 82 0 37 126 14 223 103 223 22 131 216 204 69 250 101 220 238 12 18 77 151 114 103 62 43 207 60 13 44 63 145 155 196 15 104 68 124 226 214 9 255 2 209 143 177 56 5 128 66 245 24 171 251 123 103 175 179 158 169 79 76 238 144 42 92 164 86 181 59 182 45 185 118 125 221 29 2 0 0 0 56 21 205 7 125 176 60 227 180 194 177 238 254 236 214 253 45 120 92 88 238 119 13 43 164 250 120 212 254 127 151 28 105 87 83 93 136 139 49 151 198 102 118 229 122 40 245 156 201 162 113 68 119 67 16 0 0 1 56 21 205 7 125 176 60 227 180 194 177 238 254 236 214 253 45 120 92 88 238 119 13 43 164 250 120 212 254 127 151 28 105 87 83 93 136 139 49 151 198 102 118 229 122 40 245 156 201 162 113 68 119 67 16 0 0 0 128 109 98 40 183 212 31 133 44 220 177 117 246 95 158 65 148 190 211 252 136 162 225 177 247 115 56 178 10 194 128 11 57 161 119 91 128 227 125 160 201 170 74 199 20 117 57 205 164 167 39 140 51 104 152 111 244 236 125 79 209 50 96 221 6 70 174 222 210 141 0 0 38 91 25 23 175 171 151 185 223 189 29 181 4 186 136 186 187 211 92 240 132 239 86 157 142 233 42 105 221 144 98 224 139 152 138 40 2 75 65 232 64 78 37 25 85 43 247 17 170 71 235 54 68 95 61 0 0 1 128 109 98 40 183 212 31 133 44 220 177 117 246 95 158 65 148 190 211 252 136 162 225 177 247 115 56 178 10 194 128 11 57 161 119 91 128 227 125 160 201 170 74 199 20 117 57 205 164 167 39 140 51 104 152 111 244 236 125 79 209 50 96 221 6 70 174 222 210 141 0 0 38 91 25 23 175 171 151 185 223 189 29 181 4 186 136 186 187 211 92 240 132 239 86 157 142 233 42 105 221 144 98 224 139 152 138 40 2 75 65 232 64 78 37 25 85 43 247 17 170 71 235 54 68 95 61 0 0 0 8 84 104 15 69 62 160 26 0 1 8 84 104 15 69 62 160 26 0 0 108 219 65 187 13 190 48 46 122 32 188 62 55 54 62 116 201 244 243 89 151 14 43 21 29 19 142 33 75 56 94 48 19 170 145 179 161 25 76 133 125 215 133 4 159 74 89 201 157 226 92 172 10 213 88 179 123 109 36 223 242 66 12 21 230 200 219 144 151 19 8 235 54 85 254 74 95 63 248 92 164 209 97 251 119 65 142 10 170 247 216 222 98 38 21 72 54 73 122 224 248 221 198 101 236 254 0 0 0 1 108 219 65 187 13 190 48 46 122 32 188 62 55 54 62 116 201 244 243 89 151 14 43 21 29 19 142 33 75 56 94 48 19 170 145 179 161 25 76 133 125 215 133 4 159 74 89 201 157 226 92 172 10 213 88 179 123 109 36 223 242 66 12 21 230 200 219 144 151 19 8 235 54 85 254 74 95 63 248 92 164 209 97 251 119 65 142 10 170 247 216 222 98 38 21 72 54 73 122 224 248 221 198 101 236 254 0 0 0 0 116 173 131 100 228 57 121 99 67 36 188 26 116 195 11 33 238 99 149 244 192 69 122 152 142 206 32 93 57 158 59 204 109 129 133 85 46 84 246 35 199 170 91 5 153 166 135 136 100 219 159 177 96 71 252 20 164 194 225 242 95 219 102 176 247 177 135 49 219 166 200 159 163 69 215 174 34 15 87 114 111 202 124 88 204 39 19 12 146 233 34 22 85 241 111 63 103 250 222 19 62 55 235 240 190 151 122 115 229 120 69 13 175 97 196 211 28 1 116 173 131 100 228 57 121 99 67 36 188 26 116 195 11 33 238 99 149 244 192 69 122 152 142 206 32 93 57 158 59 204 109 129 133 85 46 84 246 35 199 170 91 5 153 166 135 136 100 219 159 177 96 71 252 20 164 194 225 242 95 219 102 176 247 177 135 49 219 166 200 159 163 69 215 174 34 15 87 114 111 202 124 88 204 39 19 12 146 233 34 22 85 241 111 63 103 250 222 19 62 55 235 240 190 151 122 115 229 120 69 13 175 97 196 211 28 0 40 243 42 248 54 150 57 118 223 89 213 123 0 145 11 121 246 65 78 171 9 235 26 93 69 20 253 245 14 109 46 33 35 29 254 140 52 122 13 60 0 1 40 243 42 248 54 150 57 118 223 89 213 123 0 145 11 121 246 65 78 171 9 235 26 93 69 20 253 245 14 109 46 33 35 29 254 140 52 122 13 60 0 0 124 203 79 238 32 121 29 119 220 119 105 16 43 194 81 73 221 217 2 148 227 212 111 94 30 4 186 210 125 205 136 245 32 214 39 108 83 11 185 216 199 221 176 13 218 150 42 152 40 224 210 120 250 254 120 131 79 250 21 126 178 2 237 252 78 209 43 98 114 190 99 82 138 216 142 31 167 59 58 104 199 119 105 205 151 40 188 42 120 215 171 111 159 24 71 230 74 3 175 149 59 28 47 26 232 212 124 173 155 1 51 182 82 59 115 81 68 151 198 197 107 41 0 0 0 1 124 203 79 238 32 121 29 119 220 119 105 16 43 194 81 73 221 217 2 148 227 212 111 94 30 4 186 210 125 205 136 245 32 214 39 108 83 11 185 216 199 221 176 13 218 150 42 152 40 224 210 120 250 254 120 131 79 250 21 126 178 2 237 252 78 209 43 98 114 190 99 82 138 216 142 31 167 59 58 104 199 119 105 205 151 40 188 42 120 215 171 111 159 24 71 230 74 3 175 149 59 28 47 26 232 212 124 173 155 1 51 182 82 59 115 81 68 151 198 197 107 41 0 0 0 0 8 70 47 94 78 85 213 4 0 1 8 70 47 94 78 85 213 4 0 0 64 168 239 3 109 249 109 253 64 147 102 173 10 159 193 47 134 235 24 116 111 234 17 218 47 133 118 130 4 234 130 216 79 86 7 158 19 179 226 92 28 11 213 95 197 165 161 196 126 158 172 83 45 60 0 243 82 11 125 51 88 204 253 201 0 1 64 168 239 3 109 249 109 253 64 147 102 173 10 159 193 47 134 235 24 116 111 234 17 218 47 133 118 130 4 234 130 216 79 86 7 158 19 179 226 92 28 11 213 95 197 165 161 196 126 158 172 83 45 60 0 243 82 11 125 51 88 204 253 201 0 0 32 91 8 155 0 244 185 150 213 21 51 193 238 33 114 252 243 203 63 197 56 17 152 0 158 202 81 224 155 176 168 48 8 1 32 91 8 155 0 244 185 150 213 21 51 193 238 33 114 252 243 203 63 197 56 17 152 0 158 202 81 224 155 176 168 48 8 0 64 237 110 141 244 234 81 71 9 84 235 128 228 166 210 171 84 207 172 13 18 245 134 71 141 15 168 153 177 38 185 201 244 241 170 222 1 133 147 146 102 43 229 200 175 199 75 172 190 162 84 189 67 156 147 154 31 13 207 129 50 200 231 74 0 1 64 237 110 141 244 234 81 71 9 84 235 128 228 166 210 171 84 207 172 13 18 245 134 71 141 15 168 153 177 38 185 201 244 241 170 222 1 133 147 146 102 43 229 200 175 199 75 172 190 162 84 189 67 156 147 154 31 13 207 129 50 200 231 74 0 0 72 87 52 91 18 47 239 64 167 1 198 52 25 230 164 41 73 76 171 61 96 213 30 252 201 4 21 212 155 40 229 150 154 204 69 5 231 234 118 236 96 115 165 148 146 43 62 108 172 9 72 82 112 145 170 221 58 127 30 73 27 88 182 208 159 212 102 122 105 69 67 0 0 1 72 87 52 91 18 47 239 64 167 1 198 52 25 230 164 41 73 76 171 61 96 213 30 252 201 4 21 212 155 40 229 150 154 204 69 5 231 234 118 236 96 115 165 148 146 43 62 108 172 9 72 82 112 145 170 221 58 127 30 73 27 88 182 208 159 212 102 122 105 69 67 0 0 0 44 64 172 114 48 214 193 164 216 67 60 29 158 200 157 119 130 148 115 28 173 33 19 100 127 6 67 27 159 246 211 0 250 103 226 195 106 155 248 97 202 123 209 221 13 1 44 64 172 114 48 214 193 164 216 67 60 29 158 200 157 119 130 148 115 28 173 33 19 100 127 6 67 27 159 246 211 0 250 103 226 195 106 155 248 97 202 123 209 221 13 0 116 81 252 110 197 13 166 231 72 130 41 106 65 232 254 107 124 243 255 107 207 47 194 183 40 150 50 4 210 204 224 43 196 247 122 120 215 166 135 245 209 137 61 188 138 187 74 103 184 183 141 129 116 149 165 53 145 106 74 23 238 142 63 216 57 144 68 13 165 129 66 25 38 206 230 110 91 93 226 41 154 75 235 92 163 186 140 230 191 218 201 127 59 108 139 3 252 44 100 3 234 46 162 34 110 218 167 38 61 218 67 214 231 20 40 0 0 1 116 81 252 110 197 13 166 231 72 130 41 106 65 232 254 107 124 243 255 107 207 47 194 183 40 150 50 4 210 204 224 43 196 247 122 120 215 166 135 245 209 137 61 188 138 187 74 103 184 183 141 129 116 149 165 53 145 106 74 23 238 142 63 216 57 144 68 13 165 129 66 25 38 206 230 110 91 93 226 41 154 75 235 92 163 186 140 230 191 218 201 127 59 108 139 3 252 44 100 3 234 46 162 34 110 218 167 38 61 218 67 214 231 20 40 0 0 0 116 243 247 18 11 29 244 71 100 171 9 7 235 135 165 185 174 82 125 144 46 101 141 39 25 219 161 166 142 138 73 193 151 231 217 184 5 47 234 106 36 39 20 133 77 81 241 34 12 59 55 212 158 163 139 77 54 232 111 133 109 11 226 82 170 77 232 17 218 114 50 113 152 83 202 219 168 218 132 34 241 173 58 247 200 6 151 173 6 185 4 118 166 131 92 255 162 247 111 148 166 68 56 169 253 254 48 168 30 109 251 179 213 140 46 219 3 1 116 243 247 18 11 29 244 71 100 171 9 7 235 135 165 185 174 82 125 144 46 101 141 39 25 219 161 166 142 138 73 193 151 231 217 184 5 47 234 106 36 39 20 133 77 81 241 34 12 59 55 212 158 163 139 77 54 232 111 133 109 11 226 82 170 77 232 17 218 114 50 113 152 83 202 219 168 218 132 34 241 173 58 247 200 6 151 173 6 185 4 118 166 131 92 255 162 247 111 148 166 68 56 169 253 254 48 168 30 109 251 179 213 140 46 219 3 0 48 170 134 196 251 187 25 104 34 95 69 85 184 199 0 89 253 150 101 212 7 202 243 18 178 248 98 105 134 18 215 189 22 99 238 235 78 124 3 142 134 188 8 188 178 2 0 0 0 1 48 170 134 196 251 187 25 104 34 95 69 85 184 199 0 89 253 150 101 212 7 202 243 18 178 248 98 105 134 18 215 189 22 99 238 235 78 124 3 142 134 188 8 188 178 2 0 0 0 0 48 200 105 57 90 124 53 229 14 158 143 66 34 150 228 210 143 188 213 175 175 21 92 123 213 52 223 97 128 64 234 169 31 165 1 230 126 33 17 32 28 25 238 131 159 125 84 120 8 1 48 200 105 57 90 124 53 229 14 158 143 66 34 150 228 210 143 188 213 175 175 21 92 123 213 52 223 97 128 64 234 169 31 165 1 230 126 33 17 32 28 25 238 131 159 125 84 120 8 0 8 236 26 245 49 19 0 0 0 1 8 236 26 245 49 19 0 0 0 0 16 134 207 199 26 175 188 103 160 76 140 48 55 30 189 7 0 1 16 134 207 199 26 175 188 103 160 76 140 48 55 30 189 7 0 0 24 7 216 8 30 195 251 90 24 198 179 171 59 27 243 102 163 205 126 247 84 4 0 0 0 1 24 7 216 8 30 195 251 90 24 198 179 171 59 27 243 102 163 205 126 247 84 4 0 0 0 0 100 89 190 73 217 127 252 160 134 16 114 94 182 255 223 176 58 217 71 107 33 21 118 140 226 166 128 254 219 248 19 33 93 9 225 89 44 103 188 91 203 146 155 17 20 40 125 153 23 87 125 86 166 25 181 17 220 165 143 13 245 94 144 64 231 41 17 165 224 79 44 34 246 169 187 130 155 57 121 213 161 21 178 163 44 75 169 37 6 67 200 63 171 50 214 213 230 10 148 179 25 1 100 89 190 73 217 127 252 160 134 16 114 94 182 255 223 176 58 217 71 107 33 21 118 140 226 166 128 254 219 248 19 33 93 9 225 89 44 103 188 91 203 146 155 17 20 40 125 153 23 87 125 86 166 25 181 17 220 165 143 13 245 94 144 64 231 41 17 165 224 79 44 34 246 169 187 130 155 57 121 213 161 21 178 163 44 75 169 37 6 67 200 63 171 50 214 213 230 10 148 179 25 0 116 239 141 241 165 45 224 229 17 155 67 37 181 127 150 115 133 137 72 239 12 3 103 142 204 53 108 13 4 11 96 213 15 192 155 67 147 30 66 19 222 160 17 202 156 77 143 151 241 100 236 128 33 207 105 116 196 68 142 109 237 94 29 86 196 190 96 158 51 78 107 53 2 158 62 195 101 125 181 245 191 185 105 37 77 113 109 85 110 93 152 188 115 136 136 93 10 235 225 51 77 110 7 74 32 118 44 157 117 193 127 80 54 2 0 0 0 1 116 239 141 241 165 45 224 229 17 155 67 37 181 127 150 115 133 137 72 239 12 3 103 142 204 53 108 13 4 11 96 213 15 192 155 67 147 30 66 19 222 160 17 202 156 77 143 151 241 100 236 128 33 207 105 116 196 68 142 109 237 94 29 86 196 190 96 158 51 78 107 53 2 158 62 195 101 125 181 245 191 185 105 37 77 113 109 85 110 93 152 188 115 136 136 93 10 235 225 51 77 110 7 74 32 118 44 157 117 193 127 80 54 2 0 0 0 0 52 161 103 132 41 228 199 245 93 101 166 142 168 205 96 95 52 143 127 100 173 175 132 102 181 237 4 42 52 30 10 219 202 27 68 79 23 201 116 89 53 50 85 239 183 254 11 165 100 129 247 0 0 1 52 161 103 132 41 228 199 245 93 101 166 142 168 205 96 95 52 143 127 100 173 175 132 102 181 237 4 42 52 30 10 219 202 27 68 79 23 201 116 89 53 50 85 239 183 254 11 165 100 129 247 0 0 0 28 255 251 221 115 146 46 163 229 176 14 203 138 27 28 41 62 22 109 49 16 185 119 54 172 191 85 184 0 1 28 255 251 221 115 146 46 163 229 176 14 203 138 27 28 41 62 22 109 49 16 185 119 54 172 191 85 184 0 0 32 247 33 196 253 43 205 187 127 110 212 213 12 214 143 22 252 209 96 90 89 50 103 47 68 146 216 72 215 61 226 134 3 1 32 247 33 196 253 43 205 187 127 110 212 213 12 214 143 22 252 209 96 90 89 50 103 47 68 146 216 72 215 61 226 134 3 0 36 59 97 19 31 78 83 69 133 60 42 103 67 71 156 83 145 176 67 103 93 114 176 15 117 43 90 82 152 45 121 12 17 76 244 53 1 1 36 59 97 19 31 78 83 69 133 60 42 103 67 71 156 83 145 176 67 103 93 114 176 15 117 43 90 82 152 45 121 12 17 76 244 53 1 0 52 219 241 133 51 75 86 155 36 83 56 69 111 93 54 193 19 54 88 242 30 144 132 66 61 131 189 217 126 87 64 134 162 139 199 3 85 234 160 230 114 164 25 154 94 87 76 241 251 243 147 109 83 1 52 219 241 133 51 75 86 155 36 83 56 69 111 93 54 193 19 54 88 242 30 144 132 66 61 131 189 217 126 87 64 134 162 139 199 3 85 234 160 230 114 164 25 154 94 87 76 241 251 243 147 109 83 0 64 43 137 16 132 202 104 91 201 107 180 196 200 93 138 129 13 78 33 73 134 236 116 150 83 184 197 132 23 82 3 247 20 140 181 22 152 27 60 63 98 254 172 152 20 58 101 176 236 139 225 217 61 37 39 22 240 147 101 158 189 117 172 129 3 1 64 43 137 16 132 202 104 91 201 107 180 196 200 93 138 129 13 78 33 73 134 236 116 150 83 184 197 132 23 82 3 247 20 140 181 22 152 27 60 63 98 254 172 152 20 58 101 176 236 139 225 217 61 37 39 22 240 147 101 158 189 117 172 129 3 0 16 174 250 80 27 225 76 117 105 139 6 48 23 21 0 0 0 1 16 174 250 80 27 225 76 117 105 139 6 48 23 21 0 0 0 0 32 79 208 51 133 78 86 8 203 246 180 251 28 21 185 125 159 144 112 64 104 31 37 123 126 115 170 223 1 66 0 0 0 1 32 79 208 51 133 78 86 8 203 246 180 251 28 21 185 125 159 144 112 64 104 31 37 123 126 115 170 223 1 66 0 0 0 0 20 59 170 196 192 162 161 183 242 120 40 171 157 254 236 242 64 223 1 0 0 1 20 59 170 196 192 162 161 183 242 120 40 171 157 254 236 242 64 223 1 0 0 0 64 158 138 13 99 212 72 79 220 230 16 119 150 64 148 121 100 5 104 182 189 57 158 100 143 129 122 146 11 169 192 52 74 169 74 4 0 229 160 168 226 62 202 182 250 171 51 251 90 159 122 13 111 16 28 141 139 1 41 229 97 17 73 120 0 1 64 158 138 13 99 212 72 79 220 230 16 119 150 64 148 121 100 5 104 182 189 57 158 100 143 129 122 146 11 169 192 52 74 169 74 4 0 229 160 168 226 62 202 182 250 171 51 251 90 159 122 13 111 16 28 141 139 1 41 229 97 17 73 120 0 0 124 54 211 84 85 147 162 152 160 127 96 156 128 144 183 140 26 170 242 255 112 211 16 24 233 93 177 189 62 26 230 8 18 162 102 53 79 255 93 127 37 173 116 119 61 21 221 30 71 51 18 217 197 225 89 208 228 54 16 14 158 40 254 222 6 144 144 95 30 116 51 208 187 221 207 73 40 215 178 180 184 67 243 230 235 85 174 4 118 231 32 148 73 211 37 140 151 196 184 12 41 14 98 78 190 103 107 141 66 52 100 222 58 141 135 84 85 90 76 97 21 18 0 0 0 1 124 54 211 84 85 147 162 152 160 127 96 156 128 144 183 140 26 170 242 255 112 211 16 24 233 93 177 189 62 26 230 8 18 162 102 53 79 255 93 127 37 173 116 119 61 21 221 30 71 51 18 217 197 225 89 208 228 54 16 14 158 40 254 222 6 144 144 95 30 116 51 208 187 221 207 73 40 215 178 180 184 67 243 230 235 85 174 4 118 231 32 148 73 211 37 140 151 196 184 12 41 14 98 78 190 103 107 141 66 52 100 222 58 141 135 84 85 90 76 97 21 18 0 0 0 0 124 94 236 109 194 205 86 41 192 155 21 79 52 203 207 37 42 40 126 224 32 228 152 22 204 190 205 68 99 253 159 127 249 241 8 5 27 151 203 115 75 236 216 195 28 184 201 166 85 152 106 8 201 248 148 93 54 156 87 135 56 251 121 202 96 173 198 190 134 110 223 180 127 230 136 159 180 9 44 207 255 43 80 213 238 43 117 135 78 121 149 22 24 198 179 157 59 238 245 168 85 45 36 70 88 161 109 52 49 133 96 74 209 106 244 99 200 247 185 127 197 240 97 2 0 1 124 94 236 109 194 205 86 41 192 155 21 79 52 203 207 37 42 40 126 224 32 228 152 22 204 190 205 68 99 253 159 127 249 241 8 5 27 151 203 115 75 236 216 195 28 184 201 166 85 152 106 8 201 248 148 93 54 156 87 135 56 251 121 202 96 173 198 190 134 110 223 180 127 230 136 159 180 9 44 207 255 43 80 213 238 43 117 135 78 121 149 22 24 198 179 157 59 238 245 168 85 45 36 70 88 161 109 52 49 133 96 74 209 106 244 99 200 247 185 127 197 240 97 2 0 0 124 14 202 151 114 198 177 79 116 173 42 198 179 37 189 161 34 90 109 151 134 15 53 12 218 203 186 227 104 124 114 146 230 193 76 40 120 134 85 85 179 206 122 201 169 68 255 199 58 19 184 117 183 58 105 131 49 120 224 207 113 249 249 52 245 213 117 133 240 15 235 167 111 253 250 71 98 115 41 241 120 23 72 80 150 152 182 145 130 4 69 103 219 252 177 172 87 76 137 67 198 105 98 131 12 8 87 204 104 138 42 101 155 161 225 254 112 96 164 148 113 139 130 6 0 1 124 14 202 151 114 198 177 79 116 173 42 198 179 37 189 161 34 90 109 151 134 15 53 12 218 203 186 227 104 124 114 146 230 193 76 40 120 134 85 85 179 206 122 201 169 68 255 199 58 19 184 117 183 58 105 131 49 120 224 207 113 249 249 52 245 213 117 133 240 15 235 167 111 253 250 71 98 115 41 241 120 23 72 80 150 152 182 145 130 4 69 103 219 252 177 172 87 76 137 67 198 105 98 131 12 8 87 204 104 138 42 101 155 161 225 254 112 96 164 148 113 139 130 6 0 0 84 222 236 36 90 191 241 183 85 110 108 88 240 111 232 78 103 27 70 144 224 71 76 230 109 75 89 21 251 126 142 18 121 105 170 253 72 64 73 2 238 74 157 109 22 80 12 236 206 45 90 23 64 23 14 190 116 110 37 81 228 238 254 84 202 140 111 243 20 88 246 161 13 249 31 162 155 221 13 64 215 171 161 29 14 1 84 222 236 36 90 191 241 183 85 110 108 88 240 111 232 78 103 27 70 144 224 71 76 230 109 75 89 21 251 126 142 18 121 105 170 253 72 64 73 2 238 74 157 109 22 80 12 236 206 45 90 23 64 23 14 190 116 110 37 81 228 238 254 84 202 140 111 243 20 88 246 161 13 249 31 162 155 221 13 64 215 171 161 29 14 0 76 69 2 96 19 137 241 75 149 54 240 119 4 53 193 106 38 190 90 56 134 205 201 129 251 62 99 112 152 118 97 184 216 164 110 226 53 156 74 62 42 32 199 114 107 27 36 188 14 59 253 131 97 129 87 74 48 164 130 23 116 217 134 169 80 29 241 90 26 86 7 137 144 117 50 0 0 1 76 69 2 96 19 137 241 75 149 54 240 119 4 53 193 106 38 190 90 56 134 205 201 129 251 62 99 112 152 118 97 184 216 164 110 226 53 156 74 62 42 32 199 114 107 27 36 188 14 59 253 131 97 129 87 74 48 164 130 23 116 217 134 169 80 29 241 90 26 86 7 137 144 117 50 0 0 0 100 60 2 183 139 129 88 99 244 170 89 0 177 28 40 203 18 239 70 82 138 113 96 148 242 156 70 22 152 221 31 149 38 127 107 45 254 28 166 210 227 215 191 161 12 230 95 230 64 209 16 253 82 63 212 15 119 73 178 25 88 182 249 227 148 207 62 209 192 72 37 56 62 203 161 110 196 250 228 14 19 181 87 35 11 15 255 155 107 206 61 54 223 191 92 51 188 42 0 0 0 1 100 60 2 183 139 129 88 99 244 170 89 0 177 28 40 203 18 239 70 82 138 113 96 148 242 156 70 22 152 221 31 149 38 127 107 45 254 28 166 210 227 215 191 161 12 230 95 230 64 209 16 253 82 63 212 15 119 73 178 25 88 182 249 227 148 207 62 209 192 72 37 56 62 203 161 110 196 250 228 14 19 181 87 35 11 15 255 155 107 206 61 54 223 191 92 51 188 42 0 0 0 0 8 161 145 84 161 51 102 34 163 1 8 161 145 84 161 51 102 34 163 0 56 160 51 60 244 243 228 49 105 198 184 5 130 241 114 177 248 245 101 241 141 249 87 160 252 119 173 82 11 10 104 49 95 69 254 101 134 79 46 129 192 118 64 243 147 3 51 61 70 176 159 167 235 86 145 44 55 1 56 160 51 60 244 243 228 49 105 198 184 5 130 241 114 177 248 245 101 241 141 249 87 160 252 119 173 82 11 10 104 49 95 69 254 101 134 79 46 129 192 118 64 243 147 3 51 61 70 176 159 167 235 86 145 44 55 0 32 180 181 48 71 211 35 86 174 153 231 246 211 154 205 97 74 237 0 199 183 8 131 127 228 121 26 229 18 39 183 3 0 1 32 180 181 48 71 211 35 86 174 153 231 246 211 154 205 97 74 237 0 199 183 8 131 127 228 121 26 229 18 39 183 3 0 0 72 235 208 249 69 198 27 28 175 48 201 165 210 55 86 150 90 198 36 230 165 54 20 213 19 85 189 110 233 79 254 190 153 19 131 115 116 152 36 49 241 5 53 57 191 108 36 43 245 224 105 242 219 194 163 217 52 122 224 205 161 21 47 142 100 254 80 178 115 134 181 158 0 1 72 235 208 249 69 198 27 28 175 48 201 165 210 55 86 150 90 198 36 230 165 54 20 213 19 85 189 110 233 79 254 190 153 19 131 115 116 152 36 49 241 5 53 57 191 108 36 43 245 224 105 242 219 194 163 217 52 122 224 205 161 21 47 142 100 254 80 178 115 134 181 158 0 0 48 24 216 31 31 121 32 6 35 230 132 116 1 93 231 239 114 29 239 68 226 187 220 209 191 89 111 162 77 90 222 196 5 16 190 98 88 179 228 211 83 191 201 156 101 38 6 0 0 1 48 24 216 31 31 121 32 6 35 230 132 116 1 93 231 239 114 29 239 68 226 187 220 209 191 89 111 162 77 90 222 196 5 16 190 98 88 179 228 211 83 191 201 156 101 38 6 0 0 0 8 120 9 155 198 227 119 139 0 1 8 120 9 155 198 227 119 139 0 0 108 67 233 173 239 2 147 31 164 67 28 157 14 181 143 121 205 94 47 18 212 89 86 192 240 97 248 17 119 22 163 109 127 226 138 109 233 234 45 230 169 33 186 2 126 255 20 183 106 178 83 140 195 205 223 184 177 109 237 177 147 165 5 252 192 192 124 61 142 140 69 133 239 214 170 94 162 222 231 95 68 100 116 183 60 109 34 233 105 48 238 47 153 181 219 232 176 110 180 54 190 173 160 203 79 0 3 0 0 1 108 67 233 173 239 2 147 31 164 67 28 157 14 181 143 121 205 94 47 18 212 89 86 192 240 97 248 17 119 22 163 109 127 226 138 109 233 234 45 230 169 33 186 2 126 255 20 183 106 178 83 140 195 205 223 184 177 109 237 177 147 165 5 252 192 192 124 61 142 140 69 133 239 214 170 94 162 222 231 95 68 100 116 183 60 109 34 233 105 48 238 47 153 181 219 232 176 110 180 54 190 173 160 203 79 0 3 0 0 0 44 113 179 208 89 229 97 41 83 34 181 248 69 45 117 67 182 227 176 114 161 166 167 142 142 47 25 191 4 182 213 77 37 61 119 165 249 59 176 118 228 161 1 0 0 1 44 113 179 208 89 229 97 41 83 34 181 248 69 45 117 67 182 227 176 114 161 166 167 142 142 47 25 191 4 182 213 77 37 61 119 165 249 59 176 118 228 161 1 0 0 0 4 205 230 1 0 1 4 205 230 1 0 0 52 77 166 237 60 159 113 214 225 225 196 126 16 105 189 104 42 252 167 15 186 63 111 11 23 250 53 128 208 225 81 238 136 75 225 4 178 227 11 107 243 121 83 238 164 31 105 2 177 163 135 105 60 1 52 77 166 237 60 159 113 214 225 225 196 126 16 105 189 104 42 252 167 15 186 63 111 11 23 250 53 128 208 225 81 238 136 75 225 4 178 227 11 107 243 121 83 238 164 31 105 2 177 163 135 105 60 0 8 7 177 200 9 87 48 0 0 1 8 7 177 200 9 87 48 0 0 0 120 95 0 17 198 196 3 168 29 232 224 109 67 23 135 235 50 52 214 192 80 146 255 65 119 139 83 153 210 130 123 45 5 148 58 19 42 240 226 164 159 61 91 236 215 59 183 160 255 155 79 104 47 81 69 79 205 46 250 193 179 14 221 169 205 128 237 109 128 36 7 21 98 118 172 243 166 158 151 127 232 156 225 22 108 82 127 8 238 182 238 200 235 199 229 34 2 128 5 166 74 164 159 85 41 32 254 62 100 188 86 40 138 142 240 122 56 2 0 0 0 1 120 95 0 17 198 196 3 168 29 232 224 109 67 23 135 235 50 52 214 192 80 146 255 65 119 139 83 153 210 130 123 45 5 148 58 19 42 240 226 164 159 61 91 236 215 59 183 160 255 155 79 104 47 81 69 79 205 46 250 193 179 14 221 169 205 128 237 109 128 36 7 21 98 118 172 243 166 158 151 127 232 156 225 22 108 82 127 8 238 182 238 200 235 199 229 34 2 128 5 166 74 164 159 85 41 32 254 62 100 188 86 40 138 142 240 122 56 2 0 0 0 0 24 52 171 120 247 245 238 38 189 200 10 21 246 79 73 111 224 107 101 199 80 238 49 0 0 1 24 52 171 120 247 245 238 38 189 200 10 21 246 79 73 111 224 107 101 199 80 238 49 0 0 0 104 57 158 161 115 39 26 101 249 18 39 40 1 93 199 25 128 79 244 212 44 60 231 196 18 52 157 210 236 197 32 195 30 224 115 47 62 183 108 27 196 234 161 196 225 103 21 202 150 178 236 60 175 217 66 254 151 71 126 230 34 45 143 24 111 88 165 51 57 138 241 251 139 79 160 192 71 182 96 28 48 193 182 46 229 150 230 46 13 249 26 35 98 104 138 125 230 36 173 131 138 29 153 37 15 1 104 57 158 161 115 39 26 101 249 18 39 40 1 93 199 25 128 79 244 212 44 60 231 196 18 52 157 210 236 197 32 195 30 224 115 47 62 183 108 27 196 234 161 196 225 103 21 202 150 178 236 60 175 217 66 254 151 71 126 230 34 45 143 24 111 88 165 51 57 138 241 251 139 79 160 192 71 182 96 28 48 193 182 46 229 150 230 46 13 249 26 35 98 104 138 125 230 36 173 131 138 29 153 37 15 0 84 201 67 176 170 12 214 223 113 151 240 121 127 115 67 246 173 119 207 202 219 102 176 87 124 64 46 160 253 231 56 131 2 167 194 119 80 227 152 34 209 118 189 9 5 175 115 207 20 15 201 85 82 139 3 122 200 232 151 18 106 251 0 202 255 146 176 226 219 69 250 238 111 233 251 3 57 189 253 30 108 224 253 116 0 1 84 201 67 176 170 12 214 223 113 151 240 121 127 115 67 246 173 119 207 202 219 102 176 87 124 64 46 160 253 231 56 131 2 167 194 119 80 227 152 34 209 118 189 9 5 175 115 207 20 15 201 85 82 139 3 122 200 232 151 18 106 251 0 202 255 146 176 226 219 69 250 238 111 233 251 3 57 189 253 30 108 224 253 116 0 0 36 216 207 22 26 220 111 75 102 80 113 167 57 132 171 148 110 197 33 103 213 177 123 206 218 242 178 9 228 125 117 218 221 76 2 0 0 1 36 216 207 22 26 220 111 75 102 80 113 167 57 132 171 148 110 197 33 103 213 177 123 206 218 242 178 9 228 125 117 218 221 76 2 0 0 0 96 209 38 226 122 66 37 110 32 0 244 215 135 36 169 50 93 130 191 147 142 209 240 154 14 39 115 83 99 104 166 126 171 89 95 133 0 168 235 114 121 112 237 201 242 105 25 68 88 53 63 4 70 8 16 14 139 78 16 28 216 131 240 108 136 129 244 99 100 247 236 64 222 120 6 100 242 25 164 196 251 190 21 202 16 243 72 23 21 27 253 232 129 65 12 0 0 1 96 209 38 226 122 66 37 110 32 0 244 215 135 36 169 50 93 130 191 147 142 209 240 154 14 39 115 83 99 104 166 126 171 89 95 133 0 168 235 114 121 112 237 201 242 105 25 68 88 53 63 4 70 8 16 14 139 78 16 28 216 131 240 108 136 129 244 99 100 247 236 64 222 120 6 100 242 25 164 196 251 190 21 202 16 243 72 23 21 27 253 232 129 65 12 0 0 0 20 137 7 71 104 123 1 230 162 84 85 84 78 76 1 146 149 3 0 0 0 1 20 137 7 71 104 123 1 230 162 84 85 84 78 76 1 146 149 3 0 0 0 0 84 17 135 189 91 189 22 119 161 7 236 246 162 42 137 207 149 58 10 147 68 241 83 242 92 176 9 168 195 250 98 204 19 131 82 40 2 115 30 134 119 85 234 171 51 248 6 232 13 126 100 100 208 191 92 68 52 56 79 102 83 41 100 249 214 204 9 147 69 246 254 24 120 21 121 111 194 137 125 190 39 201 58 31 0 1 84 17 135 189 91 189 22 119 161 7 236 246 162 42 137 207 149 58 10 147 68 241 83 242 92 176 9 168 195 250 98 204 19 131 82 40 2 115 30 134 119 85 234 171 51 248 6 232 13 126 100 100 208 191 92 68 52 56 79 102 83 41 100 249 214 204 9 147 69 246 254 24 120 21 121 111 194 137 125 190 39 201 58 31 0 0 64 174 140 149 163 3 107 111 4 34 250 106 21 208 102 247 217 125 106 201 189 50 165 180 247 173 193 91 219 22 221 135 48 75 167 217 77 123 120 130 238 30 6 129 157 63 162 58 79 199 175 93 130 164 195 209 241 206 111 166 90 218 65 223 2 1 64 174 140 149 163 3 107 111 4 34 250 106 21 208 102 247 217 125 106 201 189 50 165 180 247 173 193 91 219 22 221 135 48 75 167 217 77 123 120 130 238 30 6 129 157 63 162 58 79 199 175 93 130 164 195 209 241 206 111 166 90 218 65 223 2 0 60 94 39 245 99 17 252 182 140 162 112 156 230 137 46 180 2 25 35 78 204 212 30 138 67 63 147 188 132 251 223 228 122 221 52 247 47 60 130 213 221 67 57 251 17 236 100 5 136 157 85 85 137 180 82 210 206 141 57 0 0 1 60 94 39 245 99 17 252 182 140 162 112 156 230 137 46 180 2 25 35 78 204 212 30 138 67 63 147 188 132 251 223 228 122 221 52 247 47 60 130 213 221 67 57 251 17 236 100 5 136 157 85 85 137 180 82 210 206 141 57 0 0 0 52 130 153 165 204 195 100 32 242 200 177 22 23 48 222 90 173 238 62 11 195 207 31 94 106 111 19 23 102 123 154 11 25 69 140 143 38 27 47 211 73 199 58 157 241 52 98 114 254 14 0 0 0 1 52 130 153 165 204 195 100 32 242 200 177 22 23 48 222 90 173 238 62 11 195 207 31 94 106 111 19 23 102 123 154 11 25 69 140 143 38 27 47 211 73 199 58 157 241 52 98 114 254 14 0 0 0 0 72 242 139 53 248 243 242 47 139 119 188 176 74 227 81 33 108 130 169 69 136 245 21 31 87 103 135 189 216 110 191 185 187 15 111 235 113 59 97 210 163 3 82 39 248 57 165 173 26 7 64 153 147 109 165 237 85 23 91 144 96 82 212 163 110 172 233 196 20 189 194 1 0 1 72 242 139 53 248 243 242 47 139 119 188 176 74 227 81 33 108 130 169 69 136 245 21 31 87 103 135 189 216 110 191 185 187 15 111 235 113 59 97 210 163 3 82 39 248 57 165 173 26 7 64 153 147 109 165 237 85 23 91 144 96 82 212 163 110 172 233 196 20 189 194 1 0 0 92 63 196 195 103 33 69 53 0 35 106 115 86 145 225 79 206 13 41 97 138 221 49 15 101 120 43 207 2 164 87 76 203 63 18 204 117 208 102 150 11 45 65 74 88 87 11 31 221 40 244 204 108 35 1 221 236 192 33 114 34 255 16 27 102 160 251 229 204 178 67 44 210 45 249 116 212 232 9 246 165 134 232 228 248 94 170 234 243 13 232 1 125 1 92 63 196 195 103 33 69 53 0 35 106 115 86 145 225 79 206 13 41 97 138 221 49 15 101 120 43 207 2 164 87 76 203 63 18 204 117 208 102 150 11 45 65 74 88 87 11 31 221 40 244 204 108 35 1 221 236 192 33 114 34 255 16 27 102 160 251 229 204 178 67 44 210 45 249 116 212 232 9 246 165 134 232 228 248 94 170 234 243 13 232 1 125 0 40 179 181 131 162 149 183 138 252 30 154 1 146 137 121 52 190 246 1 224 28 36 102 79 202 159 212 210 252 214 150 156 61 194 235 164 133 239 142 0 0 1 40 179 181 131 162 149 183 138 252 30 154 1 146 137 121 52 190 246 1 224 28 36 102 79 202 159 212 210 252 214 150 156 61 194 235 164 133 239 142 0 0 0 40 60 58 79 249 6 113 81 42 62 163 64 45 148 17 196 92 207 75 88 80 225 216 133 32 64 220 110 107 147 131 21 223 245 83 192 232 107 0 0 0 1 40 60 58 79 249 6 113 81 42 62 163 64 45 148 17 196 92 207 75 88 80 225 216 133 32 64 220 110 107 147 131 21 223 245 83 192 232 107 0 0 0 0 96 12 165 17 255 148 106 77 76 190 146 244 60 246 21 69 4 108 6 135 121 71 44 77 148 210 123 228 244 192 7 178 234 75 27 35 56 139 157 89 246 205 166 104 142 71 22 111 74 215 198 253 47 185 250 203 223 186 72 48 140 56 78 5 248 174 81 223 135 55 86 65 183 39 125 199 89 36 113 114 101 100 241 34 118 182 139 64 184 93 41 222 250 83 8 126 2 1 96 12 165 17 255 148 106 77 76 190 146 244 60 246 21 69 4 108 6 135 121 71 44 77 148 210 123 228 244 192 7 178 234 75 27 35 56 139 157 89 246 205 166 104 142 71 22 111 74 215 198 253 47 185 250 203 223 186 72 48 140 56 78 5 248 174 81 223 135 55 86 65 183 39 125 199 89 36 113 114 101 100 241 34 118 182 139 64 184 93 41 222 250 83 8 126 2 0 80 194 39 168 144 47 63 164 168 230 144 217 13 24 96 155 100 12 59 177 151 216 92 228 192 145 88 206 81 45 221 226 39 93 88 12 250 68 153 137 36 20 58 0 113 35 195 22 121 71 66 8 241 39 201 196 133 230 128 125 7 217 82 221 87 57 93 151 146 24 13 11 157 51 151 229 8 102 193 170 254 1 80 194 39 168 144 47 63 164 168 230 144 217 13 24 96 155 100 12 59 177 151 216 92 228 192 145 88 206 81 45 221 226 39 93 88 12 250 68 153 137 36 20 58 0 113 35 195 22 121 71 66 8 241 39 201 196 133 230 128 125 7 217 82 221 87 57 93 151 146 24 13 11 157 51 151 229 8 102 193 170 254 0 28 115 165 0 181 114 222 7 59 3 124 183 26 196 172 167 125 136 168 200 232 107 92 130 217 10 0 0 0 1 28 115 165 0 181 114 222 7 59 3 124 183 26 196 172 167 125 136 168 200 232 107 92 130 217 10 0 0 0 0 104 236 68 87 125 155 29 32 62 230 30 136 150 217 197 37 30 35 255 242 108 93 176 111 33 250 237 114 238 160 77 113 171 147 43 61 144 12 84 87 115 160 128 222 109 180 248 55 195 181 75 255 203 79 219 130 244 94 36 238 156 212 175 171 162 174 87 117 209 113 175 106 193 36 21 66 244 243 166 248 81 121 94 110 189 10 52 188 102 198 136 150 183 191 180 96 29 51 207 65 251 163 177 216 188 1 104 236 68 87 125 155 29 32 62 230 30 136 150 217 197 37 30 35 255 242 108 93 176 111 33 250 237 114 238 160 77 113 171 147 43 61 144 12 84 87 115 160 128 222 109 180 248 55 195 181 75 255 203 79 219 130 244 94 36 238 156 212 175 171 162 174 87 117 209 113 175 106 193 36 21 66 244 243 166 248 81 121 94 110 189 10 52 188 102 198 136 150 183 191 180 96 29 51 207 65 251 163 177 216 188 0 88 199 62 219 38 224 64 98 122 250 132 90 246 191 177 175 129 238 74 103 140 144 205 156 27 249 53 223 251 192 95 121 104 139 113 181 72 177 157 33 140 244 253 143 104 230 164 205 233 17 33 203 84 40 89 149 26 16 144 238 213 168 166 242 186 189 255 169 165 234 16 127 90 100 62 217 16 139 41 102 89 93 97 62 95 147 122 238 237 1 88 199 62 219 38 224 64 98 122 250 132 90 246 191 177 175 129 238 74 103 140 144 205 156 27 249 53 223 251 192 95 121 104 139 113 181 72 177 157 33 140 244 253 143 104 230 164 205 233 17 33 203 84 40 89 149 26 16 144 238 213 168 166 242 186 189 255 169 165 234 16 127 90 100 62 217 16 139 41 102 89 93 97 62 95 147 122 238 237 0 44 45 84 26 33 30 184 117 77 114 45 211 193 64 207 224 237 136 114 3 145 150 20 213 238 240 36 201 64 122 69 244 22 129 142 201 1 185 151 174 233 1 0 0 0 1 44 45 84 26 33 30 184 117 77 114 45 211 193 64 207 224 237 136 114 3 145 150 20 213 238 240 36 201 64 122 69 244 22 129 142 201 1 185 151 174 233 1 0 0 0 0 24 118 96 110 163 151 234 7 30 202 198 169 47 210 145 198 195 223 20 211 133 162 187 75 48 1 24 118 96 110 163 151 234 7 30 202 198 169 47 210 145 198 195 223 20 211 133 162 187 75 48 0 52 166 132 83 15 114 76 5 198 105 107 64 21 201 37 152 38 123 234 29 114 185 178 23 194 54 124 93 52 128 139 153 108 32 85 243 44 247 113 25 108 194 143 136 29 222 174 212 74 73 19 0 0 1 52 166 132 83 15 114 76 5 198 105 107 64 21 201 37 152 38 123 234 29 114 185 178 23 194 54 124 93 52 128 139 153 108 32 85 243 44 247 113 25 108 194 143 136 29 222 174 212 74 73 19 0 0 0 48 123 248 179 54 119 191 224 218 82 168 17 9 213 235 78 184 70 111 32 105 157 160 212 123 240 230 248 188 30 46 115 251 167 248 212 75 179 20 91 203 47 80 142 34 152 174 246 1 1 48 123 248 179 54 119 191 224 218 82 168 17 9 213 235 78 184 70 111 32 105 157 160 212 123 240 230 248 188 30 46 115 251 167 248 212 75 179 20 91 203 47 80 142 34 152 174 246 1 0 48 156 96 100 244 230 81 145 6 56 18 242 19 211 56 11 208 136 192 193 247 21 84 210 245 251 22 164 190 142 62 191 235 148 86 107 108 228 229 161 113 8 169 132 37 3 0 0 0 1 48 156 96 100 244 230 81 145 6 56 18 242 19 211 56 11 208 136 192 193 247 21 84 210 245 251 22 164 190 142 62 191 235 148 86 107 108 228 229 161 113 8 169 132 37 3 0 0 0 0 84 253 53 33 48 131 189 25 65 204 174 99 186 204 72 230 129 192 106 8 141 23 186 143 8 176 75 97 190 2 190 127 52 92 22 252 200 15 45 98 21 11 157 128 28 145 217 54 150 99 213 145 99 58 65 64 149 218 156 253 58 0 9 210 203 145 96 237 185 130 70 116 6 209 240 157 58 59 8 33 55 1 0 0 0 1 84 253 53 33 48 131 189 25 65 204 174 99 186 204 72 230 129 192 106 8 141 23 186 143 8 176 75 97 190 2 190 127 52 92 22 252 200 15 45 98 21 11 157 128 28 145 217 54 150 99 213 145 99 58 65 64 149 218 156 253 58 0 9 210 203 145 96 237 185 130 70 116 6 209 240 157 58 59 8 33 55 1 0 0 0 0 108 140 139 49 207 205 64 240 199 59 87 85 34 45 23 247 226 20 175 76 118 24 188 97 163 249 238 130 105 219 76 167 90 29 31 159 229 181 73 152 183 74 134 209 139 34 200 210 113 231 227 99 224 196 220 80 243 62 167 195 5 201 123 178 100 95 190 235 171 32 64 54 178 111 83 175 134 22 73 175 164 79 39 170 74 102 74 233 210 216 226 3 131 100 81 201 127 195 224 208 29 109 171 156 77 11 0 0 0 1 108 140 139 49 207 205 64 240 199 59 87 85 34 45 23 247 226 20 175 76 118 24 188 97 163 249 238 130 105 219 76 167 90 29 31 159 229 181 73 152 183 74 134 209 139 34 200 210 113 231 227 99 224 196 220 80 243 62 167 195 5 201 123 178 100 95 190 235 171 32 64 54 178 111 83 175 134 22 73 175 164 79 39 170 74 102 74 233 210 216 226 3 131 100 81 201 127 195 224 208 29 109 171 156 77 11 0 0 0 0 100 222 231 217 128 82 99 10 214 110 228 128 78 114 45 119 81 180 185 243 203 206 92 162 40 82 46 54 187 93 28 152 69 4 123 103 77 208 204 181 235 42 147 170 143 2 139 154 218 144 51 223 215 163 89 75 72 123 205 0 240 64 100 207 207 158 197 65 249 187 175 80 167 154 152 209 32 55 42 171 219 232 238 66 244 61 205 209 141 94 43 111 8 205 151 59 230 205 24 205 241 1 100 222 231 217 128 82 99 10 214 110 228 128 78 114 45 119 81 180 185 243 203 206 92 162 40 82 46 54 187 93 28 152 69 4 123 103 77 208 204 181 235 42 147 170 143 2 139 154 218 144 51 223 215 163 89 75 72 123 205 0 240 64 100 207 207 158 197 65 249 187 175 80 167 154 152 209 32 55 42 171 219 232 238 66 244 61 205 209 141 94 43 111 8 205 151 59 230 205 24 205 241 0 88 207 251 142 39 144 108 252 57 106 73 11 186 19 131 187 69 26 149 177 211 238 136 251 62 89 7 238 7 115 168 92 155 211 100 253 171 162 138 116 33 152 91 134 33 55 71 164 201 152 4 49 26 55 186 161 250 57 85 28 39 171 17 196 138 245 10 0 73 155 144 183 97 4 3 242 240 169 248 22 116 210 225 61 191 6 115 0 0 1 88 207 251 142 39 144 108 252 57 106 73 11 186 19 131 187 69 26 149 177 211 238 136 251 62 89 7 238 7 115 168 92 155 211 100 253 171 162 138 116 33 152 91 134 33 55 71 164 201 152 4 49 26 55 186 161 250 57 85 28 39 171 17 196 138 245 10 0 73 155 144 183 97 4 3 242 240 169 248 22 116 210 225 61 191 6 115 0 0 0 12 137 130 140 24 236 12 214 199 10 105 31 0 1 12 137 130 140 24 236 12 214 199 10 105 31 0 0 52 108 175 196 156 55 213 72 113 207 244 180 56 88 213 35 165 75 248 211 20 212 57 60 188 217 211 48 37 134 141 243 246 161 245 39 195 123 248 138 183 15 28 111 146 50 155 93 170 4 0 0 0 1 52 108 175 196 156 55 213 72 113 207 244 180 56 88 213 35 165 75 248 211 20 212 57 60 188 217 211 48 37 134 141 243 246 161 245 39 195 123 248 138 183 15 28 111 146 50 155 93 170 4 0 0 0 0 120 112 113 30 136 233 190 54 137 121 169 50 162 49 32 173 179 18 162 50 40 203 206 65 185 66 186 230 219 176 80 103 123 27 250 226 122 23 191 77 80 214 47 76 55 89 65 20 139 103 231 246 32 248 93 179 33 222 25 246 60 212 174 114 116 72 105 47 23 51 143 138 172 27 39 246 135 133 254 162 107 108 22 2 166 141 243 6 251 77 176 135 206 2 231 124 148 132 69 84 79 111 64 235 234 76 164 46 49 159 31 188 209 182 60 173 197 202 76 16 0 1 120 112 113 30 136 233 190 54 137 121 169 50 162 49 32 173 179 18 162 50 40 203 206 65 185 66 186 230 219 176 80 103 123 27 250 226 122 23 191 77 80 214 47 76 55 89 65 20 139 103 231 246 32 248 93 179 33 222 25 246 60 212 174 114 116 72 105 47 23 51 143 138 172 27 39 246 135 133 254 162 107 108 22 2 166 141 243 6 251 77 176 135 206 2 231 124 148 132 69 84 79 111 64 235 234 76 164 46 49 159 31 188 209 182 60 173 197 202 76 16 0 0 60 47 160 84 82 9 238 207 219 151 156 134 131 89 62 11 68 11 147 237 99 121 15 73 200 84 95 87 214 232 187 96 240 53 52 195 55 200 190 88 28 76 29 80 151 156 97 63 20 181 127 200 147 98 254 76 151 61 118 77 0 1 60 47 160 84 82 9 238 207 219 151 156 134 131 89 62 11 68 11 147 237 99 121 15 73 200 84 95 87 214 232 187 96 240 53 52 195 55 200 190 88 28 76 29 80 151 156 97 63 20 181 127 200 147 98 254 76 151 61 118 77 0 0 100 238 56 196 120 62 80 239 58 25 190 123 255 60 22 240 193 64 200 155 205 65 125 162 46 114 82 168 130 71 226 104 252 45 143 77 84 254 194 132 208 96 195 7 173 173 156 202 242 175 234 16 37 97 18 174 179 230 94 208 69 94 78 160 223 97 151 58 36 237 203 214 110 180 89 134 104 29 12 23 140 193 36 70 29 183 50 17 167 28 12 196 65 172 236 156 91 251 73 127 1 1 100 238 56 196 120 62 80 239 58 25 190 123 255 60 22 240 193 64 200 155 205 65 125 162 46 114 82 168 130 71 226 104 252 45 143 77 84 254 194 132 208 96 195 7 173 173 156 202 242 175 234 16 37 97 18 174 179 230 94 208 69 94 78 160 223 97 151 58 36 237 203 214 110 180 89 134 104 29 12 23 140 193 36 70 29 183 50 17 167 28 12 196 65 172 236 156 91 251 73 127 1 0 40 149 114 1 116 102 17 2 174 6 173 97 185 176 52 172 147 84 122 233 135 57 32 185 232 151 166 16 42 84 99 130 237 14 101 51 119 173 115 53 0 1 40 149 114 1 116 102 17 2 174 6 173 97 185 176 52 172 147 84 122 233 135 57 32 185 232 151 166 16 42 84 99 130 237 14 101 51 119 173 115 53 0 0 64 242 217 97 202 37 38 150 206 207 10 52 100 102 27 105 39 214 77 170 228 242 244 122 45 230 139 116 113 248 171 76 193 78 80 198 37 181 97 228 185 29 21 241 62 210 131 193 6 1 89 93 123 149 252 254 234 21 49 121 54 70 123 12 0 1 64 242 217 97 202 37 38 150 206 207 10 52 100 102 27 105 39 214 77 170 228 242 244 122 45 230 139 116 113 248 171 76 193 78 80 198 37 181 97 228 185 29 21 241 62 210 131 193 6 1 89 93 123 149 252 254 234 21 49 121 54 70 123 12 0 0 120 126 216 172 15 25 129 241 98 17 2 168 135 214 24 154 85 56 125 146 150 225 161 82 46 26 201 64 204 132 245 111 192 88 211 123 3 119 58 58 245 118 104 138 91 147 19 185 226 101 33 139 62 235 15 91 204 29 220 53 8 11 61 142 142 93 77 162 71 38 142 116 213 43 79 225 85 174 86 234 214 249 189 86 69 229 181 99 122 154 144 192 66 13 218 96 118 124 80 14 168 5 230 111 79 37 76 42 49 185 18 80 157 188 50 80 199 22 0 0 0 1 120 126 216 172 15 25 129 241 98 17 2 168 135 214 24 154 85 56 125 146 150 225 161 82 46 26 201 64 204 132 245 111 192 88 211 123 3 119 58 58 245 118 104 138 91 147 19 185 226 101 33 139 62 235 15 91 204 29 220 53 8 11 61 142 142 93 77 162 71 38 142 116 213 43 79 225 85 174 86 234 214 249 189 86 69 229 181 99 122 154 144 192 66 13 218 96 118 124 80 14 168 5 230 111 79 37 76 42 49 185 18 80 157 188 50 80 199 22 0 0 0 0 56 243 53 196 121 165 92 144 118 3 3 222 84 206 144 5 157 57 16 134 139 198 69 129 221 11 133 183 218 71 108 13 56 83 246 113 103 6 198 202 227 68 93 146 59 161 12 248 177 166 51 150 47 96 161 239 236 1 56 243 53 196 121 165 92 144 118 3 3 222 84 206 144 5 157 57 16 134 139 198 69 129 221 11 133 183 218 71 108 13 56 83 246 113 103 6 198 202 227 68 93 146 59 161 12 248 177 166 51 150 47 96 161 239 236 0 64 153 28 132 11 210 222 158 84 204 251 210 22 227 11 36 206 23 140 161 60 159 143 123 206 191 31 7 46 144 178 243 58 169 39 112 174 47 119 109 7 130 69 51 2 125 253 241 144 64 234 96 3 245 113 8 190 14 182 65 46 222 249 3 0 1 64 153 28 132 11 210 222 158 84 204 251 210 22 227 11 36 206 23 140 161 60 159 143 123 206 191 31 7 46 144 178 243 58 169 39 112 174 47 119 109 7 130 69 51 2 125 253 241 144 64 234 96 3 245 113 8 190 14 182 65 46 222 249 3 0 0 60 98 185 79 194 105 170 12 86 252 124 124 192 23 205 211 77 162 50 205 89 40 158 46 179 237 22 171 26 56 121 32 6 69 111 60 114 251 180 204 199 96 135 46 64 144 243 102 201 99 166 113 208 152 168 179 161 1 6 0 0 1 60 98 185 79 194 105 170 12 86 252 124 124 192 23 205 211 77 162 50 205 89 40 158 46 179 237 22 171 26 56 121 32 6 69 111 60 114 251 180 204 199 96 135 46 64 144 243 102 201 99 166 113 208 152 168 179 161 1 6 0 0 0 100 142 26 227 150 238 69 151 6 3 30 46 190 46 96 134 217 131 85 161 92 34 208 158 197 175 196 117 64 216 114 195 81 101 252 52 106 185 71 47 193 32 27 53 120 25 14 193 3 5 106 149 116 208 152 66 126 218 195 178 209 4 241 87 44 185 217 57 224 49 139 77 191 217 218 19 215 78 14 143 87 180 5 177 20 62 54 52 235 79 31 44 20 98 23 221 250 34 0 0 0 1 100 142 26 227 150 238 69 151 6 3 30 46 190 46 96 134 217 131 85 161 92 34 208 158 197 175 196 117 64 216 114 195 81 101 252 52 106 185 71 47 193 32 27 53 120 25 14 193 3 5 106 149 116 208 152 66 126 218 195 178 209 4 241 87 44 185 217 57 224 49 139 77 191 217 218 19 215 78 14 143 87 180 5 177 20 62 54 52 235 79 31 44 20 98 23 221 250 34 0 0 0 0 40 32 168 235 44 56 166 243 210 154 91 226 40 229 249 145 209 125 211 169 133 252 161 224 125 81 253 117 254 153 178 166 34 26 180 249 135 33 222 152 13 1 40 32 168 235 44 56 166 243 210 154 91 226 40 229 249 145 209 125 211 169 133 252 161 224 125 81 253 117 254 153 178 166 34 26 180 249 135 33 222 152 13 0 16 114 51 72 217 92 64 168 124 50 132 58 208 128 106 1 0 1 16 114 51 72 217 92 64 168 124 50 132 58 208 128 106 1 0 0 68 69 4 0 153 42 90 20 74 230 90 168 97 72 101 100 19 28 241 147 219 3 93 60 246 145 183 55 230 232 224 115 211 143 158 209 214 247 84 89 209 186 139 133 34 124 5 207 184 125 115 201 88 222 241 97 109 108 6 13 211 125 187 117 94 222 2 0 0 1 68 69 4 0 153 42 90 20 74 230 90 168 97 72 101 100 19 28 241 147 219 3 93 60 246 145 183 55 230 232 224 115 211 143 158 209 214 247 84 89 209 186 139 133 34 124 5 207 184 125 115 201 88 222 241 97 109 108 6 13 211 125 187 117 94 222 2 0 0 0 52 153 84 205 104 19 159 225 153 148 74 194 235 72 23 144 76 152 243 229 1 90 189 92 32 175 52 88 183 242 20 84 239 175 56 99 222 31 211 114 93 122 135 65 160 226 51 48 207 12 116 28 0 1 52 153 84 205 104 19 159 225 153 148 74 194 235 72 23 144 76 152 243 229 1 90 189 92 32 175 52 88 183 242 20 84 239 175 56 99 222 31 211 114 93 122 135 65 160 226 51 48 207 12 116 28 0 0 68 245 53 109 105 191 82 1 66 103 122 80 160 241 193 52 254 117 182 127 138 99 142 106 221 128 239 15 222 14 129 176 110 43 113 122 176 232 88 250 58 0 161 215 14 126 59 139 23 140 13 122 239 14 189 40 72 35 18 82 213 254 53 121 213 234 12 0 0 1 68 245 53 109 105 191 82 1 66 103 122 80 160 241 193 52 254 117 182 127 138 99 142 106 221 128 239 15 222 14 129 176 110 43 113 122 176 232 88 250 58 0 161 215 14 126 59 139 23 140 13 122 239 14 189 40 72 35 18 82 213 254 53 121 213 234 12 0 0 0 112 159 8 16 9 71 195 199 198 21 242 159 80 249 120 17 254 76 140 121 166 78 213 92 89 178 160 20 177 8 14 182 122 65 115 133 119 121 16 112 118 105 211 205 62 12 236 55 80 1 131 163 0 83 205 178 80 88 102 233 133 195 61 239 174 246 227 234 216 85 176 76 5 36 121 112 51 212 181 246 245 241 105 195 137 147 72 56 237 179 190 73 134 142 177 146 141 8 159 112 222 16 234 231 234 198 20 89 52 189 194 119 1 1 112 159 8 16 9 71 195 199 198 21 242 159 80 249 120 17 254 76 140 121 166 78 213 92 89 178 160 20 177 8 14 182 122 65 115 133 119 121 16 112 118 105 211 205 62 12 236 55 80 1 131 163 0 83 205 178 80 88 102 233 133 195 61 239 174 246 227 234 216 85 176 76 5 36 121 112 51 212 181 246 245 241 105 195 137 147 72 56 237 179 190 73 134 142 177 146 141 8 159 112 222 16 234 231 234 198 20 89 52 189 194 119 1 0 108 80 214 13 177 215 159 125 169 151 12 42 72 121 18 76 208 238 240 149 68 234 73 20 164 91 171 220 52 255 98 21 228 111 4 175 56 163 222 123 128 30 97 59 67 228 49 187 237 223 220 86 109 144 229 187 251 70 7 146 195 116 106 122 232 185 78 78 58 225 39 134 160 118 235 208 242 69 148 226 101 73 25 136 159 25 99 137 101 248 54 26 247 229 7 34 61 19 28 201 190 36 74 102 133 25 0 0 0 1 108 80 214 13 177 215 159 125 169 151 12 42 72 121 18 76 208 238 240 149 68 234 73 20 164 91 171 220 52 255 98 21 228 111 4 175 56 163 222 123 128 30 97 59 67 228 49 187 237 223 220 86 109 144 229 187 251 70 7 146 195 116 106 122 232 185 78 78 58 225 39 134 160 118 235 208 242 69 148 226 101 73 25 136 159 25 99 137 101 248 54 26 247 229 7 34 61 19 28 201 190 36 74 102 133 25 0 0 0 0 48 214 54 94 179 164 240 155 40 191 186 107 180 206 48 82 137 213 91 241 62 39 183 229 184 237 121 223 179 199 117 185 240 244 56 38 125 32 5 140 166 122 78 243 77 252 116 1 0 1 48 214 54 94 179 164 240 155 40 191 186 107 180 206 48 82 137 213 91 241 62 39 183 229 184 237 121 223 179 199 117 185 240 244 56 38 125 32 5 140 166 122 78 243 77 252 116 1 0 0 104 54 55 200 109 82 156 202 152 175 66 36 193 252 78 5 135 125 117 139 57 40 153 71 77 232 6 37 188 28 77 2 71 137 173 143 223 127 105 125 144 234 178 168 38 38 22 213 12 86 146 58 86 128 124 44 36 53 34 45 2 168 71 121 160 250 8 153 10 51 71 123 250 225 95 140 177 159 103 47 148 120 154 141 97 250 155 186 25 61 104 158 48 167 246 20 132 6 84 93 66 112 47 0 0 1 104 54 55 200 109 82 156 202 152 175 66 36 193 252 78 5 135 125 117 139 57 40 153 71 77 232 6 37 188 28 77 2 71 137 173 143 223 127 105 125 144 234 178 168 38 38 22 213 12 86 146 58 86 128 124 44 36 53 34 45 2 168 71 121 160 250 8 153 10 51 71 123 250 225 95 140 177 159 103 47 148 120 154 141 97 250 155 186 25 61 104 158 48 167 246 20 132 6 84 93 66 112 47 0 0 0 120 6 90 182 206 193 58 216 170 220 9 22 52 156 242 120 157 30 209 26 98 51 196 178 88 228 65 154 229 210 70 170 198 64 16 247 102 16 21 58 87 235 200 244 76 203 136 132 209 76 195 94 143 2 113 149 235 158 1 227 205 1 208 16 81 131 189 40 241 92 36 170 156 224 56 199 188 154 79 125 102 121 78 97 150 233 11 79 62 109 25 212 226 161 220 35 23 232 13 90 56 183 223 124 31 159 158 14 223 62 85 83 193 110 187 158 93 203 8 0 0 1 120 6 90 182 206 193 58 216 170 220 9 22 52 156 242 120 157 30 209 26 98 51 196 178 88 228 65 154 229 210 70 170 198 64 16 247 102 16 21 58 87 235 200 244 76 203 136 132 209 76 195 94 143 2 113 149 235 158 1 227 205 1 208 16 81 131 189 40 241 92 36 170 156 224 56 199 188 154 79 125 102 121 78 97 150 233 11 79 62 109 25 212 226 161 220 35 23 232 13 90 56 183 223 124 31 159 158 14 223 62 85 83 193 110 187 158 93 203 8 0 0 0 84 47 45 238 181 215 239 242 99 34 179 237 146 38 184 178 32 39 156 91 232 37 68 223 154 247 174 99 147 112 220 68 13 168 71 188 111 58 166 58 109 244 156 76 173 12 217 7 247 229 168 222 84 82 81 171 9 74 74 20 144 71 106 164 117 234 163 235 12 58 184 167 68 145 254 103 0 233 175 219 91 115 45 23 0 1 84 47 45 238 181 215 239 242 99 34 179 237 146 38 184 178 32 39 156 91 232 37 68 223 154 247 174 99 147 112 220 68 13 168 71 188 111 58 166 58 109 244 156 76 173 12 217 7 247 229 168 222 84 82 81 171 9 74 74 20 144 71 106 164 117 234 163 235 12 58 184 167 68 145 254 103 0 233 175 219 91 115 45 23 0 0 72 40 180 241 104 90 252 242 234 235 240 236 39 250 255 76 167 29 116 156 87 88 207 205 175 125 89 77 12 21 97 61 253 152 65 25 101 5 139 108 225 153 138 24 18 112 100 115 211 39 249 92 242 104 78 15 126 214 21 35 238 183 248 195 174 170 41 249 203 160 8 0 0 1 72 40 180 241 104 90 252 242 234 235 240 236 39 250 255 76 167 29 116 156 87 88 207 205 175 125 89 77 12 21 97 61 253 152 65 25 101 5 139 108 225 153 138 24 18 112 100 115 211 39 249 92 242 104 78 15 126 214 21 35 238 183 248 195 174 170 41 249 203 160 8 0 0 0 52 22 27 151 194 115 92 119 11 236 51 137 144 137 103 129 95 89 105 130 240 243 170 243 35 191 215 206 102 95 172 26 80 149 177 248 238 54 111 45 244 22 23 22 224 158 95 94 118 19 0 0 0 1 52 22 27 151 194 115 92 119 11 236 51 137 144 137 103 129 95 89 105 130 240 243 170 243 35 191 215 206 102 95 172 26 80 149 177 248 238 54 111 45 244 22 23 22 224 158 95 94 118 19 0 0 0 0 20 156 43 16 56 55 4 61 155 177 58 74 163 225 4 11 131 179 24 1 0 1 20 156 43 16 56 55 4 61 155 177 58 74 163 225 4 11 131 179 24 1 0 0 104 73 76 101 151 31 35 209 56 36 69 31 173 147 81 94 123 172 22 210 79 45 203 20 140 58 218 46 34 183 138 96 94 97 161 218 71 10 21 254 228 117 64 245 83 14 74 129 103 121 90 57 125 205 210 39 213 162 107 185 36 194 249 86 241 82 226 200 210 202 80 195 105 63 67 249 109 65 100 248 77 32 184 210 162 76 62 215 70 139 167 97 35 196 73 132 172 243 85 144 160 14 20 22 193 1 104 73 76 101 151 31 35 209 56 36 69 31 173 147 81 94 123 172 22 210 79 45 203 20 140 58 218 46 34 183 138 96 94 97 161 218 71 10 21 254 228 117 64 245 83 14 74 129 103 121 90 57 125 205 210 39 213 162 107 185 36 194 249 86 241 82 226 200 210 202 80 195 105 63 67 249 109 65 100 248 77 32 184 210 162 76 62 215 70 139 167 97 35 196 73 132 172 243 85 144 160 14 20 22 193 0 28 126 1 30 104 79 113 99 127 177 76 179 201 53 24 182 29 192 54 96 132 91 248 133 211 86 2 0 0 1 28 126 1 30 104 79 113 99 127 177 76 179 201 53 24 182 29 192 54 96 132 91 248 133 211 86 2 0 0 0 72 92 159 45 128 70 93 245 63 92 118 241 226 212 23 182 127 131 42 229 253 64 210 240 253 132 150 70 236 28 94 44 2 105 246 1 151 224 138 233 135 254 20 25 124 118 13 182 172 20 197 252 20 174 143 186 57 51 58 222 119 36 51 0 104 163 78 183 107 2 0 0 0 1 72 92 159 45 128 70 93 245 63 92 118 241 226 212 23 182 127 131 42 229 253 64 210 240 253 132 150 70 236 28 94 44 2 105 246 1 151 224 138 233 135 254 20 25 124 118 13 182 172 20 197 252 20 174 143 186 57 51 58 222 119 36 51 0 104 163 78 183 107 2 0 0 0 0 124 74 103 198 93 113 70 83 77 90 199 193 206 145 183 35 249 192 236 161 64 7 17 137 53 0 187 116 255 249 232 191 215 71 6 51 192 57 52 156 221 118 241 145 238 148 141 72 31 162 90 235 117 210 45 34 240 215 118 239 161 128 10 59 244 108 240 132 108 62 94 40 142 165 219 48 78 211 95 143 5 181 44 128 205 117 175 172 46 236 144 98 44 44 86 152 86 44 46 101 89 209 229 168 49 93 54 154 211 126 167 37 43 164 36 251 17 187 90 218 47 68 10 0 0 1 124 74 103 198 93 113 70 83 77 90 199 193 206 145 183 35 249 192 236 161 64 7 17 137 53 0 187 116 255 249 232 191 215 71 6 51 192 57 52 156 221 118 241 145 238 148 141 72 31 162 90 235 117 210 45 34 240 215 118 239 161 128 10 59 244 108 240 132 108 62 94 40 142 165 219 48 78 211 95 143 5 181 44 128 205 117 175 172 46 236 144 98 44 44 86 152 86 44 46 101 89 209 229 168 49 93 54 154 211 126 167 37 43 164 36 251 17 187 90 218 47 68 10 0 0 0 48 5 35 182 112 113 188 253 125 124 37 72 205 161 238 42 235 141 207 222 101 115 216 55 107 133 114 20 89 39 233 135 120 225 238 214 101 146 108 76 33 35 58 202 67 65 1 0 0 1 48 5 35 182 112 113 188 253 125 124 37 72 205 161 238 42 235 141 207 222 101 115 216 55 107 133 114 20 89 39 233 135 120 225 238 214 101 146 108 76 33 35 58 202 67 65 1 0 0 0 128 104 135 234 221 147 43 69 249 95 82 22 184 215 149 229 138 106 92 255 169 236 121 106 240 235 221 243 154 22 155 148 218 188 88 136 234 72 234 250 14 92 227 117 188 12 118 41 224 174 244 46 222 46 196 200 235 191 13 185 217 77 182 148 203 3 127 173 173 34 254 84 187 72 234 176 92 208 9 125 82 232 207 39 192 114 153 168 166 210 148 43 5 225 117 107 205 99 179 177 46 90 12 119 11 225 27 124 151 136 98 153 156 122 129 197 79 159 225 89 237 180 211 34 198 224 232 1 0 1 128 104 135 234 221 147 43 69 249 95 82 22 184 215 149 229 138 106 92 255 169 236 121 106 240 235 221 243 154 22 155 148 218 188 88 136 234 72 234 250 14 92 227 117 188 12 118 41 224 174 244 46 222 46 196 200 235 191 13 185 217 77 182 148 203 3 127 173 173 34 254 84 187 72 234 176 92 208 9 125 82 232 207 39 192 114 153 168 166 210 148 43 5 225 117 107 205 99 179 177 46 90 12 119 11 225 27 124 151 136 98 153 156 122 129 197 79 159 225 89 237 180 211 34 198 224 232 1 0 0 124 30 16 152 189 248 187 194 106 86 218 107 172 24 210 165 36 4 181 124 54 238 59 132 56 110 109 236 68 95 102 145 133 240 159 128 36 169 4 207 140 229 186 242 94 18 174 89 159 26 138 112 65 245 118 85 137 113 110 126 144 76 37 227 235 138 77 233 26 84 155 51 80 31 201 113 46 222 200 95 96 232 140 13 80 38 36 30 104 180 121 216 89 15 185 161 136 55 32 42 160 149 50 168 225 1 104 50 30 10 3 96 136 60 23 224 146 203 81 219 70 1 0 0 0 1 124 30 16 152 189 248 187 194 106 86 218 107 172 24 210 165 36 4 181 124 54 238 59 132 56 110 109 236 68 95 102 145 133 240 159 128 36 169 4 207 140 229 186 242 94 18 174 89 159 26 138 112 65 245 118 85 137 113 110 126 144 76 37 227 235 138 77 233 26 84 155 51 80 31 201 113 46 222 200 95 96 232 140 13 80 38 36 30 104 180 121 216 89 15 185 161 136 55 32 42 160 149 50 168 225 1 104 50 30 10 3 96 136 60 23 224 146 203 81 219 70 1 0 0 0 0 32 31 3 148 175 154 99 152 211 246 153 40 92 93 24 93 5 168 109 224 21 185 107 37 219 63 153 164 130 241 93 111 0 1 32 31 3 148 175 154 99 152 211 246 153 40 92 93 24 93 5 168 109 224 21 185 107 37 219 63 153 164 130 241 93 111 0 0 112 73 246 239 200 138 198 5 244 5 61 186 215 203 39 176 220 88 141 123 23 70 239 91 228 24 9 208 86 173 30 190 190 160 205 169 222 186 254 3 42 110 229 120 37 181 245 217 107 172 221 147 223 37 33 9 82 153 101 228 62 236 28 113 251 178 124 157 88 255 13 110 233 60 45 129 160 39 244 17 113 220 114 236 12 12 23 203 127 173 99 182 203 235 40 81 17 163 180 158 157 229 232 88 42 248 234 216 11 207 20 25 51 1 112 73 246 239 200 138 198 5 244 5 61 186 215 203 39 176 220 88 141 123 23 70 239 91 228 24 9 208 86 173 30 190 190 160 205 169 222 186 254 3 42 110 229 120 37 181 245 217 107 172 221 147 223 37 33 9 82 153 101 228 62 236 28 113 251 178 124 157 88 255 13 110 233 60 45 129 160 39 244 17 113 220 114 236 12 12 23 203 127 173 99 182 203 235 40 81 17 163 180 158 157 229 232 88 42 248 234 216 11 207 20 25 51 0 4 39 132 6 0 1 4 39 132 6 0 0 72 220 180 23 131 143 83 213 131 208 206 205 120 25 87 192 44 119 67 69 124 227 114 112 253 61 85 176 134 4 56 189 104 188 137 70 0 24 85 129 75 88 245 68 129 51 145 7 213 104 238 115 223 7 147 12 4 53 239 245 119 158 197 135 154 106 50 38 170 151 176 21 0 1 72 220 180 23 131 143 83 213 131 208 206 205 120 25 87 192 44 119 67 69 124 227 114 112 253 61 85 176 134 4 56 189 104 188 137 70 0 24 85 129 75 88 245 68 129 51 145 7 213 104 238 115 223 7 147 12 4 53 239 245 119 158 197 135 154 106 50 38 170 151 176 21 0 0 52 53 186 59 167 241 59 136 87 128 215 201 225 137 253 171 55 175 94 153 156 167 180 232 139 32 51 246 11 119 98 59 201 174 243 8 69 82 213 30 147 100 60 26 207 249 44 53 34 200 114 0 0 1 52 53 186 59 167 241 59 136 87 128 215 201 225 137 253 171 55 175 94 153 156 167 180 232 139 32 51 246 11 119 98 59 201 174 243 8 69 82 213 30 147 100 60 26 207 249 44 53 34 200 114 0 0 0 80 174 62 24 34 239 200 187 235 239 204 93 34 151 115 205 129 228 152 167 94 171 72 91 21 73 128 43 106 226 191 23 128 76 125 32 132 209 72 252 64 195 197 154 199 15 13 192 133 198 108 88 181 61 227 187 44 34 215 108 151 40 54 253 218 203 218 197 100 1 207 108 14 183 168 181 1 75 68 203 52 1 80 174 62 24 34 239 200 187 235 239 204 93 34 151 115 205 129 228 152 167 94 171 72 91 21 73 128 43 106 226 191 23 128 76 125 32 132 209 72 252 64 195 197 154 199 15 13 192 133 198 108 88 181 61 227 187 44 34 215 108 151 40 54 253 218 203 218 197 100 1 207 108 14 183 168 181 1 75 68 203 52 0 100 178 153 248 14 228 148 99 29 41 180 54 4 212 37 168 181 45 110 40 79 241 192 17 133 242 242 158 27 85 230 33 102 187 163 67 188 94 83 9 227 224 31 154 239 89 44 152 114 79 160 147 226 52 244 38 46 88 71 34 217 114 156 13 83 85 223 134 253 133 126 56 188 90 85 65 29 106 94 50 165 88 56 132 55 180 80 212 40 199 4 162 37 213 90 184 228 101 203 7 49 1 100 178 153 248 14 228 148 99 29 41 180 54 4 212 37 168 181 45 110 40 79 241 192 17 133 242 242 158 27 85 230 33 102 187 163 67 188 94 83 9 227 224 31 154 239 89 44 152 114 79 160 147 226 52 244 38 46 88 71 34 217 114 156 13 83 85 223 134 253 133 126 56 188 90 85 65 29 106 94 50 165 88 56 132 55 180 80 212 40 199 4 162 37 213 90 184 228 101 203 7 49 0 76 38 182 96 145 194 1 121 109 64 49 154 66 199 208 229 235 239 165 41 198 204 230 234 178 15 29 203 140 160 143 49 211 78 57 102 214 114 58 133 221 75 184 224 8 199 190 6 247 208 197 161 3 41 23 120 225 80 183 58 134 227 154 146 238 63 175 177 103 131 253 150 250 82 57 2 3 1 76 38 182 96 145 194 1 121 109 64 49 154 66 199 208 229 235 239 165 41 198 204 230 234 178 15 29 203 140 160 143 49 211 78 57 102 214 114 58 133 221 75 184 224 8 199 190 6 247 208 197 161 3 41 23 120 225 80 183 58 134 227 154 146 238 63 175 177 103 131 253 150 250 82 57 2 3 0 64 248 119 27 143 213 236 116 221 199 155 29 196 80 96 187 63 97 42 122 209 144 117 56 28 149 170 177 209 56 44 150 204 131 187 222 85 190 214 23 67 242 17 199 67 116 180 19 62 92 46 154 222 244 151 104 165 83 192 191 210 45 2 0 0 1 64 248 119 27 143 213 236 116 221 199 155 29 196 80 96 187 63 97 42 122 209 144 117 56 28 149 170 177 209 56 44 150 204 131 187 222 85 190 214 23 67 242 17 199 67 116 180 19 62 92 46 154 222 244 151 104 165 83 192 191 210 45 2 0 0 0 28 75 182 65 120 225 60 231 204 95 201 188 204 81 75 120 231 176 122 123 44 181 212 75 241 199 197 22 0 1 28 75 182 65 120 225 60 231 204 95 201 188 204 81 75 120 231 176 122 123 44 181 212 75 241 199 197 22 0 0 72 223 250 238 211 74 58 16 147 125 7 190 218 142 15 49 69 24 56 233 70 213 49 22 223 242 236 38 167 130 195 39 254 92 251 3 205 152 4 121 107 79 85 199 20 69 53 93 242 156 125 37 228 96 255 30 188 96 67 150 203 206 75 217 143 153 171 129 99 51 5 0 0 1 72 223 250 238 211 74 58 16 147 125 7 190 218 142 15 49 69 24 56 233 70 213 49 22 223 242 236 38 167 130 195 39 254 92 251 3 205 152 4 121 107 79 85 199 20 69 53 93 242 156 125 37 228 96 255 30 188 96 67 150 203 206 75 217 143 153 171 129 99 51 5 0 0 0 40 108 135 124 124 29 149 22 174 63 189 26 9 249 247 17 17 89 247 0 255 90 36 201 133 122 164 9 110 235 211 222 139 25 132 124 219 40 148 57 0 1 40 108 135 124 124 29 149 22 174 63 189 26 9 249 247 17 17 89 247 0 255 90 36 201 133 122 164 9 110 235 211 222 139 25 132 124 219 40 148 57 0 0 4 221 214 2 0 1 4 221 214 2 0 0 64 147 243 38 63 33 71 153 12 98 251 245 150 131 176 144 216 39 46 89 50 223 16 34 113 69 13 67 16 135 235 91 48 79 129 250 166 204 227 58 148 218 46 57 182 34 191 165 85 34 220 7 11 186 11 50 182 83 77 72 179 7 0 0 0 1 64 147 243 38 63 33 71 153 12 98 251 245 150 131 176 144 216 39 46 89 50 223 16 34 113 69 13 67 16 135 235 91 48 79 129 250 166 204 227 58 148 218 46 57 182 34 191 165 85 34 220 7 11 186 11 50 182 83 77 72 179 7 0 0 0 0 116 233 246 77 131 243 68 158 180 136 87 207 157 192 121 128 83 72 237 157 134 56 179 201 1 58 190 146 20 153 238 215 88 195 223 67 97 118 17 130 145 223 169 2 15 100 207 216 142 60 64 52 15 48 69 172 151 212 137 218 247 204 232 97 61 38 179 246 161 46 207 132 202 4 168 89 164 121 208 120 93 104 32 129 66 68 235 47 162 233 166 150 103 24 240 136 140 27 137 9 61 79 35 201 200 190 255 32 23 133 194 43 148 11 47 84 2 1 116 233 246 77 131 243 68 158 180 136 87 207 157 192 121 128 83 72 237 157 134 56 179 201 1 58 190 146 20 153 238 215 88 195 223 67 97 118 17 130 145 223 169 2 15 100 207 216 142 60 64 52 15 48 69 172 151 212 137 218 247 204 232 97 61 38 179 246 161 46 207 132 202 4 168 89 164 121 208 120 93 104 32 129 66 68 235 47 162 233 166 150 103 24 240 136 140 27 137 9 61 79 35 201 200 190 255 32 23 133 194 43 148 11 47 84 2 0 32 158 132 247 73 243 86 76 181 117 114 74 0 73 167 54 232 186 178 119 62 251 36 87 106 243 46 78 254 30 13 0 0 1 32 158 132 247 73 243 86 76 181 117 114 74 0 73 167 54 232 186 178 119 62 251 36 87 106 243 46 78 254 30 13 0 0 0 28 187 109 237 12 177 145 13 138 110 36 103 212 219 254 32 2 199 207 206 58 33 91 157 82 142 0 0 0 1 28 187 109 237 12 177 145 13 138 110 36 103 212 219 254 32 2 199 207 206 58 33 91 157 82 142 0 0 0 0 108 191 156 137 40 227 120 81 180 191 249 128 101 54 189 222 126 135 44 172 229 198 254 122 200 254 68 241 155 189 52 134 12 32 127 165 213 33 74 112 219 180 120 124 62 203 145 126 182 239 201 194 229 70 199 78 71 165 89 3 82 85 207 202 83 229 239 95 208 222 39 184 4 206 170 105 230 130 175 81 36 41 97 157 125 234 216 239 63 206 58 107 124 78 26 131 144 70 157 163 62 27 234 177 215 202 140 179 217 1 108 191 156 137 40 227 120 81 180 191 249 128 101 54 189 222 126 135 44 172 229 198 254 122 200 254 68 241 155 189 52 134 12 32 127 165 213 33 74 112 219 180 120 124 62 203 145 126 182 239 201 194 229 70 199 78 71 165 89 3 82 85 207 202 83 229 239 95 208 222 39 184 4 206 170 105 230 130 175 81 36 41 97 157 125 234 216 239 63 206 58 107 124 78 26 131 144 70 157 163 62 27 234 177 215 202 140 179 217 0 116 255 98 44 67 145 156 67 69 207 144 154 245 114 32 23 127 211 123 148 182 146 150 170 172 74 232 254 188 127 136 34 39 122 230 35 121 2 76 118 160 187 17 37 250 134 176 133 100 139 227 15 230 54 106 167 246 167 233 207 141 247 103 135 96 18 251 188 166 202 113 88 34 38 81 212 236 236 142 153 242 1 12 51 124 236 57 28 83 109 124 63 127 190 114 111 5 105 32 46 141 46 195 82 228 121 27 143 106 94 116 99 98 35 8 0 0 1 116 255 98 44 67 145 156 67 69 207 144 154 245 114 32 23 127 211 123 148 182 146 150 170 172 74 232 254 188 127 136 34 39 122 230 35 121 2 76 118 160 187 17 37 250 134 176 133 100 139 227 15 230 54 106 167 246 167 233 207 141 247 103 135 96 18 251 188 166 202 113 88 34 38 81 212 236 236 142 153 242 1 12 51 124 236 57 28 83 109 124 63 127 190 114 111 5 105 32 46 141 46 195 82 228 121 27 143 106 94 116 99 98 35 8 0 0 0 28 232 106 75 132 234 67 145 119 175 2 68 218 133 30 27 34 7 172 120 42 19 45 118 178 216 1 0 0 1 28 232 106 75 132 234 67 145 119 175 2 68 218 133 30 27 34 7 172 120 42 19 45 118 178 216 1 0 0 0 60 129 215 181 185 15 177 200 177 68 80 119 183 36 206 190 141 54 145 230 111 190 97 150 77 141 67 185 87 206 214 237 78 15 79 202 150 147 74 113 9 154 9 23 173 146 190 131 137 247 142 224 174 235 35 57 206 3 0 0 0 1 60 129 215 181 185 15 177 200 177 68 80 119 183 36 206 190 141 54 145 230 111 190 97 150 77 141 67 185 87 206 214 237 78 15 79 202 150 147 74 113 9 154 9 23 173 146 190 131 137 247 142 224 174 235 35 57 206 3 0 0 0 0 32 115 158 93 203 145 117 229 203 77 183 195 60 46 1 188 230 187 238 14 154 176 183 66 57 250 253 70 58 37 0 0 0 1 32 115 158 93 203 145 117 229 203 77 183 195 60 46 1 188 230 187 238 14 154 176 183 66 57 250 253 70 58 37 0 0 0 0 20 81 129 71 67 43 121 89 51 236 18 78 211 96 141 172 26 113 13 214 3 1 20 81 129 71 67 43 121 89 51 236 18 78 211 96 141 172 26 113 13 214 3 0 24 184 13 246 1 153 149 55 198 59 23 173 215 119 87 65 163 114 196 32 40 213 121 0 0 1 24 184 13 246 1 153 149 55 198 59 23 173 215 119 87 65 163 114 196 32 40 213 121 0 0 0 32 56 51 141 41 47 230 78 216 176 139 28 23 160 170 28 45 110 124 64 37 171 195 108 121 74 182 76 40 76 153 115 0 1 32 56 51 141 41 47 230 78 216 176 139 28 23 160 170 28 45 110 124 64 37 171 195 108 121 74 182 76 40 76 153 115 0 0 32 206 242 236 149 72 96 46 45 248 108 12 136 166 194 52 138 152 63 46 130 98 126 192 209 228 24 24 197 243 7 0 0 1 32 206 242 236 149 72 96 46 45 248 108 12 136 166 194 52 138 152 63 46 130 98 126 192 209 228 24 24 197 243 7 0 0 0 104 163 224 244 5 84 160 193 30 20 248 69 99 186 48 205 24 55 21 110 164 203 99 211 59 80 177 211 86 41 161 229 184 106 19 96 95 57 76 140 135 150 249 39 235 242 249 52 35 6 105 190 17 117 228 226 214 214 171 123 84 78 178 176 91 241 160 229 1 232 67 196 8 201 235 118 130 80 124 105 29 101 75 30 179 181 153 56 118 147 86 245 65 10 214 206 110 133 122 248 252 15 53 12 0 1 104 163 224 244 5 84 160 193 30 20 248 69 99 186 48 205 24 55 21 110 164 203 99 211 59 80 177 211 86 41 161 229 184 106 19 96 95 57 76 140 135 150 249 39 235 242 249 52 35 6 105 190 17 117 228 226 214 214 171 123 84 78 178 176 91 241 160 229 1 232 67 196 8 201 235 118 130 80 124 105 29 101 75 30 179 181 153 56 118 147 86 245 65 10 214 206 110 133 122 248 252 15 53 12 0 0 56 255 163 247 43 209 230 164 208 61 194 65 9 8 102 145 97 240 236 201 123 138 71 245 15 204 218 185 57 76 20 213 174 59 153 22 62 121 255 64 38 76 67 69 50 49 114 127 89 242 171 78 13 84 189 144 206 1 56 255 163 247 43 209 230 164 208 61 194 65 9 8 102 145 97 240 236 201 123 138 71 245 15 204 218 185 57 76 20 213 174 59 153 22 62 121 255 64 38 76 67 69 50 49 114 127 89 242 171 78 13 84 189 144 206 0 64 119 123 244 71 66 212 59 231 215 217 150 174 254 235 5 68 31 31 6 176 61 197 15 162 18 140 92 194 120 2 15 65 53 175 46 99 56 24 73 7 37 185 106 245 175 110 29 253 204 28 202 76 47 79 71 204 251 4 48 167 1 0 0 0 1 64 119 123 244 71 66 212 59 231 215 217 150 174 254 235 5 68 31 31 6 176 61 197 15 162 18 140 92 194 120 2 15 65 53 175 46 99 56 24 73 7 37 185 106 245 175 110 29 253 204 28 202 76 47 79 71 204 251 4 48 167 1 0 0 0 0 40 75 92 25 115 221 208 198 30 142 204 73 223 50 228 83 175 70 246 95 204 121 169 116 174 231 117 55 245 122 146 164 239 74 119 247 71 4 100 3 243 1 40 75 92 25 115 221 208 198 30 142 204 73 223 50 228 83 175 70 246 95 204 121 169 116 174 231 117 55 245 122 146 164 239 74 119 247 71 4 100 3 243 0 12 34 19 120 45 63 194 247 76 181 223 195 16 1 12 34 19 120 45 63 194 247 76 181 223 195 16 0 120 11 156 157 89 152 7 19 248 49 41 66 116 237 10 201 152 231 23 143 156 186 202 203 178 43 1 204 30 223 30 82 205 180 255 123 84 194 132 200 55 172 127 23 130 112 165 163 165 42 122 249 39 165 158 69 42 153 176 150 166 240 46 132 80 211 8 120 35 97 238 127 32 91 232 38 236 223 213 67 53 103 162 194 187 151 60 152 119 172 25 69 23 189 153 199 219 236 157 195 152 26 202 31 27 199 10 79 34 126 168 67 114 24 246 235 163 169 176 2 0 1 120 11 156 157 89 152 7 19 248 49 41 66 116 237 10 201 152 231 23 143 156 186 202 203 178 43 1 204 30 223 30 82 205 180 255 123 84 194 132 200 55 172 127 23 130 112 165 163 165 42 122 249 39 165 158 69 42 153 176 150 166 240 46 132 80 211 8 120 35 97 238 127 32 91 232 38 236 223 213 67 53 103 162 194 187 151 60 152 119 172 25 69 23 189 153 199 219 236 157 195 152 26 202 31 27 199 10 79 34 126 168 67 114 24 246 235 163 169 176 2 0 0 84 85 223 220 13 86 122 92 125 254 224 25 165 190 213 4 132 224 45 245 246 242 4 21 101 215 192 193 89 76 244 92 59 156 26 236 182 254 202 196 35 75 32 109 229 252 167 15 126 64 249 191 76 96 115 179 17 42 165 113 135 249 231 21 159 208 162 179 200 212 213 61 123 49 118 34 59 181 1 182 39 112 251 16 0 1 84 85 223 220 13 86 122 92 125 254 224 25 165 190 213 4 132 224 45 245 246 242 4 21 101 215 192 193 89 76 244 92 59 156 26 236 182 254 202 196 35 75 32 109 229 252 167 15 126 64 249 191 76 96 115 179 17 42 165 113 135 249 231 21 159 208 162 179 200 212 213 61 123 49 118 34 59 181 1 182 39 112 251 16 0 0 56 241 153 124 222 255 91 80 137 188 25 206 200 154 27 122 16 125 75 240 248 246 78 65 142 23 205 193 163 87 157 134 225 91 123 69 215 210 244 123 101 159 224 170 194 255 111 207 183 177 8 44 102 228 238 181 2 1 56 241 153 124 222 255 91 80 137 188 25 206 200 154 27 122 16 125 75 240 248 246 78 65 142 23 205 193 163 87 157 134 225 91 123 69 215 210 244 123 101 159 224 170 194 255 111 207 183 177 8 44 102 228 238 181 2 0 84 108 208 238 121 156 133 32 223 68 75 136 121 125 29 189 121 101 228 164 37 65 109 220 250 136 48 233 198 101 96 135 47 117 233 2 196 191 211 238 100 182 234 243 0 91 97 184 199 182 220 252 38 146 252 212 245 32 52 172 255 55 60 67 104 138 139 119 31 23 22 151 0 79 220 46 31 165 72 73 119 91 0 0 0 1 84 108 208 238 121 156 133 32 223 68 75 136 121 125 29 189 121 101 228 164 37 65 109 220 250 136 48 233 198 101 96 135 47 117 233 2 196 191 211 238 100 182 234 243 0 91 97 184 199 182 220 252 38 146 252 212 245 32 52 172 255 55 60 67 104 138 139 119 31 23 22 151 0 79 220 46 31 165 72 73 119 91 0 0 0 0 24 213 179 45 133 224 12 22 86 217 206 37 101 183 225 74 147 210 205 0 173 128 31 240 53 1 24 213 179 45 133 224 12 22 86 217 206 37 101 183 225 74 147 210 205 0 173 128 31 240 53 0 76 90 55 247 101 97 91 255 60 228 172 4 69 150 197 105 130 9 216 50 222 145 121 93 91 122 8 47 193 246 47 193 9 162 74 30 3 151 221 91 204 206 19 231 186 13 155 24 132 70 140 134 148 236 198 3 189 248 97 75 45 121 50 215 87 150 150 229 138 138 91 126 104 37 101 138 0 1 76 90 55 247 101 97 91 255 60 228 172 4 69 150 197 105 130 9 216 50 222 145 121 93 91 122 8 47 193 246 47 193 9 162 74 30 3 151 221 91 204 206 19 231 186 13 155 24 132 70 140 134 148 236 198 3 189 248 97 75 45 121 50 215 87 150 150 229 138 138 91 126 104 37 101 138 0 0 116 115 168 21 247 112 94 184 201 248 149 252 240 29 141 154 150 50 97 41 31 56 85 247 163 55 145 23 152 45 131 53 22 104 104 156 123 120 164 40 242 48 192 145 28 44 4 132 15 113 134 148 171 248 224 123 182 163 113 254 55 6 161 136 98 198 188 165 53 144 141 184 125 14 170 160 0 214 41 35 209 54 31 123 30 107 49 216 97 58 154 19 33 192 193 123 112 203 64 156 187 211 15 178 212 189 77 250 84 218 228 148 93 53 115 124 112 1 116 115 168 21 247 112 94 184 201 248 149 252 240 29 141 154 150 50 97 41 31 56 85 247 163 55 145 23 152 45 131 53 22 104 104 156 123 120 164 40 242 48 192 145 28 44 4 132 15 113 134 148 171 248 224 123 182 163 113 254 55 6 161 136 98 198 188 165 53 144 141 184 125 14 170 160 0 214 41 35 209 54 31 123 30 107 49 216 97 58 154 19 33 192 193 123 112 203 64 156 187 211 15 178 212 189 77 250 84 218 228 148 93 53 115 124 112 0 96 124 82 249 217 103 152 210 105 101 179 152 26 43 32 241 184 13 170 187 237 6 89 158 142 202 72 9 130 229 186 22 231 141 253 32 147 157 150 169 239 239 208 239 192 162 97 2 190 76 255 147 85 133 38 206 102 92 234 167 23 138 70 25 133 14 226 134 237 118 29 40 218 196 187 239 239 178 225 158 55 21 189 63 14 233 211 32 249 204 188 227 125 20 0 0 0 1 96 124 82 249 217 103 152 210 105 101 179 152 26 43 32 241 184 13 170 187 237 6 89 158 142 202 72 9 130 229 186 22 231 141 253 32 147 157 150 169 239 239 208 239 192 162 97 2 190 76 255 147 85 133 38 206 102 92 234 167 23 138 70 25 133 14 226 134 237 118 29 40 218 196 187 239 239 178 225 158 55 21 189 63 14 233 211 32 249 204 188 227 125 20 0 0 0 0 128 177 60 161 102 138 146 247 69 176 188 18 92 242 96 135 152 103 107 37 160 86 206 146 191 253 129 245 98 150 12 55 16 198 207 141 173 254 8 189 100 126 62 201 64 132 146 143 251 54 46 248 170 236 238 107 85 4 232 188 238 154 172 221 156 205 139 30 154 186 201 53 77 80 85 0 164 126 169 125 95 209 214 94 114 253 109 143 69 147 26 150 229 49 67 202 41 185 188 58 222 135 170 143 147 169 56 199 253 208 108 79 241 186 223 39 47 118 166 2 119 183 150 198 249 52 6 0 0 1 128 177 60 161 102 138 146 247 69 176 188 18 92 242 96 135 152 103 107 37 160 86 206 146 191 253 129 245 98 150 12 55 16 198 207 141 173 254 8 189 100 126 62 201 64 132 146 143 251 54 46 248 170 236 238 107 85 4 232 188 238 154 172 221 156 205 139 30 154 186 201 53 77 80 85 0 164 126 169 125 95 209 214 94 114 253 109 143 69 147 26 150 229 49 67 202 41 185 188 58 222 135 170 143 147 169 56 199 253 208 108 79 241 186 223 39 47 118 166 2 119 183 150 198 249 52 6 0 0 0 48 121 50 208 121 198 113 59 191 8 122 194 42 131 235 44 67 197 194 251 149 183 60 30 84 243 193 92 233 207 81 221 84 214 60 215 107 83 0 178 5 171 252 181 246 155 13 0 0 1 48 121 50 208 121 198 113 59 191 8 122 194 42 131 235 44 67 197 194 251 149 183 60 30 84 243 193 92 233 207 81 221 84 214 60 215 107 83 0 178 5 171 252 181 246 155 13 0 0 0 56 166 53 117 196 161 229 248 189 4 118 22 159 55 250 249 52 240 65 18 192 100 153 107 30 88 36 106 130 0 220 222 225 150 0 193 132 255 124 153 51 146 110 36 253 172 218 35 80 8 122 3 16 206 124 33 42 1 56 166 53 117 196 161 229 248 189 4 118 22 159 55 250 249 52 240 65 18 192 100 153 107 30 88 36 106 130 0 220 222 225 150 0 193 132 255 124 153 51 146 110 36 253 172 218 35 80 8 122 3 16 206 124 33 42 0 88 106 68 182 59 178 196 127 243 157 52 191 25 43 145 111 238 141 79 101 131 239 1 63 142 28 0 132 32 245 126 60 32 214 17 147 90 227 5 98 15 248 217 212 142 124 197 131 140 236 233 147 37 78 121 156 176 23 194 249 199 210 9 238 29 123 193 74 93 96 82 46 195 174 189 189 138 161 169 130 51 227 225 203 252 54 230 59 1 1 88 106 68 182 59 178 196 127 243 157 52 191 25 43 145 111 238 141 79 101 131 239 1 63 142 28 0 132 32 245 126 60 32 214 17 147 90 227 5 98 15 248 217 212 142 124 197 131 140 236 233 147 37 78 121 156 176 23 194 249 199 210 9 238 29 123 193 74 93 96 82 46 195 174 189 189 138 161 169 130 51 227 225 203 252 54 230 59 1 0 16 91 51 80 52 153 106 15 96 178 33 98 180 208 107 15 0 1 16 91 51 80 52 153 106 15 96 178 33 98 180 208 107 15 0 0 92 146 234 254 250 136 181 23 108 220 189 235 39 183 250 50 211 23 108 166 159 135 169 94 214 225 32 1 13 78 240 181 132 87 93 98 20 18 115 26 247 31 145 41 94 224 210 84 160 74 211 209 64 225 64 180 241 208 245 103 182 102 43 178 61 140 91 159 243 48 233 2 13 121 164 43 215 31 105 2 197 114 135 82 116 240 53 2 223 62 194 1 0 1 92 146 234 254 250 136 181 23 108 220 189 235 39 183 250 50 211 23 108 166 159 135 169 94 214 225 32 1 13 78 240 181 132 87 93 98 20 18 115 26 247 31 145 41 94 224 210 84 160 74 211 209 64 225 64 180 241 208 245 103 182 102 43 178 61 140 91 159 243 48 233 2 13 121 164 43 215 31 105 2 197 114 135 82 116 240 53 2 223 62 194 1 0 0 36 185 152 217 29 34 198 116 253 71 146 190 251 229 82 88 248 120 47 21 213 170 170 112 236 72 88 154 181 235 239 69 222 48 2 0 0 1 36 185 152 217 29 34 198 116 253 71 146 190 251 229 82 88 248 120 47 21 213 170 170 112 236 72 88 154 181 235 239 69 222 48 2 0 0 0 24 29 136 104 174 70 11 214 125 207 165 237 74 237 199 33 28 122 6 213 243 25 0 0 0 1 24 29 136 104 174 70 11 214 125 207 165 237 74 237 199 33 28 122 6 213 243 25 0 0 0 0 56 208 160 113 38 148 89 13 191 95 94 203 140 7 30 57 94 69 180 223 237 240 172 171 247 162 165 245 245 5 100 24 96 24 245 62 100 128 18 89 116 205 89 200 251 14 195 113 223 134 107 202 24 7 0 0 0 1 56 208 160 113 38 148 89 13 191 95 94 203 140 7 30 57 94 69 180 223 237 240 172 171 247 162 165 245 245 5 100 24 96 24 245 62 100 128 18 89 116 205 89 200 251 14 195 113 223 134 107 202 24 7 0 0 0 0 20 164 26 119 125 80 143 88 12 173 143 157 18 207 147 18 133 102 5 0 0 1 20 164 26 119 125 80 143 88 12 173 143 157 18 207 147 18 133 102 5 0 0 0 80 240 91 93 80 200 2 55 132 40 130 206 143 31 138 22 6 196 227 42 127 4 69 60 97 99 42 199 161 115 16 243 173 96 104 227 89 184 61 55 91 197 16 30 116 69 157 9 62 186 27 47 108 196 231 54 53 86 238 78 204 233 137 113 247 34 18 212 144 7 152 39 169 110 99 156 198 1 0 0 0 1 80 240 91 93 80 200 2 55 132 40 130 206 143 31 138 22 6 196 227 42 127 4 69 60 97 99 42 199 161 115 16 243 173 96 104 227 89 184 61 55 91 197 16 30 116 69 157 9 62 186 27 47 108 196 231 54 53 86 238 78 204 233 137 113 247 34 18 212 144 7 152 39 169 110 99 156 198 1 0 0 0 0 60 164 36 243 234 38 238 24 36 226 207 250 29 63 195 44 89 189 228 110 154 71 14 125 43 159 59 53 176 232 184 148 203 158 152 210 156 44 195 201 57 165 81 190 91 35 122 171 243 195 109 195 142 67 89 184 14 18 25 0 0 1 60 164 36 243 234 38 238 24 36 226 207 250 29 63 195 44 89 189 228 110 154 71 14 125 43 159 59 53 176 232 184 148 203 158 152 210 156 44 195 201 57 165 81 190 91 35 122 171 243 195 109 195 142 67 89 184 14 18 25 0 0 0 36 168 114 107 133 10 23 139 104 205 120 166 131 193 1 223 63 29 201 98 120 19 62 117 38 159 115 66 105 171 210 74 142 248 0 0 0 1 36 168 114 107 133 10 23 139 104 205 120 166 131 193 1 223 63 29 201 98 120 19 62 117 38 159 115 66 105 171 210 74 142 248 0 0 0 0 8 188 118 208 125 103 29 0 0 1 8 188 118 208 125 103 29 0 0 0 80 93 36 106 167 48 129 182 121 19 12 119 143 58 46 98 169 218 191 211 74 102 51 142 112 70 65 240 134 104 65 202 183 210 160 25 144 232 17 193 129 249 86 192 216 157 46 31 9 89 42 0 255 32 223 228 36 241 177 228 240 221 30 38 173 183 42 128 15 55 48 187 131 109 78 5 178 203 7 0 0 1 80 93 36 106 167 48 129 182 121 19 12 119 143 58 46 98 169 218 191 211 74 102 51 142 112 70 65 240 134 104 65 202 183 210 160 25 144 232 17 193 129 249 86 192 216 157 46 31 9 89 42 0 255 32 223 228 36 241 177 228 240 221 30 38 173 183 42 128 15 55 48 187 131 109 78 5 178 203 7 0 0 0 104 209 253 145 149 140 101 72 59 80 61 95 87 223 103 111 142 120 156 200 160 119 178 162 183 243 3 59 250 14 151 250 48 55 97 183 44 47 166 154 9 238 68 13 148 84 67 106 86 157 132 235 187 35 17 121 154 165 226 136 96 27 177 250 145 13 38 0 109 173 58 16 189 45 0 156 64 166 8 87 150 211 191 66 117 148 187 227 116 144 40 22 160 105 172 245 89 17 98 157 251 122 154 0 0 1 104 209 253 145 149 140 101 72 59 80 61 95 87 223 103 111 142 120 156 200 160 119 178 162 183 243 3 59 250 14 151 250 48 55 97 183 44 47 166 154 9 238 68 13 148 84 67 106 86 157 132 235 187 35 17 121 154 165 226 136 96 27 177 250 145 13 38 0 109 173 58 16 189 45 0 156 64 166 8 87 150 211 191 66 117 148 187 227 116 144 40 22 160 105 172 245 89 17 98 157 251 122 154 0 0 0 92 48 216 197 206 211 163 26 178 30 38 25 126 254 218 154 197 147 60 114 177 112 98 153 149 94 247 85 223 187 252 210 64 20 63 98 66 201 175 4 146 53 51 161 164 120 186 172 160 189 77 68 186 110 221 45 4 254 96 67 66 66 64 145 122 236 241 192 130 240 110 229 191 58 172 70 147 64 128 67 77 37 143 90 168 105 183 130 40 128 162 204 0 1 92 48 216 197 206 211 163 26 178 30 38 25 126 254 218 154 197 147 60 114 177 112 98 153 149 94 247 85 223 187 252 210 64 20 63 98 66 201 175 4 146 53 51 161 164 120 186 172 160 189 77 68 186 110 221 45 4 254 96 67 66 66 64 145 122 236 241 192 130 240 110 229 191 58 172 70 147 64 128 67 77 37 143 90 168 105 183 130 40 128 162 204 0 0 24 176 183 71 106 140 200 146 60 201 141 49 175 206 219 24 51 141 203 213 202 124 18 0 0 1 24 176 183 71 106 140 200 146 60 201 141 49 175 206 219 24 51 141 203 213 202 124 18 0 0 0 32 97 221 208 156 227 180 222 58 51 5 156 2 70 25 102 197 16 16 222 115 157 90 121 207 16 211 217 208 2 0 0 0 1 32 97 221 208 156 227 180 222 58 51 5 156 2 70 25 102 197 16 16 222 115 157 90 121 207 16 211 217 208 2 0 0 0 0 108 178 156 236 219 98 243 32 106 184 211 76 115 58 138 184 11 243 158 111 214 180 249 75 209 228 102 1 198 201 169 202 134 82 247 29 60 251 130 101 5 79 254 236 4 3 154 24 213 80 110 237 105 114 57 175 148 37 189 215 96 26 164 159 215 189 91 213 117 182 250 78 196 91 184 197 122 91 11 110 49 145 65 35 242 27 150 116 151 97 138 84 129 122 101 163 101 143 206 236 240 17 99 91 63 34 187 4 0 1 108 178 156 236 219 98 243 32 106 184 211 76 115 58 138 184 11 243 158 111 214 180 249 75 209 228 102 1 198 201 169 202 134 82 247 29 60 251 130 101 5 79 254 236 4 3 154 24 213 80 110 237 105 114 57 175 148 37 189 215 96 26 164 159 215 189 91 213 117 182 250 78 196 91 184 197 122 91 11 110 49 145 65 35 242 27 150 116 151 97 138 84 129 122 101 163 101 143 206 236 240 17 99 91 63 34 187 4 0 0 16 191 50 248 33 176 205 97 154 211 182 118 170 186 32 76 1 1 16 191 50 248 33 176 205 97 154 211 182 118 170 186 32 76 1 0 44 234 193 100 178 9 208 13 92 237 227 179 241 244 131 30 214 22 128 221 109 129 32 221 92 143 17 196 16 142 53 151 122 200 63 163 198 197 112 127 42 47 2 0 0 1 44 234 193 100 178 9 208 13 92 237 227 179 241 244 131 30 214 22 128 221 109 129 32 221 92 143 17 196 16 142 53 151 122 200 63 163 198 197 112 127 42 47 2 0 0 0 40 165 3 177 221 137 96 40 2 95 239 12 147 159 69 92 8 226 226 89 13 220 87 111 111 4 46 185 191 135 108 64 28 98 137 121 69 157 147 3 0 1 40 165 3 177 221 137 96 40 2 95 239 12 147 159 69 92 8 226 226 89 13 220 87 111 111 4 46 185 191 135 108 64 28 98 137 121 69 157 147 3 0 0 88 117 70 136 141 37 22 10 38 199 136 67 121 78 100 165 189 58 199 68 147 53 35 88 254 145 48 3 64 111 49 252 79 215 24 85 125 88 7 197 53 75 129 196 177 222 97 246 145 156 189 140 144 166 41 155 175 68 115 133 179 126 64 86 56 38 73 200 37 103 6 154 47 83 59 156 31 165 8 192 161 64 77 224 85 1 0 0 0 1 88 117 70 136 141 37 22 10 38 199 136 67 121 78 100 165 189 58 199 68 147 53 35 88 254 145 48 3 64 111 49 252 79 215 24 85 125 88 7 197 53 75 129 196 177 222 97 246 145 156 189 140 144 166 41 155 175 68 115 133 179 126 64 86 56 38 73 200 37 103 6 154 47 83 59 156 31 165 8 192 161 64 77 224 85 1 0 0 0 0 44 217 185 213 61 101 246 30 87 9 40 115 28 155 141 207 255 17 194 181 7 208 69 15 189 18 161 29 215 47 247 4 172 133 64 239 27 206 90 55 197 113 0 0 0 1 44 217 185 213 61 101 246 30 87 9 40 115 28 155 141 207 255 17 194 181 7 208 69 15 189 18 161 29 215 47 247 4 172 133 64 239 27 206 90 55 197 113 0 0 0 0 56 148 182 61 42 123 22 99 146 228 21 87 117 190 75 48 0 97 189 188 28 85 193 232 154 144 129 19 107 255 92 192 179 73 21 211 208 243 243 72 10 53 231 255 190 241 19 69 17 2 153 53 8 39 246 0 0 1 56 148 182 61 42 123 22 99 146 228 21 87 117 190 75 48 0 97 189 188 28 85 193 232 154 144 129 19 107 255 92 192 179 73 21 211 208 243 243 72 10 53 231 255 190 241 19 69 17 2 153 53 8 39 246 0 0 0 56 211 66 149 196 5 244 108 154 21 75 148 133 24 12 252 29 159 127 240 191 48 35 202 86 177 34 52 193 54 229 170 58 106 119 182 50 240 221 151 21 237 110 249 225 73 237 49 54 255 10 114 182 126 107 8 0 1 56 211 66 149 196 5 244 108 154 21 75 148 133 24 12 252 29 159 127 240 191 48 35 202 86 177 34 52 193 54 229 170 58 106 119 182 50 240 221 151 21 237 110 249 225 73 237 49 54 255 10 114 182 126 107 8 0 0 104 225 214 120 250 248 166 189 72 25 10 51 38 36 179 73 86 127 210 96 225 42 108 183 54 154 102 128 235 61 79 169 19 33 27 197 27 140 126 108 68 180 57 222 96 50 135 137 200 40 109 22 3 187 139 78 175 226 173 222 38 56 155 201 55 29 54 110 130 125 243 53 89 135 235 66 91 26 131 150 14 181 180 220 56 68 157 222 65 169 237 15 194 167 35 49 59 236 93 240 247 1 0 0 0 1 104 225 214 120 250 248 166 189 72 25 10 51 38 36 179 73 86 127 210 96 225 42 108 183 54 154 102 128 235 61 79 169 19 33 27 197 27 140 126 108 68 180 57 222 96 50 135 137 200 40 109 22 3 187 139 78 175 226 173 222 38 56 155 201 55 29 54 110 130 125 243 53 89 135 235 66 91 26 131 150 14 181 180 220 56 68 157 222 65 169 237 15 194 167 35 49 59 236 93 240 247 1 0 0 0 0 68 250 13 100 76 198 39 97 190 132 34 30 132 205 55 142 174 37 28 5 136 138 69 4 127 203 225 200 100 221 206 243 94 81 111 236 255 188 143 231 143 35 187 81 173 188 250 232 196 70 175 70 188 195 241 113 46 158 102 170 214 243 177 164 189 186 2 0 0 1 68 250 13 100 76 198 39 97 190 132 34 30 132 205 55 142 174 37 28 5 136 138 69 4 127 203 225 200 100 221 206 243 94 81 111 236 255 188 143 231 143 35 187 81 173 188 250 232 196 70 175 70 188 195 241 113 46 158 102 170 214 243 177 164 189 186 2 0 0 0 16 252 62 17 105 107 27 138 254 209 166 253 232 14 173 53 0 1 16 252 62 17 105 107 27 138 254 209 166 253 232 14 173 53 0 0 12 248 20 114 16 45 167 199 205 247 93 60 1 1 12 248 20 114 16 45 167 199 205 247 93 60 1 0 128 68 85 139 65 128 103 40 178 143 96 39 160 16 180 192 162 49 134 53 77 80 87 249 241 72 43 118 116 184 230 72 29 217 203 233 243 99 73 223 120 79 37 252 19 42 245 193 177 160 241 111 129 21 196 151 106 142 158 95 161 24 140 154 174 72 129 49 87 117 19 229 253 93 146 82 164 63 11 89 51 145 182 224 167 87 85 133 130 24 56 22 86 126 37 63 50 11 25 59 22 7 198 60 94 176 166 72 203 118 45 191 236 253 8 4 237 208 247 95 191 61 131 45 100 233 41 140 1 1 128 68 85 139 65 128 103 40 178 143 96 39 160 16 180 192 162 49 134 53 77 80 87 249 241 72 43 118 116 184 230 72 29 217 203 233 243 99 73 223 120 79 37 252 19 42 245 193 177 160 241 111 129 21 196 151 106 142 158 95 161 24 140 154 174 72 129 49 87 117 19 229 253 93 146 82 164 63 11 89 51 145 182 224 167 87 85 133 130 24 56 22 86 126 37 63 50 11 25 59 22 7 198 60 94 176 166 72 203 118 45 191 236 253 8 4 237 208 247 95 191 61 131 45 100 233 41 140 1 0 36 171 175 7 24 85 197 52 53 222 109 116 70 7 33 47 129 85 73 230 121 23 188 153 132 54 221 247 177 60 250 118 199 113 48 0 0 1 36 171 175 7 24 85 197 52 53 222 109 116 70 7 33 47 129 85 73 230 121 23 188 153 132 54 221 247 177 60 250 118 199 113 48 0 0 0 24 93 217 212 50 244 177 120 129 193 148 208 62 51 48 197 29 12 127 5 133 232 174 163 14 1 24 93 217 212 50 244 177 120 129 193 148 208 62 51 48 197 29 12 127 5 133 232 174 163 14 0 104 61 140 155 145 23 121 180 150 193 253 181 78 221 177 28 155 147 231 109 135 40 213 10 176 7 92 102 36 228 91 74 59 128 90 66 174 228 143 117 219 65 92 198 227 147 31 210 199 101 130 185 96 20 234 102 37 117 134 38 231 28 208 231 74 69 32 133 140 236 129 186 142 89 0 72 223 168 63 132 85 4 58 183 202 56 212 86 111 8 7 182 11 108 42 143 34 30 250 94 6 24 226 5 0 1 104 61 140 155 145 23 121 180 150 193 253 181 78 221 177 28 155 147 231 109 135 40 213 10 176 7 92 102 36 228 91 74 59 128 90 66 174 228 143 117 219 65 92 198 227 147 31 210 199 101 130 185 96 20 234 102 37 117 134 38 231 28 208 231 74 69 32 133 140 236 129 186 142 89 0 72 223 168 63 132 85 4 58 183 202 56 212 86 111 8 7 182 11 108 42 143 34 30 250 94 6 24 226 5 0 0 100 69 203 211 226 232 194 190 174 38 42 219 202 126 170 213 67 251 214 240 5 57 56 204 220 229 22 83 177 58 244 203 158 220 19 118 48 28 104 202 235 222 18 48 27 53 30 213 133 250 43 151 110 53 51 81 104 66 224 80 32 48 197 127 8 196 143 211 86 42 231 40 1 196 225 20 87 198 99 207 33 242 133 186 174 87 131 82 161 85 98 41 79 235 6 54 208 79 63 0 0 1 100 69 203 211 226 232 194 190 174 38 42 219 202 126 170 213 67 251 214 240 5 57 56 204 220 229 22 83 177 58 244 203 158 220 19 118 48 28 104 202 235 222 18 48 27 53 30 213 133 250 43 151 110 53 51 81 104 66 224 80 32 48 197 127 8 196 143 211 86 42 231 40 1 196 225 20 87 198 99 207 33 242 133 186 174 87 131 82 161 85 98 41 79 235 6 54 208 79 63 0 0 0 4 106 133 253 254 1 4 106 133 253 254 0 36 52 160 46 168 248 117 14 87 213 169 244 54 52 54 90 204 139 227 70 129 237 255 102 107 43 17 92 104 188 166 27 224 59 206 1 0 1 36 52 160 46 168 248 117 14 87 213 169 244 54 52 54 90 204 139 227 70 129 237 255 102 107 43 17 92 104 188 166 27 224 59 206 1 0 0 120 181 140 78 163 1 144 166 35 223 120 26 62 194 182 189 188 203 150 222 242 105 153 199 190 59 209 251 150 143 51 233 52 50 171 137 94 76 60 155 162 163 194 72 102 39 206 211 44 149 8 71 7 3 14 238 150 49 199 209 147 173 71 223 95 145 84 45 137 227 252 43 100 85 213 9 217 99 70 100 168 88 110 229 244 46 8 112 7 141 228 169 214 105 143 254 11 226 135 101 6 67 255 70 224 194 81 96 193 178 170 189 80 169 153 245 174 120 167 5 0 1 120 181 140 78 163 1 144 166 35 223 120 26 62 194 182 189 188 203 150 222 242 105 153 199 190 59 209 251 150 143 51 233 52 50 171 137 94 76 60 155 162 163 194 72 102 39 206 211 44 149 8 71 7 3 14 238 150 49 199 209 147 173 71 223 95 145 84 45 137 227 252 43 100 85 213 9 217 99 70 100 168 88 110 229 244 46 8 112 7 141 228 169 214 105 143 254 11 226 135 101 6 67 255 70 224 194 81 96 193 178 170 189 80 169 153 245 174 120 167 5 0 0 32 19 169 230 106 158 164 68 252 228 52 75 229 81 25 134 88 61 171 29 148 225 103 206 90 122 156 116 158 229 80 62 7 1 32 19 169 230 106 158 164 68 252 228 52 75 229 81 25 134 88 61 171 29 148 225 103 206 90 122 156 116 158 229 80 62 7 0 96 44 24 45 150 1 57 124 51 120 88 192 53 82 3 14 197 181 78 62 96 149 139 236 70 23 91 206 58 4 12 63 75 51 192 197 2 242 185 178 73 152 109 161 60 142 161 171 63 201 195 243 198 2 124 119 14 189 184 21 26 90 196 117 3 207 78 196 78 191 210 218 232 185 4 72 102 10 124 94 142 17 14 238 243 191 213 250 160 226 11 56 213 156 15 0 0 1 96 44 24 45 150 1 57 124 51 120 88 192 53 82 3 14 197 181 78 62 96 149 139 236 70 23 91 206 58 4 12 63 75 51 192 197 2 242 185 178 73 152 109 161 60 142 161 171 63 201 195 243 198 2 124 119 14 189 184 21 26 90 196 117 3 207 78 196 78 191 210 218 232 185 4 72 102 10 124 94 142 17 14 238 243 191 213 250 160 226 11 56 213 156 15 0 0 0 16 5 128 98 100 111 201 242 99 239 114 208 3 48 1 0 0 1 16 5 128 98 100 111 201 242 99 239 114 208 3 48 1 0 0 0 64 55 164 28 11 235 113 86 122 52 237 225 241 179 197 83 95 114 107 69 13 182 58 173 152 229 230 108 171 135 2 108 102 81 246 165 202 47 238 229 240 109 119 151 6 36 92 18 67 160 204 138 149 79 36 130 164 116 48 77 57 61 42 21 0 1 64 55 164 28 11 235 113 86 122 52 237 225 241 179 197 83 95 114 107 69 13 182 58 173 152 229 230 108 171 135 2 108 102 81 246 165 202 47 238 229 240 109 119 151 6 36 92 18 67 160 204 138 149 79 36 130 164 116 48 77 57 61 42 21 0 0 48 94 61 43 8 236 81 175 216 38 46 240 164 24 125 150 38 110 153 168 221 238 46 195 146 161 141 191 230 139 251 175 57 243 39 106 55 170 158 83 212 72 98 28 253 2 0 0 0 1 48 94 61 43 8 236 81 175 216 38 46 240 164 24 125 150 38 110 153 168 221 238 46 195 146 161 141 191 230 139 251 175 57 243 39 106 55 170 158 83 212 72 98 28 253 2 0 0 0 0 76 48 94 140 165 180 105 31 16 145 182 147 88 246 146 184 137 158 100 218 254 225 130 175 24 164 19 172 15 135 152 163 48 137 131 182 181 101 168 51 195 131 251 4 29 231 230 96 29 58 177 144 95 60 187 109 242 143 92 252 239 108 72 4 59 210 46 232 34 139 28 238 105 211 76 0 0 1 76 48 94 140 165 180 105 31 16 145 182 147 88 246 146 184 137 158 100 218 254 225 130 175 24 164 19 172 15 135 152 163 48 137 131 182 181 101 168 51 195 131 251 4 29 231 230 96 29 58 177 144 95 60 187 109 242 143 92 252 239 108 72 4 59 210 46 232 34 139 28 238 105 211 76 0 0 0 40 234 82 61 126 225 47 95 67 86 217 19 160 166 207 107 2 63 101 138 71 14 205 171 155 149 191 239 138 12 202 149 100 120 202 78 69 3 0 0 0 1 40 234 82 61 126 225 47 95 67 86 217 19 160 166 207 107 2 63 101 138 71 14 205 171 155 149 191 239 138 12 202 149 100 120 202 78 69 3 0 0 0 0 32 254 34 44 189 14 4 206 100 120 172 67 182 70 62 43 236 232 71 120 86 45 165 252 19 123 77 145 98 252 22 8 0 1 32 254 34 44 189 14 4 206 100 120 172 67 182 70 62 43 236 232 71 120 86 45 165 252 19 123 77 145 98 252 22 8 0 0 124 133 133 183 97 16 40 176 80 73 78 7 25 246 204 110 33 191 19 111 253 42 125 217 152 191 133 9 231 196 126 215 115 228 86 114 230 179 150 254 155 22 188 36 125 187 206 19 227 235 11 176 130 143 111 209 43 29 89 113 147 102 119 48 191 43 79 47 89 120 0 227 25 169 53 18 37 83 52 60 241 101 240 255 139 61 119 189 13 92 89 30 29 252 1 22 209 105 170 119 94 158 16 175 58 110 238 74 117 112 41 56 246 67 154 141 63 25 112 206 160 3 84 134 50 1 124 133 133 183 97 16 40 176 80 73 78 7 25 246 204 110 33 191 19 111 253 42 125 217 152 191 133 9 231 196 126 215 115 228 86 114 230 179 150 254 155 22 188 36 125 187 206 19 227 235 11 176 130 143 111 209 43 29 89 113 147 102 119 48 191 43 79 47 89 120 0 227 25 169 53 18 37 83 52 60 241 101 240 255 139 61 119 189 13 92 89 30 29 252 1 22 209 105 170 119 94 158 16 175 58 110 238 74 117 112 41 56 246 67 154 141 63 25 112 206 160 3 84 134 50 0 60 242 208 163 166 217 157 45 88 172 11 229 109 23 46 229 250 139 217 234 229 172 253 211 253 11 8 225 163 20 87 100 148 249 249 188 166 122 64 131 225 233 55 241 36 232 11 174 172 83 153 87 165 3 39 84 162 67 204 110 0 1 60 242 208 163 166 217 157 45 88 172 11 229 109 23 46 229 250 139 217 234 229 172 253 211 253 11 8 225 163 20 87 100 148 249 249 188 166 122 64 131 225 233 55 241 36 232 11 174 172 83 153 87 165 3 39 84 162 67 204 110 0 0 28 62 99 60 181 249 169 105 74 220 130 197 142 213 226 245 78 96 45 105 171 176 157 17 155 32 93 59 15 1 28 62 99 60 181 249 169 105 74 220 130 197 142 213 226 245 78 96 45 105 171 176 157 17 155 32 93 59 15
diff --git a/libs/multiprecision/test/cpp_int1024_serial64.txt b/libs/multiprecision/test/cpp_int1024_serial64.txt
new file mode 100644
index 0000000000..f41286bc61
--- /dev/null
+++ b/libs/multiprecision/test/cpp_int1024_serial64.txt
@@ -0,0 +1 @@
+22 serialization::archive 10 0 0 0 0 0 112 240 216 207 212 25 178 183 244 196 236 95 147 174 198 156 135 30 192 249 71 150 58 81 90 83 157 31 192 97 218 61 242 6 92 59 181 100 93 130 250 188 246 144 44 168 35 244 193 47 12 158 190 153 204 174 128 206 100 236 32 18 126 89 123 194 22 35 211 231 76 148 27 235 109 5 183 33 227 88 207 58 215 251 252 155 139 128 94 102 109 67 113 84 50 31 117 129 72 215 77 164 152 225 243 6 0 0 0 0 0 0 0 1 112 240 216 207 212 25 178 183 244 196 236 95 147 174 198 156 135 30 192 249 71 150 58 81 90 83 157 31 192 97 218 61 242 6 92 59 181 100 93 130 250 188 246 144 44 168 35 244 193 47 12 158 190 153 204 174 128 206 100 236 32 18 126 89 123 194 22 35 211 231 76 148 27 235 109 5 183 33 227 88 207 58 215 251 252 155 139 128 94 102 109 67 113 84 50 31 117 129 72 215 77 164 152 225 243 6 0 0 0 0 0 0 0 0 24 233 110 98 40 22 77 153 193 59 146 80 175 250 132 156 155 86 10 0 0 0 0 0 0 1 24 233 110 98 40 22 77 153 193 59 146 80 175 250 132 156 155 86 10 0 0 0 0 0 0 0 120 195 197 234 211 167 46 136 167 128 33 88 13 108 237 91 62 12 92 69 154 204 29 67 225 108 76 250 33 86 106 195 35 211 56 231 162 75 128 234 92 136 184 82 7 210 243 108 153 53 77 201 114 146 101 203 238 16 127 62 157 89 147 7 159 33 49 73 121 45 71 184 101 48 57 231 136 53 32 117 91 72 53 49 149 132 120 220 38 202 141 199 61 152 225 162 88 241 96 97 235 194 95 106 102 77 171 141 79 25 171 118 0 150 152 162 225 0 0 0 0 1 120 195 197 234 211 167 46 136 167 128 33 88 13 108 237 91 62 12 92 69 154 204 29 67 225 108 76 250 33 86 106 195 35 211 56 231 162 75 128 234 92 136 184 82 7 210 243 108 153 53 77 201 114 146 101 203 238 16 127 62 157 89 147 7 159 33 49 73 121 45 71 184 101 48 57 231 136 53 32 117 91 72 53 49 149 132 120 220 38 202 141 199 61 152 225 162 88 241 96 97 235 194 95 106 102 77 171 141 79 25 171 118 0 150 152 162 225 0 0 0 0 0 112 52 251 142 48 154 38 230 245 135 197 116 187 16 93 121 73 166 67 73 14 108 247 153 173 155 1 1 27 39 117 50 208 104 14 143 42 205 185 79 111 156 236 127 179 134 12 211 3 186 248 224 18 111 115 8 241 120 193 95 162 144 223 81 125 100 15 75 159 151 135 167 7 105 70 42 112 187 150 50 81 238 10 88 7 185 247 8 238 5 251 173 132 245 18 238 209 93 5 153 183 17 250 77 56 125 31 2 0 0 0 0 0 1 112 52 251 142 48 154 38 230 245 135 197 116 187 16 93 121 73 166 67 73 14 108 247 153 173 155 1 1 27 39 117 50 208 104 14 143 42 205 185 79 111 156 236 127 179 134 12 211 3 186 248 224 18 111 115 8 241 120 193 95 162 144 223 81 125 100 15 75 159 151 135 167 7 105 70 42 112 187 150 50 81 238 10 88 7 185 247 8 238 5 251 173 132 245 18 238 209 93 5 153 183 17 250 77 56 125 31 2 0 0 0 0 0 0 24 197 207 215 162 39 250 228 2 55 205 156 2 210 250 185 127 9 0 0 0 0 0 0 0 1 24 197 207 215 162 39 250 228 2 55 205 156 2 210 250 185 127 9 0 0 0 0 0 0 0 0 128 24 227 82 233 197 174 88 134 19 71 12 155 49 99 207 184 189 139 213 148 142 65 83 22 86 59 113 20 118 242 15 207 165 34 25 223 113 59 30 140 39 47 19 17 91 233 70 193 187 55 81 125 94 114 235 6 80 26 251 206 129 223 96 50 3 188 107 248 74 130 151 7 40 68 162 241 8 76 185 168 192 189 109 17 104 12 100 42 186 31 15 28 113 72 249 213 10 120 161 189 54 95 145 140 93 52 223 83 153 80 25 250 68 102 71 63 122 51 3 222 201 139 253 189 0 0 0 0 1 128 24 227 82 233 197 174 88 134 19 71 12 155 49 99 207 184 189 139 213 148 142 65 83 22 86 59 113 20 118 242 15 207 165 34 25 223 113 59 30 140 39 47 19 17 91 233 70 193 187 55 81 125 94 114 235 6 80 26 251 206 129 223 96 50 3 188 107 248 74 130 151 7 40 68 162 241 8 76 185 168 192 189 109 17 104 12 100 42 186 31 15 28 113 72 249 213 10 120 161 189 54 95 145 140 93 52 223 83 153 80 25 250 68 102 71 63 122 51 3 222 201 139 253 189 0 0 0 0 0 120 84 215 85 155 83 224 217 17 152 203 112 82 122 193 196 197 212 174 168 135 168 249 185 103 45 35 64 229 91 250 210 186 58 210 182 98 118 15 126 35 18 69 254 92 98 253 202 81 186 80 212 23 15 9 32 39 1 22 16 116 63 86 191 203 58 113 189 250 81 8 87 78 224 55 184 247 69 246 57 99 3 71 4 32 58 206 214 203 112 60 52 83 234 29 3 197 37 251 251 84 166 130 63 190 142 0 143 110 160 134 104 117 192 171 252 58 243 0 0 0 1 120 84 215 85 155 83 224 217 17 152 203 112 82 122 193 196 197 212 174 168 135 168 249 185 103 45 35 64 229 91 250 210 186 58 210 182 98 118 15 126 35 18 69 254 92 98 253 202 81 186 80 212 23 15 9 32 39 1 22 16 116 63 86 191 203 58 113 189 250 81 8 87 78 224 55 184 247 69 246 57 99 3 71 4 32 58 206 214 203 112 60 52 83 234 29 3 197 37 251 251 84 166 130 63 190 142 0 143 110 160 134 104 117 192 171 252 58 243 0 0 0 0 32 75 106 211 223 67 33 39 159 137 42 62 13 132 4 148 172 13 129 231 52 23 5 189 177 132 71 127 112 12 0 0 0 1 32 75 106 211 223 67 33 39 159 137 42 62 13 132 4 148 172 13 129 231 52 23 5 189 177 132 71 127 112 12 0 0 0 0 88 71 66 188 102 218 45 89 79 100 203 161 190 29 126 44 173 44 86 244 243 53 45 157 176 5 233 73 112 206 44 106 109 159 71 109 87 77 104 184 44 147 80 22 206 180 74 221 169 143 209 179 215 195 26 222 89 28 178 48 206 169 22 229 44 34 14 33 215 159 185 161 56 150 95 20 128 199 66 223 66 113 0 0 0 0 0 0 0 1 88 71 66 188 102 218 45 89 79 100 203 161 190 29 126 44 173 44 86 244 243 53 45 157 176 5 233 73 112 206 44 106 109 159 71 109 87 77 104 184 44 147 80 22 206 180 74 221 169 143 209 179 215 195 26 222 89 28 178 48 206 169 22 229 44 34 14 33 215 159 185 161 56 150 95 20 128 199 66 223 66 113 0 0 0 0 0 0 0 0 40 74 104 149 210 252 235 123 239 168 56 124 239 105 91 87 48 183 253 146 69 244 5 94 42 167 100 207 53 34 116 207 197 97 199 198 121 102 204 246 31 1 40 74 104 149 210 252 235 123 239 168 56 124 239 105 91 87 48 183 253 146 69 244 5 94 42 167 100 207 53 34 116 207 197 97 199 198 121 102 204 246 31 0 16 127 135 241 163 116 139 210 196 195 216 24 255 21 0 0 0 1 16 127 135 241 163 116 139 210 196 195 216 24 255 21 0 0 0 0 72 150 29 179 100 132 144 156 216 95 57 162 101 198 179 215 51 244 149 122 162 171 105 83 53 56 158 83 10 80 190 228 125 131 48 41 93 2 177 156 179 17 217 253 155 46 30 105 35 223 134 100 76 170 35 206 233 252 210 117 27 160 154 210 45 234 95 74 76 159 147 2 0 1 72 150 29 179 100 132 144 156 216 95 57 162 101 198 179 215 51 244 149 122 162 171 105 83 53 56 158 83 10 80 190 228 125 131 48 41 93 2 177 156 179 17 217 253 155 46 30 105 35 223 134 100 76 170 35 206 233 252 210 117 27 160 154 210 45 234 95 74 76 159 147 2 0 0 40 220 123 216 188 130 233 64 162 111 163 35 146 32 32 192 228 163 205 248 224 147 90 97 37 29 2 241 105 156 63 40 242 105 209 126 40 0 0 0 0 1 40 220 123 216 188 130 233 64 162 111 163 35 146 32 32 192 228 163 205 248 224 147 90 97 37 29 2 241 105 156 63 40 242 105 209 126 40 0 0 0 0 0 32 230 134 234 52 30 2 41 143 232 97 74 82 171 119 128 41 82 147 155 86 202 151 8 81 3 0 0 0 0 0 0 0 1 32 230 134 234 52 30 2 41 143 232 97 74 82 171 119 128 41 82 147 155 86 202 151 8 81 3 0 0 0 0 0 0 0 0 72 15 249 15 27 178 199 148 79 23 3 197 198 33 75 3 164 156 4 165 168 224 178 69 133 25 107 103 207 249 91 170 31 103 38 157 136 237 182 137 145 28 255 143 214 212 22 229 64 150 206 235 209 33 197 227 224 182 51 28 205 88 80 228 111 77 96 3 34 184 34 1 0 1 72 15 249 15 27 178 199 148 79 23 3 197 198 33 75 3 164 156 4 165 168 224 178 69 133 25 107 103 207 249 91 170 31 103 38 157 136 237 182 137 145 28 255 143 214 212 22 229 64 150 206 235 209 33 197 227 224 182 51 28 205 88 80 228 111 77 96 3 34 184 34 1 0 0 128 218 44 245 9 8 123 94 221 100 47 84 11 243 15 172 179 239 47 175 194 3 71 55 191 38 122 159 236 92 247 18 47 19 56 134 218 188 171 164 240 122 46 184 162 129 134 174 138 64 233 80 170 255 199 102 146 231 63 160 16 196 95 226 19 153 123 117 200 46 233 120 129 83 125 132 105 126 85 36 229 17 65 127 187 245 154 8 240 255 6 80 120 99 170 69 125 132 67 244 85 139 199 7 155 182 253 26 132 174 228 45 164 121 122 120 13 138 138 103 108 205 110 58 205 79 100 212 0 1 128 218 44 245 9 8 123 94 221 100 47 84 11 243 15 172 179 239 47 175 194 3 71 55 191 38 122 159 236 92 247 18 47 19 56 134 218 188 171 164 240 122 46 184 162 129 134 174 138 64 233 80 170 255 199 102 146 231 63 160 16 196 95 226 19 153 123 117 200 46 233 120 129 83 125 132 105 126 85 36 229 17 65 127 187 245 154 8 240 255 6 80 120 99 170 69 125 132 67 244 85 139 199 7 155 182 253 26 132 174 228 45 164 121 122 120 13 138 138 103 108 205 110 58 205 79 100 212 0 0 128 42 11 175 85 234 29 127 39 168 190 213 6 131 53 241 65 78 99 129 50 177 192 60 169 254 225 53 185 10 30 128 144 147 118 226 21 168 226 101 136 76 35 162 12 195 5 204 132 123 33 134 136 228 63 232 165 209 64 49 61 69 88 217 222 49 226 15 38 80 170 183 154 76 90 32 162 103 214 88 163 4 232 2 248 216 110 84 43 233 82 171 178 169 49 99 13 2 111 187 145 184 169 169 143 134 196 5 58 127 58 229 193 147 117 193 58 158 31 111 94 152 222 23 0 0 0 0 0 1 128 42 11 175 85 234 29 127 39 168 190 213 6 131 53 241 65 78 99 129 50 177 192 60 169 254 225 53 185 10 30 128 144 147 118 226 21 168 226 101 136 76 35 162 12 195 5 204 132 123 33 134 136 228 63 232 165 209 64 49 61 69 88 217 222 49 226 15 38 80 170 183 154 76 90 32 162 103 214 88 163 4 232 2 248 216 110 84 43 233 82 171 178 169 49 99 13 2 111 187 145 184 169 169 143 134 196 5 58 127 58 229 193 147 117 193 58 158 31 111 94 152 222 23 0 0 0 0 0 0 128 117 32 231 128 78 121 139 240 228 103 68 36 169 251 164 16 50 57 142 227 5 246 77 80 110 198 12 68 1 149 50 69 54 143 139 95 198 108 21 41 162 236 219 40 173 104 226 58 15 180 5 40 31 118 13 168 210 43 211 239 7 182 203 237 162 68 33 8 250 179 25 22 162 85 109 252 238 129 170 97 47 77 76 109 6 111 254 168 196 19 35 76 81 88 241 48 255 104 111 142 75 147 180 52 99 76 255 134 237 245 122 252 21 255 187 122 115 41 176 130 69 131 13 23 37 127 20 3 1 128 117 32 231 128 78 121 139 240 228 103 68 36 169 251 164 16 50 57 142 227 5 246 77 80 110 198 12 68 1 149 50 69 54 143 139 95 198 108 21 41 162 236 219 40 173 104 226 58 15 180 5 40 31 118 13 168 210 43 211 239 7 182 203 237 162 68 33 8 250 179 25 22 162 85 109 252 238 129 170 97 47 77 76 109 6 111 254 168 196 19 35 76 81 88 241 48 255 104 111 142 75 147 180 52 99 76 255 134 237 245 122 252 21 255 187 122 115 41 176 130 69 131 13 23 37 127 20 3 0 128 225 196 245 38 129 95 130 255 14 194 101 192 198 28 5 135 65 33 59 109 254 232 229 27 245 239 185 134 58 127 181 232 77 234 159 110 69 82 234 174 133 243 107 210 244 202 250 155 41 109 253 34 38 165 23 103 75 242 126 154 90 16 155 40 180 198 123 44 56 133 74 228 20 41 104 110 42 251 181 50 43 108 181 28 98 126 48 202 202 240 10 236 228 75 105 111 132 35 221 75 171 251 197 139 242 114 49 206 195 33 149 113 119 94 226 71 220 139 93 218 202 156 199 9 0 0 0 0 1 128 225 196 245 38 129 95 130 255 14 194 101 192 198 28 5 135 65 33 59 109 254 232 229 27 245 239 185 134 58 127 181 232 77 234 159 110 69 82 234 174 133 243 107 210 244 202 250 155 41 109 253 34 38 165 23 103 75 242 126 154 90 16 155 40 180 198 123 44 56 133 74 228 20 41 104 110 42 251 181 50 43 108 181 28 98 126 48 202 202 240 10 236 228 75 105 111 132 35 221 75 171 251 197 139 242 114 49 206 195 33 149 113 119 94 226 71 220 139 93 218 202 156 199 9 0 0 0 0 0 128 130 190 211 115 201 224 67 206 209 66 76 220 164 193 3 192 104 19 174 139 21 103 49 247 223 227 161 141 190 242 11 120 201 238 152 120 157 159 206 140 138 29 151 173 117 118 102 209 136 234 50 127 131 161 166 19 148 165 245 82 205 11 104 226 229 91 148 136 10 234 81 120 171 169 131 54 235 207 59 211 127 77 24 204 157 197 253 233 237 199 174 3 72 33 142 5 218 73 26 111 135 205 112 166 233 98 13 15 33 27 131 103 119 191 23 179 123 179 24 99 136 111 206 103 0 0 0 0 1 128 130 190 211 115 201 224 67 206 209 66 76 220 164 193 3 192 104 19 174 139 21 103 49 247 223 227 161 141 190 242 11 120 201 238 152 120 157 159 206 140 138 29 151 173 117 118 102 209 136 234 50 127 131 161 166 19 148 165 245 82 205 11 104 226 229 91 148 136 10 234 81 120 171 169 131 54 235 207 59 211 127 77 24 204 157 197 253 233 237 199 174 3 72 33 142 5 218 73 26 111 135 205 112 166 233 98 13 15 33 27 131 103 119 191 23 179 123 179 24 99 136 111 206 103 0 0 0 0 0 24 236 146 150 122 80 138 70 55 218 171 50 71 53 136 214 55 85 125 93 128 4 0 0 0 1 24 236 146 150 122 80 138 70 55 218 171 50 71 53 136 214 55 85 125 93 128 4 0 0 0 0 96 168 120 24 52 192 139 221 73 242 242 97 74 214 206 178 206 134 205 255 80 249 81 103 62 255 235 105 87 255 215 122 234 6 85 194 142 4 80 39 228 210 83 78 57 126 13 175 79 207 117 247 77 43 53 164 8 185 89 108 206 201 3 63 111 26 179 169 0 252 20 51 5 213 56 133 204 63 19 45 245 58 168 12 87 82 182 175 2 1 111 83 252 59 0 0 0 1 96 168 120 24 52 192 139 221 73 242 242 97 74 214 206 178 206 134 205 255 80 249 81 103 62 255 235 105 87 255 215 122 234 6 85 194 142 4 80 39 228 210 83 78 57 126 13 175 79 207 117 247 77 43 53 164 8 185 89 108 206 201 3 63 111 26 179 169 0 252 20 51 5 213 56 133 204 63 19 45 245 58 168 12 87 82 182 175 2 1 111 83 252 59 0 0 0 0 128 185 132 187 44 241 228 100 105 22 119 238 94 124 126 113 117 10 214 51 133 149 172 201 211 213 121 160 34 164 142 116 97 112 84 155 255 6 108 94 78 4 233 188 142 66 190 97 40 135 40 45 103 104 89 35 225 9 229 254 125 210 134 186 83 219 39 156 96 79 116 202 44 226 193 33 197 237 19 205 187 104 142 222 208 110 38 156 236 173 194 237 92 12 94 102 228 230 145 128 127 23 155 108 123 159 28 189 122 77 188 51 141 193 44 74 135 72 161 176 196 25 238 215 249 1 0 0 0 1 128 185 132 187 44 241 228 100 105 22 119 238 94 124 126 113 117 10 214 51 133 149 172 201 211 213 121 160 34 164 142 116 97 112 84 155 255 6 108 94 78 4 233 188 142 66 190 97 40 135 40 45 103 104 89 35 225 9 229 254 125 210 134 186 83 219 39 156 96 79 116 202 44 226 193 33 197 237 19 205 187 104 142 222 208 110 38 156 236 173 194 237 92 12 94 102 228 230 145 128 127 23 155 108 123 159 28 189 122 77 188 51 141 193 44 74 135 72 161 176 196 25 238 215 249 1 0 0 0 0 128 196 189 1 242 155 244 232 152 101 227 3 217 39 244 236 150 9 178 16 175 212 22 120 54 105 227 225 242 229 156 121 86 139 227 54 127 184 190 41 133 3 17 52 18 138 148 221 246 233 48 84 88 59 192 24 21 252 227 123 179 109 113 77 255 247 152 43 152 181 143 190 106 157 133 109 3 97 155 223 142 24 220 123 209 115 48 134 39 181 47 225 199 64 0 47 19 50 112 64 18 160 79 199 188 82 123 15 244 22 146 43 21 149 157 118 9 188 127 178 30 174 37 125 174 1 17 0 0 1 128 196 189 1 242 155 244 232 152 101 227 3 217 39 244 236 150 9 178 16 175 212 22 120 54 105 227 225 242 229 156 121 86 139 227 54 127 184 190 41 133 3 17 52 18 138 148 221 246 233 48 84 88 59 192 24 21 252 227 123 179 109 113 77 255 247 152 43 152 181 143 190 106 157 133 109 3 97 155 223 142 24 220 123 209 115 48 134 39 181 47 225 199 64 0 47 19 50 112 64 18 160 79 199 188 82 123 15 244 22 146 43 21 149 157 118 9 188 127 178 30 174 37 125 174 1 17 0 0 0 128 125 72 103 215 83 251 97 191 63 231 211 75 247 3 48 39 242 99 75 38 207 10 64 114 118 90 122 122 77 183 190 7 147 103 181 244 49 65 243 162 67 68 8 208 134 116 48 95 95 233 35 252 112 16 102 203 11 124 40 193 161 239 28 210 11 139 204 89 203 38 245 182 150 96 26 18 46 113 77 175 20 177 91 174 135 42 135 219 19 174 215 57 19 213 152 24 76 23 175 160 29 5 177 176 24 219 163 255 97 214 199 54 191 77 15 45 73 191 156 156 85 231 7 0 0 0 0 0 1 128 125 72 103 215 83 251 97 191 63 231 211 75 247 3 48 39 242 99 75 38 207 10 64 114 118 90 122 122 77 183 190 7 147 103 181 244 49 65 243 162 67 68 8 208 134 116 48 95 95 233 35 252 112 16 102 203 11 124 40 193 161 239 28 210 11 139 204 89 203 38 245 182 150 96 26 18 46 113 77 175 20 177 91 174 135 42 135 219 19 174 215 57 19 213 152 24 76 23 175 160 29 5 177 176 24 219 163 255 97 214 199 54 191 77 15 45 73 191 156 156 85 231 7 0 0 0 0 0 0 16 252 17 170 79 122 224 151 223 165 53 141 155 37 87 4 0 1 16 252 17 170 79 122 224 151 223 165 53 141 155 37 87 4 0 0 64 137 35 96 204 136 177 189 143 1 212 169 28 91 106 152 238 147 179 84 155 35 195 77 99 22 143 175 243 178 108 188 125 52 89 146 208 125 21 94 228 98 194 201 165 96 57 144 208 56 103 133 48 45 120 4 182 247 48 112 89 188 153 1 0 1 64 137 35 96 204 136 177 189 143 1 212 169 28 91 106 152 238 147 179 84 155 35 195 77 99 22 143 175 243 178 108 188 125 52 89 146 208 125 21 94 228 98 194 201 165 96 57 144 208 56 103 133 48 45 120 4 182 247 48 112 89 188 153 1 0 0 104 243 59 23 181 19 206 54 217 4 43 183 169 25 245 43 129 181 198 110 56 213 123 240 160 71 185 170 96 174 21 188 158 209 73 67 245 248 18 139 233 181 53 185 30 209 172 198 74 139 145 21 133 168 4 186 236 48 15 19 25 234 227 177 154 240 64 215 74 77 178 193 160 155 223 234 55 201 144 185 140 71 87 18 218 192 168 98 86 67 205 126 50 211 88 59 69 53 208 210 119 1 82 1 0 1 104 243 59 23 181 19 206 54 217 4 43 183 169 25 245 43 129 181 198 110 56 213 123 240 160 71 185 170 96 174 21 188 158 209 73 67 245 248 18 139 233 181 53 185 30 209 172 198 74 139 145 21 133 168 4 186 236 48 15 19 25 234 227 177 154 240 64 215 74 77 178 193 160 155 223 234 55 201 144 185 140 71 87 18 218 192 168 98 86 67 205 126 50 211 88 59 69 53 208 210 119 1 82 1 0 0 104 30 237 199 208 43 126 134 188 221 77 44 64 109 31 47 206 70 172 101 140 66 232 0 138 101 218 81 243 45 157 119 221 30 64 253 209 50 12 45 150 152 200 9 167 220 210 114 70 151 149 141 34 162 151 188 82 189 246 149 204 99 143 240 240 11 119 55 107 27 196 176 61 52 227 44 160 102 215 226 28 36 252 136 5 162 100 95 194 183 2 28 199 117 193 177 41 170 115 62 93 181 186 1 0 1 104 30 237 199 208 43 126 134 188 221 77 44 64 109 31 47 206 70 172 101 140 66 232 0 138 101 218 81 243 45 157 119 221 30 64 253 209 50 12 45 150 152 200 9 167 220 210 114 70 151 149 141 34 162 151 188 82 189 246 149 204 99 143 240 240 11 119 55 107 27 196 176 61 52 227 44 160 102 215 226 28 36 252 136 5 162 100 95 194 183 2 28 199 117 193 177 41 170 115 62 93 181 186 1 0 0 40 53 120 130 161 159 72 98 85 190 182 236 225 240 60 214 46 141 103 182 195 63 222 96 51 133 198 58 90 110 132 208 137 203 153 172 98 79 220 0 0 1 40 53 120 130 161 159 72 98 85 190 182 236 225 240 60 214 46 141 103 182 195 63 222 96 51 133 198 58 90 110 132 208 137 203 153 172 98 79 220 0 0 0 24 118 29 12 161 58 173 221 244 97 16 129 132 213 223 100 52 220 195 7 0 0 0 0 0 1 24 118 29 12 161 58 173 221 244 97 16 129 132 213 223 100 52 220 195 7 0 0 0 0 0 0 8 48 0 0 0 0 0 0 0 1 8 48 0 0 0 0 0 0 0 0 56 231 92 254 163 124 164 150 140 111 46 208 48 245 131 79 191 167 93 72 251 225 197 183 198 127 122 236 47 16 214 74 14 201 193 171 20 118 155 238 33 155 90 192 58 99 154 59 127 53 8 120 227 43 170 1 0 1 56 231 92 254 163 124 164 150 140 111 46 208 48 245 131 79 191 167 93 72 251 225 197 183 198 127 122 236 47 16 214 74 14 201 193 171 20 118 155 238 33 155 90 192 58 99 154 59 127 53 8 120 227 43 170 1 0 0 16 251 177 154 124 124 51 12 184 170 246 21 206 136 0 6 0 1 16 251 177 154 124 124 51 12 184 170 246 21 206 136 0 6 0 0 120 135 228 154 97 97 37 218 64 185 90 19 175 246 80 210 161 113 157 100 67 139 11 67 170 100 55 10 137 62 200 98 216 164 1 43 71 31 156 64 144 57 219 81 105 211 65 2 203 127 45 87 116 177 120 38 220 221 127 219 9 89 68 112 249 96 102 183 83 157 239 104 243 95 199 142 2 33 66 225 186 67 111 177 72 133 48 17 239 26 98 202 8 125 61 65 118 6 55 147 154 167 90 0 162 128 74 17 187 146 174 37 228 190 12 117 100 32 3 0 0 1 120 135 228 154 97 97 37 218 64 185 90 19 175 246 80 210 161 113 157 100 67 139 11 67 170 100 55 10 137 62 200 98 216 164 1 43 71 31 156 64 144 57 219 81 105 211 65 2 203 127 45 87 116 177 120 38 220 221 127 219 9 89 68 112 249 96 102 183 83 157 239 104 243 95 199 142 2 33 66 225 186 67 111 177 72 133 48 17 239 26 98 202 8 125 61 65 118 6 55 147 154 167 90 0 162 128 74 17 187 146 174 37 228 190 12 117 100 32 3 0 0 0 88 26 161 163 242 118 221 0 66 192 252 133 199 57 227 98 231 11 157 63 23 214 37 26 128 100 49 131 94 235 250 249 147 154 51 50 25 98 235 243 5 108 187 118 252 12 79 151 103 7 110 124 8 167 181 214 104 91 65 119 78 66 98 82 217 239 238 114 229 245 1 243 155 98 149 133 248 106 172 101 16 223 244 0 0 0 0 0 0 1 88 26 161 163 242 118 221 0 66 192 252 133 199 57 227 98 231 11 157 63 23 214 37 26 128 100 49 131 94 235 250 249 147 154 51 50 25 98 235 243 5 108 187 118 252 12 79 151 103 7 110 124 8 167 181 214 104 91 65 119 78 66 98 82 217 239 238 114 229 245 1 243 155 98 149 133 248 106 172 101 16 223 244 0 0 0 0 0 0 0 104 51 242 193 71 40 33 244 183 39 87 209 231 123 23 102 244 164 169 195 247 118 193 238 212 202 61 62 28 173 71 226 3 123 32 247 24 21 127 54 196 17 12 180 107 10 66 175 208 88 113 145 18 93 77 231 82 5 172 142 122 173 202 80 213 151 67 189 246 154 57 40 60 62 225 173 49 197 99 197 109 106 160 126 116 179 205 235 122 139 21 129 249 231 216 211 119 4 117 66 52 193 10 0 0 1 104 51 242 193 71 40 33 244 183 39 87 209 231 123 23 102 244 164 169 195 247 118 193 238 212 202 61 62 28 173 71 226 3 123 32 247 24 21 127 54 196 17 12 180 107 10 66 175 208 88 113 145 18 93 77 231 82 5 172 142 122 173 202 80 213 151 67 189 246 154 57 40 60 62 225 173 49 197 99 197 109 106 160 126 116 179 205 235 122 139 21 129 249 231 216 211 119 4 117 66 52 193 10 0 0 0 120 117 133 12 7 22 147 126 60 222 126 15 234 208 110 144 185 13 98 7 11 209 57 121 79 194 58 253 148 206 85 251 165 5 213 112 244 92 244 25 196 40 68 91 10 147 74 13 72 165 3 119 45 32 170 129 46 133 146 166 13 69 50 36 228 124 251 190 233 4 155 225 95 178 231 135 226 223 143 88 24 162 178 240 101 140 125 124 184 151 110 254 193 242 30 230 88 55 219 178 42 54 111 9 248 91 46 181 248 183 164 152 211 7 0 0 0 0 0 0 0 1 120 117 133 12 7 22 147 126 60 222 126 15 234 208 110 144 185 13 98 7 11 209 57 121 79 194 58 253 148 206 85 251 165 5 213 112 244 92 244 25 196 40 68 91 10 147 74 13 72 165 3 119 45 32 170 129 46 133 146 166 13 69 50 36 228 124 251 190 233 4 155 225 95 178 231 135 226 223 143 88 24 162 178 240 101 140 125 124 184 151 110 254 193 242 30 230 88 55 219 178 42 54 111 9 248 91 46 181 248 183 164 152 211 7 0 0 0 0 0 0 0 0 128 63 77 192 16 39 116 41 118 84 43 197 253 236 106 62 1 183 234 241 28 170 49 21 191 231 212 161 33 61 235 39 160 228 125 57 52 78 189 69 47 1 79 177 75 103 238 153 2 38 182 148 88 116 210 38 64 96 188 136 248 75 74 182 169 213 110 205 104 170 28 203 171 146 250 72 188 184 135 129 123 246 18 94 241 239 179 131 133 192 152 204 226 228 3 166 119 222 138 54 116 129 186 64 160 210 30 139 163 195 186 2 85 155 194 170 83 132 36 74 216 27 254 85 0 0 0 0 0 1 128 63 77 192 16 39 116 41 118 84 43 197 253 236 106 62 1 183 234 241 28 170 49 21 191 231 212 161 33 61 235 39 160 228 125 57 52 78 189 69 47 1 79 177 75 103 238 153 2 38 182 148 88 116 210 38 64 96 188 136 248 75 74 182 169 213 110 205 104 170 28 203 171 146 250 72 188 184 135 129 123 246 18 94 241 239 179 131 133 192 152 204 226 228 3 166 119 222 138 54 116 129 186 64 160 210 30 139 163 195 186 2 85 155 194 170 83 132 36 74 216 27 254 85 0 0 0 0 0 0 72 216 172 85 194 158 216 82 110 65 133 85 128 49 103 72 173 54 61 199 26 210 206 103 163 37 220 221 193 233 238 254 54 206 213 124 6 203 165 26 21 241 141 165 246 128 184 43 72 242 66 159 97 79 134 33 147 97 136 247 186 217 103 81 199 29 0 0 0 0 0 0 0 1 72 216 172 85 194 158 216 82 110 65 133 85 128 49 103 72 173 54 61 199 26 210 206 103 163 37 220 221 193 233 238 254 54 206 213 124 6 203 165 26 21 241 141 165 246 128 184 43 72 242 66 159 97 79 134 33 147 97 136 247 186 217 103 81 199 29 0 0 0 0 0 0 0 0 88 198 204 237 247 146 195 97 49 165 23 187 22 34 150 126 136 183 220 165 82 194 13 172 190 161 249 20 192 177 147 243 49 113 56 111 194 238 6 98 97 129 35 110 42 246 44 179 219 221 190 182 94 40 254 25 246 171 109 11 181 1 138 90 3 209 233 133 179 57 67 179 0 223 103 18 74 138 136 231 35 199 161 29 157 1 0 0 0 1 88 198 204 237 247 146 195 97 49 165 23 187 22 34 150 126 136 183 220 165 82 194 13 172 190 161 249 20 192 177 147 243 49 113 56 111 194 238 6 98 97 129 35 110 42 246 44 179 219 221 190 182 94 40 254 25 246 171 109 11 181 1 138 90 3 209 233 133 179 57 67 179 0 223 103 18 74 138 136 231 35 199 161 29 157 1 0 0 0 0 104 200 111 223 113 76 183 17 189 185 203 122 115 218 100 205 191 105 223 132 140 147 126 199 180 195 206 12 73 110 39 71 147 85 229 115 193 236 45 39 98 81 104 24 231 243 122 80 84 171 200 163 28 188 108 159 81 0 102 179 40 112 195 41 169 248 78 181 155 111 130 188 233 129 78 9 71 59 223 40 71 154 214 88 94 144 232 156 144 221 110 76 114 52 34 145 84 178 218 142 15 103 173 3 0 1 104 200 111 223 113 76 183 17 189 185 203 122 115 218 100 205 191 105 223 132 140 147 126 199 180 195 206 12 73 110 39 71 147 85 229 115 193 236 45 39 98 81 104 24 231 243 122 80 84 171 200 163 28 188 108 159 81 0 102 179 40 112 195 41 169 248 78 181 155 111 130 188 233 129 78 9 71 59 223 40 71 154 214 88 94 144 232 156 144 221 110 76 114 52 34 145 84 178 218 142 15 103 173 3 0 0 8 177 137 11 132 66 0 0 0 1 8 177 137 11 132 66 0 0 0 0 48 33 167 44 60 43 5 212 10 233 199 142 141 206 188 38 153 75 245 28 138 78 90 196 228 196 226 63 171 99 123 61 129 93 169 246 14 54 98 199 66 102 119 74 122 163 104 13 0 1 48 33 167 44 60 43 5 212 10 233 199 142 141 206 188 38 153 75 245 28 138 78 90 196 228 196 226 63 171 99 123 61 129 93 169 246 14 54 98 199 66 102 119 74 122 163 104 13 0 0 112 13 142 178 152 223 193 158 172 255 203 197 100 76 79 42 99 97 196 198 42 60 211 249 142 174 154 123 158 254 134 251 235 151 207 55 209 178 137 7 234 137 81 211 255 191 135 78 179 11 30 121 13 152 88 34 61 56 32 249 153 111 6 135 83 62 197 83 191 163 251 20 161 116 248 36 161 123 44 251 45 216 82 212 120 237 125 134 142 89 7 182 228 191 54 121 104 50 110 8 142 248 42 214 76 253 13 190 143 50 0 0 0 1 112 13 142 178 152 223 193 158 172 255 203 197 100 76 79 42 99 97 196 198 42 60 211 249 142 174 154 123 158 254 134 251 235 151 207 55 209 178 137 7 234 137 81 211 255 191 135 78 179 11 30 121 13 152 88 34 61 56 32 249 153 111 6 135 83 62 197 83 191 163 251 20 161 116 248 36 161 123 44 251 45 216 82 212 120 237 125 134 142 89 7 182 228 191 54 121 104 50 110 8 142 248 42 214 76 253 13 190 143 50 0 0 0 0 32 135 115 67 224 57 26 67 50 161 116 97 239 175 143 9 168 232 95 142 29 48 16 121 194 48 241 158 6 0 0 0 0 1 32 135 115 67 224 57 26 67 50 161 116 97 239 175 143 9 168 232 95 142 29 48 16 121 194 48 241 158 6 0 0 0 0 0 120 179 69 194 42 93 120 64 237 75 176 251 199 63 49 12 217 68 117 60 17 14 70 160 57 29 60 226 156 164 120 98 6 241 147 20 139 159 7 106 210 46 18 44 209 147 45 254 121 230 97 80 19 35 222 34 109 179 236 84 205 123 213 217 33 100 118 217 223 98 205 210 213 162 16 151 66 225 173 235 73 110 112 76 172 232 124 30 64 29 119 3 178 184 119 33 176 53 248 40 157 126 127 125 242 209 202 221 233 124 59 53 81 231 151 52 49 122 224 122 27 1 120 179 69 194 42 93 120 64 237 75 176 251 199 63 49 12 217 68 117 60 17 14 70 160 57 29 60 226 156 164 120 98 6 241 147 20 139 159 7 106 210 46 18 44 209 147 45 254 121 230 97 80 19 35 222 34 109 179 236 84 205 123 213 217 33 100 118 217 223 98 205 210 213 162 16 151 66 225 173 235 73 110 112 76 172 232 124 30 64 29 119 3 178 184 119 33 176 53 248 40 157 126 127 125 242 209 202 221 233 124 59 53 81 231 151 52 49 122 224 122 27 0 88 202 249 247 72 190 100 43 14 53 119 130 14 137 197 240 200 81 190 103 225 158 134 179 33 43 177 147 126 191 141 162 245 224 193 132 144 147 134 16 189 234 157 212 246 176 172 112 191 110 66 141 195 94 234 133 171 20 190 248 55 25 132 147 148 135 183 201 74 89 229 183 214 200 16 91 233 10 37 163 27 133 153 134 93 213 152 142 7 1 88 202 249 247 72 190 100 43 14 53 119 130 14 137 197 240 200 81 190 103 225 158 134 179 33 43 177 147 126 191 141 162 245 224 193 132 144 147 134 16 189 234 157 212 246 176 172 112 191 110 66 141 195 94 234 133 171 20 190 248 55 25 132 147 148 135 183 201 74 89 229 183 214 200 16 91 233 10 37 163 27 133 153 134 93 213 152 142 7 0 88 77 103 16 15 148 98 115 149 166 118 218 10 199 232 124 175 175 165 211 217 182 127 122 39 230 51 107 111 80 51 18 145 177 162 46 2 119 80 163 33 253 187 253 121 34 222 134 85 8 230 102 107 120 117 240 151 81 89 38 47 90 107 129 149 16 144 78 38 26 58 78 61 163 182 119 241 129 192 139 249 183 46 39 109 17 15 240 0 1 88 77 103 16 15 148 98 115 149 166 118 218 10 199 232 124 175 175 165 211 217 182 127 122 39 230 51 107 111 80 51 18 145 177 162 46 2 119 80 163 33 253 187 253 121 34 222 134 85 8 230 102 107 120 117 240 151 81 89 38 47 90 107 129 149 16 144 78 38 26 58 78 61 163 182 119 241 129 192 139 249 183 46 39 109 17 15 240 0 0 56 234 213 76 110 121 53 109 162 71 58 96 120 32 67 142 4 161 13 37 85 104 226 206 115 224 160 35 117 179 108 202 225 198 59 157 91 182 20 254 20 5 196 54 221 64 27 198 127 155 96 99 2 0 0 0 0 1 56 234 213 76 110 121 53 109 162 71 58 96 120 32 67 142 4 161 13 37 85 104 226 206 115 224 160 35 117 179 108 202 225 198 59 157 91 182 20 254 20 5 196 54 221 64 27 198 127 155 96 99 2 0 0 0 0 0 104 130 27 80 132 149 206 104 74 186 108 76 162 61 90 101 136 56 238 26 128 103 13 215 175 217 2 94 203 185 103 235 57 73 179 67 251 148 153 157 188 175 176 9 190 11 144 240 204 176 77 140 59 173 23 41 195 49 211 129 99 226 89 41 61 117 216 244 229 187 66 250 141 7 162 242 64 30 74 137 170 157 234 46 180 106 67 91 184 254 133 132 150 83 202 121 109 229 1 0 0 0 0 0 0 1 104 130 27 80 132 149 206 104 74 186 108 76 162 61 90 101 136 56 238 26 128 103 13 215 175 217 2 94 203 185 103 235 57 73 179 67 251 148 153 157 188 175 176 9 190 11 144 240 204 176 77 140 59 173 23 41 195 49 211 129 99 226 89 41 61 117 216 244 229 187 66 250 141 7 162 242 64 30 74 137 170 157 234 46 180 106 67 91 184 254 133 132 150 83 202 121 109 229 1 0 0 0 0 0 0 0 96 180 177 20 52 197 85 168 138 255 101 101 71 208 219 45 169 123 61 167 239 15 8 52 226 172 233 153 47 28 118 122 247 246 33 225 192 78 230 61 188 196 197 48 3 32 37 12 172 242 129 25 220 16 26 252 131 142 114 105 69 201 34 95 85 12 39 146 145 217 235 38 66 245 145 202 77 22 159 59 0 129 139 201 197 42 198 93 48 54 136 29 220 157 47 43 0 1 96 180 177 20 52 197 85 168 138 255 101 101 71 208 219 45 169 123 61 167 239 15 8 52 226 172 233 153 47 28 118 122 247 246 33 225 192 78 230 61 188 196 197 48 3 32 37 12 172 242 129 25 220 16 26 252 131 142 114 105 69 201 34 95 85 12 39 146 145 217 235 38 66 245 145 202 77 22 159 59 0 129 139 201 197 42 198 93 48 54 136 29 220 157 47 43 0 0 96 228 177 197 157 201 233 218 33 173 105 143 149 114 247 135 47 252 136 226 112 224 250 62 15 148 29 202 26 68 127 193 62 109 233 165 67 21 221 99 246 160 113 232 255 240 215 55 219 168 67 172 220 239 70 18 44 75 90 190 126 188 2 138 148 81 54 76 45 139 27 198 140 152 73 84 62 77 207 250 184 202 70 93 74 35 192 212 68 254 66 167 55 43 72 51 1 1 96 228 177 197 157 201 233 218 33 173 105 143 149 114 247 135 47 252 136 226 112 224 250 62 15 148 29 202 26 68 127 193 62 109 233 165 67 21 221 99 246 160 113 232 255 240 215 55 219 168 67 172 220 239 70 18 44 75 90 190 126 188 2 138 148 81 54 76 45 139 27 198 140 152 73 84 62 77 207 250 184 202 70 93 74 35 192 212 68 254 66 167 55 43 72 51 1 0 64 214 194 164 243 67 99 159 221 32 79 138 118 10 246 26 53 220 63 121 128 209 86 55 147 46 21 147 111 73 114 48 231 199 129 181 226 153 2 49 119 72 168 113 113 77 187 140 153 22 15 24 250 59 186 131 64 170 188 226 4 136 0 0 0 1 64 214 194 164 243 67 99 159 221 32 79 138 118 10 246 26 53 220 63 121 128 209 86 55 147 46 21 147 111 73 114 48 231 199 129 181 226 153 2 49 119 72 168 113 113 77 187 140 153 22 15 24 250 59 186 131 64 170 188 226 4 136 0 0 0 0 56 137 1 85 110 191 240 53 229 183 92 119 252 131 102 74 251 188 32 178 3 182 241 244 250 87 89 25 222 123 231 114 153 55 41 42 92 80 171 133 162 143 161 81 69 72 198 206 202 152 186 2 0 0 0 0 0 1 56 137 1 85 110 191 240 53 229 183 92 119 252 131 102 74 251 188 32 178 3 182 241 244 250 87 89 25 222 123 231 114 153 55 41 42 92 80 171 133 162 143 161 81 69 72 198 206 202 152 186 2 0 0 0 0 0 0 56 211 76 143 162 185 129 219 122 124 64 67 106 130 145 59 54 198 182 118 11 1 159 173 227 145 183 65 74 210 107 97 244 37 234 225 245 194 126 48 168 194 239 99 117 113 246 7 68 90 122 30 120 121 204 1 0 1 56 211 76 143 162 185 129 219 122 124 64 67 106 130 145 59 54 198 182 118 11 1 159 173 227 145 183 65 74 210 107 97 244 37 234 225 245 194 126 48 168 194 239 99 117 113 246 7 68 90 122 30 120 121 204 1 0 0 88 105 73 115 54 214 7 115 255 61 66 95 124 249 26 243 37 155 74 9 85 217 163 49 217 173 61 95 67 196 72 63 156 172 27 80 167 165 134 208 52 201 202 92 55 128 155 17 60 176 105 63 30 206 211 19 235 211 182 152 83 135 179 180 37 195 226 138 134 144 171 149 80 65 145 226 242 243 230 43 132 178 250 39 215 0 0 0 0 1 88 105 73 115 54 214 7 115 255 61 66 95 124 249 26 243 37 155 74 9 85 217 163 49 217 173 61 95 67 196 72 63 156 172 27 80 167 165 134 208 52 201 202 92 55 128 155 17 60 176 105 63 30 206 211 19 235 211 182 152 83 135 179 180 37 195 226 138 134 144 171 149 80 65 145 226 242 243 230 43 132 178 250 39 215 0 0 0 0 0 24 238 147 112 201 202 57 233 73 216 169 141 254 73 1 28 115 92 180 201 139 174 21 11 0 1 24 238 147 112 201 202 57 233 73 216 169 141 254 73 1 28 115 92 180 201 139 174 21 11 0 0 24 11 98 186 29 212 176 86 13 53 40 93 147 195 178 153 54 152 222 244 40 193 19 0 0 1 24 11 98 186 29 212 176 86 13 53 40 93 147 195 178 153 54 152 222 244 40 193 19 0 0 0 40 247 180 251 141 141 62 11 228 178 124 25 179 207 78 30 191 6 166 89 240 173 89 181 244 213 201 90 164 248 113 18 220 53 196 159 235 161 36 114 0 1 40 247 180 251 141 141 62 11 228 178 124 25 179 207 78 30 191 6 166 89 240 173 89 181 244 213 201 90 164 248 113 18 220 53 196 159 235 161 36 114 0 0 96 197 219 246 150 141 204 249 197 122 42 147 254 26 80 88 29 210 60 108 233 49 53 58 229 228 74 204 32 164 150 72 227 75 126 222 254 223 216 61 51 43 121 144 51 162 181 207 169 112 177 75 201 49 79 92 41 7 31 62 225 233 82 103 28 12 148 8 127 39 116 68 202 216 227 213 140 255 16 22 227 223 27 82 6 151 211 143 89 62 252 11 0 0 0 0 0 1 96 197 219 246 150 141 204 249 197 122 42 147 254 26 80 88 29 210 60 108 233 49 53 58 229 228 74 204 32 164 150 72 227 75 126 222 254 223 216 61 51 43 121 144 51 162 181 207 169 112 177 75 201 49 79 92 41 7 31 62 225 233 82 103 28 12 148 8 127 39 116 68 202 216 227 213 140 255 16 22 227 223 27 82 6 151 211 143 89 62 252 11 0 0 0 0 0 0 104 84 85 201 229 80 220 110 27 89 135 96 8 25 169 247 170 52 98 214 179 116 102 103 90 190 212 155 200 5 237 5 33 189 15 223 142 50 1 136 100 122 203 43 219 41 31 201 158 108 205 137 41 171 131 15 69 19 41 170 64 244 118 157 0 134 78 207 249 103 223 37 193 0 163 144 187 16 102 223 27 90 215 43 229 11 42 66 58 117 150 42 248 101 141 189 6 240 7 0 242 197 127 1 0 1 104 84 85 201 229 80 220 110 27 89 135 96 8 25 169 247 170 52 98 214 179 116 102 103 90 190 212 155 200 5 237 5 33 189 15 223 142 50 1 136 100 122 203 43 219 41 31 201 158 108 205 137 41 171 131 15 69 19 41 170 64 244 118 157 0 134 78 207 249 103 223 37 193 0 163 144 187 16 102 223 27 90 215 43 229 11 42 66 58 117 150 42 248 101 141 189 6 240 7 0 242 197 127 1 0 0 8 185 243 251 131 7 0 0 0 1 8 185 243 251 131 7 0 0 0 0 48 188 64 12 102 153 116 180 169 232 182 207 120 2 241 87 106 199 3 100 211 214 177 149 40 69 55 14 15 24 136 141 41 198 26 255 238 213 146 192 182 42 0 0 0 0 0 0 0 1 48 188 64 12 102 153 116 180 169 232 182 207 120 2 241 87 106 199 3 100 211 214 177 149 40 69 55 14 15 24 136 141 41 198 26 255 238 213 146 192 182 42 0 0 0 0 0 0 0 0 40 60 69 243 184 98 7 253 248 147 154 234 108 139 170 83 33 71 50 181 137 96 0 97 65 238 127 238 220 145 220 30 197 164 169 50 39 0 0 0 0 1 40 60 69 243 184 98 7 253 248 147 154 234 108 139 170 83 33 71 50 181 137 96 0 97 65 238 127 238 220 145 220 30 197 164 169 50 39 0 0 0 0 0 112 226 167 90 98 229 230 91 40 155 26 167 140 217 74 204 150 223 188 123 34 82 92 87 7 182 125 184 131 72 19 168 23 168 126 18 67 33 218 228 80 219 32 115 52 91 153 74 185 188 251 88 141 206 245 147 186 188 9 11 227 190 147 53 27 159 175 207 126 95 65 244 167 190 77 129 82 251 142 246 254 93 98 112 160 141 225 214 75 62 208 202 45 97 98 146 177 111 133 60 28 249 233 207 10 171 89 174 70 14 94 129 40 1 112 226 167 90 98 229 230 91 40 155 26 167 140 217 74 204 150 223 188 123 34 82 92 87 7 182 125 184 131 72 19 168 23 168 126 18 67 33 218 228 80 219 32 115 52 91 153 74 185 188 251 88 141 206 245 147 186 188 9 11 227 190 147 53 27 159 175 207 126 95 65 244 167 190 77 129 82 251 142 246 254 93 98 112 160 141 225 214 75 62 208 202 45 97 98 146 177 111 133 60 28 249 233 207 10 171 89 174 70 14 94 129 40 0 8 109 138 127 241 182 108 3 0 1 8 109 138 127 241 182 108 3 0 0 24 253 248 186 235 248 125 194 176 203 231 91 182 41 233 0 226 122 118 84 2 0 0 0 0 1 24 253 248 186 235 248 125 194 176 203 231 91 182 41 233 0 226 122 118 84 2 0 0 0 0 0 16 230 16 7 220 125 232 51 204 126 74 73 232 59 0 0 0 1 16 230 16 7 220 125 232 51 204 126 74 73 232 59 0 0 0 0 128 96 188 53 88 57 212 250 97 99 241 119 39 211 59 47 120 144 156 173 166 143 114 227 10 41 16 55 214 158 53 92 82 10 117 44 252 226 154 161 113 202 150 106 200 19 38 79 40 100 2 216 168 103 49 218 150 159 173 218 238 0 59 105 125 25 202 77 232 122 113 96 184 174 146 91 150 158 119 220 235 41 130 173 153 183 164 219 127 2 22 89 184 116 175 152 236 46 180 242 142 205 40 40 121 115 78 145 79 246 133 130 224 161 140 56 114 143 192 138 82 110 74 44 22 99 135 217 2 1 128 96 188 53 88 57 212 250 97 99 241 119 39 211 59 47 120 144 156 173 166 143 114 227 10 41 16 55 214 158 53 92 82 10 117 44 252 226 154 161 113 202 150 106 200 19 38 79 40 100 2 216 168 103 49 218 150 159 173 218 238 0 59 105 125 25 202 77 232 122 113 96 184 174 146 91 150 158 119 220 235 41 130 173 153 183 164 219 127 2 22 89 184 116 175 152 236 46 180 242 142 205 40 40 121 115 78 145 79 246 133 130 224 161 140 56 114 143 192 138 82 110 74 44 22 99 135 217 2 0 112 183 215 158 47 73 44 220 50 163 229 15 148 225 154 78 50 189 136 15 137 135 196 30 145 70 78 206 57 19 181 129 163 193 193 234 155 1 250 142 170 197 218 122 99 180 214 31 196 167 42 38 254 90 90 60 16 232 180 119 19 88 155 128 27 128 25 230 39 205 154 156 158 153 88 120 44 1 136 211 209 30 179 28 159 46 164 62 97 233 105 33 20 253 209 183 59 98 45 110 88 170 73 103 237 172 14 0 0 0 0 0 0 1 112 183 215 158 47 73 44 220 50 163 229 15 148 225 154 78 50 189 136 15 137 135 196 30 145 70 78 206 57 19 181 129 163 193 193 234 155 1 250 142 170 197 218 122 99 180 214 31 196 167 42 38 254 90 90 60 16 232 180 119 19 88 155 128 27 128 25 230 39 205 154 156 158 153 88 120 44 1 136 211 209 30 179 28 159 46 164 62 97 233 105 33 20 253 209 183 59 98 45 110 88 170 73 103 237 172 14 0 0 0 0 0 0 0 112 109 39 198 116 134 109 137 3 154 63 133 155 109 82 108 240 13 83 246 109 126 71 168 5 252 39 139 51 83 180 93 45 15 158 50 208 87 19 218 21 230 235 83 238 84 254 144 65 87 7 55 39 65 75 33 1 137 221 191 101 104 101 15 201 217 163 216 64 237 92 24 199 180 178 166 245 190 146 159 89 122 28 142 102 176 245 112 28 239 140 93 48 144 224 181 154 244 92 174 112 189 17 186 11 61 0 0 0 0 0 0 0 1 112 109 39 198 116 134 109 137 3 154 63 133 155 109 82 108 240 13 83 246 109 126 71 168 5 252 39 139 51 83 180 93 45 15 158 50 208 87 19 218 21 230 235 83 238 84 254 144 65 87 7 55 39 65 75 33 1 137 221 191 101 104 101 15 201 217 163 216 64 237 92 24 199 180 178 166 245 190 146 159 89 122 28 142 102 176 245 112 28 239 140 93 48 144 224 181 154 244 92 174 112 189 17 186 11 61 0 0 0 0 0 0 0 0 96 115 25 74 181 122 105 117 16 23 160 104 186 173 148 142 130 124 69 176 164 120 37 35 164 26 5 203 211 81 114 102 172 157 224 92 119 72 40 156 152 170 218 239 244 122 119 68 255 223 165 182 239 221 222 170 86 17 177 252 123 251 137 160 2 17 88 15 181 45 222 85 1 145 242 26 221 26 143 50 5 231 126 165 15 88 139 246 42 136 0 0 0 0 0 0 0 1 96 115 25 74 181 122 105 117 16 23 160 104 186 173 148 142 130 124 69 176 164 120 37 35 164 26 5 203 211 81 114 102 172 157 224 92 119 72 40 156 152 170 218 239 244 122 119 68 255 223 165 182 239 221 222 170 86 17 177 252 123 251 137 160 2 17 88 15 181 45 222 85 1 145 242 26 221 26 143 50 5 231 126 165 15 88 139 246 42 136 0 0 0 0 0 0 0 0 24 11 96 10 112 174 90 0 74 17 97 66 74 95 235 134 176 1 0 0 0 0 0 0 0 1 24 11 96 10 112 174 90 0 74 17 97 66 74 95 235 134 176 1 0 0 0 0 0 0 0 0 48 154 185 66 152 86 30 237 20 211 200 92 232 231 159 111 104 239 215 186 246 153 131 145 191 158 17 100 149 87 115 114 80 153 175 127 213 20 30 55 123 56 0 0 0 0 0 0 0 1 48 154 185 66 152 86 30 237 20 211 200 92 232 231 159 111 104 239 215 186 246 153 131 145 191 158 17 100 149 87 115 114 80 153 175 127 213 20 30 55 123 56 0 0 0 0 0 0 0 0 104 200 46 197 117 247 255 182 227 22 29 184 198 24 211 143 87 190 175 196 153 250 144 95 50 47 199 87 38 91 196 72 184 66 112 224 205 213 241 213 215 217 50 114 236 249 135 67 151 218 231 131 138 171 95 70 223 55 110 156 24 86 4 116 64 213 4 169 211 115 62 175 39 13 169 242 237 56 166 5 99 183 238 116 46 114 188 183 203 8 57 40 83 132 247 182 225 184 108 0 0 0 0 0 0 1 104 200 46 197 117 247 255 182 227 22 29 184 198 24 211 143 87 190 175 196 153 250 144 95 50 47 199 87 38 91 196 72 184 66 112 224 205 213 241 213 215 217 50 114 236 249 135 67 151 218 231 131 138 171 95 70 223 55 110 156 24 86 4 116 64 213 4 169 211 115 62 175 39 13 169 242 237 56 166 5 99 183 238 116 46 114 188 183 203 8 57 40 83 132 247 182 225 184 108 0 0 0 0 0 0 0 128 94 235 124 73 23 127 111 55 10 111 84 126 170 16 77 106 181 163 73 165 249 170 40 170 90 228 108 176 252 39 45 191 204 225 251 145 26 45 5 233 1 112 57 57 75 136 241 126 114 242 43 156 144 93 196 214 225 123 243 163 118 208 74 233 52 78 129 73 101 32 94 180 49 175 158 209 26 110 42 125 133 11 133 252 19 105 165 220 63 81 214 85 35 166 157 95 220 199 190 78 235 205 161 109 38 86 178 173 75 16 150 107 115 202 87 90 44 122 250 44 242 3 0 0 0 0 0 0 1 128 94 235 124 73 23 127 111 55 10 111 84 126 170 16 77 106 181 163 73 165 249 170 40 170 90 228 108 176 252 39 45 191 204 225 251 145 26 45 5 233 1 112 57 57 75 136 241 126 114 242 43 156 144 93 196 214 225 123 243 163 118 208 74 233 52 78 129 73 101 32 94 180 49 175 158 209 26 110 42 125 133 11 133 252 19 105 165 220 63 81 214 85 35 166 157 95 220 199 190 78 235 205 161 109 38 86 178 173 75 16 150 107 115 202 87 90 44 122 250 44 242 3 0 0 0 0 0 0 0 64 33 38 244 173 112 88 99 122 250 156 144 15 79 132 196 15 41 75 133 177 70 36 29 76 228 221 155 246 69 197 87 207 178 221 150 150 163 43 125 211 170 119 162 199 18 140 88 14 141 156 131 55 86 105 131 87 183 202 138 193 250 146 7 0 1 64 33 38 244 173 112 88 99 122 250 156 144 15 79 132 196 15 41 75 133 177 70 36 29 76 228 221 155 246 69 197 87 207 178 221 150 150 163 43 125 211 170 119 162 199 18 140 88 14 141 156 131 55 86 105 131 87 183 202 138 193 250 146 7 0 0 8 193 65 150 116 8 0 0 0 1 8 193 65 150 116 8 0 0 0 0 88 222 76 87 0 39 117 3 50 43 76 65 78 229 242 96 28 45 68 9 84 77 32 141 102 105 143 7 223 208 38 17 171 1 5 64 101 80 4 202 47 105 247 32 207 194 242 83 135 163 54 216 178 26 17 93 139 73 169 226 217 99 11 82 47 3 157 215 215 153 31 216 121 218 217 197 70 198 39 255 50 228 150 229 67 199 1 0 0 1 88 222 76 87 0 39 117 3 50 43 76 65 78 229 242 96 28 45 68 9 84 77 32 141 102 105 143 7 223 208 38 17 171 1 5 64 101 80 4 202 47 105 247 32 207 194 242 83 135 163 54 216 178 26 17 93 139 73 169 226 217 99 11 82 47 3 157 215 215 153 31 216 121 218 217 197 70 198 39 255 50 228 150 229 67 199 1 0 0 0 64 132 11 227 148 45 72 132 90 43 39 166 76 172 224 159 49 82 126 46 147 149 229 112 96 19 103 129 209 180 204 78 161 218 161 137 155 40 142 2 48 80 224 51 94 209 169 119 94 212 151 125 134 39 145 109 231 4 0 0 0 0 0 0 0 1 64 132 11 227 148 45 72 132 90 43 39 166 76 172 224 159 49 82 126 46 147 149 229 112 96 19 103 129 209 180 204 78 161 218 161 137 155 40 142 2 48 80 224 51 94 209 169 119 94 212 151 125 134 39 145 109 231 4 0 0 0 0 0 0 0 0 24 123 47 118 34 191 206 207 171 213 67 79 77 219 89 68 92 2 0 0 0 0 0 0 0 1 24 123 47 118 34 191 206 207 171 213 67 79 77 219 89 68 92 2 0 0 0 0 0 0 0 0 56 181 219 18 61 30 154 15 167 192 14 196 148 216 66 206 1 98 115 173 137 197 47 49 228 38 188 178 148 202 18 96 2 103 255 202 246 177 221 107 35 180 27 33 72 172 31 69 128 123 0 0 0 0 0 0 0 1 56 181 219 18 61 30 154 15 167 192 14 196 148 216 66 206 1 98 115 173 137 197 47 49 228 38 188 178 148 202 18 96 2 103 255 202 246 177 221 107 35 180 27 33 72 172 31 69 128 123 0 0 0 0 0 0 0 0 32 7 82 250 163 171 151 193 242 222 208 224 252 8 145 119 231 240 219 237 115 112 17 84 150 54 234 247 1 0 0 0 0 1 32 7 82 250 163 171 151 193 242 222 208 224 252 8 145 119 231 240 219 237 115 112 17 84 150 54 234 247 1 0 0 0 0 0 104 106 128 3 1 188 158 131 102 30 13 165 34 56 140 67 110 15 41 20 34 218 85 212 56 208 97 6 198 121 86 231 16 60 41 116 51 112 68 146 225 249 153 79 173 152 178 167 118 161 49 82 252 223 181 39 89 10 249 163 146 32 111 19 91 56 141 207 248 45 150 31 199 164 135 69 61 48 86 28 152 157 46 95 110 240 67 68 230 61 162 195 46 59 109 223 151 104 231 1 0 0 0 0 0 1 104 106 128 3 1 188 158 131 102 30 13 165 34 56 140 67 110 15 41 20 34 218 85 212 56 208 97 6 198 121 86 231 16 60 41 116 51 112 68 146 225 249 153 79 173 152 178 167 118 161 49 82 252 223 181 39 89 10 249 163 146 32 111 19 91 56 141 207 248 45 150 31 199 164 135 69 61 48 86 28 152 157 46 95 110 240 67 68 230 61 162 195 46 59 109 223 151 104 231 1 0 0 0 0 0 0 8 71 170 230 149 60 169 8 0 1 8 71 170 230 149 60 169 8 0 0 104 197 60 13 194 96 169 102 36 193 199 30 151 61 112 84 43 43 191 194 1 161 56 139 53 115 136 32 148 17 113 135 55 123 181 224 91 143 170 42 70 154 95 146 126 90 132 159 105 180 251 18 41 35 80 231 44 31 43 32 145 245 182 101 28 236 119 33 66 1 225 23 219 129 219 214 243 191 203 150 13 208 77 171 34 153 52 224 233 94 147 246 3 95 62 22 212 102 7 164 241 174 21 0 0 1 104 197 60 13 194 96 169 102 36 193 199 30 151 61 112 84 43 43 191 194 1 161 56 139 53 115 136 32 148 17 113 135 55 123 181 224 91 143 170 42 70 154 95 146 126 90 132 159 105 180 251 18 41 35 80 231 44 31 43 32 145 245 182 101 28 236 119 33 66 1 225 23 219 129 219 214 243 191 203 150 13 208 77 171 34 153 52 224 233 94 147 246 3 95 62 22 212 102 7 164 241 174 21 0 0 0 8 255 177 136 137 82 0 0 0 1 8 255 177 136 137 82 0 0 0 0 32 244 28 97 243 182 228 22 188 140 208 197 48 85 163 246 9 179 58 95 58 150 166 115 224 1 0 0 0 0 0 0 0 1 32 244 28 97 243 182 228 22 188 140 208 197 48 85 163 246 9 179 58 95 58 150 166 115 224 1 0 0 0 0 0 0 0 0 56 18 166 152 245 55 183 20 61 65 95 235 22 101 208 144 158 244 134 73 6 107 252 90 131 187 46 111 218 192 193 204 157 69 78 249 68 158 131 231 84 169 155 246 223 255 125 237 56 39 124 83 222 2 0 0 0 1 56 18 166 152 245 55 183 20 61 65 95 235 22 101 208 144 158 244 134 73 6 107 252 90 131 187 46 111 218 192 193 204 157 69 78 249 68 158 131 231 84 169 155 246 223 255 125 237 56 39 124 83 222 2 0 0 0 0 64 125 215 194 190 138 172 44 82 18 4 12 27 37 152 98 142 28 176 36 149 113 6 134 186 247 114 113 24 143 28 126 9 132 211 32 84 48 255 229 143 210 55 139 145 108 151 47 228 54 230 198 125 130 0 191 218 241 25 250 223 160 158 116 0 1 64 125 215 194 190 138 172 44 82 18 4 12 27 37 152 98 142 28 176 36 149 113 6 134 186 247 114 113 24 143 28 126 9 132 211 32 84 48 255 229 143 210 55 139 145 108 151 47 228 54 230 198 125 130 0 191 218 241 25 250 223 160 158 116 0 0 64 3 57 187 171 211 24 69 12 134 135 186 26 223 242 182 51 228 122 123 228 34 89 39 47 189 254 2 149 226 207 2 67 99 42 86 56 191 230 17 56 161 156 156 78 118 244 228 6 251 250 232 155 46 194 10 138 122 135 43 0 0 0 0 0 1 64 3 57 187 171 211 24 69 12 134 135 186 26 223 242 182 51 228 122 123 228 34 89 39 47 189 254 2 149 226 207 2 67 99 42 86 56 191 230 17 56 161 156 156 78 118 244 228 6 251 250 232 155 46 194 10 138 122 135 43 0 0 0 0 0 0 64 172 126 95 38 172 16 35 220 31 69 231 168 50 246 181 132 163 59 105 107 11 195 114 20 55 43 40 50 235 159 196 170 131 133 34 254 126 123 149 223 8 155 192 190 96 9 65 243 130 152 203 23 54 157 5 6 21 0 0 0 0 0 0 0 1 64 172 126 95 38 172 16 35 220 31 69 231 168 50 246 181 132 163 59 105 107 11 195 114 20 55 43 40 50 235 159 196 170 131 133 34 254 126 123 149 223 8 155 192 190 96 9 65 243 130 152 203 23 54 157 5 6 21 0 0 0 0 0 0 0 0 64 2 111 152 136 184 111 221 198 128 165 251 127 213 81 172 8 106 234 51 14 82 18 6 231 152 0 230 43 112 55 155 160 105 77 184 34 204 159 232 23 202 84 150 215 63 252 216 202 135 94 254 143 56 128 190 119 156 93 36 146 106 50 31 0 1 64 2 111 152 136 184 111 221 198 128 165 251 127 213 81 172 8 106 234 51 14 82 18 6 231 152 0 230 43 112 55 155 160 105 77 184 34 204 159 232 23 202 84 150 215 63 252 216 202 135 94 254 143 56 128 190 119 156 93 36 146 106 50 31 0 0 88 67 179 87 45 0 244 146 0 251 216 55 206 169 143 153 155 204 98 242 127 58 228 9 185 140 50 24 85 71 140 103 173 214 208 88 197 18 88 42 237 5 249 171 151 55 8 19 64 247 14 51 205 117 38 200 199 107 98 33 41 209 251 142 166 190 178 246 165 231 178 156 209 134 137 201 40 51 114 105 214 176 192 40 0 0 0 0 0 1 88 67 179 87 45 0 244 146 0 251 216 55 206 169 143 153 155 204 98 242 127 58 228 9 185 140 50 24 85 71 140 103 173 214 208 88 197 18 88 42 237 5 249 171 151 55 8 19 64 247 14 51 205 117 38 200 199 107 98 33 41 209 251 142 166 190 178 246 165 231 178 156 209 134 137 201 40 51 114 105 214 176 192 40 0 0 0 0 0 0 104 210 223 181 52 158 133 105 60 206 60 97 88 35 84 39 241 68 117 46 200 25 178 180 2 135 170 228 237 78 95 141 220 192 61 243 38 81 141 157 147 134 105 20 141 231 139 98 217 141 233 206 38 63 88 41 115 146 165 44 212 80 120 9 35 155 237 10 49 241 130 64 144 5 183 157 196 6 21 107 70 41 197 111 109 215 116 229 241 167 89 202 52 203 220 160 217 246 30 235 144 235 19 0 0 1 104 210 223 181 52 158 133 105 60 206 60 97 88 35 84 39 241 68 117 46 200 25 178 180 2 135 170 228 237 78 95 141 220 192 61 243 38 81 141 157 147 134 105 20 141 231 139 98 217 141 233 206 38 63 88 41 115 146 165 44 212 80 120 9 35 155 237 10 49 241 130 64 144 5 183 157 196 6 21 107 70 41 197 111 109 215 116 229 241 167 89 202 52 203 220 160 217 246 30 235 144 235 19 0 0 0 96 152 150 20 214 127 232 198 173 9 79 27 3 184 211 18 63 222 243 206 88 162 250 92 190 84 152 234 94 69 155 44 142 240 190 37 73 181 195 210 164 18 87 93 129 136 94 136 136 217 218 51 29 223 183 84 208 218 2 84 239 77 91 212 169 82 20 75 248 125 91 121 11 45 39 139 41 225 254 195 35 239 16 190 22 173 227 229 119 204 69 22 0 0 0 0 0 1 96 152 150 20 214 127 232 198 173 9 79 27 3 184 211 18 63 222 243 206 88 162 250 92 190 84 152 234 94 69 155 44 142 240 190 37 73 181 195 210 164 18 87 93 129 136 94 136 136 217 218 51 29 223 183 84 208 218 2 84 239 77 91 212 169 82 20 75 248 125 91 121 11 45 39 139 41 225 254 195 35 239 16 190 22 173 227 229 119 204 69 22 0 0 0 0 0 0 120 44 138 21 104 121 166 168 12 110 50 53 151 231 148 52 129 170 198 240 95 34 68 28 124 55 201 57 159 127 63 21 5 63 2 162 178 197 92 197 192 93 104 136 44 43 255 49 242 182 132 190 94 80 205 87 26 3 171 184 215 205 47 219 227 179 185 205 230 127 65 231 66 123 92 125 163 244 195 94 188 196 160 223 181 5 166 64 111 85 190 120 122 41 201 0 186 192 106 199 252 164 20 92 37 80 149 48 19 150 123 103 189 229 79 223 27 244 74 0 0 1 120 44 138 21 104 121 166 168 12 110 50 53 151 231 148 52 129 170 198 240 95 34 68 28 124 55 201 57 159 127 63 21 5 63 2 162 178 197 92 197 192 93 104 136 44 43 255 49 242 182 132 190 94 80 205 87 26 3 171 184 215 205 47 219 227 179 185 205 230 127 65 231 66 123 92 125 163 244 195 94 188 196 160 223 181 5 166 64 111 85 190 120 122 41 201 0 186 192 106 199 252 164 20 92 37 80 149 48 19 150 123 103 189 229 79 223 27 244 74 0 0 0 104 245 181 98 66 108 43 27 238 39 17 236 216 168 31 46 226 159 160 142 67 146 30 10 164 14 213 242 136 234 225 199 106 255 33 115 237 228 171 8 216 45 122 202 182 141 16 25 154 11 32 53 253 203 2 153 173 247 193 28 139 204 11 42 191 71 206 216 60 1 99 141 204 17 235 245 239 210 176 83 155 175 144 26 254 215 45 202 84 103 74 45 94 174 24 228 158 37 0 0 0 0 0 0 0 1 104 245 181 98 66 108 43 27 238 39 17 236 216 168 31 46 226 159 160 142 67 146 30 10 164 14 213 242 136 234 225 199 106 255 33 115 237 228 171 8 216 45 122 202 182 141 16 25 154 11 32 53 253 203 2 153 173 247 193 28 139 204 11 42 191 71 206 216 60 1 99 141 204 17 235 245 239 210 176 83 155 175 144 26 254 215 45 202 84 103 74 45 94 174 24 228 158 37 0 0 0 0 0 0 0 0 104 57 246 11 97 62 119 196 46 75 16 79 108 49 113 219 104 188 179 248 78 58 245 127 216 140 166 196 171 132 59 25 253 51 249 216 140 222 121 230 30 172 32 207 74 205 85 44 90 36 173 79 87 194 82 25 79 135 112 132 221 164 76 173 137 126 195 194 92 248 173 9 87 209 223 59 125 95 65 85 163 122 135 111 167 236 33 52 80 27 61 178 237 205 251 204 39 240 191 179 209 167 168 143 7 1 104 57 246 11 97 62 119 196 46 75 16 79 108 49 113 219 104 188 179 248 78 58 245 127 216 140 166 196 171 132 59 25 253 51 249 216 140 222 121 230 30 172 32 207 74 205 85 44 90 36 173 79 87 194 82 25 79 135 112 132 221 164 76 173 137 126 195 194 92 248 173 9 87 209 223 59 125 95 65 85 163 122 135 111 167 236 33 52 80 27 61 178 237 205 251 204 39 240 191 179 209 167 168 143 7 0 40 163 89 48 170 102 43 220 156 66 109 77 113 21 188 67 203 215 226 3 205 170 236 98 121 244 145 200 70 209 174 177 8 139 184 149 27 0 0 0 0 1 40 163 89 48 170 102 43 220 156 66 109 77 113 21 188 67 203 215 226 3 205 170 236 98 121 244 145 200 70 209 174 177 8 139 184 149 27 0 0 0 0 0 96 53 9 22 111 90 93 185 232 66 232 61 190 77 71 90 216 56 212 22 125 84 142 129 138 224 63 243 92 90 116 216 187 231 68 78 132 78 241 87 154 62 85 115 206 103 51 246 75 206 191 127 30 122 123 36 8 228 202 50 139 177 122 8 243 137 70 204 22 54 249 70 184 115 203 134 211 234 65 106 138 66 20 24 187 65 57 199 142 254 18 13 0 0 0 0 0 1 96 53 9 22 111 90 93 185 232 66 232 61 190 77 71 90 216 56 212 22 125 84 142 129 138 224 63 243 92 90 116 216 187 231 68 78 132 78 241 87 154 62 85 115 206 103 51 246 75 206 191 127 30 122 123 36 8 228 202 50 139 177 122 8 243 137 70 204 22 54 249 70 184 115 203 134 211 234 65 106 138 66 20 24 187 65 57 199 142 254 18 13 0 0 0 0 0 0 88 149 88 176 69 223 36 37 144 73 234 120 8 99 221 137 178 30 189 44 46 85 157 48 42 245 113 38 233 244 178 224 211 47 14 147 125 42 18 227 2 75 4 61 200 33 227 150 10 58 244 38 21 49 115 166 218 124 93 108 5 73 235 24 7 87 152 177 21 225 23 170 204 54 120 154 213 94 174 62 0 72 37 253 148 145 218 243 1 1 88 149 88 176 69 223 36 37 144 73 234 120 8 99 221 137 178 30 189 44 46 85 157 48 42 245 113 38 233 244 178 224 211 47 14 147 125 42 18 227 2 75 4 61 200 33 227 150 10 58 244 38 21 49 115 166 218 124 93 108 5 73 235 24 7 87 152 177 21 225 23 170 204 54 120 154 213 94 174 62 0 72 37 253 148 145 218 243 1 0 8 30 0 0 0 0 0 0 0 1 8 30 0 0 0 0 0 0 0 0 88 155 231 228 201 142 243 71 208 249 176 228 44 166 218 152 155 74 36 194 74 148 67 125 239 134 32 23 215 211 53 175 202 69 44 53 118 45 165 95 123 12 108 231 154 213 28 20 163 249 156 33 65 206 61 154 174 104 60 98 109 32 78 242 212 129 149 248 201 134 148 123 181 199 217 155 194 96 140 22 149 241 60 138 83 0 0 0 0 1 88 155 231 228 201 142 243 71 208 249 176 228 44 166 218 152 155 74 36 194 74 148 67 125 239 134 32 23 215 211 53 175 202 69 44 53 118 45 165 95 123 12 108 231 154 213 28 20 163 249 156 33 65 206 61 154 174 104 60 98 109 32 78 242 212 129 149 248 201 134 148 123 181 199 217 155 194 96 140 22 149 241 60 138 83 0 0 0 0 0 96 144 67 10 47 192 191 82 221 35 118 53 159 135 152 112 38 73 15 23 69 58 219 225 247 78 102 170 227 6 163 149 12 249 225 137 246 239 39 40 234 163 207 114 112 115 115 194 219 16 202 159 189 202 35 212 109 38 217 132 76 179 231 7 209 218 188 27 208 113 230 164 84 51 101 32 180 123 194 122 68 150 119 65 252 204 137 177 46 234 227 67 1 0 0 0 0 1 96 144 67 10 47 192 191 82 221 35 118 53 159 135 152 112 38 73 15 23 69 58 219 225 247 78 102 170 227 6 163 149 12 249 225 137 246 239 39 40 234 163 207 114 112 115 115 194 219 16 202 159 189 202 35 212 109 38 217 132 76 179 231 7 209 218 188 27 208 113 230 164 84 51 101 32 180 123 194 122 68 150 119 65 252 204 137 177 46 234 227 67 1 0 0 0 0 0 24 72 56 22 141 170 58 90 163 187 180 242 135 44 169 146 74 211 248 249 78 94 0 0 0 1 24 72 56 22 141 170 58 90 163 187 180 242 135 44 169 146 74 211 248 249 78 94 0 0 0 0 88 212 210 42 73 12 25 196 31 47 75 120 243 73 247 127 147 72 96 165 96 14 69 196 39 172 6 5 194 11 134 119 124 92 255 174 158 25 36 41 88 174 179 156 60 218 178 156 41 175 187 120 209 98 0 19 182 231 198 178 95 52 119 23 97 47 127 143 101 176 216 52 159 106 61 182 27 146 186 142 96 231 29 27 0 0 0 0 0 1 88 212 210 42 73 12 25 196 31 47 75 120 243 73 247 127 147 72 96 165 96 14 69 196 39 172 6 5 194 11 134 119 124 92 255 174 158 25 36 41 88 174 179 156 60 218 178 156 41 175 187 120 209 98 0 19 182 231 198 178 95 52 119 23 97 47 127 143 101 176 216 52 159 106 61 182 27 146 186 142 96 231 29 27 0 0 0 0 0 0 16 202 192 8 50 72 83 78 188 175 88 50 125 131 102 195 3 1 16 202 192 8 50 72 83 78 188 175 88 50 125 131 102 195 3 0 64 129 235 99 25 168 162 143 14 181 191 24 1 54 4 85 204 63 111 78 71 241 253 45 225 56 177 121 166 226 7 163 1 182 155 9 74 40 35 9 9 175 144 171 35 224 162 163 133 97 35 188 126 220 236 73 96 97 129 14 0 0 0 0 0 1 64 129 235 99 25 168 162 143 14 181 191 24 1 54 4 85 204 63 111 78 71 241 253 45 225 56 177 121 166 226 7 163 1 182 155 9 74 40 35 9 9 175 144 171 35 224 162 163 133 97 35 188 126 220 236 73 96 97 129 14 0 0 0 0 0 0 64 108 92 234 131 231 188 232 51 18 198 215 40 15 157 152 141 79 144 203 196 249 187 115 41 230 177 33 50 91 32 10 169 73 162 155 234 98 212 245 92 106 18 104 75 83 194 149 253 23 63 13 64 214 243 154 201 132 100 31 187 255 119 206 203 1 64 108 92 234 131 231 188 232 51 18 198 215 40 15 157 152 141 79 144 203 196 249 187 115 41 230 177 33 50 91 32 10 169 73 162 155 234 98 212 245 92 106 18 104 75 83 194 149 253 23 63 13 64 214 243 154 201 132 100 31 187 255 119 206 203 0 104 234 116 169 65 23 182 136 224 163 211 105 192 204 31 82 240 175 46 102 159 95 158 50 9 145 106 22 60 50 33 177 26 225 82 114 86 212 7 154 44 212 126 161 171 72 116 119 246 52 229 38 173 55 41 107 40 184 253 98 215 24 91 66 142 30 173 123 90 125 69 86 227 60 60 95 206 124 147 44 60 155 141 241 90 83 7 53 206 71 46 134 127 122 180 31 53 82 214 176 0 0 0 0 0 1 104 234 116 169 65 23 182 136 224 163 211 105 192 204 31 82 240 175 46 102 159 95 158 50 9 145 106 22 60 50 33 177 26 225 82 114 86 212 7 154 44 212 126 161 171 72 116 119 246 52 229 38 173 55 41 107 40 184 253 98 215 24 91 66 142 30 173 123 90 125 69 86 227 60 60 95 206 124 147 44 60 155 141 241 90 83 7 53 206 71 46 134 127 122 180 31 53 82 214 176 0 0 0 0 0 0 128 246 224 179 231 248 85 24 201 210 110 165 232 153 136 96 155 10 189 255 115 232 19 11 61 42 152 98 194 221 200 42 3 215 220 12 102 106 69 77 69 216 253 146 196 230 240 63 118 205 224 76 129 107 174 183 121 74 199 99 224 180 49 180 47 34 35 35 224 247 193 61 42 51 142 16 105 58 239 223 3 189 5 85 19 221 249 251 255 86 9 113 209 31 184 51 28 17 30 9 254 164 62 237 123 73 56 8 110 166 164 217 88 106 22 85 183 98 156 139 221 73 253 52 0 0 0 0 0 1 128 246 224 179 231 248 85 24 201 210 110 165 232 153 136 96 155 10 189 255 115 232 19 11 61 42 152 98 194 221 200 42 3 215 220 12 102 106 69 77 69 216 253 146 196 230 240 63 118 205 224 76 129 107 174 183 121 74 199 99 224 180 49 180 47 34 35 35 224 247 193 61 42 51 142 16 105 58 239 223 3 189 5 85 19 221 249 251 255 86 9 113 209 31 184 51 28 17 30 9 254 164 62 237 123 73 56 8 110 166 164 217 88 106 22 85 183 98 156 139 221 73 253 52 0 0 0 0 0 0 80 114 71 65 89 237 36 19 196 155 136 82 8 202 243 70 78 29 120 129 104 2 108 32 185 184 120 36 214 143 191 219 217 92 173 243 221 253 134 71 240 107 182 126 78 197 54 130 17 174 97 201 95 84 153 156 87 239 78 186 103 226 240 168 109 214 167 102 253 22 173 79 216 165 16 0 0 0 0 0 0 1 80 114 71 65 89 237 36 19 196 155 136 82 8 202 243 70 78 29 120 129 104 2 108 32 185 184 120 36 214 143 191 219 217 92 173 243 221 253 134 71 240 107 182 126 78 197 54 130 17 174 97 201 95 84 153 156 87 239 78 186 103 226 240 168 109 214 167 102 253 22 173 79 216 165 16 0 0 0 0 0 0 0 48 205 174 153 159 175 148 18 158 235 107 21 147 172 130 150 6 109 216 1 3 85 18 35 218 2 59 66 219 110 2 146 243 32 186 68 69 178 58 234 207 205 114 206 3 0 0 0 0 1 48 205 174 153 159 175 148 18 158 235 107 21 147 172 130 150 6 109 216 1 3 85 18 35 218 2 59 66 219 110 2 146 243 32 186 68 69 178 58 234 207 205 114 206 3 0 0 0 0 0 120 6 227 111 143 56 164 39 218 18 125 60 7 225 195 8 232 184 177 163 16 21 29 165 72 172 201 28 230 132 0 86 23 246 125 104 127 83 109 13 113 149 216 245 166 173 128 120 168 110 19 178 216 69 212 66 94 179 133 240 181 66 121 14 166 89 77 60 143 152 41 85 140 62 121 51 44 123 188 123 173 52 74 2 31 233 7 229 187 139 234 225 45 79 247 235 210 113 240 84 200 66 137 125 254 189 83 79 17 221 213 32 54 4 0 0 0 0 0 0 0 1 120 6 227 111 143 56 164 39 218 18 125 60 7 225 195 8 232 184 177 163 16 21 29 165 72 172 201 28 230 132 0 86 23 246 125 104 127 83 109 13 113 149 216 245 166 173 128 120 168 110 19 178 216 69 212 66 94 179 133 240 181 66 121 14 166 89 77 60 143 152 41 85 140 62 121 51 44 123 188 123 173 52 74 2 31 233 7 229 187 139 234 225 45 79 247 235 210 113 240 84 200 66 137 125 254 189 83 79 17 221 213 32 54 4 0 0 0 0 0 0 0 0 80 180 196 94 156 54 195 58 2 39 205 18 27 183 204 87 155 155 103 140 143 118 225 162 141 198 191 103 246 251 35 33 200 114 204 108 157 138 202 183 109 135 225 247 167 85 247 149 166 13 150 140 115 191 119 88 74 150 209 45 234 64 143 177 65 18 230 195 62 134 19 33 86 117 177 249 0 0 0 0 0 1 80 180 196 94 156 54 195 58 2 39 205 18 27 183 204 87 155 155 103 140 143 118 225 162 141 198 191 103 246 251 35 33 200 114 204 108 157 138 202 183 109 135 225 247 167 85 247 149 166 13 150 140 115 191 119 88 74 150 209 45 234 64 143 177 65 18 230 195 62 134 19 33 86 117 177 249 0 0 0 0 0 0 104 77 194 158 250 209 247 60 209 53 237 237 50 69 209 78 167 168 156 255 102 176 89 29 124 236 2 92 64 171 213 222 61 154 151 17 221 163 26 188 48 218 181 25 207 24 78 174 96 77 4 92 36 81 77 82 53 226 55 109 24 229 73 137 228 213 186 236 231 140 148 101 63 106 130 255 94 160 246 229 63 254 107 254 48 15 56 43 131 180 38 166 178 234 233 86 61 2 85 154 172 81 81 66 9 1 104 77 194 158 250 209 247 60 209 53 237 237 50 69 209 78 167 168 156 255 102 176 89 29 124 236 2 92 64 171 213 222 61 154 151 17 221 163 26 188 48 218 181 25 207 24 78 174 96 77 4 92 36 81 77 82 53 226 55 109 24 229 73 137 228 213 186 236 231 140 148 101 63 106 130 255 94 160 246 229 63 254 107 254 48 15 56 43 131 180 38 166 178 234 233 86 61 2 85 154 172 81 81 66 9 0 32 159 255 244 214 47 170 4 34 47 46 170 236 221 0 119 135 29 199 192 21 169 211 135 216 147 25 112 187 63 0 0 0 1 32 159 255 244 214 47 170 4 34 47 46 170 236 221 0 119 135 29 199 192 21 169 211 135 216 147 25 112 187 63 0 0 0 0 8 136 102 2 0 0 0 0 0 1 8 136 102 2 0 0 0 0 0 0 104 182 114 42 214 204 210 88 197 7 199 39 124 27 200 142 13 162 188 42 112 118 92 202 215 78 160 112 52 72 100 65 30 205 199 86 182 35 211 245 70 139 86 183 94 139 115 30 32 188 225 10 237 169 169 192 188 84 209 158 78 210 48 148 84 141 6 11 247 62 239 52 100 249 186 173 138 163 134 212 20 243 14 250 162 155 177 89 175 243 3 44 202 80 198 163 43 3 0 0 0 0 0 0 0 1 104 182 114 42 214 204 210 88 197 7 199 39 124 27 200 142 13 162 188 42 112 118 92 202 215 78 160 112 52 72 100 65 30 205 199 86 182 35 211 245 70 139 86 183 94 139 115 30 32 188 225 10 237 169 169 192 188 84 209 158 78 210 48 148 84 141 6 11 247 62 239 52 100 249 186 173 138 163 134 212 20 243 14 250 162 155 177 89 175 243 3 44 202 80 198 163 43 3 0 0 0 0 0 0 0 0 112 99 120 242 101 168 63 63 168 132 177 224 65 190 4 179 252 98 42 247 140 190 31 23 0 117 179 116 199 98 202 211 102 139 65 63 177 51 13 22 232 149 208 247 101 128 25 173 165 160 191 102 145 173 51 230 242 244 7 170 233 242 115 73 120 62 67 64 36 3 41 74 159 24 59 71 166 190 104 193 40 86 159 53 253 65 67 111 21 48 43 46 214 182 41 210 212 59 110 156 33 239 225 212 27 107 0 0 0 0 0 0 0 1 112 99 120 242 101 168 63 63 168 132 177 224 65 190 4 179 252 98 42 247 140 190 31 23 0 117 179 116 199 98 202 211 102 139 65 63 177 51 13 22 232 149 208 247 101 128 25 173 165 160 191 102 145 173 51 230 242 244 7 170 233 242 115 73 120 62 67 64 36 3 41 74 159 24 59 71 166 190 104 193 40 86 159 53 253 65 67 111 21 48 43 46 214 182 41 210 212 59 110 156 33 239 225 212 27 107 0 0 0 0 0 0 0 0 40 182 35 41 118 252 144 79 94 31 128 26 169 129 98 79 185 77 204 158 170 99 105 83 166 57 204 35 71 231 68 17 161 7 0 0 0 0 0 0 0 1 40 182 35 41 118 252 144 79 94 31 128 26 169 129 98 79 185 77 204 158 170 99 105 83 166 57 204 35 71 231 68 17 161 7 0 0 0 0 0 0 0 0 112 19 121 68 172 165 141 93 53 202 225 143 125 21 127 168 150 223 142 78 163 244 135 194 197 17 161 238 159 225 207 232 231 141 188 186 185 170 238 141 145 164 234 7 144 31 97 144 227 0 100 164 181 137 33 28 59 136 10 218 56 168 254 166 106 145 203 39 49 163 15 174 143 31 5 178 130 153 84 87 87 61 221 163 29 252 65 53 122 68 235 160 127 229 67 219 215 172 22 9 124 37 73 237 104 38 0 0 0 0 0 0 0 1 112 19 121 68 172 165 141 93 53 202 225 143 125 21 127 168 150 223 142 78 163 244 135 194 197 17 161 238 159 225 207 232 231 141 188 186 185 170 238 141 145 164 234 7 144 31 97 144 227 0 100 164 181 137 33 28 59 136 10 218 56 168 254 166 106 145 203 39 49 163 15 174 143 31 5 178 130 153 84 87 87 61 221 163 29 252 65 53 122 68 235 160 127 229 67 219 215 172 22 9 124 37 73 237 104 38 0 0 0 0 0 0 0 0 72 131 157 197 45 185 223 236 53 246 15 184 5 182 184 23 147 3 15 46 179 218 118 209 114 37 235 220 187 201 154 47 207 166 122 35 26 91 3 127 154 179 249 232 233 237 129 34 68 202 138 161 0 13 77 112 252 203 92 187 188 230 39 55 132 247 0 0 0 0 0 0 0 1 72 131 157 197 45 185 223 236 53 246 15 184 5 182 184 23 147 3 15 46 179 218 118 209 114 37 235 220 187 201 154 47 207 166 122 35 26 91 3 127 154 179 249 232 233 237 129 34 68 202 138 161 0 13 77 112 252 203 92 187 188 230 39 55 132 247 0 0 0 0 0 0 0 0 128 215 194 0 199 219 223 102 242 204 248 124 17 112 73 119 161 49 131 84 207 207 67 43 12 67 150 210 126 148 3 13 241 16 225 134 108 33 87 2 157 76 211 58 133 210 144 225 220 56 131 147 199 231 84 32 218 43 221 252 165 30 119 252 165 229 211 167 197 150 182 197 108 234 8 252 127 239 35 237 26 80 187 183 139 105 103 168 55 42 221 202 112 37 234 50 199 248 234 249 61 133 62 20 172 135 114 63 241 161 127 1 136 155 71 88 83 222 156 240 240 1 0 0 0 0 0 0 0 1 128 215 194 0 199 219 223 102 242 204 248 124 17 112 73 119 161 49 131 84 207 207 67 43 12 67 150 210 126 148 3 13 241 16 225 134 108 33 87 2 157 76 211 58 133 210 144 225 220 56 131 147 199 231 84 32 218 43 221 252 165 30 119 252 165 229 211 167 197 150 182 197 108 234 8 252 127 239 35 237 26 80 187 183 139 105 103 168 55 42 221 202 112 37 234 50 199 248 234 249 61 133 62 20 172 135 114 63 241 161 127 1 136 155 71 88 83 222 156 240 240 1 0 0 0 0 0 0 0 0 96 77 228 31 76 241 138 249 4 98 9 115 184 112 82 183 229 236 138 162 82 102 251 28 188 12 113 181 158 79 211 194 251 196 166 73 83 83 80 42 120 93 243 152 162 232 39 205 85 189 126 54 242 156 193 86 191 44 44 252 55 14 21 27 116 194 191 250 7 74 203 105 99 89 106 178 14 2 236 178 68 170 192 252 120 41 130 72 87 206 11 0 0 0 0 0 0 1 96 77 228 31 76 241 138 249 4 98 9 115 184 112 82 183 229 236 138 162 82 102 251 28 188 12 113 181 158 79 211 194 251 196 166 73 83 83 80 42 120 93 243 152 162 232 39 205 85 189 126 54 242 156 193 86 191 44 44 252 55 14 21 27 116 194 191 250 7 74 203 105 99 89 106 178 14 2 236 178 68 170 192 252 120 41 130 72 87 206 11 0 0 0 0 0 0 0 56 134 225 44 69 119 64 234 84 89 109 244 85 126 103 94 170 253 103 245 228 230 48 38 166 108 164 43 22 74 31 25 224 196 60 126 145 211 177 41 97 248 197 232 65 242 142 255 87 64 104 166 218 221 0 0 0 1 56 134 225 44 69 119 64 234 84 89 109 244 85 126 103 94 170 253 103 245 228 230 48 38 166 108 164 43 22 74 31 25 224 196 60 126 145 211 177 41 97 248 197 232 65 242 142 255 87 64 104 166 218 221 0 0 0 0 120 229 172 191 36 121 40 254 104 25 228 24 190 128 20 169 193 240 145 60 136 35 241 68 254 62 193 45 112 102 236 245 29 64 94 62 47 36 42 252 13 28 27 219 9 245 94 181 136 19 177 1 212 5 30 243 157 117 94 95 128 151 156 4 203 11 190 27 0 62 198 137 167 143 73 204 232 2 248 129 253 159 82 186 78 87 59 101 197 100 160 249 30 152 93 125 199 107 24 125 64 176 236 44 0 171 123 140 55 132 181 2 66 228 115 0 0 0 0 0 0 1 120 229 172 191 36 121 40 254 104 25 228 24 190 128 20 169 193 240 145 60 136 35 241 68 254 62 193 45 112 102 236 245 29 64 94 62 47 36 42 252 13 28 27 219 9 245 94 181 136 19 177 1 212 5 30 243 157 117 94 95 128 151 156 4 203 11 190 27 0 62 198 137 167 143 73 204 232 2 248 129 253 159 82 186 78 87 59 101 197 100 160 249 30 152 93 125 199 107 24 125 64 176 236 44 0 171 123 140 55 132 181 2 66 228 115 0 0 0 0 0 0 0 56 242 178 209 149 127 105 215 100 20 77 91 129 188 44 67 89 61 245 2 145 100 176 98 45 200 226 215 226 171 178 81 56 196 210 25 211 24 236 80 114 182 153 187 70 254 227 193 36 163 1 237 117 87 122 2 0 1 56 242 178 209 149 127 105 215 100 20 77 91 129 188 44 67 89 61 245 2 145 100 176 98 45 200 226 215 226 171 178 81 56 196 210 25 211 24 236 80 114 182 153 187 70 254 227 193 36 163 1 237 117 87 122 2 0 0 128 134 51 146 212 174 146 101 32 54 80 14 156 174 236 212 195 81 90 58 116 149 201 205 7 130 14 255 190 241 205 207 249 221 121 67 167 233 3 91 49 79 77 255 115 246 112 74 5 197 106 119 29 238 202 62 53 27 223 236 152 234 237 36 19 234 248 83 103 87 80 106 110 27 202 134 182 123 143 10 59 147 105 206 20 112 193 190 220 192 38 172 241 167 90 129 71 185 246 137 86 12 195 102 17 186 107 173 97 103 140 196 114 119 155 196 217 44 13 55 170 195 147 93 0 0 0 0 0 1 128 134 51 146 212 174 146 101 32 54 80 14 156 174 236 212 195 81 90 58 116 149 201 205 7 130 14 255 190 241 205 207 249 221 121 67 167 233 3 91 49 79 77 255 115 246 112 74 5 197 106 119 29 238 202 62 53 27 223 236 152 234 237 36 19 234 248 83 103 87 80 106 110 27 202 134 182 123 143 10 59 147 105 206 20 112 193 190 220 192 38 172 241 167 90 129 71 185 246 137 86 12 195 102 17 186 107 173 97 103 140 196 114 119 155 196 217 44 13 55 170 195 147 93 0 0 0 0 0 0 80 252 151 248 45 49 178 79 128 161 10 102 252 132 63 0 196 234 37 213 196 19 233 200 48 79 135 72 224 67 120 56 21 130 243 118 44 119 71 20 190 181 163 216 126 133 133 98 134 74 16 85 129 28 141 49 184 195 10 187 170 152 61 100 174 129 141 139 49 17 137 166 184 197 148 14 0 0 0 0 0 1 80 252 151 248 45 49 178 79 128 161 10 102 252 132 63 0 196 234 37 213 196 19 233 200 48 79 135 72 224 67 120 56 21 130 243 118 44 119 71 20 190 181 163 216 126 133 133 98 134 74 16 85 129 28 141 49 184 195 10 187 170 152 61 100 174 129 141 139 49 17 137 166 184 197 148 14 0 0 0 0 0 0 72 201 189 132 146 184 73 235 58 191 160 218 55 99 221 69 240 85 82 95 206 66 232 212 65 234 63 77 180 226 245 185 90 39 91 117 118 212 95 63 202 231 49 115 110 103 125 28 251 84 217 64 21 37 74 176 91 16 243 99 51 19 229 146 28 76 167 138 98 3 86 2 0 1 72 201 189 132 146 184 73 235 58 191 160 218 55 99 221 69 240 85 82 95 206 66 232 212 65 234 63 77 180 226 245 185 90 39 91 117 118 212 95 63 202 231 49 115 110 103 125 28 251 84 217 64 21 37 74 176 91 16 243 99 51 19 229 146 28 76 167 138 98 3 86 2 0 0 24 4 127 113 119 170 147 209 114 124 184 151 70 216 77 57 33 8 170 193 201 10 0 0 0 1 24 4 127 113 119 170 147 209 114 124 184 151 70 216 77 57 33 8 170 193 201 10 0 0 0 0 24 221 119 146 70 38 139 89 31 158 39 212 71 222 63 236 44 183 75 0 0 0 0 0 0 1 24 221 119 146 70 38 139 89 31 158 39 212 71 222 63 236 44 183 75 0 0 0 0 0 0 0 104 15 190 40 142 118 234 227 167 165 244 200 26 49 57 37 9 217 227 141 192 139 18 100 130 160 53 103 125 170 120 113 53 121 232 23 248 218 111 12 114 85 152 168 69 138 153 228 55 175 99 6 29 234 191 118 238 18 250 139 127 248 148 96 36 236 164 252 127 71 230 13 95 200 86 106 201 201 168 74 148 207 42 56 34 173 114 89 220 58 197 209 56 194 93 253 36 57 2 0 0 0 0 0 0 1 104 15 190 40 142 118 234 227 167 165 244 200 26 49 57 37 9 217 227 141 192 139 18 100 130 160 53 103 125 170 120 113 53 121 232 23 248 218 111 12 114 85 152 168 69 138 153 228 55 175 99 6 29 234 191 118 238 18 250 139 127 248 148 96 36 236 164 252 127 71 230 13 95 200 86 106 201 201 168 74 148 207 42 56 34 173 114 89 220 58 197 209 56 194 93 253 36 57 2 0 0 0 0 0 0 0 24 241 138 87 82 7 150 25 154 252 91 216 29 106 84 123 71 145 238 230 5 0 0 0 0 1 24 241 138 87 82 7 150 25 154 252 91 216 29 106 84 123 71 145 238 230 5 0 0 0 0 0 32 151 63 193 99 4 229 248 206 122 164 94 141 132 110 0 199 239 244 9 150 62 180 68 138 132 112 26 31 217 46 0 0 1 32 151 63 193 99 4 229 248 206 122 164 94 141 132 110 0 199 239 244 9 150 62 180 68 138 132 112 26 31 217 46 0 0 0 40 151 219 5 222 229 79 21 136 176 12 133 59 166 175 203 218 102 58 176 141 26 127 152 21 81 49 214 17 132 22 14 243 177 3 0 0 0 0 0 0 1 40 151 219 5 222 229 79 21 136 176 12 133 59 166 175 203 218 102 58 176 141 26 127 152 21 81 49 214 17 132 22 14 243 177 3 0 0 0 0 0 0 0 104 6 168 179 178 70 132 236 140 85 20 22 237 179 132 40 18 248 209 250 75 115 245 45 67 206 107 231 237 102 198 61 0 53 181 149 233 167 119 49 80 107 58 194 191 82 80 182 33 90 50 185 65 82 236 47 123 143 42 21 75 76 220 97 26 140 95 213 177 133 178 200 249 254 187 252 127 168 64 33 103 133 36 183 203 53 160 28 249 121 153 43 163 187 30 115 14 218 222 176 173 69 117 99 12 1 104 6 168 179 178 70 132 236 140 85 20 22 237 179 132 40 18 248 209 250 75 115 245 45 67 206 107 231 237 102 198 61 0 53 181 149 233 167 119 49 80 107 58 194 191 82 80 182 33 90 50 185 65 82 236 47 123 143 42 21 75 76 220 97 26 140 95 213 177 133 178 200 249 254 187 252 127 168 64 33 103 133 36 183 203 53 160 28 249 121 153 43 163 187 30 115 14 218 222 176 173 69 117 99 12 0 112 2 212 34 173 196 82 79 56 112 170 220 63 200 109 239 119 47 163 110 174 76 171 32 84 196 96 74 147 73 116 212 7 81 2 123 170 250 193 70 154 132 132 185 57 39 161 95 139 69 234 233 243 142 195 223 169 214 193 142 130 202 53 250 215 1 232 72 89 42 138 164 214 96 81 207 117 204 208 64 159 221 205 19 127 120 90 20 23 72 45 155 78 40 43 86 112 83 186 201 240 77 86 191 92 249 160 247 61 0 0 0 0 1 112 2 212 34 173 196 82 79 56 112 170 220 63 200 109 239 119 47 163 110 174 76 171 32 84 196 96 74 147 73 116 212 7 81 2 123 170 250 193 70 154 132 132 185 57 39 161 95 139 69 234 233 243 142 195 223 169 214 193 142 130 202 53 250 215 1 232 72 89 42 138 164 214 96 81 207 117 204 208 64 159 221 205 19 127 120 90 20 23 72 45 155 78 40 43 86 112 83 186 201 240 77 86 191 92 249 160 247 61 0 0 0 0 0 128 102 251 156 92 43 108 29 62 40 215 42 15 198 118 248 50 157 25 129 219 206 70 124 249 193 82 122 51 209 211 166 198 129 204 78 210 123 124 106 191 69 198 115 9 187 105 170 16 189 25 66 30 61 214 177 166 27 0 66 226 174 106 52 23 197 236 68 43 88 169 245 109 62 252 144 219 129 154 127 116 74 210 197 53 171 56 209 150 200 215 71 80 187 84 179 235 71 14 27 0 159 145 132 91 170 69 4 77 60 185 156 0 93 72 67 68 185 235 189 29 178 144 42 227 35 59 27 0 1 128 102 251 156 92 43 108 29 62 40 215 42 15 198 118 248 50 157 25 129 219 206 70 124 249 193 82 122 51 209 211 166 198 129 204 78 210 123 124 106 191 69 198 115 9 187 105 170 16 189 25 66 30 61 214 177 166 27 0 66 226 174 106 52 23 197 236 68 43 88 169 245 109 62 252 144 219 129 154 127 116 74 210 197 53 171 56 209 150 200 215 71 80 187 84 179 235 71 14 27 0 159 145 132 91 170 69 4 77 60 185 156 0 93 72 67 68 185 235 189 29 178 144 42 227 35 59 27 0 0 40 22 179 130 104 210 45 171 95 5 140 87 49 187 173 206 147 141 26 50 138 30 228 117 173 59 57 138 187 138 30 79 102 10 0 0 0 0 0 0 0 1 40 22 179 130 104 210 45 171 95 5 140 87 49 187 173 206 147 141 26 50 138 30 228 117 173 59 57 138 187 138 30 79 102 10 0 0 0 0 0 0 0 0 48 245 222 165 23 160 186 7 2 211 238 67 132 133 157 254 89 199 178 45 73 151 206 197 254 6 172 31 88 199 204 161 72 65 160 25 246 142 223 123 52 172 12 6 0 0 0 0 0 1 48 245 222 165 23 160 186 7 2 211 238 67 132 133 157 254 89 199 178 45 73 151 206 197 254 6 172 31 88 199 204 161 72 65 160 25 246 142 223 123 52 172 12 6 0 0 0 0 0 0 112 222 47 68 13 28 124 145 191 235 84 137 87 165 230 34 132 42 90 242 140 248 118 51 137 4 68 91 156 194 220 89 46 217 200 72 50 124 24 209 194 179 150 236 12 223 90 150 72 220 112 234 137 123 179 108 65 16 250 73 68 13 219 174 119 68 216 117 5 143 105 238 147 162 128 99 201 30 204 31 130 46 147 73 191 185 192 73 212 83 18 90 106 146 126 18 59 63 194 86 25 42 52 82 92 6 0 0 0 0 0 0 0 1 112 222 47 68 13 28 124 145 191 235 84 137 87 165 230 34 132 42 90 242 140 248 118 51 137 4 68 91 156 194 220 89 46 217 200 72 50 124 24 209 194 179 150 236 12 223 90 150 72 220 112 234 137 123 179 108 65 16 250 73 68 13 219 174 119 68 216 117 5 143 105 238 147 162 128 99 201 30 204 31 130 46 147 73 191 185 192 73 212 83 18 90 106 146 126 18 59 63 194 86 25 42 52 82 92 6 0 0 0 0 0 0 0 0 40 74 204 182 19 172 57 74 106 161 11 250 172 174 63 33 117 146 108 133 108 20 20 28 215 14 216 35 120 250 72 181 31 75 237 185 64 125 38 30 0 1 40 74 204 182 19 172 57 74 106 161 11 250 172 174 63 33 117 146 108 133 108 20 20 28 215 14 216 35 120 250 72 181 31 75 237 185 64 125 38 30 0 0 32 39 90 158 132 213 173 24 145 199 200 240 251 85 122 152 148 224 56 26 234 37 58 180 82 137 37 60 8 144 85 118 5 1 32 39 90 158 132 213 173 24 145 199 200 240 251 85 122 152 148 224 56 26 234 37 58 180 82 137 37 60 8 144 85 118 5 0 8 138 84 0 0 0 0 0 0 1 8 138 84 0 0 0 0 0 0 0 120 6 116 242 108 248 14 140 127 243 249 231 147 68 151 120 38 231 8 34 6 106 4 211 91 3 66 139 242 76 75 130 178 43 63 174 27 78 5 184 165 84 187 23 158 140 41 71 59 22 178 59 239 6 145 6 103 216 172 37 75 231 145 41 56 213 208 27 181 52 16 183 237 193 209 238 106 47 104 214 15 82 217 35 168 104 64 76 104 111 95 151 127 241 27 86 63 95 186 251 237 14 164 119 230 211 234 83 245 143 10 244 120 135 32 125 144 92 8 189 0 1 120 6 116 242 108 248 14 140 127 243 249 231 147 68 151 120 38 231 8 34 6 106 4 211 91 3 66 139 242 76 75 130 178 43 63 174 27 78 5 184 165 84 187 23 158 140 41 71 59 22 178 59 239 6 145 6 103 216 172 37 75 231 145 41 56 213 208 27 181 52 16 183 237 193 209 238 106 47 104 214 15 82 217 35 168 104 64 76 104 111 95 151 127 241 27 86 63 95 186 251 237 14 164 119 230 211 234 83 245 143 10 244 120 135 32 125 144 92 8 189 0 0 32 169 164 216 5 23 138 199 97 227 119 26 63 15 87 131 107 175 132 108 223 46 17 101 176 195 214 100 232 0 0 0 0 1 32 169 164 216 5 23 138 199 97 227 119 26 63 15 87 131 107 175 132 108 223 46 17 101 176 195 214 100 232 0 0 0 0 0 48 8 170 244 92 198 184 32 64 24 118 241 85 66 189 103 28 33 244 60 230 74 7 243 100 2 1 93 74 149 165 150 65 102 220 228 186 83 101 123 141 123 109 182 122 105 0 0 0 1 48 8 170 244 92 198 184 32 64 24 118 241 85 66 189 103 28 33 244 60 230 74 7 243 100 2 1 93 74 149 165 150 65 102 220 228 186 83 101 123 141 123 109 182 122 105 0 0 0 0 120 12 158 20 122 77 167 176 86 158 51 230 99 136 241 101 17 244 121 59 87 103 26 111 205 53 244 235 242 229 169 15 224 95 241 248 47 71 217 197 177 238 46 133 175 43 178 246 61 15 216 239 68 140 164 169 9 17 109 185 231 2 170 188 140 250 123 194 232 88 232 26 60 214 152 106 181 39 234 136 137 58 62 209 190 251 104 89 19 70 178 56 124 109 18 185 167 142 60 123 228 26 54 187 187 148 203 130 114 248 49 111 198 191 107 86 222 3 0 0 0 1 120 12 158 20 122 77 167 176 86 158 51 230 99 136 241 101 17 244 121 59 87 103 26 111 205 53 244 235 242 229 169 15 224 95 241 248 47 71 217 197 177 238 46 133 175 43 178 246 61 15 216 239 68 140 164 169 9 17 109 185 231 2 170 188 140 250 123 194 232 88 232 26 60 214 152 106 181 39 234 136 137 58 62 209 190 251 104 89 19 70 178 56 124 109 18 185 167 142 60 123 228 26 54 187 187 148 203 130 114 248 49 111 198 191 107 86 222 3 0 0 0 0 32 105 179 233 126 169 174 183 251 227 117 195 127 211 122 235 34 108 161 29 184 19 156 152 225 139 6 0 0 0 0 0 0 1 32 105 179 233 126 169 174 183 251 227 117 195 127 211 122 235 34 108 161 29 184 19 156 152 225 139 6 0 0 0 0 0 0 0 112 107 214 160 47 12 148 181 229 136 85 57 117 58 49 175 91 20 92 201 244 247 222 130 215 158 98 242 146 190 210 201 180 77 219 243 130 159 138 227 73 54 255 186 170 144 106 170 66 197 143 127 162 210 122 37 99 171 90 242 115 145 250 57 97 176 167 16 225 132 49 247 59 22 25 236 36 64 252 125 139 145 215 22 92 228 240 79 244 183 178 12 93 194 169 217 159 169 69 179 171 96 5 35 137 33 198 85 237 12 0 0 0 1 112 107 214 160 47 12 148 181 229 136 85 57 117 58 49 175 91 20 92 201 244 247 222 130 215 158 98 242 146 190 210 201 180 77 219 243 130 159 138 227 73 54 255 186 170 144 106 170 66 197 143 127 162 210 122 37 99 171 90 242 115 145 250 57 97 176 167 16 225 132 49 247 59 22 25 236 36 64 252 125 139 145 215 22 92 228 240 79 244 183 178 12 93 194 169 217 159 169 69 179 171 96 5 35 137 33 198 85 237 12 0 0 0 0 40 151 236 140 234 49 95 40 136 48 181 242 198 107 168 119 133 33 148 222 230 48 187 177 235 54 92 147 200 220 8 9 80 3 0 0 0 0 0 0 0 1 40 151 236 140 234 49 95 40 136 48 181 242 198 107 168 119 133 33 148 222 230 48 187 177 235 54 92 147 200 220 8 9 80 3 0 0 0 0 0 0 0 0 128 86 110 24 37 97 222 163 92 216 221 199 229 79 95 24 16 74 176 194 98 40 169 140 19 1 205 231 70 185 36 255 18 60 202 214 208 120 214 232 112 172 228 176 230 94 127 136 74 11 44 237 249 68 118 244 151 238 132 77 38 186 252 14 206 146 197 57 245 192 244 29 199 74 59 195 148 69 151 165 29 107 182 98 147 191 148 189 200 184 33 221 44 102 236 230 236 155 131 213 212 11 163 71 97 118 61 218 110 71 189 129 17 181 221 250 137 80 48 231 83 123 104 6 0 0 0 0 0 1 128 86 110 24 37 97 222 163 92 216 221 199 229 79 95 24 16 74 176 194 98 40 169 140 19 1 205 231 70 185 36 255 18 60 202 214 208 120 214 232 112 172 228 176 230 94 127 136 74 11 44 237 249 68 118 244 151 238 132 77 38 186 252 14 206 146 197 57 245 192 244 29 199 74 59 195 148 69 151 165 29 107 182 98 147 191 148 189 200 184 33 221 44 102 236 230 236 155 131 213 212 11 163 71 97 118 61 218 110 71 189 129 17 181 221 250 137 80 48 231 83 123 104 6 0 0 0 0 0 0 80 243 176 186 126 186 98 210 179 162 140 92 40 240 184 134 105 0 157 103 36 223 108 115 65 73 109 222 11 169 151 183 215 249 45 86 167 172 26 95 222 130 112 5 193 174 61 230 154 13 242 26 53 125 184 23 119 6 116 85 81 153 220 146 138 224 238 242 57 50 24 89 106 223 20 181 86 96 139 192 0 1 80 243 176 186 126 186 98 210 179 162 140 92 40 240 184 134 105 0 157 103 36 223 108 115 65 73 109 222 11 169 151 183 215 249 45 86 167 172 26 95 222 130 112 5 193 174 61 230 154 13 242 26 53 125 184 23 119 6 116 85 81 153 220 146 138 224 238 242 57 50 24 89 106 223 20 181 86 96 139 192 0 0 104 118 189 65 124 187 124 164 181 40 78 215 14 181 239 248 104 169 212 147 203 95 26 103 54 4 23 49 26 46 240 31 57 71 166 134 221 134 146 219 246 49 7 96 225 138 247 198 120 76 183 208 201 100 120 240 147 60 217 93 237 131 48 5 244 23 233 221 83 229 102 159 120 118 222 134 200 86 131 193 55 124 183 137 148 160 79 166 91 219 240 18 236 83 72 210 216 101 108 113 68 0 0 0 0 1 104 118 189 65 124 187 124 164 181 40 78 215 14 181 239 248 104 169 212 147 203 95 26 103 54 4 23 49 26 46 240 31 57 71 166 134 221 134 146 219 246 49 7 96 225 138 247 198 120 76 183 208 201 100 120 240 147 60 217 93 237 131 48 5 244 23 233 221 83 229 102 159 120 118 222 134 200 86 131 193 55 124 183 137 148 160 79 166 91 219 240 18 236 83 72 210 216 101 108 113 68 0 0 0 0 0 64 6 22 71 2 163 86 17 242 164 39 109 95 160 109 98 241 37 105 112 221 113 19 63 140 96 143 87 147 41 36 27 242 55 158 16 197 226 52 235 172 133 128 179 181 251 150 32 196 95 149 76 252 69 10 230 30 27 76 224 226 22 0 0 0 1 64 6 22 71 2 163 86 17 242 164 39 109 95 160 109 98 241 37 105 112 221 113 19 63 140 96 143 87 147 41 36 27 242 55 158 16 197 226 52 235 172 133 128 179 181 251 150 32 196 95 149 76 252 69 10 230 30 27 76 224 226 22 0 0 0 0 128 30 130 103 205 32 243 152 123 79 104 19 33 177 209 230 129 178 23 223 13 94 146 223 35 144 45 101 240 232 191 92 122 248 142 90 70 70 227 195 145 191 197 239 106 26 240 233 128 67 75 182 93 107 72 57 103 203 190 221 242 163 253 180 159 146 253 103 81 208 252 1 223 226 217 70 222 240 174 35 247 131 232 230 20 50 149 109 33 236 254 14 141 202 198 2 116 168 2 254 234 211 168 142 232 27 76 165 171 140 74 161 29 242 180 17 221 182 28 140 165 153 167 81 47 103 223 10 0 1 128 30 130 103 205 32 243 152 123 79 104 19 33 177 209 230 129 178 23 223 13 94 146 223 35 144 45 101 240 232 191 92 122 248 142 90 70 70 227 195 145 191 197 239 106 26 240 233 128 67 75 182 93 107 72 57 103 203 190 221 242 163 253 180 159 146 253 103 81 208 252 1 223 226 217 70 222 240 174 35 247 131 232 230 20 50 149 109 33 236 254 14 141 202 198 2 116 168 2 254 234 211 168 142 232 27 76 165 171 140 74 161 29 242 180 17 221 182 28 140 165 153 167 81 47 103 223 10 0 0 48 150 89 14 218 228 227 23 162 153 39 113 34 98 183 194 25 93 68 57 205 28 17 6 69 82 191 227 207 100 5 188 188 211 209 220 205 0 146 180 251 104 31 119 91 104 1 0 0 1 48 150 89 14 218 228 227 23 162 153 39 113 34 98 183 194 25 93 68 57 205 28 17 6 69 82 191 227 207 100 5 188 188 211 209 220 205 0 146 180 251 104 31 119 91 104 1 0 0 0 16 3 75 50 16 21 240 211 149 188 0 0 0 0 0 0 0 1 16 3 75 50 16 21 240 211 149 188 0 0 0 0 0 0 0 0 112 9 115 108 68 232 102 178 176 69 243 217 106 209 14 224 172 167 195 216 60 119 98 115 232 110 47 157 119 32 78 224 248 168 59 100 46 75 172 15 39 92 41 128 82 192 201 101 82 196 22 185 109 161 212 23 243 181 215 188 245 6 226 125 224 129 249 88 9 231 215 83 203 0 1 5 225 190 75 41 64 109 105 106 37 227 156 251 13 180 250 104 241 34 187 224 79 84 147 11 127 35 64 121 111 143 12 0 0 0 0 0 0 1 112 9 115 108 68 232 102 178 176 69 243 217 106 209 14 224 172 167 195 216 60 119 98 115 232 110 47 157 119 32 78 224 248 168 59 100 46 75 172 15 39 92 41 128 82 192 201 101 82 196 22 185 109 161 212 23 243 181 215 188 245 6 226 125 224 129 249 88 9 231 215 83 203 0 1 5 225 190 75 41 64 109 105 106 37 227 156 251 13 180 250 104 241 34 187 224 79 84 147 11 127 35 64 121 111 143 12 0 0 0 0 0 0 0 104 240 35 102 147 107 156 95 120 67 253 248 209 46 242 211 131 200 126 89 191 255 206 143 125 130 26 163 12 32 199 40 52 166 9 162 113 48 113 189 72 74 18 54 6 99 229 23 115 221 174 124 195 235 108 45 255 154 244 4 181 164 158 200 138 77 6 47 98 56 178 18 75 69 235 225 139 243 201 174 122 249 136 131 59 94 43 192 187 209 135 159 123 162 213 155 59 184 180 92 174 163 38 0 0 1 104 240 35 102 147 107 156 95 120 67 253 248 209 46 242 211 131 200 126 89 191 255 206 143 125 130 26 163 12 32 199 40 52 166 9 162 113 48 113 189 72 74 18 54 6 99 229 23 115 221 174 124 195 235 108 45 255 154 244 4 181 164 158 200 138 77 6 47 98 56 178 18 75 69 235 225 139 243 201 174 122 249 136 131 59 94 43 192 187 209 135 159 123 162 213 155 59 184 180 92 174 163 38 0 0 0 80 34 44 18 251 194 132 188 93 116 144 0 196 15 253 248 161 78 252 35 178 201 70 179 45 245 2 116 179 119 55 186 117 38 191 38 14 139 33 131 60 35 40 0 31 70 182 70 55 167 178 147 137 65 30 203 93 63 183 214 107 14 138 249 141 189 54 170 164 36 100 151 195 142 247 0 1 0 0 0 0 1 80 34 44 18 251 194 132 188 93 116 144 0 196 15 253 248 161 78 252 35 178 201 70 179 45 245 2 116 179 119 55 186 117 38 191 38 14 139 33 131 60 35 40 0 31 70 182 70 55 167 178 147 137 65 30 203 93 63 183 214 107 14 138 249 141 189 54 170 164 36 100 151 195 142 247 0 1 0 0 0 0 0 80 79 161 242 148 36 174 71 109 70 137 27 172 124 50 231 16 178 199 67 3 78 176 12 53 168 39 253 247 13 21 191 128 38 67 12 15 248 234 73 154 95 171 123 99 52 42 32 229 121 208 121 181 151 154 103 80 7 41 152 206 129 106 69 208 252 39 163 130 241 51 69 244 247 1 5 121 0 0 0 0 1 80 79 161 242 148 36 174 71 109 70 137 27 172 124 50 231 16 178 199 67 3 78 176 12 53 168 39 253 247 13 21 191 128 38 67 12 15 248 234 73 154 95 171 123 99 52 42 32 229 121 208 121 181 151 154 103 80 7 41 152 206 129 106 69 208 252 39 163 130 241 51 69 244 247 1 5 121 0 0 0 0 0 72 100 73 185 231 4 112 172 84 227 126 234 51 137 221 166 192 16 157 41 74 141 121 176 14 135 245 170 38 223 239 224 207 235 164 137 197 183 43 64 0 12 216 240 6 61 23 238 237 201 225 110 75 253 193 88 168 185 218 43 229 167 97 130 102 214 215 134 90 204 214 6 0 1 72 100 73 185 231 4 112 172 84 227 126 234 51 137 221 166 192 16 157 41 74 141 121 176 14 135 245 170 38 223 239 224 207 235 164 137 197 183 43 64 0 12 216 240 6 61 23 238 237 201 225 110 75 253 193 88 168 185 218 43 229 167 97 130 102 214 215 134 90 204 214 6 0 0 96 219 203 221 208 224 159 230 219 11 100 135 13 4 127 208 103 80 48 213 73 245 143 157 122 152 178 240 239 253 126 244 30 239 102 14 87 67 14 70 171 224 149 9 84 107 219 85 124 178 61 180 47 218 225 163 193 116 189 130 11 146 64 142 109 98 176 49 26 100 226 15 127 68 213 132 163 70 52 46 10 247 185 6 76 76 180 190 205 124 250 143 171 106 50 0 0 1 96 219 203 221 208 224 159 230 219 11 100 135 13 4 127 208 103 80 48 213 73 245 143 157 122 152 178 240 239 253 126 244 30 239 102 14 87 67 14 70 171 224 149 9 84 107 219 85 124 178 61 180 47 218 225 163 193 116 189 130 11 146 64 142 109 98 176 49 26 100 226 15 127 68 213 132 163 70 52 46 10 247 185 6 76 76 180 190 205 124 250 143 171 106 50 0 0 0 120 217 116 20 196 181 6 137 250 178 207 36 29 215 183 251 28 156 129 254 149 110 35 250 145 188 199 148 182 206 23 143 174 147 1 195 119 32 158 253 47 241 245 160 161 23 172 143 224 166 48 241 224 180 60 40 55 163 113 65 217 210 254 250 75 125 222 20 146 22 127 207 180 19 232 245 117 4 55 117 208 11 134 81 103 44 211 65 174 30 21 186 123 156 224 41 168 144 253 5 228 247 219 192 43 85 242 13 199 36 248 50 226 239 233 47 12 212 3 0 0 1 120 217 116 20 196 181 6 137 250 178 207 36 29 215 183 251 28 156 129 254 149 110 35 250 145 188 199 148 182 206 23 143 174 147 1 195 119 32 158 253 47 241 245 160 161 23 172 143 224 166 48 241 224 180 60 40 55 163 113 65 217 210 254 250 75 125 222 20 146 22 127 207 180 19 232 245 117 4 55 117 208 11 134 81 103 44 211 65 174 30 21 186 123 156 224 41 168 144 253 5 228 247 219 192 43 85 242 13 199 36 248 50 226 239 233 47 12 212 3 0 0 0 96 94 102 6 123 33 254 222 92 46 211 170 116 91 71 221 6 87 3 144 77 231 38 4 248 202 135 81 159 100 30 21 111 114 225 52 100 98 124 212 26 0 192 179 224 123 152 186 35 198 14 32 169 2 28 91 12 93 226 2 56 176 203 77 155 47 63 21 131 158 27 252 110 108 46 2 205 114 62 224 151 97 97 251 197 34 255 29 36 247 1 0 0 0 0 0 0 1 96 94 102 6 123 33 254 222 92 46 211 170 116 91 71 221 6 87 3 144 77 231 38 4 248 202 135 81 159 100 30 21 111 114 225 52 100 98 124 212 26 0 192 179 224 123 152 186 35 198 14 32 169 2 28 91 12 93 226 2 56 176 203 77 155 47 63 21 131 158 27 252 110 108 46 2 205 114 62 224 151 97 97 251 197 34 255 29 36 247 1 0 0 0 0 0 0 0 40 213 155 45 217 157 63 158 214 179 178 45 31 167 171 88 99 135 205 98 19 102 250 247 155 144 144 184 108 185 216 134 183 188 174 39 244 81 0 0 0 1 40 213 155 45 217 157 63 158 214 179 178 45 31 167 171 88 99 135 205 98 19 102 250 247 155 144 144 184 108 185 216 134 183 188 174 39 244 81 0 0 0 0 88 143 221 144 99 71 55 91 51 132 189 170 46 209 246 137 32 255 61 37 105 68 54 129 75 74 69 209 169 194 207 43 51 79 37 156 64 84 31 147 49 63 100 147 137 157 156 108 126 196 246 233 144 88 124 237 160 146 162 62 111 128 118 225 95 72 29 227 189 100 72 148 6 238 216 74 124 168 129 102 216 225 99 39 71 85 27 125 1 1 88 143 221 144 99 71 55 91 51 132 189 170 46 209 246 137 32 255 61 37 105 68 54 129 75 74 69 209 169 194 207 43 51 79 37 156 64 84 31 147 49 63 100 147 137 157 156 108 126 196 246 233 144 88 124 237 160 146 162 62 111 128 118 225 95 72 29 227 189 100 72 148 6 238 216 74 124 168 129 102 216 225 99 39 71 85 27 125 1 0 104 154 59 8 214 250 135 152 185 224 10 174 79 58 146 203 236 143 30 28 53 247 75 23 46 61 14 153 250 130 43 106 99 3 114 97 134 236 14 79 134 253 241 239 191 59 197 179 112 33 255 64 2 35 190 107 61 57 182 11 43 73 118 122 234 246 107 208 63 148 121 113 255 201 200 66 134 64 61 39 183 76 142 5 123 90 113 163 171 46 238 92 52 235 152 239 73 131 0 0 0 0 0 0 0 1 104 154 59 8 214 250 135 152 185 224 10 174 79 58 146 203 236 143 30 28 53 247 75 23 46 61 14 153 250 130 43 106 99 3 114 97 134 236 14 79 134 253 241 239 191 59 197 179 112 33 255 64 2 35 190 107 61 57 182 11 43 73 118 122 234 246 107 208 63 148 121 113 255 201 200 66 134 64 61 39 183 76 142 5 123 90 113 163 171 46 238 92 52 235 152 239 73 131 0 0 0 0 0 0 0 0 56 1 38 134 41 29 170 88 160 233 145 132 85 205 36 47 50 209 38 92 196 100 126 18 43 149 60 250 154 84 98 23 80 203 61 86 37 43 121 198 250 148 214 237 218 106 31 30 52 22 223 4 0 0 0 0 0 1 56 1 38 134 41 29 170 88 160 233 145 132 85 205 36 47 50 209 38 92 196 100 126 18 43 149 60 250 154 84 98 23 80 203 61 86 37 43 121 198 250 148 214 237 218 106 31 30 52 22 223 4 0 0 0 0 0 0 104 215 110 214 250 112 196 210 135 44 106 41 81 231 208 226 187 180 124 169 6 101 223 131 248 7 59 123 141 245 45 155 111 191 45 243 237 47 248 47 233 222 27 53 116 18 174 176 121 70 241 49 29 54 248 100 119 186 7 84 242 46 154 182 14 231 49 213 37 52 160 79 242 253 165 71 241 87 50 98 158 58 249 163 206 75 138 146 172 232 178 183 137 30 153 204 59 17 0 0 0 0 0 0 0 1 104 215 110 214 250 112 196 210 135 44 106 41 81 231 208 226 187 180 124 169 6 101 223 131 248 7 59 123 141 245 45 155 111 191 45 243 237 47 248 47 233 222 27 53 116 18 174 176 121 70 241 49 29 54 248 100 119 186 7 84 242 46 154 182 14 231 49 213 37 52 160 79 242 253 165 71 241 87 50 98 158 58 249 163 206 75 138 146 172 232 178 183 137 30 153 204 59 17 0 0 0 0 0 0 0 0 72 226 229 244 239 100 207 243 201 63 193 44 114 73 253 9 63 199 34 184 12 34 181 93 167 70 38 119 43 136 85 61 200 200 27 101 128 179 178 146 168 152 45 163 217 123 227 167 40 116 43 26 248 220 216 17 126 35 228 188 102 203 130 134 149 10 8 144 5 253 158 4 186 1 72 226 229 244 239 100 207 243 201 63 193 44 114 73 253 9 63 199 34 184 12 34 181 93 167 70 38 119 43 136 85 61 200 200 27 101 128 179 178 146 168 152 45 163 217 123 227 167 40 116 43 26 248 220 216 17 126 35 228 188 102 203 130 134 149 10 8 144 5 253 158 4 186 0 56 94 1 134 237 212 63 41 32 13 66 189 152 40 150 138 20 124 116 62 140 23 229 83 230 85 61 202 206 29 102 39 28 182 37 173 34 29 120 65 193 196 145 186 204 173 159 132 183 115 0 0 0 0 0 0 0 1 56 94 1 134 237 212 63 41 32 13 66 189 152 40 150 138 20 124 116 62 140 23 229 83 230 85 61 202 206 29 102 39 28 182 37 173 34 29 120 65 193 196 145 186 204 173 159 132 183 115 0 0 0 0 0 0 0 0 32 172 92 233 22 126 43 253 105 39 155 94 185 44 226 60 168 170 203 19 17 108 152 224 242 209 228 43 0 0 0 0 0 1 32 172 92 233 22 126 43 253 105 39 155 94 185 44 226 60 168 170 203 19 17 108 152 224 242 209 228 43 0 0 0 0 0 0 80 76 207 112 0 53 15 20 52 176 51 179 204 201 221 199 215 198 47 180 117 63 178 218 237 224 7 238 83 244 101 132 225 169 14 209 41 140 228 33 125 131 46 213 26 149 30 9 194 107 82 49 220 69 57 63 176 58 107 164 112 122 14 78 212 162 39 156 86 247 229 146 165 114 0 0 0 0 0 0 0 1 80 76 207 112 0 53 15 20 52 176 51 179 204 201 221 199 215 198 47 180 117 63 178 218 237 224 7 238 83 244 101 132 225 169 14 209 41 140 228 33 125 131 46 213 26 149 30 9 194 107 82 49 220 69 57 63 176 58 107 164 112 122 14 78 212 162 39 156 86 247 229 146 165 114 0 0 0 0 0 0 0 0 72 251 218 113 128 106 254 150 82 225 107 92 157 216 88 77 244 99 157 1 98 151 72 130 185 194 141 147 195 242 231 156 213 157 138 94 239 99 178 106 231 226 192 202 146 27 248 176 225 209 153 7 186 7 50 120 183 212 126 50 190 105 134 94 43 155 64 125 6 0 0 0 0 1 72 251 218 113 128 106 254 150 82 225 107 92 157 216 88 77 244 99 157 1 98 151 72 130 185 194 141 147 195 242 231 156 213 157 138 94 239 99 178 106 231 226 192 202 146 27 248 176 225 209 153 7 186 7 50 120 183 212 126 50 190 105 134 94 43 155 64 125 6 0 0 0 0 0 16 209 108 141 185 23 199 10 211 38 178 0 0 0 0 0 0 1 16 209 108 141 185 23 199 10 211 38 178 0 0 0 0 0 0 0 56 154 210 229 202 23 25 195 186 179 6 6 199 170 59 41 215 172 79 12 201 40 201 127 61 38 143 15 80 87 105 227 146 32 219 224 101 136 180 226 214 34 112 110 89 114 34 177 212 74 212 106 6 0 0 0 0 1 56 154 210 229 202 23 25 195 186 179 6 6 199 170 59 41 215 172 79 12 201 40 201 127 61 38 143 15 80 87 105 227 146 32 219 224 101 136 180 226 214 34 112 110 89 114 34 177 212 74 212 106 6 0 0 0 0 0 8 100 135 7 25 201 86 188 2 1 8 100 135 7 25 201 86 188 2 0 48 109 14 55 6 23 219 83 134 16 29 117 179 205 24 254 117 81 245 228 115 29 245 23 120 19 143 171 136 217 234 105 176 54 200 15 132 252 117 219 34 127 228 168 111 203 2 0 0 1 48 109 14 55 6 23 219 83 134 16 29 117 179 205 24 254 117 81 245 228 115 29 245 23 120 19 143 171 136 217 234 105 176 54 200 15 132 252 117 219 34 127 228 168 111 203 2 0 0 0 72 189 190 26 27 18 245 206 184 37 205 141 131 212 0 127 17 122 35 32 152 79 200 69 20 74 161 75 208 251 152 129 241 33 169 49 200 168 98 138 154 1 201 2 137 248 97 109 91 51 92 185 150 229 58 56 137 252 73 190 235 237 144 130 251 152 190 194 0 0 0 0 0 1 72 189 190 26 27 18 245 206 184 37 205 141 131 212 0 127 17 122 35 32 152 79 200 69 20 74 161 75 208 251 152 129 241 33 169 49 200 168 98 138 154 1 201 2 137 248 97 109 91 51 92 185 150 229 58 56 137 252 73 190 235 237 144 130 251 152 190 194 0 0 0 0 0 0 80 207 251 128 22 249 241 160 213 177 156 81 63 226 211 104 180 224 253 194 155 185 4 55 89 47 114 245 7 150 248 180 92 51 125 222 246 36 165 153 246 217 229 236 207 71 52 111 220 127 235 87 138 209 205 186 72 20 6 162 209 199 59 28 143 29 40 129 110 196 31 138 191 210 255 29 45 0 0 0 0 1 80 207 251 128 22 249 241 160 213 177 156 81 63 226 211 104 180 224 253 194 155 185 4 55 89 47 114 245 7 150 248 180 92 51 125 222 246 36 165 153 246 217 229 236 207 71 52 111 220 127 235 87 138 209 205 186 72 20 6 162 209 199 59 28 143 29 40 129 110 196 31 138 191 210 255 29 45 0 0 0 0 0 104 34 105 251 242 196 29 25 191 13 57 197 24 56 214 71 179 84 16 80 235 205 101 211 115 134 253 214 216 165 198 158 63 242 99 11 173 46 16 134 146 11 55 237 102 192 144 220 243 114 208 229 213 0 218 193 226 110 51 184 76 183 51 12 136 3 140 173 50 245 19 16 15 166 7 51 67 86 66 36 164 78 174 152 214 177 106 255 43 110 199 185 127 79 12 140 96 198 60 160 102 0 0 0 0 1 104 34 105 251 242 196 29 25 191 13 57 197 24 56 214 71 179 84 16 80 235 205 101 211 115 134 253 214 216 165 198 158 63 242 99 11 173 46 16 134 146 11 55 237 102 192 144 220 243 114 208 229 213 0 218 193 226 110 51 184 76 183 51 12 136 3 140 173 50 245 19 16 15 166 7 51 67 86 66 36 164 78 174 152 214 177 106 255 43 110 199 185 127 79 12 140 96 198 60 160 102 0 0 0 0 0 48 151 50 240 113 2 240 195 92 196 249 19 127 144 80 105 89 196 158 41 252 36 228 125 87 223 38 175 180 160 171 217 8 107 79 15 49 18 96 89 233 92 36 110 25 144 127 0 0 1 48 151 50 240 113 2 240 195 92 196 249 19 127 144 80 105 89 196 158 41 252 36 228 125 87 223 38 175 180 160 171 217 8 107 79 15 49 18 96 89 233 92 36 110 25 144 127 0 0 0 120 220 111 204 84 44 130 217 213 198 206 117 146 194 10 147 26 202 239 193 244 37 205 135 142 56 32 249 87 168 225 194 69 224 42 44 177 94 77 94 53 91 119 184 126 54 91 178 96 62 34 235 141 251 16 10 187 157 41 198 141 167 60 123 73 194 190 232 21 131 122 95 94 19 80 131 0 80 156 191 71 14 30 148 74 123 179 226 24 229 233 126 54 51 237 55 92 191 74 239 104 108 155 8 161 36 74 77 55 133 160 139 207 243 154 53 85 221 49 167 10 1 120 220 111 204 84 44 130 217 213 198 206 117 146 194 10 147 26 202 239 193 244 37 205 135 142 56 32 249 87 168 225 194 69 224 42 44 177 94 77 94 53 91 119 184 126 54 91 178 96 62 34 235 141 251 16 10 187 157 41 198 141 167 60 123 73 194 190 232 21 131 122 95 94 19 80 131 0 80 156 191 71 14 30 148 74 123 179 226 24 229 233 126 54 51 237 55 92 191 74 239 104 108 155 8 161 36 74 77 55 133 160 139 207 243 154 53 85 221 49 167 10 0 128 66 181 48 69 164 115 164 70 89 243 215 101 175 87 235 67 90 105 180 75 47 179 125 207 87 227 224 42 29 17 96 44 75 24 133 40 113 24 135 93 121 59 20 187 166 95 86 53 166 161 86 99 27 119 194 156 39 207 117 76 162 208 78 38 249 64 104 247 119 216 98 220 191 85 93 88 71 67 153 91 210 137 198 13 84 67 129 197 58 103 183 253 111 51 7 9 158 89 134 12 78 19 173 133 159 221 103 18 198 238 156 111 121 141 61 104 245 244 206 7 118 23 61 26 0 0 0 0 1 128 66 181 48 69 164 115 164 70 89 243 215 101 175 87 235 67 90 105 180 75 47 179 125 207 87 227 224 42 29 17 96 44 75 24 133 40 113 24 135 93 121 59 20 187 166 95 86 53 166 161 86 99 27 119 194 156 39 207 117 76 162 208 78 38 249 64 104 247 119 216 98 220 191 85 93 88 71 67 153 91 210 137 198 13 84 67 129 197 58 103 183 253 111 51 7 9 158 89 134 12 78 19 173 133 159 221 103 18 198 238 156 111 121 141 61 104 245 244 206 7 118 23 61 26 0 0 0 0 0 24 53 158 199 70 207 47 204 168 124 200 230 150 58 31 240 105 24 0 0 0 0 0 0 0 1 24 53 158 199 70 207 47 204 168 124 200 230 150 58 31 240 105 24 0 0 0 0 0 0 0 0 24 44 216 57 222 28 184 85 185 207 83 175 57 221 190 218 247 150 5 9 117 0 0 0 0 1 24 44 216 57 222 28 184 85 185 207 83 175 57 221 190 218 247 150 5 9 117 0 0 0 0 0 80 175 96 135 121 157 156 226 243 56 243 161 244 255 180 122 46 138 241 238 214 239 108 19 34 52 247 13 21 71 51 38 3 155 181 28 151 11 194 1 127 89 168 237 141 215 157 75 68 132 79 117 113 7 76 199 243 237 109 44 236 225 116 106 60 77 216 199 25 21 97 116 178 189 0 0 0 0 0 0 0 1 80 175 96 135 121 157 156 226 243 56 243 161 244 255 180 122 46 138 241 238 214 239 108 19 34 52 247 13 21 71 51 38 3 155 181 28 151 11 194 1 127 89 168 237 141 215 157 75 68 132 79 117 113 7 76 199 243 237 109 44 236 225 116 106 60 77 216 199 25 21 97 116 178 189 0 0 0 0 0 0 0 0 56 202 229 137 148 154 5 233 137 136 40 13 16 169 117 12 152 29 203 90 68 73 225 131 236 45 230 124 112 148 9 55 131 227 132 115 213 238 10 238 61 255 35 176 204 139 43 31 180 151 38 28 0 0 0 0 0 1 56 202 229 137 148 154 5 233 137 136 40 13 16 169 117 12 152 29 203 90 68 73 225 131 236 45 230 124 112 148 9 55 131 227 132 115 213 238 10 238 61 255 35 176 204 139 43 31 180 151 38 28 0 0 0 0 0 0 64 235 98 102 1 125 196 43 138 213 140 187 232 56 154 133 53 67 83 164 240 80 16 61 51 160 252 62 34 180 200 255 184 169 84 36 69 72 6 78 7 150 152 1 13 250 97 34 132 97 157 173 219 115 157 86 128 104 9 243 111 0 0 0 0 1 64 235 98 102 1 125 196 43 138 213 140 187 232 56 154 133 53 67 83 164 240 80 16 61 51 160 252 62 34 180 200 255 184 169 84 36 69 72 6 78 7 150 152 1 13 250 97 34 132 97 157 173 219 115 157 86 128 104 9 243 111 0 0 0 0 0 56 110 238 199 119 170 141 33 211 193 225 211 65 71 230 113 169 249 100 145 146 90 130 63 193 239 121 202 133 82 133 133 53 185 111 84 99 172 253 212 36 243 170 231 244 134 94 195 226 84 11 0 0 0 0 0 0 1 56 110 238 199 119 170 141 33 211 193 225 211 65 71 230 113 169 249 100 145 146 90 130 63 193 239 121 202 133 82 133 133 53 185 111 84 99 172 253 212 36 243 170 231 244 134 94 195 226 84 11 0 0 0 0 0 0 0 8 106 26 0 0 0 0 0 0 1 8 106 26 0 0 0 0 0 0 0 96 55 152 73 157 134 83 107 104 157 196 53 164 2 160 29 214 41 144 154 185 26 161 178 109 113 19 105 96 157 167 54 34 103 42 200 114 164 164 104 227 67 103 2 210 8 116 188 135 174 40 62 91 190 166 226 195 250 41 221 152 30 57 61 233 241 101 130 10 63 191 169 19 148 16 188 139 65 132 105 232 99 49 96 137 153 204 114 212 66 194 182 129 146 0 0 0 1 96 55 152 73 157 134 83 107 104 157 196 53 164 2 160 29 214 41 144 154 185 26 161 178 109 113 19 105 96 157 167 54 34 103 42 200 114 164 164 104 227 67 103 2 210 8 116 188 135 174 40 62 91 190 166 226 195 250 41 221 152 30 57 61 233 241 101 130 10 63 191 169 19 148 16 188 139 65 132 105 232 99 49 96 137 153 204 114 212 66 194 182 129 146 0 0 0 0 48 215 234 168 32 222 91 186 69 25 72 240 30 59 198 171 46 112 186 148 235 6 205 150 234 108 20 173 83 144 129 239 167 253 152 161 53 229 15 251 248 211 51 238 4 0 0 0 0 1 48 215 234 168 32 222 91 186 69 25 72 240 30 59 198 171 46 112 186 148 235 6 205 150 234 108 20 173 83 144 129 239 167 253 152 161 53 229 15 251 248 211 51 238 4 0 0 0 0 0 56 189 135 39 96 175 218 106 164 199 43 5 248 111 65 179 200 109 31 254 255 126 80 190 92 65 237 178 43 23 153 58 10 9 97 226 246 198 243 117 174 24 218 33 231 128 164 157 128 151 190 0 0 0 0 0 0 1 56 189 135 39 96 175 218 106 164 199 43 5 248 111 65 179 200 109 31 254 255 126 80 190 92 65 237 178 43 23 153 58 10 9 97 226 246 198 243 117 174 24 218 33 231 128 164 157 128 151 190 0 0 0 0 0 0 0 24 239 56 183 78 45 154 165 142 40 239 207 3 167 77 151 86 239 3 11 209 79 0 0 0 1 24 239 56 183 78 45 154 165 142 40 239 207 3 167 77 151 86 239 3 11 209 79 0 0 0 0 120 130 184 128 68 207 249 83 80 33 163 142 32 202 202 145 151 232 83 195 182 58 116 163 243 175 189 47 35 208 19 5 175 59 26 2 94 105 183 66 152 203 200 32 2 26 199 8 181 211 38 92 194 207 149 100 136 89 145 224 231 176 230 123 222 97 24 81 114 242 42 179 218 87 154 251 235 53 36 114 72 81 186 89 13 87 192 22 111 97 8 245 31 80 244 208 101 196 210 93 76 175 182 133 13 74 7 144 34 186 229 253 42 25 120 196 253 145 203 34 0 1 120 130 184 128 68 207 249 83 80 33 163 142 32 202 202 145 151 232 83 195 182 58 116 163 243 175 189 47 35 208 19 5 175 59 26 2 94 105 183 66 152 203 200 32 2 26 199 8 181 211 38 92 194 207 149 100 136 89 145 224 231 176 230 123 222 97 24 81 114 242 42 179 218 87 154 251 235 53 36 114 72 81 186 89 13 87 192 22 111 97 8 245 31 80 244 208 101 196 210 93 76 175 182 133 13 74 7 144 34 186 229 253 42 25 120 196 253 145 203 34 0 0 104 177 43 20 0 140 140 47 23 231 84 40 77 91 102 55 158 233 117 153 218 25 252 97 80 128 163 220 227 30 148 92 31 92 123 175 218 18 184 223 122 242 27 52 233 221 142 227 84 175 165 149 51 30 52 3 112 242 251 194 123 45 37 79 48 197 65 154 217 117 129 115 239 202 140 4 219 13 126 27 135 146 152 96 151 82 124 223 118 24 195 194 175 191 121 134 29 81 56 114 151 40 33 0 0 1 104 177 43 20 0 140 140 47 23 231 84 40 77 91 102 55 158 233 117 153 218 25 252 97 80 128 163 220 227 30 148 92 31 92 123 175 218 18 184 223 122 242 27 52 233 221 142 227 84 175 165 149 51 30 52 3 112 242 251 194 123 45 37 79 48 197 65 154 217 117 129 115 239 202 140 4 219 13 126 27 135 146 152 96 151 82 124 223 118 24 195 194 175 191 121 134 29 81 56 114 151 40 33 0 0 0 56 226 202 173 6 149 116 30 177 236 7 160 65 73 122 165 121 36 223 128 217 110 236 2 31 124 183 89 207 252 6 59 84 137 76 50 38 76 184 223 208 6 130 201 233 242 76 37 234 218 223 126 70 103 75 198 17 1 56 226 202 173 6 149 116 30 177 236 7 160 65 73 122 165 121 36 223 128 217 110 236 2 31 124 183 89 207 252 6 59 84 137 76 50 38 76 184 223 208 6 130 201 233 242 76 37 234 218 223 126 70 103 75 198 17 0 40 143 226 94 34 87 62 30 33 239 85 79 57 245 111 192 126 163 234 125 86 103 149 210 150 242 12 158 215 135 158 29 55 151 47 136 29 80 31 37 252 1 40 143 226 94 34 87 62 30 33 239 85 79 57 245 111 192 126 163 234 125 86 103 149 210 150 242 12 158 215 135 158 29 55 151 47 136 29 80 31 37 252 0 112 181 27 23 157 82 76 57 33 149 24 89 155 221 152 127 94 66 164 208 210 148 182 78 234 184 210 234 72 255 16 100 229 47 58 156 105 247 59 66 253 245 169 65 48 79 130 122 51 190 191 81 1 34 200 63 2 65 127 95 41 111 129 132 49 253 173 167 197 104 55 130 14 224 162 119 109 66 142 188 11 186 58 39 173 207 179 212 181 61 158 3 218 40 241 226 184 47 0 88 220 135 180 224 61 164 169 34 189 151 91 0 0 1 112 181 27 23 157 82 76 57 33 149 24 89 155 221 152 127 94 66 164 208 210 148 182 78 234 184 210 234 72 255 16 100 229 47 58 156 105 247 59 66 253 245 169 65 48 79 130 122 51 190 191 81 1 34 200 63 2 65 127 95 41 111 129 132 49 253 173 167 197 104 55 130 14 224 162 119 109 66 142 188 11 186 58 39 173 207 179 212 181 61 158 3 218 40 241 226 184 47 0 88 220 135 180 224 61 164 169 34 189 151 91 0 0 0 72 245 37 28 124 5 215 158 136 244 187 142 156 141 44 84 13 112 140 11 136 159 80 12 232 82 107 30 135 75 126 13 223 106 21 218 151 253 45 223 202 227 61 206 171 121 209 68 8 191 131 100 178 102 54 84 51 65 145 226 154 248 80 115 68 154 209 63 76 0 0 0 0 1 72 245 37 28 124 5 215 158 136 244 187 142 156 141 44 84 13 112 140 11 136 159 80 12 232 82 107 30 135 75 126 13 223 106 21 218 151 253 45 223 202 227 61 206 171 121 209 68 8 191 131 100 178 102 54 84 51 65 145 226 154 248 80 115 68 154 209 63 76 0 0 0 0 0 80 135 137 38 34 14 3 46 79 186 179 131 28 57 25 247 29 19 45 197 193 203 121 109 165 119 101 172 185 115 171 154 177 182 27 155 85 37 5 182 213 87 183 42 234 134 15 60 0 46 192 218 165 41 22 150 148 218 236 133 178 67 163 140 233 134 213 210 71 193 23 166 26 63 204 170 123 79 127 246 26 1 80 135 137 38 34 14 3 46 79 186 179 131 28 57 25 247 29 19 45 197 193 203 121 109 165 119 101 172 185 115 171 154 177 182 27 155 85 37 5 182 213 87 183 42 234 134 15 60 0 46 192 218 165 41 22 150 148 218 236 133 178 67 163 140 233 134 213 210 71 193 23 166 26 63 204 170 123 79 127 246 26 0 24 161 11 98 151 34 241 111 106 193 28 3 100 220 97 185 34 185 14 129 244 209 10 0 0 1 24 161 11 98 151 34 241 111 106 193 28 3 100 220 97 185 34 185 14 129 244 209 10 0 0 0 16 130 229 241 126 185 171 21 95 192 161 17 185 7 19 79 20 1 16 130 229 241 126 185 171 21 95 192 161 17 185 7 19 79 20 0 80 9 13 228 66 211 156 80 135 182 180 214 181 47 183 227 46 41 12 246 131 232 90 158 5 19 60 63 252 117 169 61 164 189 193 27 141 183 254 18 152 59 130 30 176 181 167 165 190 60 186 198 100 145 152 47 75 69 203 253 237 35 74 191 49 205 55 93 241 175 147 35 169 57 234 147 255 216 2 0 0 1 80 9 13 228 66 211 156 80 135 182 180 214 181 47 183 227 46 41 12 246 131 232 90 158 5 19 60 63 252 117 169 61 164 189 193 27 141 183 254 18 152 59 130 30 176 181 167 165 190 60 186 198 100 145 152 47 75 69 203 253 237 35 74 191 49 205 55 93 241 175 147 35 169 57 234 147 255 216 2 0 0 0 64 141 139 202 76 43 47 180 136 161 170 209 0 136 207 136 36 208 145 71 130 83 221 226 101 19 151 187 159 109 224 255 62 88 129 165 22 98 27 176 90 80 16 65 129 69 250 183 187 147 190 130 199 5 11 138 101 83 65 161 2 6 0 0 0 1 64 141 139 202 76 43 47 180 136 161 170 209 0 136 207 136 36 208 145 71 130 83 221 226 101 19 151 187 159 109 224 255 62 88 129 165 22 98 27 176 90 80 16 65 129 69 250 183 187 147 190 130 199 5 11 138 101 83 65 161 2 6 0 0 0 0 40 187 72 171 67 22 57 200 41 156 125 20 118 214 230 17 121 132 100 6 245 170 66 142 117 245 148 173 113 251 22 92 19 155 30 0 0 0 0 0 0 1 40 187 72 171 67 22 57 200 41 156 125 20 118 214 230 17 121 132 100 6 245 170 66 142 117 245 148 173 113 251 22 92 19 155 30 0 0 0 0 0 0 0 48 101 58 72 216 138 4 45 140 222 69 239 13 13 50 235 67 209 36 214 49 165 77 35 96 140 27 164 215 181 180 73 146 42 130 29 96 159 153 232 94 77 175 255 20 0 0 0 0 1 48 101 58 72 216 138 4 45 140 222 69 239 13 13 50 235 67 209 36 214 49 165 77 35 96 140 27 164 215 181 180 73 146 42 130 29 96 159 153 232 94 77 175 255 20 0 0 0 0 0 88 219 224 155 211 221 151 19 144 234 158 11 45 122 35 132 149 62 141 108 208 26 84 49 255 193 206 21 192 119 23 25 107 230 224 23 255 211 84 131 200 163 22 3 191 95 246 22 164 37 9 116 62 212 138 8 160 64 31 218 139 106 242 89 216 218 255 147 91 71 129 205 194 18 209 161 119 85 170 226 225 162 83 212 20 0 0 0 0 1 88 219 224 155 211 221 151 19 144 234 158 11 45 122 35 132 149 62 141 108 208 26 84 49 255 193 206 21 192 119 23 25 107 230 224 23 255 211 84 131 200 163 22 3 191 95 246 22 164 37 9 116 62 212 138 8 160 64 31 218 139 106 242 89 216 218 255 147 91 71 129 205 194 18 209 161 119 85 170 226 225 162 83 212 20 0 0 0 0 0 72 14 156 116 249 212 16 111 35 17 9 212 224 210 14 154 158 72 254 112 138 10 30 123 27 209 114 67 151 154 58 185 70 230 39 91 161 175 96 144 42 108 176 175 129 131 222 206 150 81 39 184 66 31 183 226 159 121 73 128 206 177 92 204 53 155 0 167 103 0 0 0 0 1 72 14 156 116 249 212 16 111 35 17 9 212 224 210 14 154 158 72 254 112 138 10 30 123 27 209 114 67 151 154 58 185 70 230 39 91 161 175 96 144 42 108 176 175 129 131 222 206 150 81 39 184 66 31 183 226 159 121 73 128 206 177 92 204 53 155 0 167 103 0 0 0 0 0 96 24 127 183 77 135 143 95 88 89 95 188 40 117 29 239 121 158 197 98 117 88 96 129 197 2 191 220 182 209 38 73 53 151 197 255 5 2 62 107 10 40 43 253 32 105 98 219 212 155 202 52 7 137 199 16 43 208 83 186 41 89 60 249 93 40 107 182 175 147 127 53 185 207 74 51 82 246 167 59 57 221 250 206 122 32 222 85 116 2 0 0 0 0 0 0 0 1 96 24 127 183 77 135 143 95 88 89 95 188 40 117 29 239 121 158 197 98 117 88 96 129 197 2 191 220 182 209 38 73 53 151 197 255 5 2 62 107 10 40 43 253 32 105 98 219 212 155 202 52 7 137 199 16 43 208 83 186 41 89 60 249 93 40 107 182 175 147 127 53 185 207 74 51 82 246 167 59 57 221 250 206 122 32 222 85 116 2 0 0 0 0 0 0 0 0 96 147 237 31 71 216 196 26 132 246 73 163 25 96 43 245 7 209 8 5 54 169 7 250 78 177 89 40 0 243 40 2 158 24 11 198 234 171 172 170 64 188 187 101 123 162 237 222 202 89 40 19 173 38 211 166 45 226 3 80 235 195 110 200 92 16 163 19 117 163 211 172 5 18 87 238 191 193 83 143 189 110 113 70 107 147 246 94 49 35 15 198 45 0 0 0 0 1 96 147 237 31 71 216 196 26 132 246 73 163 25 96 43 245 7 209 8 5 54 169 7 250 78 177 89 40 0 243 40 2 158 24 11 198 234 171 172 170 64 188 187 101 123 162 237 222 202 89 40 19 173 38 211 166 45 226 3 80 235 195 110 200 92 16 163 19 117 163 211 172 5 18 87 238 191 193 83 143 189 110 113 70 107 147 246 94 49 35 15 198 45 0 0 0 0 0 96 64 61 164 44 87 227 172 18 31 65 156 146 28 18 93 184 64 206 182 188 247 38 246 148 197 40 179 134 87 253 99 200 144 207 105 35 236 191 211 141 2 166 22 69 97 111 181 148 114 108 196 62 4 205 40 5 94 207 78 159 83 52 193 205 124 45 112 37 168 234 114 146 238 213 231 94 67 171 153 42 253 122 194 188 137 165 213 50 253 178 210 172 158 19 49 97 1 96 64 61 164 44 87 227 172 18 31 65 156 146 28 18 93 184 64 206 182 188 247 38 246 148 197 40 179 134 87 253 99 200 144 207 105 35 236 191 211 141 2 166 22 69 97 111 181 148 114 108 196 62 4 205 40 5 94 207 78 159 83 52 193 205 124 45 112 37 168 234 114 146 238 213 231 94 67 171 153 42 253 122 194 188 137 165 213 50 253 178 210 172 158 19 49 97 0 128 18 25 43 69 203 163 208 25 129 70 179 87 12 27 80 85 159 26 23 217 250 145 72 121 50 16 37 139 240 158 153 146 201 8 164 249 47 152 57 202 235 15 58 45 34 201 248 69 113 190 138 170 65 10 208 146 132 110 25 228 113 14 229 109 123 49 220 88 192 96 240 71 116 139 193 10 198 27 240 251 107 253 255 213 42 221 24 113 228 220 232 119 71 248 233 220 92 90 99 190 197 160 163 32 110 191 182 102 164 156 66 22 63 71 173 246 104 8 68 245 41 178 81 182 144 193 28 0 1 128 18 25 43 69 203 163 208 25 129 70 179 87 12 27 80 85 159 26 23 217 250 145 72 121 50 16 37 139 240 158 153 146 201 8 164 249 47 152 57 202 235 15 58 45 34 201 248 69 113 190 138 170 65 10 208 146 132 110 25 228 113 14 229 109 123 49 220 88 192 96 240 71 116 139 193 10 198 27 240 251 107 253 255 213 42 221 24 113 228 220 232 119 71 248 233 220 92 90 99 190 197 160 163 32 110 191 182 102 164 156 66 22 63 71 173 246 104 8 68 245 41 178 81 182 144 193 28 0 0 64 106 111 228 235 51 226 122 218 7 64 133 195 240 189 43 175 243 131 132 104 152 3 70 2 1 203 253 95 8 193 163 40 223 43 68 152 88 4 207 245 179 156 172 179 217 24 72 255 34 91 50 116 117 25 16 159 79 126 0 0 0 0 0 0 1 64 106 111 228 235 51 226 122 218 7 64 133 195 240 189 43 175 243 131 132 104 152 3 70 2 1 203 253 95 8 193 163 40 223 43 68 152 88 4 207 245 179 156 172 179 217 24 72 255 34 91 50 116 117 25 16 159 79 126 0 0 0 0 0 0 0 96 242 78 165 200 211 109 6 120 204 217 25 19 113 152 179 73 130 49 149 173 66 167 106 162 150 87 123 191 217 234 1 44 116 181 9 66 210 127 251 186 48 185 108 188 94 122 96 63 201 235 22 186 67 42 225 10 180 91 176 96 61 82 61 81 28 92 254 57 197 179 147 78 166 147 71 129 176 7 57 241 168 104 58 31 131 207 114 100 228 122 222 33 1 0 0 0 1 96 242 78 165 200 211 109 6 120 204 217 25 19 113 152 179 73 130 49 149 173 66 167 106 162 150 87 123 191 217 234 1 44 116 181 9 66 210 127 251 186 48 185 108 188 94 122 96 63 201 235 22 186 67 42 225 10 180 91 176 96 61 82 61 81 28 92 254 57 197 179 147 78 166 147 71 129 176 7 57 241 168 104 58 31 131 207 114 100 228 122 222 33 1 0 0 0 0 16 97 77 106 250 36 19 39 116 255 76 19 0 0 0 0 0 1 16 97 77 106 250 36 19 39 116 255 76 19 0 0 0 0 0 0 120 111 83 184 168 71 100 200 47 99 200 7 122 64 223 9 88 127 36 176 17 86 69 21 128 134 171 205 233 96 184 231 129 34 199 145 56 105 1 143 43 41 220 152 215 178 124 68 220 20 206 108 104 17 70 117 37 42 80 169 70 134 89 10 29 153 175 13 143 30 175 166 31 179 51 111 40 201 178 167 176 195 238 36 55 237 111 116 105 132 211 219 6 26 164 101 240 113 151 131 108 247 150 189 114 192 163 218 28 145 0 191 98 2 111 27 49 39 0 0 0 1 120 111 83 184 168 71 100 200 47 99 200 7 122 64 223 9 88 127 36 176 17 86 69 21 128 134 171 205 233 96 184 231 129 34 199 145 56 105 1 143 43 41 220 152 215 178 124 68 220 20 206 108 104 17 70 117 37 42 80 169 70 134 89 10 29 153 175 13 143 30 175 166 31 179 51 111 40 201 178 167 176 195 238 36 55 237 111 116 105 132 211 219 6 26 164 101 240 113 151 131 108 247 150 189 114 192 163 218 28 145 0 191 98 2 111 27 49 39 0 0 0 0 32 81 112 148 108 23 32 68 197 136 108 75 125 74 153 138 193 143 46 240 12 147 141 114 195 168 154 52 204 254 27 0 0 1 32 81 112 148 108 23 32 68 197 136 108 75 125 74 153 138 193 143 46 240 12 147 141 114 195 168 154 52 204 254 27 0 0 0 72 229 45 84 95 24 25 32 216 165 111 25 116 164 115 152 232 97 207 181 82 250 83 172 4 143 100 89 243 176 103 143 89 97 174 71 138 98 227 83 33 167 157 210 208 119 156 79 89 223 158 79 207 126 107 230 151 179 67 137 75 82 190 93 51 33 0 0 0 0 0 0 0 1 72 229 45 84 95 24 25 32 216 165 111 25 116 164 115 152 232 97 207 181 82 250 83 172 4 143 100 89 243 176 103 143 89 97 174 71 138 98 227 83 33 167 157 210 208 119 156 79 89 223 158 79 207 126 107 230 151 179 67 137 75 82 190 93 51 33 0 0 0 0 0 0 0 0 120 221 101 250 13 148 219 147 8 203 24 156 18 193 222 45 207 235 157 11 245 111 54 46 193 242 190 64 24 32 5 137 205 125 176 100 17 201 24 239 205 106 167 230 189 153 124 31 64 237 182 168 183 7 51 170 88 147 80 176 116 117 47 23 224 52 179 41 43 139 109 178 28 245 173 29 90 7 170 105 16 115 2 213 39 87 247 94 160 195 0 33 49 96 68 43 87 69 180 255 100 174 99 176 29 24 104 158 236 125 224 97 89 243 65 242 94 178 0 0 0 1 120 221 101 250 13 148 219 147 8 203 24 156 18 193 222 45 207 235 157 11 245 111 54 46 193 242 190 64 24 32 5 137 205 125 176 100 17 201 24 239 205 106 167 230 189 153 124 31 64 237 182 168 183 7 51 170 88 147 80 176 116 117 47 23 224 52 179 41 43 139 109 178 28 245 173 29 90 7 170 105 16 115 2 213 39 87 247 94 160 195 0 33 49 96 68 43 87 69 180 255 100 174 99 176 29 24 104 158 236 125 224 97 89 243 65 242 94 178 0 0 0 0 72 184 253 189 224 206 45 217 58 19 82 204 156 74 148 217 108 38 0 212 209 189 122 237 87 236 106 6 235 35 39 176 243 21 191 101 210 52 159 254 224 228 116 193 110 127 138 238 156 91 101 182 243 43 212 2 192 249 29 46 143 26 92 106 122 73 98 4 82 141 13 112 16 1 72 184 253 189 224 206 45 217 58 19 82 204 156 74 148 217 108 38 0 212 209 189 122 237 87 236 106 6 235 35 39 176 243 21 191 101 210 52 159 254 224 228 116 193 110 127 138 238 156 91 101 182 243 43 212 2 192 249 29 46 143 26 92 106 122 73 98 4 82 141 13 112 16 0 24 141 65 210 229 224 235 23 20 177 164 60 252 191 64 31 44 84 216 95 0 0 0 0 0 1 24 141 65 210 229 224 235 23 20 177 164 60 252 191 64 31 44 84 216 95 0 0 0 0 0 0 72 48 154 41 124 74 158 181 70 130 132 240 230 198 88 167 2 237 114 242 9 139 158 87 188 104 154 110 210 176 38 252 92 77 243 54 213 93 179 111 60 173 65 242 154 5 78 138 79 93 20 212 247 205 148 243 182 244 13 15 150 159 207 103 38 24 0 0 0 0 0 0 0 1 72 48 154 41 124 74 158 181 70 130 132 240 230 198 88 167 2 237 114 242 9 139 158 87 188 104 154 110 210 176 38 252 92 77 243 54 213 93 179 111 60 173 65 242 154 5 78 138 79 93 20 212 247 205 148 243 182 244 13 15 150 159 207 103 38 24 0 0 0 0 0 0 0 0 112 78 251 44 163 60 65 61 73 160 130 160 8 28 61 196 90 12 152 7 115 142 7 114 17 198 170 252 19 236 254 162 201 32 45 18 43 189 44 46 90 207 184 59 237 162 203 126 224 42 136 170 154 0 222 28 154 135 82 229 44 204 68 59 154 17 125 179 36 205 42 28 134 10 215 115 12 32 14 56 173 76 9 183 175 169 7 152 168 55 94 109 58 166 129 180 156 71 14 106 140 11 108 205 121 170 23 0 0 0 0 0 0 1 112 78 251 44 163 60 65 61 73 160 130 160 8 28 61 196 90 12 152 7 115 142 7 114 17 198 170 252 19 236 254 162 201 32 45 18 43 189 44 46 90 207 184 59 237 162 203 126 224 42 136 170 154 0 222 28 154 135 82 229 44 204 68 59 154 17 125 179 36 205 42 28 134 10 215 115 12 32 14 56 173 76 9 183 175 169 7 152 168 55 94 109 58 166 129 180 156 71 14 106 140 11 108 205 121 170 23 0 0 0 0 0 0 0 64 99 133 203 247 192 63 4 144 228 175 21 211 17 186 191 58 203 241 243 89 132 220 36 39 238 217 164 218 253 0 222 143 219 114 227 127 56 66 234 167 126 143 213 130 213 113 84 86 215 204 56 188 57 9 152 64 225 239 108 6 0 0 0 0 1 64 99 133 203 247 192 63 4 144 228 175 21 211 17 186 191 58 203 241 243 89 132 220 36 39 238 217 164 218 253 0 222 143 219 114 227 127 56 66 234 167 126 143 213 130 213 113 84 86 215 204 56 188 57 9 152 64 225 239 108 6 0 0 0 0 0 72 77 228 188 235 97 138 100 91 238 49 139 79 56 188 11 184 173 83 39 221 20 245 96 38 125 60 181 72 3 128 43 118 106 90 15 200 8 233 181 34 5 7 174 190 71 134 170 210 207 164 152 232 51 89 112 82 165 188 21 114 191 123 230 238 197 193 95 140 244 0 0 0 1 72 77 228 188 235 97 138 100 91 238 49 139 79 56 188 11 184 173 83 39 221 20 245 96 38 125 60 181 72 3 128 43 118 106 90 15 200 8 233 181 34 5 7 174 190 71 134 170 210 207 164 152 232 51 89 112 82 165 188 21 114 191 123 230 238 197 193 95 140 244 0 0 0 0 72 200 145 197 200 104 129 137 228 214 164 61 15 232 3 217 235 218 189 116 152 154 227 248 233 253 158 5 97 255 64 215 227 139 23 14 251 106 37 121 16 114 173 198 111 218 117 222 246 94 169 123 172 250 61 68 19 205 181 67 85 17 104 14 254 137 136 84 247 78 166 0 0 1 72 200 145 197 200 104 129 137 228 214 164 61 15 232 3 217 235 218 189 116 152 154 227 248 233 253 158 5 97 255 64 215 227 139 23 14 251 106 37 121 16 114 173 198 111 218 117 222 246 94 169 123 172 250 61 68 19 205 181 67 85 17 104 14 254 137 136 84 247 78 166 0 0 0 128 191 181 108 55 139 94 198 152 77 78 82 43 3 109 236 227 118 234 47 173 167 61 164 86 55 233 192 147 235 37 168 97 183 33 155 177 136 201 235 222 168 48 190 137 110 204 183 228 175 147 199 33 208 144 139 202 91 20 77 67 243 128 152 254 108 127 176 61 57 40 166 158 31 208 193 11 83 26 80 21 170 235 14 210 177 151 96 197 239 137 246 114 65 165 208 148 237 25 245 124 152 104 92 83 194 136 203 136 100 251 64 2 205 220 145 219 198 171 222 38 134 250 16 34 65 224 146 28 1 128 191 181 108 55 139 94 198 152 77 78 82 43 3 109 236 227 118 234 47 173 167 61 164 86 55 233 192 147 235 37 168 97 183 33 155 177 136 201 235 222 168 48 190 137 110 204 183 228 175 147 199 33 208 144 139 202 91 20 77 67 243 128 152 254 108 127 176 61 57 40 166 158 31 208 193 11 83 26 80 21 170 235 14 210 177 151 96 197 239 137 246 114 65 165 208 148 237 25 245 124 152 104 92 83 194 136 203 136 100 251 64 2 205 220 145 219 198 171 222 38 134 250 16 34 65 224 146 28 0 64 63 224 19 125 187 26 164 208 55 163 27 59 187 247 242 95 30 57 122 111 64 134 84 248 151 190 15 136 136 161 61 28 228 22 27 68 11 3 140 252 156 29 4 41 11 48 15 96 244 213 20 233 6 76 130 58 119 15 0 0 0 0 0 0 1 64 63 224 19 125 187 26 164 208 55 163 27 59 187 247 242 95 30 57 122 111 64 134 84 248 151 190 15 136 136 161 61 28 228 22 27 68 11 3 140 252 156 29 4 41 11 48 15 96 244 213 20 233 6 76 130 58 119 15 0 0 0 0 0 0 0 16 199 42 98 80 178 185 90 221 165 35 3 0 0 0 0 0 1 16 199 42 98 80 178 185 90 221 165 35 3 0 0 0 0 0 0 112 211 92 224 84 192 161 220 29 37 84 220 160 179 136 96 15 250 25 26 167 119 216 78 12 23 28 94 80 65 148 105 37 226 205 178 88 179 130 190 233 252 123 197 227 186 157 58 116 47 213 216 8 19 202 72 179 134 248 62 205 139 137 198 65 155 154 205 249 99 56 187 14 119 158 233 203 37 34 208 100 56 19 122 70 223 132 177 96 84 56 150 254 49 2 204 7 119 253 28 226 37 130 47 153 193 3 66 88 188 3 0 0 1 112 211 92 224 84 192 161 220 29 37 84 220 160 179 136 96 15 250 25 26 167 119 216 78 12 23 28 94 80 65 148 105 37 226 205 178 88 179 130 190 233 252 123 197 227 186 157 58 116 47 213 216 8 19 202 72 179 134 248 62 205 139 137 198 65 155 154 205 249 99 56 187 14 119 158 233 203 37 34 208 100 56 19 122 70 223 132 177 96 84 56 150 254 49 2 204 7 119 253 28 226 37 130 47 153 193 3 66 88 188 3 0 0 0 64 140 122 119 39 180 83 252 77 149 191 129 134 12 141 62 96 133 98 170 229 37 197 136 97 68 58 105 144 236 92 39 65 44 221 243 133 48 202 183 51 237 155 98 163 154 52 14 169 35 49 67 177 150 145 49 75 8 0 0 0 0 0 0 0 1 64 140 122 119 39 180 83 252 77 149 191 129 134 12 141 62 96 133 98 170 229 37 197 136 97 68 58 105 144 236 92 39 65 44 221 243 133 48 202 183 51 237 155 98 163 154 52 14 169 35 49 67 177 150 145 49 75 8 0 0 0 0 0 0 0 0 80 9 61 184 172 233 13 43 45 30 119 185 68 107 159 107 243 178 49 80 0 96 120 155 240 156 53 48 213 202 121 253 151 95 14 88 52 193 70 56 174 121 49 216 9 237 188 33 131 0 202 142 97 27 187 215 252 182 119 74 239 189 124 236 151 198 110 105 243 51 188 18 131 2 91 205 73 28 4 0 0 1 80 9 61 184 172 233 13 43 45 30 119 185 68 107 159 107 243 178 49 80 0 96 120 155 240 156 53 48 213 202 121 253 151 95 14 88 52 193 70 56 174 121 49 216 9 237 188 33 131 0 202 142 97 27 187 215 252 182 119 74 239 189 124 236 151 198 110 105 243 51 188 18 131 2 91 205 73 28 4 0 0 0 16 137 77 210 245 248 194 39 160 111 226 179 107 25 44 0 0 1 16 137 77 210 245 248 194 39 160 111 226 179 107 25 44 0 0 0 64 90 160 7 65 4 255 208 168 205 179 4 240 248 31 206 47 175 22 191 41 103 114 135 198 218 147 111 186 210 117 127 71 122 113 161 142 45 56 90 182 5 196 124 208 246 99 179 100 179 27 123 2 247 71 97 127 214 218 135 188 45 50 128 224 1 64 90 160 7 65 4 255 208 168 205 179 4 240 248 31 206 47 175 22 191 41 103 114 135 198 218 147 111 186 210 117 127 71 122 113 161 142 45 56 90 182 5 196 124 208 246 99 179 100 179 27 123 2 247 71 97 127 214 218 135 188 45 50 128 224 0 128 32 154 212 74 8 112 124 62 201 195 129 67 76 87 211 0 54 149 15 2 59 137 176 18 143 114 152 101 173 81 166 31 220 98 29 15 12 143 193 186 10 214 32 46 186 56 227 96 71 41 12 224 186 32 190 104 219 81 226 245 30 187 162 67 12 238 66 40 214 182 170 73 67 29 245 229 231 140 16 172 204 90 196 85 159 37 247 5 72 91 26 80 132 221 105 222 230 137 161 192 217 213 175 8 134 107 130 255 104 27 119 215 213 254 251 29 13 165 7 158 123 144 75 0 0 0 0 0 1 128 32 154 212 74 8 112 124 62 201 195 129 67 76 87 211 0 54 149 15 2 59 137 176 18 143 114 152 101 173 81 166 31 220 98 29 15 12 143 193 186 10 214 32 46 186 56 227 96 71 41 12 224 186 32 190 104 219 81 226 245 30 187 162 67 12 238 66 40 214 182 170 73 67 29 245 229 231 140 16 172 204 90 196 85 159 37 247 5 72 91 26 80 132 221 105 222 230 137 161 192 217 213 175 8 134 107 130 255 104 27 119 215 213 254 251 29 13 165 7 158 123 144 75 0 0 0 0 0 0 128 239 164 224 84 239 190 177 240 167 255 153 207 198 235 157 218 101 209 117 110 57 158 113 160 68 242 223 109 247 33 237 229 57 186 145 95 59 2 2 106 153 109 194 24 239 241 188 61 245 211 125 238 32 54 37 170 29 197 209 243 122 188 213 28 57 75 147 38 170 70 103 138 223 146 28 2 3 91 146 155 55 185 226 218 164 234 79 158 254 61 31 183 119 148 157 226 56 110 177 236 227 71 43 83 82 161 247 161 196 1 164 120 80 136 191 208 140 164 14 207 160 41 164 244 119 14 0 0 1 128 239 164 224 84 239 190 177 240 167 255 153 207 198 235 157 218 101 209 117 110 57 158 113 160 68 242 223 109 247 33 237 229 57 186 145 95 59 2 2 106 153 109 194 24 239 241 188 61 245 211 125 238 32 54 37 170 29 197 209 243 122 188 213 28 57 75 147 38 170 70 103 138 223 146 28 2 3 91 146 155 55 185 226 218 164 234 79 158 254 61 31 183 119 148 157 226 56 110 177 236 227 71 43 83 82 161 247 161 196 1 164 120 80 136 191 208 140 164 14 207 160 41 164 244 119 14 0 0 0 8 117 0 0 0 0 0 0 0 1 8 117 0 0 0 0 0 0 0 0 8 167 54 193 64 7 0 0 0 1 8 167 54 193 64 7 0 0 0 0 104 163 255 64 83 203 87 36 149 94 156 52 123 63 158 204 53 182 225 176 27 17 88 255 208 169 246 109 207 8 64 136 93 175 10 180 61 49 204 55 239 115 146 100 212 148 94 230 159 166 203 181 245 53 40 149 146 56 136 42 224 170 147 35 157 91 64 177 60 196 240 153 231 11 78 17 76 195 177 43 46 180 131 25 83 109 63 119 225 27 57 57 188 91 199 152 23 5 174 91 1 0 0 0 0 1 104 163 255 64 83 203 87 36 149 94 156 52 123 63 158 204 53 182 225 176 27 17 88 255 208 169 246 109 207 8 64 136 93 175 10 180 61 49 204 55 239 115 146 100 212 148 94 230 159 166 203 181 245 53 40 149 146 56 136 42 224 170 147 35 157 91 64 177 60 196 240 153 231 11 78 17 76 195 177 43 46 180 131 25 83 109 63 119 225 27 57 57 188 91 199 152 23 5 174 91 1 0 0 0 0 0 128 208 138 109 225 227 64 152 153 2 96 34 145 164 157 131 115 155 183 104 200 193 145 244 83 249 93 179 164 174 212 200 81 147 54 91 88 194 241 160 176 132 66 20 118 17 178 241 133 189 166 164 150 50 53 47 1 210 38 252 20 112 90 129 36 107 137 165 239 174 138 211 103 99 134 246 76 212 170 81 144 177 228 153 120 20 106 60 41 27 26 142 218 209 123 220 154 21 104 181 204 11 114 252 113 18 117 199 212 53 240 129 51 13 132 82 236 158 244 158 200 100 104 97 216 25 1 0 0 1 128 208 138 109 225 227 64 152 153 2 96 34 145 164 157 131 115 155 183 104 200 193 145 244 83 249 93 179 164 174 212 200 81 147 54 91 88 194 241 160 176 132 66 20 118 17 178 241 133 189 166 164 150 50 53 47 1 210 38 252 20 112 90 129 36 107 137 165 239 174 138 211 103 99 134 246 76 212 170 81 144 177 228 153 120 20 106 60 41 27 26 142 218 209 123 220 154 21 104 181 204 11 114 252 113 18 117 199 212 53 240 129 51 13 132 82 236 158 244 158 200 100 104 97 216 25 1 0 0 0 112 88 85 211 200 39 154 110 112 105 110 167 223 36 85 108 22 191 129 29 63 186 205 74 174 242 107 26 190 218 113 172 16 57 224 133 51 114 134 142 127 13 144 200 97 128 128 218 245 64 148 11 69 93 180 151 220 172 202 66 76 33 187 244 229 35 36 242 82 235 185 65 36 190 117 245 110 49 206 180 71 37 57 255 79 12 219 105 17 123 252 191 204 128 157 112 79 129 176 184 68 206 60 102 245 5 0 0 0 0 0 0 0 1 112 88 85 211 200 39 154 110 112 105 110 167 223 36 85 108 22 191 129 29 63 186 205 74 174 242 107 26 190 218 113 172 16 57 224 133 51 114 134 142 127 13 144 200 97 128 128 218 245 64 148 11 69 93 180 151 220 172 202 66 76 33 187 244 229 35 36 242 82 235 185 65 36 190 117 245 110 49 206 180 71 37 57 255 79 12 219 105 17 123 252 191 204 128 157 112 79 129 176 184 68 206 60 102 245 5 0 0 0 0 0 0 0 0 48 148 74 37 131 247 53 39 99 216 223 47 18 9 18 136 179 193 37 55 33 91 7 244 148 62 42 57 238 215 181 93 98 8 101 69 225 214 132 204 75 52 125 56 24 213 200 8 0 1 48 148 74 37 131 247 53 39 99 216 223 47 18 9 18 136 179 193 37 55 33 91 7 244 148 62 42 57 238 215 181 93 98 8 101 69 225 214 132 204 75 52 125 56 24 213 200 8 0 0 112 64 220 239 97 7 93 87 27 105 63 207 167 21 133 15 227 58 185 168 161 239 33 193 128 172 161 15 59 239 186 103 81 115 178 232 138 149 139 198 145 252 165 58 125 110 48 134 211 40 242 174 206 78 255 94 75 31 44 237 250 204 57 72 109 14 12 198 119 229 200 254 145 184 208 143 78 161 97 105 128 146 153 84 125 239 129 93 98 110 23 17 170 158 50 181 141 42 47 152 191 196 3 192 174 110 71 240 178 232 63 60 2 1 112 64 220 239 97 7 93 87 27 105 63 207 167 21 133 15 227 58 185 168 161 239 33 193 128 172 161 15 59 239 186 103 81 115 178 232 138 149 139 198 145 252 165 58 125 110 48 134 211 40 242 174 206 78 255 94 75 31 44 237 250 204 57 72 109 14 12 198 119 229 200 254 145 184 208 143 78 161 97 105 128 146 153 84 125 239 129 93 98 110 23 17 170 158 50 181 141 42 47 152 191 196 3 192 174 110 71 240 178 232 63 60 2 0 88 246 113 176 137 13 123 106 26 224 128 91 228 193 243 252 242 15 62 220 212 178 30 202 11 111 66 230 161 177 241 60 253 100 208 201 117 225 216 68 197 128 174 145 95 149 128 91 24 175 176 25 111 104 124 66 50 242 232 64 14 195 239 251 14 206 116 190 242 168 216 235 100 161 227 42 119 101 187 234 141 57 76 100 11 246 212 179 0 1 88 246 113 176 137 13 123 106 26 224 128 91 228 193 243 252 242 15 62 220 212 178 30 202 11 111 66 230 161 177 241 60 253 100 208 201 117 225 216 68 197 128 174 145 95 149 128 91 24 175 176 25 111 104 124 66 50 242 232 64 14 195 239 251 14 206 116 190 242 168 216 235 100 161 227 42 119 101 187 234 141 57 76 100 11 246 212 179 0 0 16 55 56 172 187 58 164 70 156 120 82 181 1 0 0 0 0 1 16 55 56 172 187 58 164 70 156 120 82 181 1 0 0 0 0 0 48 220 172 17 9 205 156 24 242 134 168 180 223 153 206 236 236 90 205 11 224 120 98 214 90 123 243 129 201 165 220 225 6 36 19 55 134 83 178 129 164 32 109 15 112 3 0 0 0 1 48 220 172 17 9 205 156 24 242 134 168 180 223 153 206 236 236 90 205 11 224 120 98 214 90 123 243 129 201 165 220 225 6 36 19 55 134 83 178 129 164 32 109 15 112 3 0 0 0 0 56 193 141 127 34 209 21 199 67 68 204 143 241 45 80 225 214 45 100 21 48 33 106 113 2 148 20 23 159 40 68 202 237 170 200 232 238 164 242 236 171 136 93 52 242 83 251 122 237 48 94 107 2 0 0 0 0 1 56 193 141 127 34 209 21 199 67 68 204 143 241 45 80 225 214 45 100 21 48 33 106 113 2 148 20 23 159 40 68 202 237 170 200 232 238 164 242 236 171 136 93 52 242 83 251 122 237 48 94 107 2 0 0 0 0 0 112 207 93 175 32 64 88 139 55 246 244 132 171 62 72 184 11 242 187 171 224 39 148 96 224 166 191 87 37 46 103 39 90 112 54 172 23 47 108 13 198 12 169 216 111 103 124 235 201 195 16 145 148 127 191 56 185 218 102 131 173 6 53 96 126 92 36 77 124 130 17 196 69 227 95 129 211 148 22 209 224 108 6 158 123 117 167 143 244 183 183 224 114 73 162 213 215 117 83 229 22 1 63 246 155 62 220 132 1 179 0 0 0 1 112 207 93 175 32 64 88 139 55 246 244 132 171 62 72 184 11 242 187 171 224 39 148 96 224 166 191 87 37 46 103 39 90 112 54 172 23 47 108 13 198 12 169 216 111 103 124 235 201 195 16 145 148 127 191 56 185 218 102 131 173 6 53 96 126 92 36 77 124 130 17 196 69 227 95 129 211 148 22 209 224 108 6 158 123 117 167 143 244 183 183 224 114 73 162 213 215 117 83 229 22 1 63 246 155 62 220 132 1 179 0 0 0 0 40 28 191 13 194 165 182 248 57 186 139 244 112 207 96 200 175 106 69 10 84 43 142 147 3 182 157 30 118 79 126 104 103 178 4 0 0 0 0 0 0 1 40 28 191 13 194 165 182 248 57 186 139 244 112 207 96 200 175 106 69 10 84 43 142 147 3 182 157 30 118 79 126 104 103 178 4 0 0 0 0 0 0 0 8 212 78 222 60 176 142 1 0 1 8 212 78 222 60 176 142 1 0 0 104 145 100 67 42 119 254 160 245 196 55 20 64 100 33 63 183 247 83 171 250 148 186 67 236 130 147 92 200 183 110 211 65 19 126 207 82 103 84 16 52 82 16 73 99 33 53 16 184 44 239 234 154 184 25 81 99 110 127 146 231 156 136 36 208 247 98 178 87 0 213 166 40 147 186 233 193 12 80 213 75 67 53 102 157 20 22 155 226 99 40 237 217 91 216 187 183 209 192 42 100 71 58 1 0 1 104 145 100 67 42 119 254 160 245 196 55 20 64 100 33 63 183 247 83 171 250 148 186 67 236 130 147 92 200 183 110 211 65 19 126 207 82 103 84 16 52 82 16 73 99 33 53 16 184 44 239 234 154 184 25 81 99 110 127 146 231 156 136 36 208 247 98 178 87 0 213 166 40 147 186 233 193 12 80 213 75 67 53 102 157 20 22 155 226 99 40 237 217 91 216 187 183 209 192 42 100 71 58 1 0 0 88 125 231 30 134 199 198 64 150 204 149 136 212 55 251 17 236 75 172 60 103 13 112 161 248 228 121 4 183 230 238 235 81 68 11 65 213 88 3 234 7 110 178 57 19 166 16 98 54 80 226 89 131 81 212 59 162 55 8 27 204 124 98 217 79 46 181 86 195 56 99 31 161 60 165 222 210 115 82 149 178 121 38 60 117 25 0 0 0 1 88 125 231 30 134 199 198 64 150 204 149 136 212 55 251 17 236 75 172 60 103 13 112 161 248 228 121 4 183 230 238 235 81 68 11 65 213 88 3 234 7 110 178 57 19 166 16 98 54 80 226 89 131 81 212 59 162 55 8 27 204 124 98 217 79 46 181 86 195 56 99 31 161 60 165 222 210 115 82 149 178 121 38 60 117 25 0 0 0 0 56 55 79 115 254 18 45 144 84 54 237 229 99 113 73 136 188 244 213 254 183 151 168 225 91 201 252 214 57 183 27 164 26 210 240 237 171 92 108 203 191 175 120 3 12 116 19 67 245 233 249 115 5 240 214 35 0 1 56 55 79 115 254 18 45 144 84 54 237 229 99 113 73 136 188 244 213 254 183 151 168 225 91 201 252 214 57 183 27 164 26 210 240 237 171 92 108 203 191 175 120 3 12 116 19 67 245 233 249 115 5 240 214 35 0 0 96 149 115 162 199 81 74 3 202 108 176 213 7 202 56 50 54 238 173 104 162 72 222 19 198 247 157 194 69 205 163 168 225 51 180 210 187 109 152 138 75 137 178 226 20 227 183 17 221 228 33 75 27 234 181 159 148 112 168 204 13 44 22 165 143 41 73 80 229 106 191 38 16 134 93 174 157 141 69 61 203 130 122 44 39 131 2 164 80 62 160 63 47 120 166 28 140 1 96 149 115 162 199 81 74 3 202 108 176 213 7 202 56 50 54 238 173 104 162 72 222 19 198 247 157 194 69 205 163 168 225 51 180 210 187 109 152 138 75 137 178 226 20 227 183 17 221 228 33 75 27 234 181 159 148 112 168 204 13 44 22 165 143 41 73 80 229 106 191 38 16 134 93 174 157 141 69 61 203 130 122 44 39 131 2 164 80 62 160 63 47 120 166 28 140 0 120 177 73 66 225 183 251 124 47 179 14 57 160 213 173 196 252 133 171 44 98 102 65 108 221 64 128 144 3 168 15 10 125 144 93 198 204 237 212 228 129 58 93 188 102 216 32 20 56 110 5 186 118 149 188 145 246 98 31 144 172 117 122 179 94 110 54 137 100 169 159 233 64 176 40 159 107 80 248 222 131 122 156 155 179 205 124 225 233 168 165 4 29 207 254 20 155 7 94 221 210 178 187 38 94 68 88 18 166 136 0 118 237 105 249 139 19 14 0 0 0 1 120 177 73 66 225 183 251 124 47 179 14 57 160 213 173 196 252 133 171 44 98 102 65 108 221 64 128 144 3 168 15 10 125 144 93 198 204 237 212 228 129 58 93 188 102 216 32 20 56 110 5 186 118 149 188 145 246 98 31 144 172 117 122 179 94 110 54 137 100 169 159 233 64 176 40 159 107 80 248 222 131 122 156 155 179 205 124 225 233 168 165 4 29 207 254 20 155 7 94 221 210 178 187 38 94 68 88 18 166 136 0 118 237 105 249 139 19 14 0 0 0 0 24 144 98 85 217 149 150 223 122 8 206 59 47 131 103 65 155 173 0 0 0 0 0 0 0 1 24 144 98 85 217 149 150 223 122 8 206 59 47 131 103 65 155 173 0 0 0 0 0 0 0 0 24 220 124 42 149 85 78 138 33 185 250 196 15 48 72 171 163 134 2 88 6 85 142 130 2 1 24 220 124 42 149 85 78 138 33 185 250 196 15 48 72 171 163 134 2 88 6 85 142 130 2 0 128 212 122 169 156 54 138 107 16 121 38 59 69 203 193 117 75 63 180 179 47 63 118 224 1 181 147 133 85 37 60 119 246 102 174 58 174 167 181 225 245 128 208 200 176 210 149 71 173 107 114 230 170 178 95 214 144 188 159 164 164 189 64 23 6 49 14 195 137 72 104 1 156 208 120 58 123 105 78 15 149 254 83 83 82 154 175 59 38 12 161 82 182 68 227 130 172 160 38 178 36 70 164 50 135 65 11 243 87 239 25 151 184 247 104 210 135 241 219 1 53 174 119 60 149 230 43 0 0 1 128 212 122 169 156 54 138 107 16 121 38 59 69 203 193 117 75 63 180 179 47 63 118 224 1 181 147 133 85 37 60 119 246 102 174 58 174 167 181 225 245 128 208 200 176 210 149 71 173 107 114 230 170 178 95 214 144 188 159 164 164 189 64 23 6 49 14 195 137 72 104 1 156 208 120 58 123 105 78 15 149 254 83 83 82 154 175 59 38 12 161 82 182 68 227 130 172 160 38 178 36 70 164 50 135 65 11 243 87 239 25 151 184 247 104 210 135 241 219 1 53 174 119 60 149 230 43 0 0 0 40 100 188 84 92 121 120 255 45 117 214 25 143 9 160 32 125 250 37 133 240 255 252 20 126 29 171 3 237 205 240 235 36 208 143 0 0 0 0 0 0 1 40 100 188 84 92 121 120 255 45 117 214 25 143 9 160 32 125 250 37 133 240 255 252 20 126 29 171 3 237 205 240 235 36 208 143 0 0 0 0 0 0 0 16 204 130 239 246 187 158 93 86 47 108 73 1 13 0 0 0 1 16 204 130 239 246 187 158 93 86 47 108 73 1 13 0 0 0 0 24 202 131 231 76 126 186 127 132 23 187 208 204 73 5 178 40 150 139 35 0 0 0 0 0 1 24 202 131 231 76 126 186 127 132 23 187 208 204 73 5 178 40 150 139 35 0 0 0 0 0 0 40 107 133 121 0 139 12 135 132 162 235 102 36 43 184 250 87 59 67 137 202 96 199 100 109 243 118 70 114 158 224 173 101 40 37 48 74 1 0 0 0 1 40 107 133 121 0 139 12 135 132 162 235 102 36 43 184 250 87 59 67 137 202 96 199 100 109 243 118 70 114 158 224 173 101 40 37 48 74 1 0 0 0 0 24 102 233 199 173 120 192 172 230 96 54 194 151 124 92 161 206 20 63 0 0 0 0 0 0 1 24 102 233 199 173 120 192 172 230 96 54 194 151 124 92 161 206 20 63 0 0 0 0 0 0 0 104 100 11 95 76 33 185 232 209 233 63 34 185 176 109 189 253 110 207 211 238 172 100 29 184 164 214 167 6 238 105 2 20 159 93 77 69 163 157 21 207 95 133 129 211 104 170 34 230 70 233 190 110 110 143 167 140 190 151 103 146 32 227 27 255 248 240 157 241 20 32 236 100 44 139 162 28 213 191 101 140 119 176 40 84 199 138 241 56 14 243 128 9 9 244 235 30 65 225 224 112 146 250 26 0 1 104 100 11 95 76 33 185 232 209 233 63 34 185 176 109 189 253 110 207 211 238 172 100 29 184 164 214 167 6 238 105 2 20 159 93 77 69 163 157 21 207 95 133 129 211 104 170 34 230 70 233 190 110 110 143 167 140 190 151 103 146 32 227 27 255 248 240 157 241 20 32 236 100 44 139 162 28 213 191 101 140 119 176 40 84 199 138 241 56 14 243 128 9 9 244 235 30 65 225 224 112 146 250 26 0 0 112 182 231 30 134 177 100 37 122 104 11 71 195 133 25 28 169 0 181 147 130 44 177 101 57 112 42 199 21 101 103 140 223 42 216 201 189 53 195 100 237 238 71 248 113 40 44 240 38 199 64 195 184 81 25 41 68 92 218 4 53 122 241 204 51 58 42 144 93 242 88 103 109 196 188 0 52 79 84 246 121 89 177 54 12 27 96 80 73 210 243 157 157 69 16 99 156 41 206 86 47 228 138 204 240 83 60 157 254 252 73 192 5 1 112 182 231 30 134 177 100 37 122 104 11 71 195 133 25 28 169 0 181 147 130 44 177 101 57 112 42 199 21 101 103 140 223 42 216 201 189 53 195 100 237 238 71 248 113 40 44 240 38 199 64 195 184 81 25 41 68 92 218 4 53 122 241 204 51 58 42 144 93 242 88 103 109 196 188 0 52 79 84 246 121 89 177 54 12 27 96 80 73 210 243 157 157 69 16 99 156 41 206 86 47 228 138 204 240 83 60 157 254 252 73 192 5 0 16 197 213 123 115 98 52 254 70 238 15 1 0 0 0 0 0 1 16 197 213 123 115 98 52 254 70 238 15 1 0 0 0 0 0 0 80 210 145 122 99 89 37 131 47 52 147 113 130 64 191 58 127 124 89 27 75 1 37 219 223 7 191 140 168 223 254 58 21 31 33 247 253 167 137 36 155 41 0 231 239 197 12 2 35 195 249 194 240 216 58 92 5 213 221 245 127 195 161 21 118 66 85 175 221 8 222 64 201 103 150 0 0 0 0 0 0 1 80 210 145 122 99 89 37 131 47 52 147 113 130 64 191 58 127 124 89 27 75 1 37 219 223 7 191 140 168 223 254 58 21 31 33 247 253 167 137 36 155 41 0 231 239 197 12 2 35 195 249 194 240 216 58 92 5 213 221 245 127 195 161 21 118 66 85 175 221 8 222 64 201 103 150 0 0 0 0 0 0 0 88 102 17 96 82 154 52 112 87 18 167 167 218 54 218 124 208 194 201 83 97 231 176 221 100 220 46 62 248 6 192 115 8 87 141 125 98 123 239 88 101 67 173 98 197 3 232 107 94 225 39 234 38 220 115 81 68 201 24 107 126 207 211 147 102 232 111 120 175 151 194 198 220 102 170 182 69 63 31 181 226 6 0 0 0 0 0 0 0 1 88 102 17 96 82 154 52 112 87 18 167 167 218 54 218 124 208 194 201 83 97 231 176 221 100 220 46 62 248 6 192 115 8 87 141 125 98 123 239 88 101 67 173 98 197 3 232 107 94 225 39 234 38 220 115 81 68 201 24 107 126 207 211 147 102 232 111 120 175 151 194 198 220 102 170 182 69 63 31 181 226 6 0 0 0 0 0 0 0 0 72 145 142 130 152 168 95 187 252 167 72 111 60 173 234 4 233 25 77 201 212 221 165 137 12 169 149 226 137 232 12 31 136 171 31 255 243 138 160 179 185 30 246 120 97 97 100 77 175 51 130 43 32 46 143 163 120 150 96 104 169 233 159 139 198 126 120 21 227 79 54 10 0 1 72 145 142 130 152 168 95 187 252 167 72 111 60 173 234 4 233 25 77 201 212 221 165 137 12 169 149 226 137 232 12 31 136 171 31 255 243 138 160 179 185 30 246 120 97 97 100 77 175 51 130 43 32 46 143 163 120 150 96 104 169 233 159 139 198 126 120 21 227 79 54 10 0 0 8 209 5 0 0 0 0 0 0 1 8 209 5 0 0 0 0 0 0 0 24 69 29 214 123 179 196 196 154 251 96 42 73 71 146 179 99 47 210 101 0 0 0 0 0 1 24 69 29 214 123 179 196 196 154 251 96 42 73 71 146 179 99 47 210 101 0 0 0 0 0 0 88 205 231 92 64 63 136 90 54 204 92 82 240 111 88 87 211 205 64 177 174 111 246 250 90 188 132 108 77 132 226 209 192 221 34 204 124 101 65 183 13 73 28 188 123 178 61 12 115 7 113 85 201 249 122 39 164 5 195 152 12 24 213 221 225 91 183 40 236 164 234 105 15 207 109 160 192 144 206 42 56 17 71 51 153 182 149 229 1 1 88 205 231 92 64 63 136 90 54 204 92 82 240 111 88 87 211 205 64 177 174 111 246 250 90 188 132 108 77 132 226 209 192 221 34 204 124 101 65 183 13 73 28 188 123 178 61 12 115 7 113 85 201 249 122 39 164 5 195 152 12 24 213 221 225 91 183 40 236 164 234 105 15 207 109 160 192 144 206 42 56 17 71 51 153 182 149 229 1 0 112 75 185 2 45 158 234 42 220 77 129 40 207 111 250 118 209 102 233 123 133 227 197 44 57 196 23 50 237 189 56 114 42 117 188 70 201 140 176 85 119 26 80 196 78 38 152 73 81 60 72 29 44 30 96 127 77 209 43 84 19 238 161 199 121 222 254 69 226 80 194 175 85 135 165 209 175 199 237 223 219 141 82 63 115 118 194 96 58 8 45 138 219 118 118 250 164 228 179 178 255 210 12 129 255 206 164 214 156 233 1 0 0 1 112 75 185 2 45 158 234 42 220 77 129 40 207 111 250 118 209 102 233 123 133 227 197 44 57 196 23 50 237 189 56 114 42 117 188 70 201 140 176 85 119 26 80 196 78 38 152 73 81 60 72 29 44 30 96 127 77 209 43 84 19 238 161 199 121 222 254 69 226 80 194 175 85 135 165 209 175 199 237 223 219 141 82 63 115 118 194 96 58 8 45 138 219 118 118 250 164 228 179 178 255 210 12 129 255 206 164 214 156 233 1 0 0 0 72 170 113 192 138 104 174 124 39 73 93 28 193 169 216 164 220 91 84 152 21 86 210 138 141 248 203 166 85 144 162 254 201 183 85 193 224 116 40 113 190 178 244 129 164 250 249 19 14 209 96 142 161 190 213 129 69 159 67 19 1 205 41 215 144 51 30 49 29 6 0 0 0 1 72 170 113 192 138 104 174 124 39 73 93 28 193 169 216 164 220 91 84 152 21 86 210 138 141 248 203 166 85 144 162 254 201 183 85 193 224 116 40 113 190 178 244 129 164 250 249 19 14 209 96 142 161 190 213 129 69 159 67 19 1 205 41 215 144 51 30 49 29 6 0 0 0 0 80 187 125 249 0 237 185 92 151 185 34 111 175 129 204 191 155 242 60 103 220 201 34 29 144 204 63 230 124 192 11 86 89 46 248 84 65 216 118 216 186 101 34 52 12 183 171 200 31 196 236 206 37 26 50 4 49 58 103 122 211 219 34 244 124 191 195 111 184 185 248 253 224 239 127 121 202 148 98 106 14 1 80 187 125 249 0 237 185 92 151 185 34 111 175 129 204 191 155 242 60 103 220 201 34 29 144 204 63 230 124 192 11 86 89 46 248 84 65 216 118 216 186 101 34 52 12 183 171 200 31 196 236 206 37 26 50 4 49 58 103 122 211 219 34 244 124 191 195 111 184 185 248 253 224 239 127 121 202 148 98 106 14 0 64 139 102 172 114 149 72 104 165 114 58 106 15 225 235 97 205 254 36 224 45 49 116 146 137 86 251 107 88 136 139 83 17 137 15 7 72 222 67 112 165 159 252 189 213 77 46 142 192 37 63 205 124 221 187 30 104 5 0 0 0 0 0 0 0 1 64 139 102 172 114 149 72 104 165 114 58 106 15 225 235 97 205 254 36 224 45 49 116 146 137 86 251 107 88 136 139 83 17 137 15 7 72 222 67 112 165 159 252 189 213 77 46 142 192 37 63 205 124 221 187 30 104 5 0 0 0 0 0 0 0 0 48 193 117 186 128 69 247 91 107 62 131 175 40 131 137 103 76 253 5 75 34 122 71 127 130 217 242 2 7 156 145 247 63 191 243 59 172 98 22 239 18 159 250 155 96 146 0 0 0 1 48 193 117 186 128 69 247 91 107 62 131 175 40 131 137 103 76 253 5 75 34 122 71 127 130 217 242 2 7 156 145 247 63 191 243 59 172 98 22 239 18 159 250 155 96 146 0 0 0 0 32 47 51 76 163 249 78 98 148 84 63 232 105 55 224 47 211 142 180 28 84 89 211 77 14 249 46 0 0 0 0 0 0 1 32 47 51 76 163 249 78 98 148 84 63 232 105 55 224 47 211 142 180 28 84 89 211 77 14 249 46 0 0 0 0 0 0 0 72 201 214 155 246 50 22 166 239 223 78 244 233 195 105 89 119 99 157 184 116 51 233 12 83 167 255 76 111 102 220 89 20 93 143 234 73 99 250 59 120 26 217 181 201 39 66 23 209 115 214 70 225 241 60 167 247 136 252 1 227 55 151 13 131 195 45 0 0 0 0 0 0 1 72 201 214 155 246 50 22 166 239 223 78 244 233 195 105 89 119 99 157 184 116 51 233 12 83 167 255 76 111 102 220 89 20 93 143 234 73 99 250 59 120 26 217 181 201 39 66 23 209 115 214 70 225 241 60 167 247 136 252 1 227 55 151 13 131 195 45 0 0 0 0 0 0 0 24 23 30 33 8 157 238 224 164 246 31 43 191 176 252 7 205 45 242 0 0 0 0 0 0 1 24 23 30 33 8 157 238 224 164 246 31 43 191 176 252 7 205 45 242 0 0 0 0 0 0 0 56 54 228 32 91 115 93 129 151 246 253 217 44 135 61 82 191 178 138 66 53 138 127 124 132 49 110 155 83 6 68 149 49 137 123 196 184 39 167 125 47 74 249 193 203 43 79 83 101 134 133 9 11 0 0 0 0 1 56 54 228 32 91 115 93 129 151 246 253 217 44 135 61 82 191 178 138 66 53 138 127 124 132 49 110 155 83 6 68 149 49 137 123 196 184 39 167 125 47 74 249 193 203 43 79 83 101 134 133 9 11 0 0 0 0 0 56 77 188 100 119 111 50 9 100 13 63 121 125 142 166 34 201 103 64 166 45 83 205 159 233 137 246 116 27 220 206 160 89 216 10 52 203 22 78 211 51 23 240 179 183 83 170 242 111 240 0 0 0 0 0 0 0 1 56 77 188 100 119 111 50 9 100 13 63 121 125 142 166 34 201 103 64 166 45 83 205 159 233 137 246 116 27 220 206 160 89 216 10 52 203 22 78 211 51 23 240 179 183 83 170 242 111 240 0 0 0 0 0 0 0 0 16 183 62 167 189 129 14 105 162 209 89 0 0 0 0 0 0 1 16 183 62 167 189 129 14 105 162 209 89 0 0 0 0 0 0 0 104 118 204 239 47 128 120 188 223 1 55 39 227 110 234 226 46 9 49 105 96 118 213 142 45 148 25 46 222 99 148 85 221 31 128 11 140 49 253 179 116 86 166 9 89 85 77 43 213 244 104 94 141 180 94 152 53 231 238 203 17 49 2 219 158 139 90 32 173 163 68 117 8 23 52 205 75 107 41 4 131 110 118 52 89 83 200 125 45 226 180 48 90 244 16 175 35 209 5 0 0 0 0 0 0 1 104 118 204 239 47 128 120 188 223 1 55 39 227 110 234 226 46 9 49 105 96 118 213 142 45 148 25 46 222 99 148 85 221 31 128 11 140 49 253 179 116 86 166 9 89 85 77 43 213 244 104 94 141 180 94 152 53 231 238 203 17 49 2 219 158 139 90 32 173 163 68 117 8 23 52 205 75 107 41 4 131 110 118 52 89 83 200 125 45 226 180 48 90 244 16 175 35 209 5 0 0 0 0 0 0 0 32 141 129 3 16 248 10 239 222 142 76 62 151 42 178 39 242 64 15 167 154 168 11 249 175 85 5 12 3 103 49 42 0 1 32 141 129 3 16 248 10 239 222 142 76 62 151 42 178 39 242 64 15 167 154 168 11 249 175 85 5 12 3 103 49 42 0 0 8 123 78 196 123 153 10 0 0 1 8 123 78 196 123 153 10 0 0 0 16 144 212 195 123 171 191 34 243 189 164 67 38 150 212 224 39 1 16 144 212 195 123 171 191 34 243 189 164 67 38 150 212 224 39 0 32 187 134 178 60 106 197 246 170 105 173 38 215 230 126 251 232 114 84 137 220 128 251 54 111 198 172 1 114 19 30 189 175 1 32 187 134 178 60 106 197 246 170 105 173 38 215 230 126 251 232 114 84 137 220 128 251 54 111 198 172 1 114 19 30 189 175 0 24 143 215 216 189 149 84 197 67 202 64 106 120 162 162 86 42 64 51 134 144 124 43 171 16 1 24 143 215 216 189 149 84 197 67 202 64 106 120 162 162 86 42 64 51 134 144 124 43 171 16 0 72 139 212 65 201 234 213 89 222 141 127 253 158 87 57 57 116 99 73 197 165 146 10 238 243 162 67 87 231 145 147 216 148 210 201 209 126 220 255 168 121 230 233 9 201 51 185 90 86 120 23 45 86 96 77 163 130 157 206 192 50 201 33 37 54 59 0 0 0 0 0 0 0 1 72 139 212 65 201 234 213 89 222 141 127 253 158 87 57 57 116 99 73 197 165 146 10 238 243 162 67 87 231 145 147 216 148 210 201 209 126 220 255 168 121 230 233 9 201 51 185 90 86 120 23 45 86 96 77 163 130 157 206 192 50 201 33 37 54 59 0 0 0 0 0 0 0 0 32 23 231 42 113 193 81 226 51 220 131 214 166 146 8 75 191 48 0 176 34 36 39 225 46 186 62 45 29 56 240 98 0 1 32 23 231 42 113 193 81 226 51 220 131 214 166 146 8 75 191 48 0 176 34 36 39 225 46 186 62 45 29 56 240 98 0 0 112 227 163 90 90 118 151 96 241 208 91 153 230 68 148 109 36 156 59 108 3 56 117 211 213 19 39 240 123 158 82 0 37 126 14 223 103 223 22 131 216 204 69 250 101 220 238 12 18 77 151 114 103 62 43 207 60 13 44 63 145 155 196 15 104 68 124 226 214 9 255 2 209 143 177 56 5 128 66 245 24 171 251 123 103 175 179 158 169 79 76 238 144 42 92 164 86 181 59 182 45 185 118 125 221 29 2 0 0 0 0 0 0 1 112 227 163 90 90 118 151 96 241 208 91 153 230 68 148 109 36 156 59 108 3 56 117 211 213 19 39 240 123 158 82 0 37 126 14 223 103 223 22 131 216 204 69 250 101 220 238 12 18 77 151 114 103 62 43 207 60 13 44 63 145 155 196 15 104 68 124 226 214 9 255 2 209 143 177 56 5 128 66 245 24 171 251 123 103 175 179 158 169 79 76 238 144 42 92 164 86 181 59 182 45 185 118 125 221 29 2 0 0 0 0 0 0 0 56 21 205 7 125 176 60 227 180 194 177 238 254 236 214 253 45 120 92 88 238 119 13 43 164 250 120 212 254 127 151 28 105 87 83 93 136 139 49 151 198 102 118 229 122 40 245 156 201 162 113 68 119 67 16 0 0 1 56 21 205 7 125 176 60 227 180 194 177 238 254 236 214 253 45 120 92 88 238 119 13 43 164 250 120 212 254 127 151 28 105 87 83 93 136 139 49 151 198 102 118 229 122 40 245 156 201 162 113 68 119 67 16 0 0 0 128 109 98 40 183 212 31 133 44 220 177 117 246 95 158 65 148 190 211 252 136 162 225 177 247 115 56 178 10 194 128 11 57 161 119 91 128 227 125 160 201 170 74 199 20 117 57 205 164 167 39 140 51 104 152 111 244 236 125 79 209 50 96 221 6 70 174 222 210 141 0 0 38 91 25 23 175 171 151 185 223 189 29 181 4 186 136 186 187 211 92 240 132 239 86 157 142 233 42 105 221 144 98 224 139 152 138 40 2 75 65 232 64 78 37 25 85 43 247 17 170 71 235 54 68 95 61 0 0 1 128 109 98 40 183 212 31 133 44 220 177 117 246 95 158 65 148 190 211 252 136 162 225 177 247 115 56 178 10 194 128 11 57 161 119 91 128 227 125 160 201 170 74 199 20 117 57 205 164 167 39 140 51 104 152 111 244 236 125 79 209 50 96 221 6 70 174 222 210 141 0 0 38 91 25 23 175 171 151 185 223 189 29 181 4 186 136 186 187 211 92 240 132 239 86 157 142 233 42 105 221 144 98 224 139 152 138 40 2 75 65 232 64 78 37 25 85 43 247 17 170 71 235 54 68 95 61 0 0 0 8 84 104 15 69 62 160 26 0 1 8 84 104 15 69 62 160 26 0 0 112 219 65 187 13 190 48 46 122 32 188 62 55 54 62 116 201 244 243 89 151 14 43 21 29 19 142 33 75 56 94 48 19 170 145 179 161 25 76 133 125 215 133 4 159 74 89 201 157 226 92 172 10 213 88 179 123 109 36 223 242 66 12 21 230 200 219 144 151 19 8 235 54 85 254 74 95 63 248 92 164 209 97 251 119 65 142 10 170 247 216 222 98 38 21 72 54 73 122 224 248 221 198 101 236 254 0 0 0 0 0 0 0 1 112 219 65 187 13 190 48 46 122 32 188 62 55 54 62 116 201 244 243 89 151 14 43 21 29 19 142 33 75 56 94 48 19 170 145 179 161 25 76 133 125 215 133 4 159 74 89 201 157 226 92 172 10 213 88 179 123 109 36 223 242 66 12 21 230 200 219 144 151 19 8 235 54 85 254 74 95 63 248 92 164 209 97 251 119 65 142 10 170 247 216 222 98 38 21 72 54 73 122 224 248 221 198 101 236 254 0 0 0 0 0 0 0 0 120 173 131 100 228 57 121 99 67 36 188 26 116 195 11 33 238 99 149 244 192 69 122 152 142 206 32 93 57 158 59 204 109 129 133 85 46 84 246 35 199 170 91 5 153 166 135 136 100 219 159 177 96 71 252 20 164 194 225 242 95 219 102 176 247 177 135 49 219 166 200 159 163 69 215 174 34 15 87 114 111 202 124 88 204 39 19 12 146 233 34 22 85 241 111 63 103 250 222 19 62 55 235 240 190 151 122 115 229 120 69 13 175 97 196 211 28 0 0 0 0 1 120 173 131 100 228 57 121 99 67 36 188 26 116 195 11 33 238 99 149 244 192 69 122 152 142 206 32 93 57 158 59 204 109 129 133 85 46 84 246 35 199 170 91 5 153 166 135 136 100 219 159 177 96 71 252 20 164 194 225 242 95 219 102 176 247 177 135 49 219 166 200 159 163 69 215 174 34 15 87 114 111 202 124 88 204 39 19 12 146 233 34 22 85 241 111 63 103 250 222 19 62 55 235 240 190 151 122 115 229 120 69 13 175 97 196 211 28 0 0 0 0 0 40 243 42 248 54 150 57 118 223 89 213 123 0 145 11 121 246 65 78 171 9 235 26 93 69 20 253 245 14 109 46 33 35 29 254 140 52 122 13 60 0 1 40 243 42 248 54 150 57 118 223 89 213 123 0 145 11 121 246 65 78 171 9 235 26 93 69 20 253 245 14 109 46 33 35 29 254 140 52 122 13 60 0 0 128 203 79 238 32 121 29 119 220 119 105 16 43 194 81 73 221 217 2 148 227 212 111 94 30 4 186 210 125 205 136 245 32 214 39 108 83 11 185 216 199 221 176 13 218 150 42 152 40 224 210 120 250 254 120 131 79 250 21 126 178 2 237 252 78 209 43 98 114 190 99 82 138 216 142 31 167 59 58 104 199 119 105 205 151 40 188 42 120 215 171 111 159 24 71 230 74 3 175 149 59 28 47 26 232 212 124 173 155 1 51 182 82 59 115 81 68 151 198 197 107 41 0 0 0 0 0 0 0 1 128 203 79 238 32 121 29 119 220 119 105 16 43 194 81 73 221 217 2 148 227 212 111 94 30 4 186 210 125 205 136 245 32 214 39 108 83 11 185 216 199 221 176 13 218 150 42 152 40 224 210 120 250 254 120 131 79 250 21 126 178 2 237 252 78 209 43 98 114 190 99 82 138 216 142 31 167 59 58 104 199 119 105 205 151 40 188 42 120 215 171 111 159 24 71 230 74 3 175 149 59 28 47 26 232 212 124 173 155 1 51 182 82 59 115 81 68 151 198 197 107 41 0 0 0 0 0 0 0 0 8 70 47 94 78 85 213 4 0 1 8 70 47 94 78 85 213 4 0 0 64 168 239 3 109 249 109 253 64 147 102 173 10 159 193 47 134 235 24 116 111 234 17 218 47 133 118 130 4 234 130 216 79 86 7 158 19 179 226 92 28 11 213 95 197 165 161 196 126 158 172 83 45 60 0 243 82 11 125 51 88 204 253 201 0 1 64 168 239 3 109 249 109 253 64 147 102 173 10 159 193 47 134 235 24 116 111 234 17 218 47 133 118 130 4 234 130 216 79 86 7 158 19 179 226 92 28 11 213 95 197 165 161 196 126 158 172 83 45 60 0 243 82 11 125 51 88 204 253 201 0 0 32 91 8 155 0 244 185 150 213 21 51 193 238 33 114 252 243 203 63 197 56 17 152 0 158 202 81 224 155 176 168 48 8 1 32 91 8 155 0 244 185 150 213 21 51 193 238 33 114 252 243 203 63 197 56 17 152 0 158 202 81 224 155 176 168 48 8 0 64 237 110 141 244 234 81 71 9 84 235 128 228 166 210 171 84 207 172 13 18 245 134 71 141 15 168 153 177 38 185 201 244 241 170 222 1 133 147 146 102 43 229 200 175 199 75 172 190 162 84 189 67 156 147 154 31 13 207 129 50 200 231 74 0 1 64 237 110 141 244 234 81 71 9 84 235 128 228 166 210 171 84 207 172 13 18 245 134 71 141 15 168 153 177 38 185 201 244 241 170 222 1 133 147 146 102 43 229 200 175 199 75 172 190 162 84 189 67 156 147 154 31 13 207 129 50 200 231 74 0 0 72 87 52 91 18 47 239 64 167 1 198 52 25 230 164 41 73 76 171 61 96 213 30 252 201 4 21 212 155 40 229 150 154 204 69 5 231 234 118 236 96 115 165 148 146 43 62 108 172 9 72 82 112 145 170 221 58 127 30 73 27 88 182 208 159 212 102 122 105 69 67 0 0 1 72 87 52 91 18 47 239 64 167 1 198 52 25 230 164 41 73 76 171 61 96 213 30 252 201 4 21 212 155 40 229 150 154 204 69 5 231 234 118 236 96 115 165 148 146 43 62 108 172 9 72 82 112 145 170 221 58 127 30 73 27 88 182 208 159 212 102 122 105 69 67 0 0 0 48 64 172 114 48 214 193 164 216 67 60 29 158 200 157 119 130 148 115 28 173 33 19 100 127 6 67 27 159 246 211 0 250 103 226 195 106 155 248 97 202 123 209 221 13 0 0 0 0 1 48 64 172 114 48 214 193 164 216 67 60 29 158 200 157 119 130 148 115 28 173 33 19 100 127 6 67 27 159 246 211 0 250 103 226 195 106 155 248 97 202 123 209 221 13 0 0 0 0 0 120 81 252 110 197 13 166 231 72 130 41 106 65 232 254 107 124 243 255 107 207 47 194 183 40 150 50 4 210 204 224 43 196 247 122 120 215 166 135 245 209 137 61 188 138 187 74 103 184 183 141 129 116 149 165 53 145 106 74 23 238 142 63 216 57 144 68 13 165 129 66 25 38 206 230 110 91 93 226 41 154 75 235 92 163 186 140 230 191 218 201 127 59 108 139 3 252 44 100 3 234 46 162 34 110 218 167 38 61 218 67 214 231 20 40 0 0 0 0 0 0 1 120 81 252 110 197 13 166 231 72 130 41 106 65 232 254 107 124 243 255 107 207 47 194 183 40 150 50 4 210 204 224 43 196 247 122 120 215 166 135 245 209 137 61 188 138 187 74 103 184 183 141 129 116 149 165 53 145 106 74 23 238 142 63 216 57 144 68 13 165 129 66 25 38 206 230 110 91 93 226 41 154 75 235 92 163 186 140 230 191 218 201 127 59 108 139 3 252 44 100 3 234 46 162 34 110 218 167 38 61 218 67 214 231 20 40 0 0 0 0 0 0 0 120 243 247 18 11 29 244 71 100 171 9 7 235 135 165 185 174 82 125 144 46 101 141 39 25 219 161 166 142 138 73 193 151 231 217 184 5 47 234 106 36 39 20 133 77 81 241 34 12 59 55 212 158 163 139 77 54 232 111 133 109 11 226 82 170 77 232 17 218 114 50 113 152 83 202 219 168 218 132 34 241 173 58 247 200 6 151 173 6 185 4 118 166 131 92 255 162 247 111 148 166 68 56 169 253 254 48 168 30 109 251 179 213 140 46 219 3 0 0 0 0 1 120 243 247 18 11 29 244 71 100 171 9 7 235 135 165 185 174 82 125 144 46 101 141 39 25 219 161 166 142 138 73 193 151 231 217 184 5 47 234 106 36 39 20 133 77 81 241 34 12 59 55 212 158 163 139 77 54 232 111 133 109 11 226 82 170 77 232 17 218 114 50 113 152 83 202 219 168 218 132 34 241 173 58 247 200 6 151 173 6 185 4 118 166 131 92 255 162 247 111 148 166 68 56 169 253 254 48 168 30 109 251 179 213 140 46 219 3 0 0 0 0 0 48 170 134 196 251 187 25 104 34 95 69 85 184 199 0 89 253 150 101 212 7 202 243 18 178 248 98 105 134 18 215 189 22 99 238 235 78 124 3 142 134 188 8 188 178 2 0 0 0 1 48 170 134 196 251 187 25 104 34 95 69 85 184 199 0 89 253 150 101 212 7 202 243 18 178 248 98 105 134 18 215 189 22 99 238 235 78 124 3 142 134 188 8 188 178 2 0 0 0 0 48 200 105 57 90 124 53 229 14 158 143 66 34 150 228 210 143 188 213 175 175 21 92 123 213 52 223 97 128 64 234 169 31 165 1 230 126 33 17 32 28 25 238 131 159 125 84 120 8 1 48 200 105 57 90 124 53 229 14 158 143 66 34 150 228 210 143 188 213 175 175 21 92 123 213 52 223 97 128 64 234 169 31 165 1 230 126 33 17 32 28 25 238 131 159 125 84 120 8 0 8 236 26 245 49 19 0 0 0 1 8 236 26 245 49 19 0 0 0 0 16 134 207 199 26 175 188 103 160 76 140 48 55 30 189 7 0 1 16 134 207 199 26 175 188 103 160 76 140 48 55 30 189 7 0 0 24 7 216 8 30 195 251 90 24 198 179 171 59 27 243 102 163 205 126 247 84 4 0 0 0 1 24 7 216 8 30 195 251 90 24 198 179 171 59 27 243 102 163 205 126 247 84 4 0 0 0 0 104 89 190 73 217 127 252 160 134 16 114 94 182 255 223 176 58 217 71 107 33 21 118 140 226 166 128 254 219 248 19 33 93 9 225 89 44 103 188 91 203 146 155 17 20 40 125 153 23 87 125 86 166 25 181 17 220 165 143 13 245 94 144 64 231 41 17 165 224 79 44 34 246 169 187 130 155 57 121 213 161 21 178 163 44 75 169 37 6 67 200 63 171 50 214 213 230 10 148 179 25 0 0 0 0 1 104 89 190 73 217 127 252 160 134 16 114 94 182 255 223 176 58 217 71 107 33 21 118 140 226 166 128 254 219 248 19 33 93 9 225 89 44 103 188 91 203 146 155 17 20 40 125 153 23 87 125 86 166 25 181 17 220 165 143 13 245 94 144 64 231 41 17 165 224 79 44 34 246 169 187 130 155 57 121 213 161 21 178 163 44 75 169 37 6 67 200 63 171 50 214 213 230 10 148 179 25 0 0 0 0 0 120 239 141 241 165 45 224 229 17 155 67 37 181 127 150 115 133 137 72 239 12 3 103 142 204 53 108 13 4 11 96 213 15 192 155 67 147 30 66 19 222 160 17 202 156 77 143 151 241 100 236 128 33 207 105 116 196 68 142 109 237 94 29 86 196 190 96 158 51 78 107 53 2 158 62 195 101 125 181 245 191 185 105 37 77 113 109 85 110 93 152 188 115 136 136 93 10 235 225 51 77 110 7 74 32 118 44 157 117 193 127 80 54 2 0 0 0 0 0 0 0 1 120 239 141 241 165 45 224 229 17 155 67 37 181 127 150 115 133 137 72 239 12 3 103 142 204 53 108 13 4 11 96 213 15 192 155 67 147 30 66 19 222 160 17 202 156 77 143 151 241 100 236 128 33 207 105 116 196 68 142 109 237 94 29 86 196 190 96 158 51 78 107 53 2 158 62 195 101 125 181 245 191 185 105 37 77 113 109 85 110 93 152 188 115 136 136 93 10 235 225 51 77 110 7 74 32 118 44 157 117 193 127 80 54 2 0 0 0 0 0 0 0 0 56 161 103 132 41 228 199 245 93 101 166 142 168 205 96 95 52 143 127 100 173 175 132 102 181 237 4 42 52 30 10 219 202 27 68 79 23 201 116 89 53 50 85 239 183 254 11 165 100 129 247 0 0 0 0 0 0 1 56 161 103 132 41 228 199 245 93 101 166 142 168 205 96 95 52 143 127 100 173 175 132 102 181 237 4 42 52 30 10 219 202 27 68 79 23 201 116 89 53 50 85 239 183 254 11 165 100 129 247 0 0 0 0 0 0 0 32 255 251 221 115 146 46 163 229 176 14 203 138 27 28 41 62 22 109 49 16 185 119 54 172 191 85 184 0 0 0 0 0 1 32 255 251 221 115 146 46 163 229 176 14 203 138 27 28 41 62 22 109 49 16 185 119 54 172 191 85 184 0 0 0 0 0 0 32 247 33 196 253 43 205 187 127 110 212 213 12 214 143 22 252 209 96 90 89 50 103 47 68 146 216 72 215 61 226 134 3 1 32 247 33 196 253 43 205 187 127 110 212 213 12 214 143 22 252 209 96 90 89 50 103 47 68 146 216 72 215 61 226 134 3 0 40 59 97 19 31 78 83 69 133 60 42 103 67 71 156 83 145 176 67 103 93 114 176 15 117 43 90 82 152 45 121 12 17 76 244 53 1 0 0 0 0 1 40 59 97 19 31 78 83 69 133 60 42 103 67 71 156 83 145 176 67 103 93 114 176 15 117 43 90 82 152 45 121 12 17 76 244 53 1 0 0 0 0 0 56 219 241 133 51 75 86 155 36 83 56 69 111 93 54 193 19 54 88 242 30 144 132 66 61 131 189 217 126 87 64 134 162 139 199 3 85 234 160 230 114 164 25 154 94 87 76 241 251 243 147 109 83 0 0 0 0 1 56 219 241 133 51 75 86 155 36 83 56 69 111 93 54 193 19 54 88 242 30 144 132 66 61 131 189 217 126 87 64 134 162 139 199 3 85 234 160 230 114 164 25 154 94 87 76 241 251 243 147 109 83 0 0 0 0 0 64 43 137 16 132 202 104 91 201 107 180 196 200 93 138 129 13 78 33 73 134 236 116 150 83 184 197 132 23 82 3 247 20 140 181 22 152 27 60 63 98 254 172 152 20 58 101 176 236 139 225 217 61 37 39 22 240 147 101 158 189 117 172 129 3 1 64 43 137 16 132 202 104 91 201 107 180 196 200 93 138 129 13 78 33 73 134 236 116 150 83 184 197 132 23 82 3 247 20 140 181 22 152 27 60 63 98 254 172 152 20 58 101 176 236 139 225 217 61 37 39 22 240 147 101 158 189 117 172 129 3 0 16 174 250 80 27 225 76 117 105 139 6 48 23 21 0 0 0 1 16 174 250 80 27 225 76 117 105 139 6 48 23 21 0 0 0 0 32 79 208 51 133 78 86 8 203 246 180 251 28 21 185 125 159 144 112 64 104 31 37 123 126 115 170 223 1 66 0 0 0 1 32 79 208 51 133 78 86 8 203 246 180 251 28 21 185 125 159 144 112 64 104 31 37 123 126 115 170 223 1 66 0 0 0 0 24 59 170 196 192 162 161 183 242 120 40 171 157 254 236 242 64 223 1 0 0 0 0 0 0 1 24 59 170 196 192 162 161 183 242 120 40 171 157 254 236 242 64 223 1 0 0 0 0 0 0 0 64 158 138 13 99 212 72 79 220 230 16 119 150 64 148 121 100 5 104 182 189 57 158 100 143 129 122 146 11 169 192 52 74 169 74 4 0 229 160 168 226 62 202 182 250 171 51 251 90 159 122 13 111 16 28 141 139 1 41 229 97 17 73 120 0 1 64 158 138 13 99 212 72 79 220 230 16 119 150 64 148 121 100 5 104 182 189 57 158 100 143 129 122 146 11 169 192 52 74 169 74 4 0 229 160 168 226 62 202 182 250 171 51 251 90 159 122 13 111 16 28 141 139 1 41 229 97 17 73 120 0 0 128 54 211 84 85 147 162 152 160 127 96 156 128 144 183 140 26 170 242 255 112 211 16 24 233 93 177 189 62 26 230 8 18 162 102 53 79 255 93 127 37 173 116 119 61 21 221 30 71 51 18 217 197 225 89 208 228 54 16 14 158 40 254 222 6 144 144 95 30 116 51 208 187 221 207 73 40 215 178 180 184 67 243 230 235 85 174 4 118 231 32 148 73 211 37 140 151 196 184 12 41 14 98 78 190 103 107 141 66 52 100 222 58 141 135 84 85 90 76 97 21 18 0 0 0 0 0 0 0 1 128 54 211 84 85 147 162 152 160 127 96 156 128 144 183 140 26 170 242 255 112 211 16 24 233 93 177 189 62 26 230 8 18 162 102 53 79 255 93 127 37 173 116 119 61 21 221 30 71 51 18 217 197 225 89 208 228 54 16 14 158 40 254 222 6 144 144 95 30 116 51 208 187 221 207 73 40 215 178 180 184 67 243 230 235 85 174 4 118 231 32 148 73 211 37 140 151 196 184 12 41 14 98 78 190 103 107 141 66 52 100 222 58 141 135 84 85 90 76 97 21 18 0 0 0 0 0 0 0 0 128 94 236 109 194 205 86 41 192 155 21 79 52 203 207 37 42 40 126 224 32 228 152 22 204 190 205 68 99 253 159 127 249 241 8 5 27 151 203 115 75 236 216 195 28 184 201 166 85 152 106 8 201 248 148 93 54 156 87 135 56 251 121 202 96 173 198 190 134 110 223 180 127 230 136 159 180 9 44 207 255 43 80 213 238 43 117 135 78 121 149 22 24 198 179 157 59 238 245 168 85 45 36 70 88 161 109 52 49 133 96 74 209 106 244 99 200 247 185 127 197 240 97 2 0 0 0 0 0 1 128 94 236 109 194 205 86 41 192 155 21 79 52 203 207 37 42 40 126 224 32 228 152 22 204 190 205 68 99 253 159 127 249 241 8 5 27 151 203 115 75 236 216 195 28 184 201 166 85 152 106 8 201 248 148 93 54 156 87 135 56 251 121 202 96 173 198 190 134 110 223 180 127 230 136 159 180 9 44 207 255 43 80 213 238 43 117 135 78 121 149 22 24 198 179 157 59 238 245 168 85 45 36 70 88 161 109 52 49 133 96 74 209 106 244 99 200 247 185 127 197 240 97 2 0 0 0 0 0 0 128 14 202 151 114 198 177 79 116 173 42 198 179 37 189 161 34 90 109 151 134 15 53 12 218 203 186 227 104 124 114 146 230 193 76 40 120 134 85 85 179 206 122 201 169 68 255 199 58 19 184 117 183 58 105 131 49 120 224 207 113 249 249 52 245 213 117 133 240 15 235 167 111 253 250 71 98 115 41 241 120 23 72 80 150 152 182 145 130 4 69 103 219 252 177 172 87 76 137 67 198 105 98 131 12 8 87 204 104 138 42 101 155 161 225 254 112 96 164 148 113 139 130 6 0 0 0 0 0 1 128 14 202 151 114 198 177 79 116 173 42 198 179 37 189 161 34 90 109 151 134 15 53 12 218 203 186 227 104 124 114 146 230 193 76 40 120 134 85 85 179 206 122 201 169 68 255 199 58 19 184 117 183 58 105 131 49 120 224 207 113 249 249 52 245 213 117 133 240 15 235 167 111 253 250 71 98 115 41 241 120 23 72 80 150 152 182 145 130 4 69 103 219 252 177 172 87 76 137 67 198 105 98 131 12 8 87 204 104 138 42 101 155 161 225 254 112 96 164 148 113 139 130 6 0 0 0 0 0 0 88 222 236 36 90 191 241 183 85 110 108 88 240 111 232 78 103 27 70 144 224 71 76 230 109 75 89 21 251 126 142 18 121 105 170 253 72 64 73 2 238 74 157 109 22 80 12 236 206 45 90 23 64 23 14 190 116 110 37 81 228 238 254 84 202 140 111 243 20 88 246 161 13 249 31 162 155 221 13 64 215 171 161 29 14 0 0 0 0 1 88 222 236 36 90 191 241 183 85 110 108 88 240 111 232 78 103 27 70 144 224 71 76 230 109 75 89 21 251 126 142 18 121 105 170 253 72 64 73 2 238 74 157 109 22 80 12 236 206 45 90 23 64 23 14 190 116 110 37 81 228 238 254 84 202 140 111 243 20 88 246 161 13 249 31 162 155 221 13 64 215 171 161 29 14 0 0 0 0 0 80 69 2 96 19 137 241 75 149 54 240 119 4 53 193 106 38 190 90 56 134 205 201 129 251 62 99 112 152 118 97 184 216 164 110 226 53 156 74 62 42 32 199 114 107 27 36 188 14 59 253 131 97 129 87 74 48 164 130 23 116 217 134 169 80 29 241 90 26 86 7 137 144 117 50 0 0 0 0 0 0 1 80 69 2 96 19 137 241 75 149 54 240 119 4 53 193 106 38 190 90 56 134 205 201 129 251 62 99 112 152 118 97 184 216 164 110 226 53 156 74 62 42 32 199 114 107 27 36 188 14 59 253 131 97 129 87 74 48 164 130 23 116 217 134 169 80 29 241 90 26 86 7 137 144 117 50 0 0 0 0 0 0 0 104 60 2 183 139 129 88 99 244 170 89 0 177 28 40 203 18 239 70 82 138 113 96 148 242 156 70 22 152 221 31 149 38 127 107 45 254 28 166 210 227 215 191 161 12 230 95 230 64 209 16 253 82 63 212 15 119 73 178 25 88 182 249 227 148 207 62 209 192 72 37 56 62 203 161 110 196 250 228 14 19 181 87 35 11 15 255 155 107 206 61 54 223 191 92 51 188 42 0 0 0 0 0 0 0 1 104 60 2 183 139 129 88 99 244 170 89 0 177 28 40 203 18 239 70 82 138 113 96 148 242 156 70 22 152 221 31 149 38 127 107 45 254 28 166 210 227 215 191 161 12 230 95 230 64 209 16 253 82 63 212 15 119 73 178 25 88 182 249 227 148 207 62 209 192 72 37 56 62 203 161 110 196 250 228 14 19 181 87 35 11 15 255 155 107 206 61 54 223 191 92 51 188 42 0 0 0 0 0 0 0 0 8 161 145 84 161 51 102 34 163 1 8 161 145 84 161 51 102 34 163 0 56 160 51 60 244 243 228 49 105 198 184 5 130 241 114 177 248 245 101 241 141 249 87 160 252 119 173 82 11 10 104 49 95 69 254 101 134 79 46 129 192 118 64 243 147 3 51 61 70 176 159 167 235 86 145 44 55 1 56 160 51 60 244 243 228 49 105 198 184 5 130 241 114 177 248 245 101 241 141 249 87 160 252 119 173 82 11 10 104 49 95 69 254 101 134 79 46 129 192 118 64 243 147 3 51 61 70 176 159 167 235 86 145 44 55 0 32 180 181 48 71 211 35 86 174 153 231 246 211 154 205 97 74 237 0 199 183 8 131 127 228 121 26 229 18 39 183 3 0 1 32 180 181 48 71 211 35 86 174 153 231 246 211 154 205 97 74 237 0 199 183 8 131 127 228 121 26 229 18 39 183 3 0 0 72 235 208 249 69 198 27 28 175 48 201 165 210 55 86 150 90 198 36 230 165 54 20 213 19 85 189 110 233 79 254 190 153 19 131 115 116 152 36 49 241 5 53 57 191 108 36 43 245 224 105 242 219 194 163 217 52 122 224 205 161 21 47 142 100 254 80 178 115 134 181 158 0 1 72 235 208 249 69 198 27 28 175 48 201 165 210 55 86 150 90 198 36 230 165 54 20 213 19 85 189 110 233 79 254 190 153 19 131 115 116 152 36 49 241 5 53 57 191 108 36 43 245 224 105 242 219 194 163 217 52 122 224 205 161 21 47 142 100 254 80 178 115 134 181 158 0 0 48 24 216 31 31 121 32 6 35 230 132 116 1 93 231 239 114 29 239 68 226 187 220 209 191 89 111 162 77 90 222 196 5 16 190 98 88 179 228 211 83 191 201 156 101 38 6 0 0 1 48 24 216 31 31 121 32 6 35 230 132 116 1 93 231 239 114 29 239 68 226 187 220 209 191 89 111 162 77 90 222 196 5 16 190 98 88 179 228 211 83 191 201 156 101 38 6 0 0 0 8 120 9 155 198 227 119 139 0 1 8 120 9 155 198 227 119 139 0 0 112 67 233 173 239 2 147 31 164 67 28 157 14 181 143 121 205 94 47 18 212 89 86 192 240 97 248 17 119 22 163 109 127 226 138 109 233 234 45 230 169 33 186 2 126 255 20 183 106 178 83 140 195 205 223 184 177 109 237 177 147 165 5 252 192 192 124 61 142 140 69 133 239 214 170 94 162 222 231 95 68 100 116 183 60 109 34 233 105 48 238 47 153 181 219 232 176 110 180 54 190 173 160 203 79 0 3 0 0 0 0 0 0 1 112 67 233 173 239 2 147 31 164 67 28 157 14 181 143 121 205 94 47 18 212 89 86 192 240 97 248 17 119 22 163 109 127 226 138 109 233 234 45 230 169 33 186 2 126 255 20 183 106 178 83 140 195 205 223 184 177 109 237 177 147 165 5 252 192 192 124 61 142 140 69 133 239 214 170 94 162 222 231 95 68 100 116 183 60 109 34 233 105 48 238 47 153 181 219 232 176 110 180 54 190 173 160 203 79 0 3 0 0 0 0 0 0 0 48 113 179 208 89 229 97 41 83 34 181 248 69 45 117 67 182 227 176 114 161 166 167 142 142 47 25 191 4 182 213 77 37 61 119 165 249 59 176 118 228 161 1 0 0 0 0 0 0 1 48 113 179 208 89 229 97 41 83 34 181 248 69 45 117 67 182 227 176 114 161 166 167 142 142 47 25 191 4 182 213 77 37 61 119 165 249 59 176 118 228 161 1 0 0 0 0 0 0 0 8 205 230 1 0 0 0 0 0 1 8 205 230 1 0 0 0 0 0 0 56 77 166 237 60 159 113 214 225 225 196 126 16 105 189 104 42 252 167 15 186 63 111 11 23 250 53 128 208 225 81 238 136 75 225 4 178 227 11 107 243 121 83 238 164 31 105 2 177 163 135 105 60 0 0 0 0 1 56 77 166 237 60 159 113 214 225 225 196 126 16 105 189 104 42 252 167 15 186 63 111 11 23 250 53 128 208 225 81 238 136 75 225 4 178 227 11 107 243 121 83 238 164 31 105 2 177 163 135 105 60 0 0 0 0 0 8 7 177 200 9 87 48 0 0 1 8 7 177 200 9 87 48 0 0 0 120 95 0 17 198 196 3 168 29 232 224 109 67 23 135 235 50 52 214 192 80 146 255 65 119 139 83 153 210 130 123 45 5 148 58 19 42 240 226 164 159 61 91 236 215 59 183 160 255 155 79 104 47 81 69 79 205 46 250 193 179 14 221 169 205 128 237 109 128 36 7 21 98 118 172 243 166 158 151 127 232 156 225 22 108 82 127 8 238 182 238 200 235 199 229 34 2 128 5 166 74 164 159 85 41 32 254 62 100 188 86 40 138 142 240 122 56 2 0 0 0 1 120 95 0 17 198 196 3 168 29 232 224 109 67 23 135 235 50 52 214 192 80 146 255 65 119 139 83 153 210 130 123 45 5 148 58 19 42 240 226 164 159 61 91 236 215 59 183 160 255 155 79 104 47 81 69 79 205 46 250 193 179 14 221 169 205 128 237 109 128 36 7 21 98 118 172 243 166 158 151 127 232 156 225 22 108 82 127 8 238 182 238 200 235 199 229 34 2 128 5 166 74 164 159 85 41 32 254 62 100 188 86 40 138 142 240 122 56 2 0 0 0 0 24 52 171 120 247 245 238 38 189 200 10 21 246 79 73 111 224 107 101 199 80 238 49 0 0 1 24 52 171 120 247 245 238 38 189 200 10 21 246 79 73 111 224 107 101 199 80 238 49 0 0 0 104 57 158 161 115 39 26 101 249 18 39 40 1 93 199 25 128 79 244 212 44 60 231 196 18 52 157 210 236 197 32 195 30 224 115 47 62 183 108 27 196 234 161 196 225 103 21 202 150 178 236 60 175 217 66 254 151 71 126 230 34 45 143 24 111 88 165 51 57 138 241 251 139 79 160 192 71 182 96 28 48 193 182 46 229 150 230 46 13 249 26 35 98 104 138 125 230 36 173 131 138 29 153 37 15 1 104 57 158 161 115 39 26 101 249 18 39 40 1 93 199 25 128 79 244 212 44 60 231 196 18 52 157 210 236 197 32 195 30 224 115 47 62 183 108 27 196 234 161 196 225 103 21 202 150 178 236 60 175 217 66 254 151 71 126 230 34 45 143 24 111 88 165 51 57 138 241 251 139 79 160 192 71 182 96 28 48 193 182 46 229 150 230 46 13 249 26 35 98 104 138 125 230 36 173 131 138 29 153 37 15 0 88 201 67 176 170 12 214 223 113 151 240 121 127 115 67 246 173 119 207 202 219 102 176 87 124 64 46 160 253 231 56 131 2 167 194 119 80 227 152 34 209 118 189 9 5 175 115 207 20 15 201 85 82 139 3 122 200 232 151 18 106 251 0 202 255 146 176 226 219 69 250 238 111 233 251 3 57 189 253 30 108 224 253 116 0 0 0 0 0 1 88 201 67 176 170 12 214 223 113 151 240 121 127 115 67 246 173 119 207 202 219 102 176 87 124 64 46 160 253 231 56 131 2 167 194 119 80 227 152 34 209 118 189 9 5 175 115 207 20 15 201 85 82 139 3 122 200 232 151 18 106 251 0 202 255 146 176 226 219 69 250 238 111 233 251 3 57 189 253 30 108 224 253 116 0 0 0 0 0 0 40 216 207 22 26 220 111 75 102 80 113 167 57 132 171 148 110 197 33 103 213 177 123 206 218 242 178 9 228 125 117 218 221 76 2 0 0 0 0 0 0 1 40 216 207 22 26 220 111 75 102 80 113 167 57 132 171 148 110 197 33 103 213 177 123 206 218 242 178 9 228 125 117 218 221 76 2 0 0 0 0 0 0 0 96 209 38 226 122 66 37 110 32 0 244 215 135 36 169 50 93 130 191 147 142 209 240 154 14 39 115 83 99 104 166 126 171 89 95 133 0 168 235 114 121 112 237 201 242 105 25 68 88 53 63 4 70 8 16 14 139 78 16 28 216 131 240 108 136 129 244 99 100 247 236 64 222 120 6 100 242 25 164 196 251 190 21 202 16 243 72 23 21 27 253 232 129 65 12 0 0 1 96 209 38 226 122 66 37 110 32 0 244 215 135 36 169 50 93 130 191 147 142 209 240 154 14 39 115 83 99 104 166 126 171 89 95 133 0 168 235 114 121 112 237 201 242 105 25 68 88 53 63 4 70 8 16 14 139 78 16 28 216 131 240 108 136 129 244 99 100 247 236 64 222 120 6 100 242 25 164 196 251 190 21 202 16 243 72 23 21 27 253 232 129 65 12 0 0 0 24 137 7 71 104 123 1 230 162 84 85 84 78 76 1 146 149 3 0 0 0 0 0 0 0 1 24 137 7 71 104 123 1 230 162 84 85 84 78 76 1 146 149 3 0 0 0 0 0 0 0 0 88 17 135 189 91 189 22 119 161 7 236 246 162 42 137 207 149 58 10 147 68 241 83 242 92 176 9 168 195 250 98 204 19 131 82 40 2 115 30 134 119 85 234 171 51 248 6 232 13 126 100 100 208 191 92 68 52 56 79 102 83 41 100 249 214 204 9 147 69 246 254 24 120 21 121 111 194 137 125 190 39 201 58 31 0 0 0 0 0 1 88 17 135 189 91 189 22 119 161 7 236 246 162 42 137 207 149 58 10 147 68 241 83 242 92 176 9 168 195 250 98 204 19 131 82 40 2 115 30 134 119 85 234 171 51 248 6 232 13 126 100 100 208 191 92 68 52 56 79 102 83 41 100 249 214 204 9 147 69 246 254 24 120 21 121 111 194 137 125 190 39 201 58 31 0 0 0 0 0 0 64 174 140 149 163 3 107 111 4 34 250 106 21 208 102 247 217 125 106 201 189 50 165 180 247 173 193 91 219 22 221 135 48 75 167 217 77 123 120 130 238 30 6 129 157 63 162 58 79 199 175 93 130 164 195 209 241 206 111 166 90 218 65 223 2 1 64 174 140 149 163 3 107 111 4 34 250 106 21 208 102 247 217 125 106 201 189 50 165 180 247 173 193 91 219 22 221 135 48 75 167 217 77 123 120 130 238 30 6 129 157 63 162 58 79 199 175 93 130 164 195 209 241 206 111 166 90 218 65 223 2 0 64 94 39 245 99 17 252 182 140 162 112 156 230 137 46 180 2 25 35 78 204 212 30 138 67 63 147 188 132 251 223 228 122 221 52 247 47 60 130 213 221 67 57 251 17 236 100 5 136 157 85 85 137 180 82 210 206 141 57 0 0 0 0 0 0 1 64 94 39 245 99 17 252 182 140 162 112 156 230 137 46 180 2 25 35 78 204 212 30 138 67 63 147 188 132 251 223 228 122 221 52 247 47 60 130 213 221 67 57 251 17 236 100 5 136 157 85 85 137 180 82 210 206 141 57 0 0 0 0 0 0 0 56 130 153 165 204 195 100 32 242 200 177 22 23 48 222 90 173 238 62 11 195 207 31 94 106 111 19 23 102 123 154 11 25 69 140 143 38 27 47 211 73 199 58 157 241 52 98 114 254 14 0 0 0 0 0 0 0 1 56 130 153 165 204 195 100 32 242 200 177 22 23 48 222 90 173 238 62 11 195 207 31 94 106 111 19 23 102 123 154 11 25 69 140 143 38 27 47 211 73 199 58 157 241 52 98 114 254 14 0 0 0 0 0 0 0 0 72 242 139 53 248 243 242 47 139 119 188 176 74 227 81 33 108 130 169 69 136 245 21 31 87 103 135 189 216 110 191 185 187 15 111 235 113 59 97 210 163 3 82 39 248 57 165 173 26 7 64 153 147 109 165 237 85 23 91 144 96 82 212 163 110 172 233 196 20 189 194 1 0 1 72 242 139 53 248 243 242 47 139 119 188 176 74 227 81 33 108 130 169 69 136 245 21 31 87 103 135 189 216 110 191 185 187 15 111 235 113 59 97 210 163 3 82 39 248 57 165 173 26 7 64 153 147 109 165 237 85 23 91 144 96 82 212 163 110 172 233 196 20 189 194 1 0 0 96 63 196 195 103 33 69 53 0 35 106 115 86 145 225 79 206 13 41 97 138 221 49 15 101 120 43 207 2 164 87 76 203 63 18 204 117 208 102 150 11 45 65 74 88 87 11 31 221 40 244 204 108 35 1 221 236 192 33 114 34 255 16 27 102 160 251 229 204 178 67 44 210 45 249 116 212 232 9 246 165 134 232 228 248 94 170 234 243 13 232 1 125 0 0 0 0 1 96 63 196 195 103 33 69 53 0 35 106 115 86 145 225 79 206 13 41 97 138 221 49 15 101 120 43 207 2 164 87 76 203 63 18 204 117 208 102 150 11 45 65 74 88 87 11 31 221 40 244 204 108 35 1 221 236 192 33 114 34 255 16 27 102 160 251 229 204 178 67 44 210 45 249 116 212 232 9 246 165 134 232 228 248 94 170 234 243 13 232 1 125 0 0 0 0 0 40 179 181 131 162 149 183 138 252 30 154 1 146 137 121 52 190 246 1 224 28 36 102 79 202 159 212 210 252 214 150 156 61 194 235 164 133 239 142 0 0 1 40 179 181 131 162 149 183 138 252 30 154 1 146 137 121 52 190 246 1 224 28 36 102 79 202 159 212 210 252 214 150 156 61 194 235 164 133 239 142 0 0 0 40 60 58 79 249 6 113 81 42 62 163 64 45 148 17 196 92 207 75 88 80 225 216 133 32 64 220 110 107 147 131 21 223 245 83 192 232 107 0 0 0 1 40 60 58 79 249 6 113 81 42 62 163 64 45 148 17 196 92 207 75 88 80 225 216 133 32 64 220 110 107 147 131 21 223 245 83 192 232 107 0 0 0 0 96 12 165 17 255 148 106 77 76 190 146 244 60 246 21 69 4 108 6 135 121 71 44 77 148 210 123 228 244 192 7 178 234 75 27 35 56 139 157 89 246 205 166 104 142 71 22 111 74 215 198 253 47 185 250 203 223 186 72 48 140 56 78 5 248 174 81 223 135 55 86 65 183 39 125 199 89 36 113 114 101 100 241 34 118 182 139 64 184 93 41 222 250 83 8 126 2 1 96 12 165 17 255 148 106 77 76 190 146 244 60 246 21 69 4 108 6 135 121 71 44 77 148 210 123 228 244 192 7 178 234 75 27 35 56 139 157 89 246 205 166 104 142 71 22 111 74 215 198 253 47 185 250 203 223 186 72 48 140 56 78 5 248 174 81 223 135 55 86 65 183 39 125 199 89 36 113 114 101 100 241 34 118 182 139 64 184 93 41 222 250 83 8 126 2 0 80 194 39 168 144 47 63 164 168 230 144 217 13 24 96 155 100 12 59 177 151 216 92 228 192 145 88 206 81 45 221 226 39 93 88 12 250 68 153 137 36 20 58 0 113 35 195 22 121 71 66 8 241 39 201 196 133 230 128 125 7 217 82 221 87 57 93 151 146 24 13 11 157 51 151 229 8 102 193 170 254 1 80 194 39 168 144 47 63 164 168 230 144 217 13 24 96 155 100 12 59 177 151 216 92 228 192 145 88 206 81 45 221 226 39 93 88 12 250 68 153 137 36 20 58 0 113 35 195 22 121 71 66 8 241 39 201 196 133 230 128 125 7 217 82 221 87 57 93 151 146 24 13 11 157 51 151 229 8 102 193 170 254 0 32 115 165 0 181 114 222 7 59 3 124 183 26 196 172 167 125 136 168 200 232 107 92 130 217 10 0 0 0 0 0 0 0 1 32 115 165 0 181 114 222 7 59 3 124 183 26 196 172 167 125 136 168 200 232 107 92 130 217 10 0 0 0 0 0 0 0 0 104 236 68 87 125 155 29 32 62 230 30 136 150 217 197 37 30 35 255 242 108 93 176 111 33 250 237 114 238 160 77 113 171 147 43 61 144 12 84 87 115 160 128 222 109 180 248 55 195 181 75 255 203 79 219 130 244 94 36 238 156 212 175 171 162 174 87 117 209 113 175 106 193 36 21 66 244 243 166 248 81 121 94 110 189 10 52 188 102 198 136 150 183 191 180 96 29 51 207 65 251 163 177 216 188 1 104 236 68 87 125 155 29 32 62 230 30 136 150 217 197 37 30 35 255 242 108 93 176 111 33 250 237 114 238 160 77 113 171 147 43 61 144 12 84 87 115 160 128 222 109 180 248 55 195 181 75 255 203 79 219 130 244 94 36 238 156 212 175 171 162 174 87 117 209 113 175 106 193 36 21 66 244 243 166 248 81 121 94 110 189 10 52 188 102 198 136 150 183 191 180 96 29 51 207 65 251 163 177 216 188 0 88 199 62 219 38 224 64 98 122 250 132 90 246 191 177 175 129 238 74 103 140 144 205 156 27 249 53 223 251 192 95 121 104 139 113 181 72 177 157 33 140 244 253 143 104 230 164 205 233 17 33 203 84 40 89 149 26 16 144 238 213 168 166 242 186 189 255 169 165 234 16 127 90 100 62 217 16 139 41 102 89 93 97 62 95 147 122 238 237 1 88 199 62 219 38 224 64 98 122 250 132 90 246 191 177 175 129 238 74 103 140 144 205 156 27 249 53 223 251 192 95 121 104 139 113 181 72 177 157 33 140 244 253 143 104 230 164 205 233 17 33 203 84 40 89 149 26 16 144 238 213 168 166 242 186 189 255 169 165 234 16 127 90 100 62 217 16 139 41 102 89 93 97 62 95 147 122 238 237 0 48 45 84 26 33 30 184 117 77 114 45 211 193 64 207 224 237 136 114 3 145 150 20 213 238 240 36 201 64 122 69 244 22 129 142 201 1 185 151 174 233 1 0 0 0 0 0 0 0 1 48 45 84 26 33 30 184 117 77 114 45 211 193 64 207 224 237 136 114 3 145 150 20 213 238 240 36 201 64 122 69 244 22 129 142 201 1 185 151 174 233 1 0 0 0 0 0 0 0 0 24 118 96 110 163 151 234 7 30 202 198 169 47 210 145 198 195 223 20 211 133 162 187 75 48 1 24 118 96 110 163 151 234 7 30 202 198 169 47 210 145 198 195 223 20 211 133 162 187 75 48 0 56 166 132 83 15 114 76 5 198 105 107 64 21 201 37 152 38 123 234 29 114 185 178 23 194 54 124 93 52 128 139 153 108 32 85 243 44 247 113 25 108 194 143 136 29 222 174 212 74 73 19 0 0 0 0 0 0 1 56 166 132 83 15 114 76 5 198 105 107 64 21 201 37 152 38 123 234 29 114 185 178 23 194 54 124 93 52 128 139 153 108 32 85 243 44 247 113 25 108 194 143 136 29 222 174 212 74 73 19 0 0 0 0 0 0 0 48 123 248 179 54 119 191 224 218 82 168 17 9 213 235 78 184 70 111 32 105 157 160 212 123 240 230 248 188 30 46 115 251 167 248 212 75 179 20 91 203 47 80 142 34 152 174 246 1 1 48 123 248 179 54 119 191 224 218 82 168 17 9 213 235 78 184 70 111 32 105 157 160 212 123 240 230 248 188 30 46 115 251 167 248 212 75 179 20 91 203 47 80 142 34 152 174 246 1 0 48 156 96 100 244 230 81 145 6 56 18 242 19 211 56 11 208 136 192 193 247 21 84 210 245 251 22 164 190 142 62 191 235 148 86 107 108 228 229 161 113 8 169 132 37 3 0 0 0 1 48 156 96 100 244 230 81 145 6 56 18 242 19 211 56 11 208 136 192 193 247 21 84 210 245 251 22 164 190 142 62 191 235 148 86 107 108 228 229 161 113 8 169 132 37 3 0 0 0 0 88 253 53 33 48 131 189 25 65 204 174 99 186 204 72 230 129 192 106 8 141 23 186 143 8 176 75 97 190 2 190 127 52 92 22 252 200 15 45 98 21 11 157 128 28 145 217 54 150 99 213 145 99 58 65 64 149 218 156 253 58 0 9 210 203 145 96 237 185 130 70 116 6 209 240 157 58 59 8 33 55 1 0 0 0 0 0 0 0 1 88 253 53 33 48 131 189 25 65 204 174 99 186 204 72 230 129 192 106 8 141 23 186 143 8 176 75 97 190 2 190 127 52 92 22 252 200 15 45 98 21 11 157 128 28 145 217 54 150 99 213 145 99 58 65 64 149 218 156 253 58 0 9 210 203 145 96 237 185 130 70 116 6 209 240 157 58 59 8 33 55 1 0 0 0 0 0 0 0 0 112 140 139 49 207 205 64 240 199 59 87 85 34 45 23 247 226 20 175 76 118 24 188 97 163 249 238 130 105 219 76 167 90 29 31 159 229 181 73 152 183 74 134 209 139 34 200 210 113 231 227 99 224 196 220 80 243 62 167 195 5 201 123 178 100 95 190 235 171 32 64 54 178 111 83 175 134 22 73 175 164 79 39 170 74 102 74 233 210 216 226 3 131 100 81 201 127 195 224 208 29 109 171 156 77 11 0 0 0 0 0 0 0 1 112 140 139 49 207 205 64 240 199 59 87 85 34 45 23 247 226 20 175 76 118 24 188 97 163 249 238 130 105 219 76 167 90 29 31 159 229 181 73 152 183 74 134 209 139 34 200 210 113 231 227 99 224 196 220 80 243 62 167 195 5 201 123 178 100 95 190 235 171 32 64 54 178 111 83 175 134 22 73 175 164 79 39 170 74 102 74 233 210 216 226 3 131 100 81 201 127 195 224 208 29 109 171 156 77 11 0 0 0 0 0 0 0 0 104 222 231 217 128 82 99 10 214 110 228 128 78 114 45 119 81 180 185 243 203 206 92 162 40 82 46 54 187 93 28 152 69 4 123 103 77 208 204 181 235 42 147 170 143 2 139 154 218 144 51 223 215 163 89 75 72 123 205 0 240 64 100 207 207 158 197 65 249 187 175 80 167 154 152 209 32 55 42 171 219 232 238 66 244 61 205 209 141 94 43 111 8 205 151 59 230 205 24 205 241 0 0 0 0 1 104 222 231 217 128 82 99 10 214 110 228 128 78 114 45 119 81 180 185 243 203 206 92 162 40 82 46 54 187 93 28 152 69 4 123 103 77 208 204 181 235 42 147 170 143 2 139 154 218 144 51 223 215 163 89 75 72 123 205 0 240 64 100 207 207 158 197 65 249 187 175 80 167 154 152 209 32 55 42 171 219 232 238 66 244 61 205 209 141 94 43 111 8 205 151 59 230 205 24 205 241 0 0 0 0 0 88 207 251 142 39 144 108 252 57 106 73 11 186 19 131 187 69 26 149 177 211 238 136 251 62 89 7 238 7 115 168 92 155 211 100 253 171 162 138 116 33 152 91 134 33 55 71 164 201 152 4 49 26 55 186 161 250 57 85 28 39 171 17 196 138 245 10 0 73 155 144 183 97 4 3 242 240 169 248 22 116 210 225 61 191 6 115 0 0 1 88 207 251 142 39 144 108 252 57 106 73 11 186 19 131 187 69 26 149 177 211 238 136 251 62 89 7 238 7 115 168 92 155 211 100 253 171 162 138 116 33 152 91 134 33 55 71 164 201 152 4 49 26 55 186 161 250 57 85 28 39 171 17 196 138 245 10 0 73 155 144 183 97 4 3 242 240 169 248 22 116 210 225 61 191 6 115 0 0 0 16 137 130 140 24 236 12 214 199 10 105 31 0 0 0 0 0 1 16 137 130 140 24 236 12 214 199 10 105 31 0 0 0 0 0 0 56 108 175 196 156 55 213 72 113 207 244 180 56 88 213 35 165 75 248 211 20 212 57 60 188 217 211 48 37 134 141 243 246 161 245 39 195 123 248 138 183 15 28 111 146 50 155 93 170 4 0 0 0 0 0 0 0 1 56 108 175 196 156 55 213 72 113 207 244 180 56 88 213 35 165 75 248 211 20 212 57 60 188 217 211 48 37 134 141 243 246 161 245 39 195 123 248 138 183 15 28 111 146 50 155 93 170 4 0 0 0 0 0 0 0 0 120 112 113 30 136 233 190 54 137 121 169 50 162 49 32 173 179 18 162 50 40 203 206 65 185 66 186 230 219 176 80 103 123 27 250 226 122 23 191 77 80 214 47 76 55 89 65 20 139 103 231 246 32 248 93 179 33 222 25 246 60 212 174 114 116 72 105 47 23 51 143 138 172 27 39 246 135 133 254 162 107 108 22 2 166 141 243 6 251 77 176 135 206 2 231 124 148 132 69 84 79 111 64 235 234 76 164 46 49 159 31 188 209 182 60 173 197 202 76 16 0 1 120 112 113 30 136 233 190 54 137 121 169 50 162 49 32 173 179 18 162 50 40 203 206 65 185 66 186 230 219 176 80 103 123 27 250 226 122 23 191 77 80 214 47 76 55 89 65 20 139 103 231 246 32 248 93 179 33 222 25 246 60 212 174 114 116 72 105 47 23 51 143 138 172 27 39 246 135 133 254 162 107 108 22 2 166 141 243 6 251 77 176 135 206 2 231 124 148 132 69 84 79 111 64 235 234 76 164 46 49 159 31 188 209 182 60 173 197 202 76 16 0 0 64 47 160 84 82 9 238 207 219 151 156 134 131 89 62 11 68 11 147 237 99 121 15 73 200 84 95 87 214 232 187 96 240 53 52 195 55 200 190 88 28 76 29 80 151 156 97 63 20 181 127 200 147 98 254 76 151 61 118 77 0 0 0 0 0 1 64 47 160 84 82 9 238 207 219 151 156 134 131 89 62 11 68 11 147 237 99 121 15 73 200 84 95 87 214 232 187 96 240 53 52 195 55 200 190 88 28 76 29 80 151 156 97 63 20 181 127 200 147 98 254 76 151 61 118 77 0 0 0 0 0 0 104 238 56 196 120 62 80 239 58 25 190 123 255 60 22 240 193 64 200 155 205 65 125 162 46 114 82 168 130 71 226 104 252 45 143 77 84 254 194 132 208 96 195 7 173 173 156 202 242 175 234 16 37 97 18 174 179 230 94 208 69 94 78 160 223 97 151 58 36 237 203 214 110 180 89 134 104 29 12 23 140 193 36 70 29 183 50 17 167 28 12 196 65 172 236 156 91 251 73 127 1 0 0 0 0 1 104 238 56 196 120 62 80 239 58 25 190 123 255 60 22 240 193 64 200 155 205 65 125 162 46 114 82 168 130 71 226 104 252 45 143 77 84 254 194 132 208 96 195 7 173 173 156 202 242 175 234 16 37 97 18 174 179 230 94 208 69 94 78 160 223 97 151 58 36 237 203 214 110 180 89 134 104 29 12 23 140 193 36 70 29 183 50 17 167 28 12 196 65 172 236 156 91 251 73 127 1 0 0 0 0 0 40 149 114 1 116 102 17 2 174 6 173 97 185 176 52 172 147 84 122 233 135 57 32 185 232 151 166 16 42 84 99 130 237 14 101 51 119 173 115 53 0 1 40 149 114 1 116 102 17 2 174 6 173 97 185 176 52 172 147 84 122 233 135 57 32 185 232 151 166 16 42 84 99 130 237 14 101 51 119 173 115 53 0 0 64 242 217 97 202 37 38 150 206 207 10 52 100 102 27 105 39 214 77 170 228 242 244 122 45 230 139 116 113 248 171 76 193 78 80 198 37 181 97 228 185 29 21 241 62 210 131 193 6 1 89 93 123 149 252 254 234 21 49 121 54 70 123 12 0 1 64 242 217 97 202 37 38 150 206 207 10 52 100 102 27 105 39 214 77 170 228 242 244 122 45 230 139 116 113 248 171 76 193 78 80 198 37 181 97 228 185 29 21 241 62 210 131 193 6 1 89 93 123 149 252 254 234 21 49 121 54 70 123 12 0 0 120 126 216 172 15 25 129 241 98 17 2 168 135 214 24 154 85 56 125 146 150 225 161 82 46 26 201 64 204 132 245 111 192 88 211 123 3 119 58 58 245 118 104 138 91 147 19 185 226 101 33 139 62 235 15 91 204 29 220 53 8 11 61 142 142 93 77 162 71 38 142 116 213 43 79 225 85 174 86 234 214 249 189 86 69 229 181 99 122 154 144 192 66 13 218 96 118 124 80 14 168 5 230 111 79 37 76 42 49 185 18 80 157 188 50 80 199 22 0 0 0 1 120 126 216 172 15 25 129 241 98 17 2 168 135 214 24 154 85 56 125 146 150 225 161 82 46 26 201 64 204 132 245 111 192 88 211 123 3 119 58 58 245 118 104 138 91 147 19 185 226 101 33 139 62 235 15 91 204 29 220 53 8 11 61 142 142 93 77 162 71 38 142 116 213 43 79 225 85 174 86 234 214 249 189 86 69 229 181 99 122 154 144 192 66 13 218 96 118 124 80 14 168 5 230 111 79 37 76 42 49 185 18 80 157 188 50 80 199 22 0 0 0 0 56 243 53 196 121 165 92 144 118 3 3 222 84 206 144 5 157 57 16 134 139 198 69 129 221 11 133 183 218 71 108 13 56 83 246 113 103 6 198 202 227 68 93 146 59 161 12 248 177 166 51 150 47 96 161 239 236 1 56 243 53 196 121 165 92 144 118 3 3 222 84 206 144 5 157 57 16 134 139 198 69 129 221 11 133 183 218 71 108 13 56 83 246 113 103 6 198 202 227 68 93 146 59 161 12 248 177 166 51 150 47 96 161 239 236 0 64 153 28 132 11 210 222 158 84 204 251 210 22 227 11 36 206 23 140 161 60 159 143 123 206 191 31 7 46 144 178 243 58 169 39 112 174 47 119 109 7 130 69 51 2 125 253 241 144 64 234 96 3 245 113 8 190 14 182 65 46 222 249 3 0 1 64 153 28 132 11 210 222 158 84 204 251 210 22 227 11 36 206 23 140 161 60 159 143 123 206 191 31 7 46 144 178 243 58 169 39 112 174 47 119 109 7 130 69 51 2 125 253 241 144 64 234 96 3 245 113 8 190 14 182 65 46 222 249 3 0 0 64 98 185 79 194 105 170 12 86 252 124 124 192 23 205 211 77 162 50 205 89 40 158 46 179 237 22 171 26 56 121 32 6 69 111 60 114 251 180 204 199 96 135 46 64 144 243 102 201 99 166 113 208 152 168 179 161 1 6 0 0 0 0 0 0 1 64 98 185 79 194 105 170 12 86 252 124 124 192 23 205 211 77 162 50 205 89 40 158 46 179 237 22 171 26 56 121 32 6 69 111 60 114 251 180 204 199 96 135 46 64 144 243 102 201 99 166 113 208 152 168 179 161 1 6 0 0 0 0 0 0 0 104 142 26 227 150 238 69 151 6 3 30 46 190 46 96 134 217 131 85 161 92 34 208 158 197 175 196 117 64 216 114 195 81 101 252 52 106 185 71 47 193 32 27 53 120 25 14 193 3 5 106 149 116 208 152 66 126 218 195 178 209 4 241 87 44 185 217 57 224 49 139 77 191 217 218 19 215 78 14 143 87 180 5 177 20 62 54 52 235 79 31 44 20 98 23 221 250 34 0 0 0 0 0 0 0 1 104 142 26 227 150 238 69 151 6 3 30 46 190 46 96 134 217 131 85 161 92 34 208 158 197 175 196 117 64 216 114 195 81 101 252 52 106 185 71 47 193 32 27 53 120 25 14 193 3 5 106 149 116 208 152 66 126 218 195 178 209 4 241 87 44 185 217 57 224 49 139 77 191 217 218 19 215 78 14 143 87 180 5 177 20 62 54 52 235 79 31 44 20 98 23 221 250 34 0 0 0 0 0 0 0 0 40 32 168 235 44 56 166 243 210 154 91 226 40 229 249 145 209 125 211 169 133 252 161 224 125 81 253 117 254 153 178 166 34 26 180 249 135 33 222 152 13 1 40 32 168 235 44 56 166 243 210 154 91 226 40 229 249 145 209 125 211 169 133 252 161 224 125 81 253 117 254 153 178 166 34 26 180 249 135 33 222 152 13 0 16 114 51 72 217 92 64 168 124 50 132 58 208 128 106 1 0 1 16 114 51 72 217 92 64 168 124 50 132 58 208 128 106 1 0 0 72 69 4 0 153 42 90 20 74 230 90 168 97 72 101 100 19 28 241 147 219 3 93 60 246 145 183 55 230 232 224 115 211 143 158 209 214 247 84 89 209 186 139 133 34 124 5 207 184 125 115 201 88 222 241 97 109 108 6 13 211 125 187 117 94 222 2 0 0 0 0 0 0 1 72 69 4 0 153 42 90 20 74 230 90 168 97 72 101 100 19 28 241 147 219 3 93 60 246 145 183 55 230 232 224 115 211 143 158 209 214 247 84 89 209 186 139 133 34 124 5 207 184 125 115 201 88 222 241 97 109 108 6 13 211 125 187 117 94 222 2 0 0 0 0 0 0 0 56 153 84 205 104 19 159 225 153 148 74 194 235 72 23 144 76 152 243 229 1 90 189 92 32 175 52 88 183 242 20 84 239 175 56 99 222 31 211 114 93 122 135 65 160 226 51 48 207 12 116 28 0 0 0 0 0 1 56 153 84 205 104 19 159 225 153 148 74 194 235 72 23 144 76 152 243 229 1 90 189 92 32 175 52 88 183 242 20 84 239 175 56 99 222 31 211 114 93 122 135 65 160 226 51 48 207 12 116 28 0 0 0 0 0 0 72 245 53 109 105 191 82 1 66 103 122 80 160 241 193 52 254 117 182 127 138 99 142 106 221 128 239 15 222 14 129 176 110 43 113 122 176 232 88 250 58 0 161 215 14 126 59 139 23 140 13 122 239 14 189 40 72 35 18 82 213 254 53 121 213 234 12 0 0 0 0 0 0 1 72 245 53 109 105 191 82 1 66 103 122 80 160 241 193 52 254 117 182 127 138 99 142 106 221 128 239 15 222 14 129 176 110 43 113 122 176 232 88 250 58 0 161 215 14 126 59 139 23 140 13 122 239 14 189 40 72 35 18 82 213 254 53 121 213 234 12 0 0 0 0 0 0 0 112 159 8 16 9 71 195 199 198 21 242 159 80 249 120 17 254 76 140 121 166 78 213 92 89 178 160 20 177 8 14 182 122 65 115 133 119 121 16 112 118 105 211 205 62 12 236 55 80 1 131 163 0 83 205 178 80 88 102 233 133 195 61 239 174 246 227 234 216 85 176 76 5 36 121 112 51 212 181 246 245 241 105 195 137 147 72 56 237 179 190 73 134 142 177 146 141 8 159 112 222 16 234 231 234 198 20 89 52 189 194 119 1 1 112 159 8 16 9 71 195 199 198 21 242 159 80 249 120 17 254 76 140 121 166 78 213 92 89 178 160 20 177 8 14 182 122 65 115 133 119 121 16 112 118 105 211 205 62 12 236 55 80 1 131 163 0 83 205 178 80 88 102 233 133 195 61 239 174 246 227 234 216 85 176 76 5 36 121 112 51 212 181 246 245 241 105 195 137 147 72 56 237 179 190 73 134 142 177 146 141 8 159 112 222 16 234 231 234 198 20 89 52 189 194 119 1 0 112 80 214 13 177 215 159 125 169 151 12 42 72 121 18 76 208 238 240 149 68 234 73 20 164 91 171 220 52 255 98 21 228 111 4 175 56 163 222 123 128 30 97 59 67 228 49 187 237 223 220 86 109 144 229 187 251 70 7 146 195 116 106 122 232 185 78 78 58 225 39 134 160 118 235 208 242 69 148 226 101 73 25 136 159 25 99 137 101 248 54 26 247 229 7 34 61 19 28 201 190 36 74 102 133 25 0 0 0 0 0 0 0 1 112 80 214 13 177 215 159 125 169 151 12 42 72 121 18 76 208 238 240 149 68 234 73 20 164 91 171 220 52 255 98 21 228 111 4 175 56 163 222 123 128 30 97 59 67 228 49 187 237 223 220 86 109 144 229 187 251 70 7 146 195 116 106 122 232 185 78 78 58 225 39 134 160 118 235 208 242 69 148 226 101 73 25 136 159 25 99 137 101 248 54 26 247 229 7 34 61 19 28 201 190 36 74 102 133 25 0 0 0 0 0 0 0 0 48 214 54 94 179 164 240 155 40 191 186 107 180 206 48 82 137 213 91 241 62 39 183 229 184 237 121 223 179 199 117 185 240 244 56 38 125 32 5 140 166 122 78 243 77 252 116 1 0 1 48 214 54 94 179 164 240 155 40 191 186 107 180 206 48 82 137 213 91 241 62 39 183 229 184 237 121 223 179 199 117 185 240 244 56 38 125 32 5 140 166 122 78 243 77 252 116 1 0 0 104 54 55 200 109 82 156 202 152 175 66 36 193 252 78 5 135 125 117 139 57 40 153 71 77 232 6 37 188 28 77 2 71 137 173 143 223 127 105 125 144 234 178 168 38 38 22 213 12 86 146 58 86 128 124 44 36 53 34 45 2 168 71 121 160 250 8 153 10 51 71 123 250 225 95 140 177 159 103 47 148 120 154 141 97 250 155 186 25 61 104 158 48 167 246 20 132 6 84 93 66 112 47 0 0 1 104 54 55 200 109 82 156 202 152 175 66 36 193 252 78 5 135 125 117 139 57 40 153 71 77 232 6 37 188 28 77 2 71 137 173 143 223 127 105 125 144 234 178 168 38 38 22 213 12 86 146 58 86 128 124 44 36 53 34 45 2 168 71 121 160 250 8 153 10 51 71 123 250 225 95 140 177 159 103 47 148 120 154 141 97 250 155 186 25 61 104 158 48 167 246 20 132 6 84 93 66 112 47 0 0 0 120 6 90 182 206 193 58 216 170 220 9 22 52 156 242 120 157 30 209 26 98 51 196 178 88 228 65 154 229 210 70 170 198 64 16 247 102 16 21 58 87 235 200 244 76 203 136 132 209 76 195 94 143 2 113 149 235 158 1 227 205 1 208 16 81 131 189 40 241 92 36 170 156 224 56 199 188 154 79 125 102 121 78 97 150 233 11 79 62 109 25 212 226 161 220 35 23 232 13 90 56 183 223 124 31 159 158 14 223 62 85 83 193 110 187 158 93 203 8 0 0 1 120 6 90 182 206 193 58 216 170 220 9 22 52 156 242 120 157 30 209 26 98 51 196 178 88 228 65 154 229 210 70 170 198 64 16 247 102 16 21 58 87 235 200 244 76 203 136 132 209 76 195 94 143 2 113 149 235 158 1 227 205 1 208 16 81 131 189 40 241 92 36 170 156 224 56 199 188 154 79 125 102 121 78 97 150 233 11 79 62 109 25 212 226 161 220 35 23 232 13 90 56 183 223 124 31 159 158 14 223 62 85 83 193 110 187 158 93 203 8 0 0 0 88 47 45 238 181 215 239 242 99 34 179 237 146 38 184 178 32 39 156 91 232 37 68 223 154 247 174 99 147 112 220 68 13 168 71 188 111 58 166 58 109 244 156 76 173 12 217 7 247 229 168 222 84 82 81 171 9 74 74 20 144 71 106 164 117 234 163 235 12 58 184 167 68 145 254 103 0 233 175 219 91 115 45 23 0 0 0 0 0 1 88 47 45 238 181 215 239 242 99 34 179 237 146 38 184 178 32 39 156 91 232 37 68 223 154 247 174 99 147 112 220 68 13 168 71 188 111 58 166 58 109 244 156 76 173 12 217 7 247 229 168 222 84 82 81 171 9 74 74 20 144 71 106 164 117 234 163 235 12 58 184 167 68 145 254 103 0 233 175 219 91 115 45 23 0 0 0 0 0 0 72 40 180 241 104 90 252 242 234 235 240 236 39 250 255 76 167 29 116 156 87 88 207 205 175 125 89 77 12 21 97 61 253 152 65 25 101 5 139 108 225 153 138 24 18 112 100 115 211 39 249 92 242 104 78 15 126 214 21 35 238 183 248 195 174 170 41 249 203 160 8 0 0 1 72 40 180 241 104 90 252 242 234 235 240 236 39 250 255 76 167 29 116 156 87 88 207 205 175 125 89 77 12 21 97 61 253 152 65 25 101 5 139 108 225 153 138 24 18 112 100 115 211 39 249 92 242 104 78 15 126 214 21 35 238 183 248 195 174 170 41 249 203 160 8 0 0 0 56 22 27 151 194 115 92 119 11 236 51 137 144 137 103 129 95 89 105 130 240 243 170 243 35 191 215 206 102 95 172 26 80 149 177 248 238 54 111 45 244 22 23 22 224 158 95 94 118 19 0 0 0 0 0 0 0 1 56 22 27 151 194 115 92 119 11 236 51 137 144 137 103 129 95 89 105 130 240 243 170 243 35 191 215 206 102 95 172 26 80 149 177 248 238 54 111 45 244 22 23 22 224 158 95 94 118 19 0 0 0 0 0 0 0 0 24 156 43 16 56 55 4 61 155 177 58 74 163 225 4 11 131 179 24 1 0 0 0 0 0 1 24 156 43 16 56 55 4 61 155 177 58 74 163 225 4 11 131 179 24 1 0 0 0 0 0 0 104 73 76 101 151 31 35 209 56 36 69 31 173 147 81 94 123 172 22 210 79 45 203 20 140 58 218 46 34 183 138 96 94 97 161 218 71 10 21 254 228 117 64 245 83 14 74 129 103 121 90 57 125 205 210 39 213 162 107 185 36 194 249 86 241 82 226 200 210 202 80 195 105 63 67 249 109 65 100 248 77 32 184 210 162 76 62 215 70 139 167 97 35 196 73 132 172 243 85 144 160 14 20 22 193 1 104 73 76 101 151 31 35 209 56 36 69 31 173 147 81 94 123 172 22 210 79 45 203 20 140 58 218 46 34 183 138 96 94 97 161 218 71 10 21 254 228 117 64 245 83 14 74 129 103 121 90 57 125 205 210 39 213 162 107 185 36 194 249 86 241 82 226 200 210 202 80 195 105 63 67 249 109 65 100 248 77 32 184 210 162 76 62 215 70 139 167 97 35 196 73 132 172 243 85 144 160 14 20 22 193 0 32 126 1 30 104 79 113 99 127 177 76 179 201 53 24 182 29 192 54 96 132 91 248 133 211 86 2 0 0 0 0 0 0 1 32 126 1 30 104 79 113 99 127 177 76 179 201 53 24 182 29 192 54 96 132 91 248 133 211 86 2 0 0 0 0 0 0 0 72 92 159 45 128 70 93 245 63 92 118 241 226 212 23 182 127 131 42 229 253 64 210 240 253 132 150 70 236 28 94 44 2 105 246 1 151 224 138 233 135 254 20 25 124 118 13 182 172 20 197 252 20 174 143 186 57 51 58 222 119 36 51 0 104 163 78 183 107 2 0 0 0 1 72 92 159 45 128 70 93 245 63 92 118 241 226 212 23 182 127 131 42 229 253 64 210 240 253 132 150 70 236 28 94 44 2 105 246 1 151 224 138 233 135 254 20 25 124 118 13 182 172 20 197 252 20 174 143 186 57 51 58 222 119 36 51 0 104 163 78 183 107 2 0 0 0 0 128 74 103 198 93 113 70 83 77 90 199 193 206 145 183 35 249 192 236 161 64 7 17 137 53 0 187 116 255 249 232 191 215 71 6 51 192 57 52 156 221 118 241 145 238 148 141 72 31 162 90 235 117 210 45 34 240 215 118 239 161 128 10 59 244 108 240 132 108 62 94 40 142 165 219 48 78 211 95 143 5 181 44 128 205 117 175 172 46 236 144 98 44 44 86 152 86 44 46 101 89 209 229 168 49 93 54 154 211 126 167 37 43 164 36 251 17 187 90 218 47 68 10 0 0 0 0 0 0 1 128 74 103 198 93 113 70 83 77 90 199 193 206 145 183 35 249 192 236 161 64 7 17 137 53 0 187 116 255 249 232 191 215 71 6 51 192 57 52 156 221 118 241 145 238 148 141 72 31 162 90 235 117 210 45 34 240 215 118 239 161 128 10 59 244 108 240 132 108 62 94 40 142 165 219 48 78 211 95 143 5 181 44 128 205 117 175 172 46 236 144 98 44 44 86 152 86 44 46 101 89 209 229 168 49 93 54 154 211 126 167 37 43 164 36 251 17 187 90 218 47 68 10 0 0 0 0 0 0 0 48 5 35 182 112 113 188 253 125 124 37 72 205 161 238 42 235 141 207 222 101 115 216 55 107 133 114 20 89 39 233 135 120 225 238 214 101 146 108 76 33 35 58 202 67 65 1 0 0 1 48 5 35 182 112 113 188 253 125 124 37 72 205 161 238 42 235 141 207 222 101 115 216 55 107 133 114 20 89 39 233 135 120 225 238 214 101 146 108 76 33 35 58 202 67 65 1 0 0 0 128 104 135 234 221 147 43 69 249 95 82 22 184 215 149 229 138 106 92 255 169 236 121 106 240 235 221 243 154 22 155 148 218 188 88 136 234 72 234 250 14 92 227 117 188 12 118 41 224 174 244 46 222 46 196 200 235 191 13 185 217 77 182 148 203 3 127 173 173 34 254 84 187 72 234 176 92 208 9 125 82 232 207 39 192 114 153 168 166 210 148 43 5 225 117 107 205 99 179 177 46 90 12 119 11 225 27 124 151 136 98 153 156 122 129 197 79 159 225 89 237 180 211 34 198 224 232 1 0 1 128 104 135 234 221 147 43 69 249 95 82 22 184 215 149 229 138 106 92 255 169 236 121 106 240 235 221 243 154 22 155 148 218 188 88 136 234 72 234 250 14 92 227 117 188 12 118 41 224 174 244 46 222 46 196 200 235 191 13 185 217 77 182 148 203 3 127 173 173 34 254 84 187 72 234 176 92 208 9 125 82 232 207 39 192 114 153 168 166 210 148 43 5 225 117 107 205 99 179 177 46 90 12 119 11 225 27 124 151 136 98 153 156 122 129 197 79 159 225 89 237 180 211 34 198 224 232 1 0 0 128 30 16 152 189 248 187 194 106 86 218 107 172 24 210 165 36 4 181 124 54 238 59 132 56 110 109 236 68 95 102 145 133 240 159 128 36 169 4 207 140 229 186 242 94 18 174 89 159 26 138 112 65 245 118 85 137 113 110 126 144 76 37 227 235 138 77 233 26 84 155 51 80 31 201 113 46 222 200 95 96 232 140 13 80 38 36 30 104 180 121 216 89 15 185 161 136 55 32 42 160 149 50 168 225 1 104 50 30 10 3 96 136 60 23 224 146 203 81 219 70 1 0 0 0 0 0 0 0 1 128 30 16 152 189 248 187 194 106 86 218 107 172 24 210 165 36 4 181 124 54 238 59 132 56 110 109 236 68 95 102 145 133 240 159 128 36 169 4 207 140 229 186 242 94 18 174 89 159 26 138 112 65 245 118 85 137 113 110 126 144 76 37 227 235 138 77 233 26 84 155 51 80 31 201 113 46 222 200 95 96 232 140 13 80 38 36 30 104 180 121 216 89 15 185 161 136 55 32 42 160 149 50 168 225 1 104 50 30 10 3 96 136 60 23 224 146 203 81 219 70 1 0 0 0 0 0 0 0 0 32 31 3 148 175 154 99 152 211 246 153 40 92 93 24 93 5 168 109 224 21 185 107 37 219 63 153 164 130 241 93 111 0 1 32 31 3 148 175 154 99 152 211 246 153 40 92 93 24 93 5 168 109 224 21 185 107 37 219 63 153 164 130 241 93 111 0 0 112 73 246 239 200 138 198 5 244 5 61 186 215 203 39 176 220 88 141 123 23 70 239 91 228 24 9 208 86 173 30 190 190 160 205 169 222 186 254 3 42 110 229 120 37 181 245 217 107 172 221 147 223 37 33 9 82 153 101 228 62 236 28 113 251 178 124 157 88 255 13 110 233 60 45 129 160 39 244 17 113 220 114 236 12 12 23 203 127 173 99 182 203 235 40 81 17 163 180 158 157 229 232 88 42 248 234 216 11 207 20 25 51 1 112 73 246 239 200 138 198 5 244 5 61 186 215 203 39 176 220 88 141 123 23 70 239 91 228 24 9 208 86 173 30 190 190 160 205 169 222 186 254 3 42 110 229 120 37 181 245 217 107 172 221 147 223 37 33 9 82 153 101 228 62 236 28 113 251 178 124 157 88 255 13 110 233 60 45 129 160 39 244 17 113 220 114 236 12 12 23 203 127 173 99 182 203 235 40 81 17 163 180 158 157 229 232 88 42 248 234 216 11 207 20 25 51 0 8 39 132 6 0 0 0 0 0 1 8 39 132 6 0 0 0 0 0 0 72 220 180 23 131 143 83 213 131 208 206 205 120 25 87 192 44 119 67 69 124 227 114 112 253 61 85 176 134 4 56 189 104 188 137 70 0 24 85 129 75 88 245 68 129 51 145 7 213 104 238 115 223 7 147 12 4 53 239 245 119 158 197 135 154 106 50 38 170 151 176 21 0 1 72 220 180 23 131 143 83 213 131 208 206 205 120 25 87 192 44 119 67 69 124 227 114 112 253 61 85 176 134 4 56 189 104 188 137 70 0 24 85 129 75 88 245 68 129 51 145 7 213 104 238 115 223 7 147 12 4 53 239 245 119 158 197 135 154 106 50 38 170 151 176 21 0 0 56 53 186 59 167 241 59 136 87 128 215 201 225 137 253 171 55 175 94 153 156 167 180 232 139 32 51 246 11 119 98 59 201 174 243 8 69 82 213 30 147 100 60 26 207 249 44 53 34 200 114 0 0 0 0 0 0 1 56 53 186 59 167 241 59 136 87 128 215 201 225 137 253 171 55 175 94 153 156 167 180 232 139 32 51 246 11 119 98 59 201 174 243 8 69 82 213 30 147 100 60 26 207 249 44 53 34 200 114 0 0 0 0 0 0 0 80 174 62 24 34 239 200 187 235 239 204 93 34 151 115 205 129 228 152 167 94 171 72 91 21 73 128 43 106 226 191 23 128 76 125 32 132 209 72 252 64 195 197 154 199 15 13 192 133 198 108 88 181 61 227 187 44 34 215 108 151 40 54 253 218 203 218 197 100 1 207 108 14 183 168 181 1 75 68 203 52 1 80 174 62 24 34 239 200 187 235 239 204 93 34 151 115 205 129 228 152 167 94 171 72 91 21 73 128 43 106 226 191 23 128 76 125 32 132 209 72 252 64 195 197 154 199 15 13 192 133 198 108 88 181 61 227 187 44 34 215 108 151 40 54 253 218 203 218 197 100 1 207 108 14 183 168 181 1 75 68 203 52 0 104 178 153 248 14 228 148 99 29 41 180 54 4 212 37 168 181 45 110 40 79 241 192 17 133 242 242 158 27 85 230 33 102 187 163 67 188 94 83 9 227 224 31 154 239 89 44 152 114 79 160 147 226 52 244 38 46 88 71 34 217 114 156 13 83 85 223 134 253 133 126 56 188 90 85 65 29 106 94 50 165 88 56 132 55 180 80 212 40 199 4 162 37 213 90 184 228 101 203 7 49 0 0 0 0 1 104 178 153 248 14 228 148 99 29 41 180 54 4 212 37 168 181 45 110 40 79 241 192 17 133 242 242 158 27 85 230 33 102 187 163 67 188 94 83 9 227 224 31 154 239 89 44 152 114 79 160 147 226 52 244 38 46 88 71 34 217 114 156 13 83 85 223 134 253 133 126 56 188 90 85 65 29 106 94 50 165 88 56 132 55 180 80 212 40 199 4 162 37 213 90 184 228 101 203 7 49 0 0 0 0 0 80 38 182 96 145 194 1 121 109 64 49 154 66 199 208 229 235 239 165 41 198 204 230 234 178 15 29 203 140 160 143 49 211 78 57 102 214 114 58 133 221 75 184 224 8 199 190 6 247 208 197 161 3 41 23 120 225 80 183 58 134 227 154 146 238 63 175 177 103 131 253 150 250 82 57 2 3 0 0 0 0 1 80 38 182 96 145 194 1 121 109 64 49 154 66 199 208 229 235 239 165 41 198 204 230 234 178 15 29 203 140 160 143 49 211 78 57 102 214 114 58 133 221 75 184 224 8 199 190 6 247 208 197 161 3 41 23 120 225 80 183 58 134 227 154 146 238 63 175 177 103 131 253 150 250 82 57 2 3 0 0 0 0 0 64 248 119 27 143 213 236 116 221 199 155 29 196 80 96 187 63 97 42 122 209 144 117 56 28 149 170 177 209 56 44 150 204 131 187 222 85 190 214 23 67 242 17 199 67 116 180 19 62 92 46 154 222 244 151 104 165 83 192 191 210 45 2 0 0 1 64 248 119 27 143 213 236 116 221 199 155 29 196 80 96 187 63 97 42 122 209 144 117 56 28 149 170 177 209 56 44 150 204 131 187 222 85 190 214 23 67 242 17 199 67 116 180 19 62 92 46 154 222 244 151 104 165 83 192 191 210 45 2 0 0 0 32 75 182 65 120 225 60 231 204 95 201 188 204 81 75 120 231 176 122 123 44 181 212 75 241 199 197 22 0 0 0 0 0 1 32 75 182 65 120 225 60 231 204 95 201 188 204 81 75 120 231 176 122 123 44 181 212 75 241 199 197 22 0 0 0 0 0 0 72 223 250 238 211 74 58 16 147 125 7 190 218 142 15 49 69 24 56 233 70 213 49 22 223 242 236 38 167 130 195 39 254 92 251 3 205 152 4 121 107 79 85 199 20 69 53 93 242 156 125 37 228 96 255 30 188 96 67 150 203 206 75 217 143 153 171 129 99 51 5 0 0 1 72 223 250 238 211 74 58 16 147 125 7 190 218 142 15 49 69 24 56 233 70 213 49 22 223 242 236 38 167 130 195 39 254 92 251 3 205 152 4 121 107 79 85 199 20 69 53 93 242 156 125 37 228 96 255 30 188 96 67 150 203 206 75 217 143 153 171 129 99 51 5 0 0 0 40 108 135 124 124 29 149 22 174 63 189 26 9 249 247 17 17 89 247 0 255 90 36 201 133 122 164 9 110 235 211 222 139 25 132 124 219 40 148 57 0 1 40 108 135 124 124 29 149 22 174 63 189 26 9 249 247 17 17 89 247 0 255 90 36 201 133 122 164 9 110 235 211 222 139 25 132 124 219 40 148 57 0 0 8 221 214 2 0 0 0 0 0 1 8 221 214 2 0 0 0 0 0 0 64 147 243 38 63 33 71 153 12 98 251 245 150 131 176 144 216 39 46 89 50 223 16 34 113 69 13 67 16 135 235 91 48 79 129 250 166 204 227 58 148 218 46 57 182 34 191 165 85 34 220 7 11 186 11 50 182 83 77 72 179 7 0 0 0 1 64 147 243 38 63 33 71 153 12 98 251 245 150 131 176 144 216 39 46 89 50 223 16 34 113 69 13 67 16 135 235 91 48 79 129 250 166 204 227 58 148 218 46 57 182 34 191 165 85 34 220 7 11 186 11 50 182 83 77 72 179 7 0 0 0 0 120 233 246 77 131 243 68 158 180 136 87 207 157 192 121 128 83 72 237 157 134 56 179 201 1 58 190 146 20 153 238 215 88 195 223 67 97 118 17 130 145 223 169 2 15 100 207 216 142 60 64 52 15 48 69 172 151 212 137 218 247 204 232 97 61 38 179 246 161 46 207 132 202 4 168 89 164 121 208 120 93 104 32 129 66 68 235 47 162 233 166 150 103 24 240 136 140 27 137 9 61 79 35 201 200 190 255 32 23 133 194 43 148 11 47 84 2 0 0 0 0 1 120 233 246 77 131 243 68 158 180 136 87 207 157 192 121 128 83 72 237 157 134 56 179 201 1 58 190 146 20 153 238 215 88 195 223 67 97 118 17 130 145 223 169 2 15 100 207 216 142 60 64 52 15 48 69 172 151 212 137 218 247 204 232 97 61 38 179 246 161 46 207 132 202 4 168 89 164 121 208 120 93 104 32 129 66 68 235 47 162 233 166 150 103 24 240 136 140 27 137 9 61 79 35 201 200 190 255 32 23 133 194 43 148 11 47 84 2 0 0 0 0 0 32 158 132 247 73 243 86 76 181 117 114 74 0 73 167 54 232 186 178 119 62 251 36 87 106 243 46 78 254 30 13 0 0 1 32 158 132 247 73 243 86 76 181 117 114 74 0 73 167 54 232 186 178 119 62 251 36 87 106 243 46 78 254 30 13 0 0 0 32 187 109 237 12 177 145 13 138 110 36 103 212 219 254 32 2 199 207 206 58 33 91 157 82 142 0 0 0 0 0 0 0 1 32 187 109 237 12 177 145 13 138 110 36 103 212 219 254 32 2 199 207 206 58 33 91 157 82 142 0 0 0 0 0 0 0 0 112 191 156 137 40 227 120 81 180 191 249 128 101 54 189 222 126 135 44 172 229 198 254 122 200 254 68 241 155 189 52 134 12 32 127 165 213 33 74 112 219 180 120 124 62 203 145 126 182 239 201 194 229 70 199 78 71 165 89 3 82 85 207 202 83 229 239 95 208 222 39 184 4 206 170 105 230 130 175 81 36 41 97 157 125 234 216 239 63 206 58 107 124 78 26 131 144 70 157 163 62 27 234 177 215 202 140 179 217 0 0 0 0 1 112 191 156 137 40 227 120 81 180 191 249 128 101 54 189 222 126 135 44 172 229 198 254 122 200 254 68 241 155 189 52 134 12 32 127 165 213 33 74 112 219 180 120 124 62 203 145 126 182 239 201 194 229 70 199 78 71 165 89 3 82 85 207 202 83 229 239 95 208 222 39 184 4 206 170 105 230 130 175 81 36 41 97 157 125 234 216 239 63 206 58 107 124 78 26 131 144 70 157 163 62 27 234 177 215 202 140 179 217 0 0 0 0 0 120 255 98 44 67 145 156 67 69 207 144 154 245 114 32 23 127 211 123 148 182 146 150 170 172 74 232 254 188 127 136 34 39 122 230 35 121 2 76 118 160 187 17 37 250 134 176 133 100 139 227 15 230 54 106 167 246 167 233 207 141 247 103 135 96 18 251 188 166 202 113 88 34 38 81 212 236 236 142 153 242 1 12 51 124 236 57 28 83 109 124 63 127 190 114 111 5 105 32 46 141 46 195 82 228 121 27 143 106 94 116 99 98 35 8 0 0 0 0 0 0 1 120 255 98 44 67 145 156 67 69 207 144 154 245 114 32 23 127 211 123 148 182 146 150 170 172 74 232 254 188 127 136 34 39 122 230 35 121 2 76 118 160 187 17 37 250 134 176 133 100 139 227 15 230 54 106 167 246 167 233 207 141 247 103 135 96 18 251 188 166 202 113 88 34 38 81 212 236 236 142 153 242 1 12 51 124 236 57 28 83 109 124 63 127 190 114 111 5 105 32 46 141 46 195 82 228 121 27 143 106 94 116 99 98 35 8 0 0 0 0 0 0 0 32 232 106 75 132 234 67 145 119 175 2 68 218 133 30 27 34 7 172 120 42 19 45 118 178 216 1 0 0 0 0 0 0 1 32 232 106 75 132 234 67 145 119 175 2 68 218 133 30 27 34 7 172 120 42 19 45 118 178 216 1 0 0 0 0 0 0 0 64 129 215 181 185 15 177 200 177 68 80 119 183 36 206 190 141 54 145 230 111 190 97 150 77 141 67 185 87 206 214 237 78 15 79 202 150 147 74 113 9 154 9 23 173 146 190 131 137 247 142 224 174 235 35 57 206 3 0 0 0 0 0 0 0 1 64 129 215 181 185 15 177 200 177 68 80 119 183 36 206 190 141 54 145 230 111 190 97 150 77 141 67 185 87 206 214 237 78 15 79 202 150 147 74 113 9 154 9 23 173 146 190 131 137 247 142 224 174 235 35 57 206 3 0 0 0 0 0 0 0 0 32 115 158 93 203 145 117 229 203 77 183 195 60 46 1 188 230 187 238 14 154 176 183 66 57 250 253 70 58 37 0 0 0 1 32 115 158 93 203 145 117 229 203 77 183 195 60 46 1 188 230 187 238 14 154 176 183 66 57 250 253 70 58 37 0 0 0 0 24 81 129 71 67 43 121 89 51 236 18 78 211 96 141 172 26 113 13 214 3 0 0 0 0 1 24 81 129 71 67 43 121 89 51 236 18 78 211 96 141 172 26 113 13 214 3 0 0 0 0 0 24 184 13 246 1 153 149 55 198 59 23 173 215 119 87 65 163 114 196 32 40 213 121 0 0 1 24 184 13 246 1 153 149 55 198 59 23 173 215 119 87 65 163 114 196 32 40 213 121 0 0 0 32 56 51 141 41 47 230 78 216 176 139 28 23 160 170 28 45 110 124 64 37 171 195 108 121 74 182 76 40 76 153 115 0 1 32 56 51 141 41 47 230 78 216 176 139 28 23 160 170 28 45 110 124 64 37 171 195 108 121 74 182 76 40 76 153 115 0 0 32 206 242 236 149 72 96 46 45 248 108 12 136 166 194 52 138 152 63 46 130 98 126 192 209 228 24 24 197 243 7 0 0 1 32 206 242 236 149 72 96 46 45 248 108 12 136 166 194 52 138 152 63 46 130 98 126 192 209 228 24 24 197 243 7 0 0 0 104 163 224 244 5 84 160 193 30 20 248 69 99 186 48 205 24 55 21 110 164 203 99 211 59 80 177 211 86 41 161 229 184 106 19 96 95 57 76 140 135 150 249 39 235 242 249 52 35 6 105 190 17 117 228 226 214 214 171 123 84 78 178 176 91 241 160 229 1 232 67 196 8 201 235 118 130 80 124 105 29 101 75 30 179 181 153 56 118 147 86 245 65 10 214 206 110 133 122 248 252 15 53 12 0 1 104 163 224 244 5 84 160 193 30 20 248 69 99 186 48 205 24 55 21 110 164 203 99 211 59 80 177 211 86 41 161 229 184 106 19 96 95 57 76 140 135 150 249 39 235 242 249 52 35 6 105 190 17 117 228 226 214 214 171 123 84 78 178 176 91 241 160 229 1 232 67 196 8 201 235 118 130 80 124 105 29 101 75 30 179 181 153 56 118 147 86 245 65 10 214 206 110 133 122 248 252 15 53 12 0 0 56 255 163 247 43 209 230 164 208 61 194 65 9 8 102 145 97 240 236 201 123 138 71 245 15 204 218 185 57 76 20 213 174 59 153 22 62 121 255 64 38 76 67 69 50 49 114 127 89 242 171 78 13 84 189 144 206 1 56 255 163 247 43 209 230 164 208 61 194 65 9 8 102 145 97 240 236 201 123 138 71 245 15 204 218 185 57 76 20 213 174 59 153 22 62 121 255 64 38 76 67 69 50 49 114 127 89 242 171 78 13 84 189 144 206 0 64 119 123 244 71 66 212 59 231 215 217 150 174 254 235 5 68 31 31 6 176 61 197 15 162 18 140 92 194 120 2 15 65 53 175 46 99 56 24 73 7 37 185 106 245 175 110 29 253 204 28 202 76 47 79 71 204 251 4 48 167 1 0 0 0 1 64 119 123 244 71 66 212 59 231 215 217 150 174 254 235 5 68 31 31 6 176 61 197 15 162 18 140 92 194 120 2 15 65 53 175 46 99 56 24 73 7 37 185 106 245 175 110 29 253 204 28 202 76 47 79 71 204 251 4 48 167 1 0 0 0 0 40 75 92 25 115 221 208 198 30 142 204 73 223 50 228 83 175 70 246 95 204 121 169 116 174 231 117 55 245 122 146 164 239 74 119 247 71 4 100 3 243 1 40 75 92 25 115 221 208 198 30 142 204 73 223 50 228 83 175 70 246 95 204 121 169 116 174 231 117 55 245 122 146 164 239 74 119 247 71 4 100 3 243 0 16 34 19 120 45 63 194 247 76 181 223 195 16 0 0 0 0 1 16 34 19 120 45 63 194 247 76 181 223 195 16 0 0 0 0 0 120 11 156 157 89 152 7 19 248 49 41 66 116 237 10 201 152 231 23 143 156 186 202 203 178 43 1 204 30 223 30 82 205 180 255 123 84 194 132 200 55 172 127 23 130 112 165 163 165 42 122 249 39 165 158 69 42 153 176 150 166 240 46 132 80 211 8 120 35 97 238 127 32 91 232 38 236 223 213 67 53 103 162 194 187 151 60 152 119 172 25 69 23 189 153 199 219 236 157 195 152 26 202 31 27 199 10 79 34 126 168 67 114 24 246 235 163 169 176 2 0 1 120 11 156 157 89 152 7 19 248 49 41 66 116 237 10 201 152 231 23 143 156 186 202 203 178 43 1 204 30 223 30 82 205 180 255 123 84 194 132 200 55 172 127 23 130 112 165 163 165 42 122 249 39 165 158 69 42 153 176 150 166 240 46 132 80 211 8 120 35 97 238 127 32 91 232 38 236 223 213 67 53 103 162 194 187 151 60 152 119 172 25 69 23 189 153 199 219 236 157 195 152 26 202 31 27 199 10 79 34 126 168 67 114 24 246 235 163 169 176 2 0 0 88 85 223 220 13 86 122 92 125 254 224 25 165 190 213 4 132 224 45 245 246 242 4 21 101 215 192 193 89 76 244 92 59 156 26 236 182 254 202 196 35 75 32 109 229 252 167 15 126 64 249 191 76 96 115 179 17 42 165 113 135 249 231 21 159 208 162 179 200 212 213 61 123 49 118 34 59 181 1 182 39 112 251 16 0 0 0 0 0 1 88 85 223 220 13 86 122 92 125 254 224 25 165 190 213 4 132 224 45 245 246 242 4 21 101 215 192 193 89 76 244 92 59 156 26 236 182 254 202 196 35 75 32 109 229 252 167 15 126 64 249 191 76 96 115 179 17 42 165 113 135 249 231 21 159 208 162 179 200 212 213 61 123 49 118 34 59 181 1 182 39 112 251 16 0 0 0 0 0 0 56 241 153 124 222 255 91 80 137 188 25 206 200 154 27 122 16 125 75 240 248 246 78 65 142 23 205 193 163 87 157 134 225 91 123 69 215 210 244 123 101 159 224 170 194 255 111 207 183 177 8 44 102 228 238 181 2 1 56 241 153 124 222 255 91 80 137 188 25 206 200 154 27 122 16 125 75 240 248 246 78 65 142 23 205 193 163 87 157 134 225 91 123 69 215 210 244 123 101 159 224 170 194 255 111 207 183 177 8 44 102 228 238 181 2 0 88 108 208 238 121 156 133 32 223 68 75 136 121 125 29 189 121 101 228 164 37 65 109 220 250 136 48 233 198 101 96 135 47 117 233 2 196 191 211 238 100 182 234 243 0 91 97 184 199 182 220 252 38 146 252 212 245 32 52 172 255 55 60 67 104 138 139 119 31 23 22 151 0 79 220 46 31 165 72 73 119 91 0 0 0 0 0 0 0 1 88 108 208 238 121 156 133 32 223 68 75 136 121 125 29 189 121 101 228 164 37 65 109 220 250 136 48 233 198 101 96 135 47 117 233 2 196 191 211 238 100 182 234 243 0 91 97 184 199 182 220 252 38 146 252 212 245 32 52 172 255 55 60 67 104 138 139 119 31 23 22 151 0 79 220 46 31 165 72 73 119 91 0 0 0 0 0 0 0 0 24 213 179 45 133 224 12 22 86 217 206 37 101 183 225 74 147 210 205 0 173 128 31 240 53 1 24 213 179 45 133 224 12 22 86 217 206 37 101 183 225 74 147 210 205 0 173 128 31 240 53 0 80 90 55 247 101 97 91 255 60 228 172 4 69 150 197 105 130 9 216 50 222 145 121 93 91 122 8 47 193 246 47 193 9 162 74 30 3 151 221 91 204 206 19 231 186 13 155 24 132 70 140 134 148 236 198 3 189 248 97 75 45 121 50 215 87 150 150 229 138 138 91 126 104 37 101 138 0 0 0 0 0 1 80 90 55 247 101 97 91 255 60 228 172 4 69 150 197 105 130 9 216 50 222 145 121 93 91 122 8 47 193 246 47 193 9 162 74 30 3 151 221 91 204 206 19 231 186 13 155 24 132 70 140 134 148 236 198 3 189 248 97 75 45 121 50 215 87 150 150 229 138 138 91 126 104 37 101 138 0 0 0 0 0 0 120 115 168 21 247 112 94 184 201 248 149 252 240 29 141 154 150 50 97 41 31 56 85 247 163 55 145 23 152 45 131 53 22 104 104 156 123 120 164 40 242 48 192 145 28 44 4 132 15 113 134 148 171 248 224 123 182 163 113 254 55 6 161 136 98 198 188 165 53 144 141 184 125 14 170 160 0 214 41 35 209 54 31 123 30 107 49 216 97 58 154 19 33 192 193 123 112 203 64 156 187 211 15 178 212 189 77 250 84 218 228 148 93 53 115 124 112 0 0 0 0 1 120 115 168 21 247 112 94 184 201 248 149 252 240 29 141 154 150 50 97 41 31 56 85 247 163 55 145 23 152 45 131 53 22 104 104 156 123 120 164 40 242 48 192 145 28 44 4 132 15 113 134 148 171 248 224 123 182 163 113 254 55 6 161 136 98 198 188 165 53 144 141 184 125 14 170 160 0 214 41 35 209 54 31 123 30 107 49 216 97 58 154 19 33 192 193 123 112 203 64 156 187 211 15 178 212 189 77 250 84 218 228 148 93 53 115 124 112 0 0 0 0 0 96 124 82 249 217 103 152 210 105 101 179 152 26 43 32 241 184 13 170 187 237 6 89 158 142 202 72 9 130 229 186 22 231 141 253 32 147 157 150 169 239 239 208 239 192 162 97 2 190 76 255 147 85 133 38 206 102 92 234 167 23 138 70 25 133 14 226 134 237 118 29 40 218 196 187 239 239 178 225 158 55 21 189 63 14 233 211 32 249 204 188 227 125 20 0 0 0 1 96 124 82 249 217 103 152 210 105 101 179 152 26 43 32 241 184 13 170 187 237 6 89 158 142 202 72 9 130 229 186 22 231 141 253 32 147 157 150 169 239 239 208 239 192 162 97 2 190 76 255 147 85 133 38 206 102 92 234 167 23 138 70 25 133 14 226 134 237 118 29 40 218 196 187 239 239 178 225 158 55 21 189 63 14 233 211 32 249 204 188 227 125 20 0 0 0 0 128 177 60 161 102 138 146 247 69 176 188 18 92 242 96 135 152 103 107 37 160 86 206 146 191 253 129 245 98 150 12 55 16 198 207 141 173 254 8 189 100 126 62 201 64 132 146 143 251 54 46 248 170 236 238 107 85 4 232 188 238 154 172 221 156 205 139 30 154 186 201 53 77 80 85 0 164 126 169 125 95 209 214 94 114 253 109 143 69 147 26 150 229 49 67 202 41 185 188 58 222 135 170 143 147 169 56 199 253 208 108 79 241 186 223 39 47 118 166 2 119 183 150 198 249 52 6 0 0 1 128 177 60 161 102 138 146 247 69 176 188 18 92 242 96 135 152 103 107 37 160 86 206 146 191 253 129 245 98 150 12 55 16 198 207 141 173 254 8 189 100 126 62 201 64 132 146 143 251 54 46 248 170 236 238 107 85 4 232 188 238 154 172 221 156 205 139 30 154 186 201 53 77 80 85 0 164 126 169 125 95 209 214 94 114 253 109 143 69 147 26 150 229 49 67 202 41 185 188 58 222 135 170 143 147 169 56 199 253 208 108 79 241 186 223 39 47 118 166 2 119 183 150 198 249 52 6 0 0 0 48 121 50 208 121 198 113 59 191 8 122 194 42 131 235 44 67 197 194 251 149 183 60 30 84 243 193 92 233 207 81 221 84 214 60 215 107 83 0 178 5 171 252 181 246 155 13 0 0 1 48 121 50 208 121 198 113 59 191 8 122 194 42 131 235 44 67 197 194 251 149 183 60 30 84 243 193 92 233 207 81 221 84 214 60 215 107 83 0 178 5 171 252 181 246 155 13 0 0 0 56 166 53 117 196 161 229 248 189 4 118 22 159 55 250 249 52 240 65 18 192 100 153 107 30 88 36 106 130 0 220 222 225 150 0 193 132 255 124 153 51 146 110 36 253 172 218 35 80 8 122 3 16 206 124 33 42 1 56 166 53 117 196 161 229 248 189 4 118 22 159 55 250 249 52 240 65 18 192 100 153 107 30 88 36 106 130 0 220 222 225 150 0 193 132 255 124 153 51 146 110 36 253 172 218 35 80 8 122 3 16 206 124 33 42 0 88 106 68 182 59 178 196 127 243 157 52 191 25 43 145 111 238 141 79 101 131 239 1 63 142 28 0 132 32 245 126 60 32 214 17 147 90 227 5 98 15 248 217 212 142 124 197 131 140 236 233 147 37 78 121 156 176 23 194 249 199 210 9 238 29 123 193 74 93 96 82 46 195 174 189 189 138 161 169 130 51 227 225 203 252 54 230 59 1 1 88 106 68 182 59 178 196 127 243 157 52 191 25 43 145 111 238 141 79 101 131 239 1 63 142 28 0 132 32 245 126 60 32 214 17 147 90 227 5 98 15 248 217 212 142 124 197 131 140 236 233 147 37 78 121 156 176 23 194 249 199 210 9 238 29 123 193 74 93 96 82 46 195 174 189 189 138 161 169 130 51 227 225 203 252 54 230 59 1 0 16 91 51 80 52 153 106 15 96 178 33 98 180 208 107 15 0 1 16 91 51 80 52 153 106 15 96 178 33 98 180 208 107 15 0 0 96 146 234 254 250 136 181 23 108 220 189 235 39 183 250 50 211 23 108 166 159 135 169 94 214 225 32 1 13 78 240 181 132 87 93 98 20 18 115 26 247 31 145 41 94 224 210 84 160 74 211 209 64 225 64 180 241 208 245 103 182 102 43 178 61 140 91 159 243 48 233 2 13 121 164 43 215 31 105 2 197 114 135 82 116 240 53 2 223 62 194 1 0 0 0 0 0 1 96 146 234 254 250 136 181 23 108 220 189 235 39 183 250 50 211 23 108 166 159 135 169 94 214 225 32 1 13 78 240 181 132 87 93 98 20 18 115 26 247 31 145 41 94 224 210 84 160 74 211 209 64 225 64 180 241 208 245 103 182 102 43 178 61 140 91 159 243 48 233 2 13 121 164 43 215 31 105 2 197 114 135 82 116 240 53 2 223 62 194 1 0 0 0 0 0 0 40 185 152 217 29 34 198 116 253 71 146 190 251 229 82 88 248 120 47 21 213 170 170 112 236 72 88 154 181 235 239 69 222 48 2 0 0 0 0 0 0 1 40 185 152 217 29 34 198 116 253 71 146 190 251 229 82 88 248 120 47 21 213 170 170 112 236 72 88 154 181 235 239 69 222 48 2 0 0 0 0 0 0 0 24 29 136 104 174 70 11 214 125 207 165 237 74 237 199 33 28 122 6 213 243 25 0 0 0 1 24 29 136 104 174 70 11 214 125 207 165 237 74 237 199 33 28 122 6 213 243 25 0 0 0 0 56 208 160 113 38 148 89 13 191 95 94 203 140 7 30 57 94 69 180 223 237 240 172 171 247 162 165 245 245 5 100 24 96 24 245 62 100 128 18 89 116 205 89 200 251 14 195 113 223 134 107 202 24 7 0 0 0 1 56 208 160 113 38 148 89 13 191 95 94 203 140 7 30 57 94 69 180 223 237 240 172 171 247 162 165 245 245 5 100 24 96 24 245 62 100 128 18 89 116 205 89 200 251 14 195 113 223 134 107 202 24 7 0 0 0 0 24 164 26 119 125 80 143 88 12 173 143 157 18 207 147 18 133 102 5 0 0 0 0 0 0 1 24 164 26 119 125 80 143 88 12 173 143 157 18 207 147 18 133 102 5 0 0 0 0 0 0 0 80 240 91 93 80 200 2 55 132 40 130 206 143 31 138 22 6 196 227 42 127 4 69 60 97 99 42 199 161 115 16 243 173 96 104 227 89 184 61 55 91 197 16 30 116 69 157 9 62 186 27 47 108 196 231 54 53 86 238 78 204 233 137 113 247 34 18 212 144 7 152 39 169 110 99 156 198 1 0 0 0 1 80 240 91 93 80 200 2 55 132 40 130 206 143 31 138 22 6 196 227 42 127 4 69 60 97 99 42 199 161 115 16 243 173 96 104 227 89 184 61 55 91 197 16 30 116 69 157 9 62 186 27 47 108 196 231 54 53 86 238 78 204 233 137 113 247 34 18 212 144 7 152 39 169 110 99 156 198 1 0 0 0 0 64 164 36 243 234 38 238 24 36 226 207 250 29 63 195 44 89 189 228 110 154 71 14 125 43 159 59 53 176 232 184 148 203 158 152 210 156 44 195 201 57 165 81 190 91 35 122 171 243 195 109 195 142 67 89 184 14 18 25 0 0 0 0 0 0 1 64 164 36 243 234 38 238 24 36 226 207 250 29 63 195 44 89 189 228 110 154 71 14 125 43 159 59 53 176 232 184 148 203 158 152 210 156 44 195 201 57 165 81 190 91 35 122 171 243 195 109 195 142 67 89 184 14 18 25 0 0 0 0 0 0 0 40 168 114 107 133 10 23 139 104 205 120 166 131 193 1 223 63 29 201 98 120 19 62 117 38 159 115 66 105 171 210 74 142 248 0 0 0 0 0 0 0 1 40 168 114 107 133 10 23 139 104 205 120 166 131 193 1 223 63 29 201 98 120 19 62 117 38 159 115 66 105 171 210 74 142 248 0 0 0 0 0 0 0 0 8 188 118 208 125 103 29 0 0 1 8 188 118 208 125 103 29 0 0 0 80 93 36 106 167 48 129 182 121 19 12 119 143 58 46 98 169 218 191 211 74 102 51 142 112 70 65 240 134 104 65 202 183 210 160 25 144 232 17 193 129 249 86 192 216 157 46 31 9 89 42 0 255 32 223 228 36 241 177 228 240 221 30 38 173 183 42 128 15 55 48 187 131 109 78 5 178 203 7 0 0 1 80 93 36 106 167 48 129 182 121 19 12 119 143 58 46 98 169 218 191 211 74 102 51 142 112 70 65 240 134 104 65 202 183 210 160 25 144 232 17 193 129 249 86 192 216 157 46 31 9 89 42 0 255 32 223 228 36 241 177 228 240 221 30 38 173 183 42 128 15 55 48 187 131 109 78 5 178 203 7 0 0 0 104 209 253 145 149 140 101 72 59 80 61 95 87 223 103 111 142 120 156 200 160 119 178 162 183 243 3 59 250 14 151 250 48 55 97 183 44 47 166 154 9 238 68 13 148 84 67 106 86 157 132 235 187 35 17 121 154 165 226 136 96 27 177 250 145 13 38 0 109 173 58 16 189 45 0 156 64 166 8 87 150 211 191 66 117 148 187 227 116 144 40 22 160 105 172 245 89 17 98 157 251 122 154 0 0 1 104 209 253 145 149 140 101 72 59 80 61 95 87 223 103 111 142 120 156 200 160 119 178 162 183 243 3 59 250 14 151 250 48 55 97 183 44 47 166 154 9 238 68 13 148 84 67 106 86 157 132 235 187 35 17 121 154 165 226 136 96 27 177 250 145 13 38 0 109 173 58 16 189 45 0 156 64 166 8 87 150 211 191 66 117 148 187 227 116 144 40 22 160 105 172 245 89 17 98 157 251 122 154 0 0 0 96 48 216 197 206 211 163 26 178 30 38 25 126 254 218 154 197 147 60 114 177 112 98 153 149 94 247 85 223 187 252 210 64 20 63 98 66 201 175 4 146 53 51 161 164 120 186 172 160 189 77 68 186 110 221 45 4 254 96 67 66 66 64 145 122 236 241 192 130 240 110 229 191 58 172 70 147 64 128 67 77 37 143 90 168 105 183 130 40 128 162 204 0 0 0 0 0 1 96 48 216 197 206 211 163 26 178 30 38 25 126 254 218 154 197 147 60 114 177 112 98 153 149 94 247 85 223 187 252 210 64 20 63 98 66 201 175 4 146 53 51 161 164 120 186 172 160 189 77 68 186 110 221 45 4 254 96 67 66 66 64 145 122 236 241 192 130 240 110 229 191 58 172 70 147 64 128 67 77 37 143 90 168 105 183 130 40 128 162 204 0 0 0 0 0 0 24 176 183 71 106 140 200 146 60 201 141 49 175 206 219 24 51 141 203 213 202 124 18 0 0 1 24 176 183 71 106 140 200 146 60 201 141 49 175 206 219 24 51 141 203 213 202 124 18 0 0 0 32 97 221 208 156 227 180 222 58 51 5 156 2 70 25 102 197 16 16 222 115 157 90 121 207 16 211 217 208 2 0 0 0 1 32 97 221 208 156 227 180 222 58 51 5 156 2 70 25 102 197 16 16 222 115 157 90 121 207 16 211 217 208 2 0 0 0 0 112 178 156 236 219 98 243 32 106 184 211 76 115 58 138 184 11 243 158 111 214 180 249 75 209 228 102 1 198 201 169 202 134 82 247 29 60 251 130 101 5 79 254 236 4 3 154 24 213 80 110 237 105 114 57 175 148 37 189 215 96 26 164 159 215 189 91 213 117 182 250 78 196 91 184 197 122 91 11 110 49 145 65 35 242 27 150 116 151 97 138 84 129 122 101 163 101 143 206 236 240 17 99 91 63 34 187 4 0 0 0 0 0 1 112 178 156 236 219 98 243 32 106 184 211 76 115 58 138 184 11 243 158 111 214 180 249 75 209 228 102 1 198 201 169 202 134 82 247 29 60 251 130 101 5 79 254 236 4 3 154 24 213 80 110 237 105 114 57 175 148 37 189 215 96 26 164 159 215 189 91 213 117 182 250 78 196 91 184 197 122 91 11 110 49 145 65 35 242 27 150 116 151 97 138 84 129 122 101 163 101 143 206 236 240 17 99 91 63 34 187 4 0 0 0 0 0 0 16 191 50 248 33 176 205 97 154 211 182 118 170 186 32 76 1 1 16 191 50 248 33 176 205 97 154 211 182 118 170 186 32 76 1 0 48 234 193 100 178 9 208 13 92 237 227 179 241 244 131 30 214 22 128 221 109 129 32 221 92 143 17 196 16 142 53 151 122 200 63 163 198 197 112 127 42 47 2 0 0 0 0 0 0 1 48 234 193 100 178 9 208 13 92 237 227 179 241 244 131 30 214 22 128 221 109 129 32 221 92 143 17 196 16 142 53 151 122 200 63 163 198 197 112 127 42 47 2 0 0 0 0 0 0 0 40 165 3 177 221 137 96 40 2 95 239 12 147 159 69 92 8 226 226 89 13 220 87 111 111 4 46 185 191 135 108 64 28 98 137 121 69 157 147 3 0 1 40 165 3 177 221 137 96 40 2 95 239 12 147 159 69 92 8 226 226 89 13 220 87 111 111 4 46 185 191 135 108 64 28 98 137 121 69 157 147 3 0 0 88 117 70 136 141 37 22 10 38 199 136 67 121 78 100 165 189 58 199 68 147 53 35 88 254 145 48 3 64 111 49 252 79 215 24 85 125 88 7 197 53 75 129 196 177 222 97 246 145 156 189 140 144 166 41 155 175 68 115 133 179 126 64 86 56 38 73 200 37 103 6 154 47 83 59 156 31 165 8 192 161 64 77 224 85 1 0 0 0 1 88 117 70 136 141 37 22 10 38 199 136 67 121 78 100 165 189 58 199 68 147 53 35 88 254 145 48 3 64 111 49 252 79 215 24 85 125 88 7 197 53 75 129 196 177 222 97 246 145 156 189 140 144 166 41 155 175 68 115 133 179 126 64 86 56 38 73 200 37 103 6 154 47 83 59 156 31 165 8 192 161 64 77 224 85 1 0 0 0 0 48 217 185 213 61 101 246 30 87 9 40 115 28 155 141 207 255 17 194 181 7 208 69 15 189 18 161 29 215 47 247 4 172 133 64 239 27 206 90 55 197 113 0 0 0 0 0 0 0 1 48 217 185 213 61 101 246 30 87 9 40 115 28 155 141 207 255 17 194 181 7 208 69 15 189 18 161 29 215 47 247 4 172 133 64 239 27 206 90 55 197 113 0 0 0 0 0 0 0 0 56 148 182 61 42 123 22 99 146 228 21 87 117 190 75 48 0 97 189 188 28 85 193 232 154 144 129 19 107 255 92 192 179 73 21 211 208 243 243 72 10 53 231 255 190 241 19 69 17 2 153 53 8 39 246 0 0 1 56 148 182 61 42 123 22 99 146 228 21 87 117 190 75 48 0 97 189 188 28 85 193 232 154 144 129 19 107 255 92 192 179 73 21 211 208 243 243 72 10 53 231 255 190 241 19 69 17 2 153 53 8 39 246 0 0 0 56 211 66 149 196 5 244 108 154 21 75 148 133 24 12 252 29 159 127 240 191 48 35 202 86 177 34 52 193 54 229 170 58 106 119 182 50 240 221 151 21 237 110 249 225 73 237 49 54 255 10 114 182 126 107 8 0 1 56 211 66 149 196 5 244 108 154 21 75 148 133 24 12 252 29 159 127 240 191 48 35 202 86 177 34 52 193 54 229 170 58 106 119 182 50 240 221 151 21 237 110 249 225 73 237 49 54 255 10 114 182 126 107 8 0 0 104 225 214 120 250 248 166 189 72 25 10 51 38 36 179 73 86 127 210 96 225 42 108 183 54 154 102 128 235 61 79 169 19 33 27 197 27 140 126 108 68 180 57 222 96 50 135 137 200 40 109 22 3 187 139 78 175 226 173 222 38 56 155 201 55 29 54 110 130 125 243 53 89 135 235 66 91 26 131 150 14 181 180 220 56 68 157 222 65 169 237 15 194 167 35 49 59 236 93 240 247 1 0 0 0 1 104 225 214 120 250 248 166 189 72 25 10 51 38 36 179 73 86 127 210 96 225 42 108 183 54 154 102 128 235 61 79 169 19 33 27 197 27 140 126 108 68 180 57 222 96 50 135 137 200 40 109 22 3 187 139 78 175 226 173 222 38 56 155 201 55 29 54 110 130 125 243 53 89 135 235 66 91 26 131 150 14 181 180 220 56 68 157 222 65 169 237 15 194 167 35 49 59 236 93 240 247 1 0 0 0 0 72 250 13 100 76 198 39 97 190 132 34 30 132 205 55 142 174 37 28 5 136 138 69 4 127 203 225 200 100 221 206 243 94 81 111 236 255 188 143 231 143 35 187 81 173 188 250 232 196 70 175 70 188 195 241 113 46 158 102 170 214 243 177 164 189 186 2 0 0 0 0 0 0 1 72 250 13 100 76 198 39 97 190 132 34 30 132 205 55 142 174 37 28 5 136 138 69 4 127 203 225 200 100 221 206 243 94 81 111 236 255 188 143 231 143 35 187 81 173 188 250 232 196 70 175 70 188 195 241 113 46 158 102 170 214 243 177 164 189 186 2 0 0 0 0 0 0 0 16 252 62 17 105 107 27 138 254 209 166 253 232 14 173 53 0 1 16 252 62 17 105 107 27 138 254 209 166 253 232 14 173 53 0 0 16 248 20 114 16 45 167 199 205 247 93 60 1 0 0 0 0 1 16 248 20 114 16 45 167 199 205 247 93 60 1 0 0 0 0 0 128 68 85 139 65 128 103 40 178 143 96 39 160 16 180 192 162 49 134 53 77 80 87 249 241 72 43 118 116 184 230 72 29 217 203 233 243 99 73 223 120 79 37 252 19 42 245 193 177 160 241 111 129 21 196 151 106 142 158 95 161 24 140 154 174 72 129 49 87 117 19 229 253 93 146 82 164 63 11 89 51 145 182 224 167 87 85 133 130 24 56 22 86 126 37 63 50 11 25 59 22 7 198 60 94 176 166 72 203 118 45 191 236 253 8 4 237 208 247 95 191 61 131 45 100 233 41 140 1 1 128 68 85 139 65 128 103 40 178 143 96 39 160 16 180 192 162 49 134 53 77 80 87 249 241 72 43 118 116 184 230 72 29 217 203 233 243 99 73 223 120 79 37 252 19 42 245 193 177 160 241 111 129 21 196 151 106 142 158 95 161 24 140 154 174 72 129 49 87 117 19 229 253 93 146 82 164 63 11 89 51 145 182 224 167 87 85 133 130 24 56 22 86 126 37 63 50 11 25 59 22 7 198 60 94 176 166 72 203 118 45 191 236 253 8 4 237 208 247 95 191 61 131 45 100 233 41 140 1 0 40 171 175 7 24 85 197 52 53 222 109 116 70 7 33 47 129 85 73 230 121 23 188 153 132 54 221 247 177 60 250 118 199 113 48 0 0 0 0 0 0 1 40 171 175 7 24 85 197 52 53 222 109 116 70 7 33 47 129 85 73 230 121 23 188 153 132 54 221 247 177 60 250 118 199 113 48 0 0 0 0 0 0 0 24 93 217 212 50 244 177 120 129 193 148 208 62 51 48 197 29 12 127 5 133 232 174 163 14 1 24 93 217 212 50 244 177 120 129 193 148 208 62 51 48 197 29 12 127 5 133 232 174 163 14 0 104 61 140 155 145 23 121 180 150 193 253 181 78 221 177 28 155 147 231 109 135 40 213 10 176 7 92 102 36 228 91 74 59 128 90 66 174 228 143 117 219 65 92 198 227 147 31 210 199 101 130 185 96 20 234 102 37 117 134 38 231 28 208 231 74 69 32 133 140 236 129 186 142 89 0 72 223 168 63 132 85 4 58 183 202 56 212 86 111 8 7 182 11 108 42 143 34 30 250 94 6 24 226 5 0 1 104 61 140 155 145 23 121 180 150 193 253 181 78 221 177 28 155 147 231 109 135 40 213 10 176 7 92 102 36 228 91 74 59 128 90 66 174 228 143 117 219 65 92 198 227 147 31 210 199 101 130 185 96 20 234 102 37 117 134 38 231 28 208 231 74 69 32 133 140 236 129 186 142 89 0 72 223 168 63 132 85 4 58 183 202 56 212 86 111 8 7 182 11 108 42 143 34 30 250 94 6 24 226 5 0 0 104 69 203 211 226 232 194 190 174 38 42 219 202 126 170 213 67 251 214 240 5 57 56 204 220 229 22 83 177 58 244 203 158 220 19 118 48 28 104 202 235 222 18 48 27 53 30 213 133 250 43 151 110 53 51 81 104 66 224 80 32 48 197 127 8 196 143 211 86 42 231 40 1 196 225 20 87 198 99 207 33 242 133 186 174 87 131 82 161 85 98 41 79 235 6 54 208 79 63 0 0 0 0 0 0 1 104 69 203 211 226 232 194 190 174 38 42 219 202 126 170 213 67 251 214 240 5 57 56 204 220 229 22 83 177 58 244 203 158 220 19 118 48 28 104 202 235 222 18 48 27 53 30 213 133 250 43 151 110 53 51 81 104 66 224 80 32 48 197 127 8 196 143 211 86 42 231 40 1 196 225 20 87 198 99 207 33 242 133 186 174 87 131 82 161 85 98 41 79 235 6 54 208 79 63 0 0 0 0 0 0 0 8 106 133 253 254 0 0 0 0 1 8 106 133 253 254 0 0 0 0 0 40 52 160 46 168 248 117 14 87 213 169 244 54 52 54 90 204 139 227 70 129 237 255 102 107 43 17 92 104 188 166 27 224 59 206 1 0 0 0 0 0 1 40 52 160 46 168 248 117 14 87 213 169 244 54 52 54 90 204 139 227 70 129 237 255 102 107 43 17 92 104 188 166 27 224 59 206 1 0 0 0 0 0 0 120 181 140 78 163 1 144 166 35 223 120 26 62 194 182 189 188 203 150 222 242 105 153 199 190 59 209 251 150 143 51 233 52 50 171 137 94 76 60 155 162 163 194 72 102 39 206 211 44 149 8 71 7 3 14 238 150 49 199 209 147 173 71 223 95 145 84 45 137 227 252 43 100 85 213 9 217 99 70 100 168 88 110 229 244 46 8 112 7 141 228 169 214 105 143 254 11 226 135 101 6 67 255 70 224 194 81 96 193 178 170 189 80 169 153 245 174 120 167 5 0 1 120 181 140 78 163 1 144 166 35 223 120 26 62 194 182 189 188 203 150 222 242 105 153 199 190 59 209 251 150 143 51 233 52 50 171 137 94 76 60 155 162 163 194 72 102 39 206 211 44 149 8 71 7 3 14 238 150 49 199 209 147 173 71 223 95 145 84 45 137 227 252 43 100 85 213 9 217 99 70 100 168 88 110 229 244 46 8 112 7 141 228 169 214 105 143 254 11 226 135 101 6 67 255 70 224 194 81 96 193 178 170 189 80 169 153 245 174 120 167 5 0 0 32 19 169 230 106 158 164 68 252 228 52 75 229 81 25 134 88 61 171 29 148 225 103 206 90 122 156 116 158 229 80 62 7 1 32 19 169 230 106 158 164 68 252 228 52 75 229 81 25 134 88 61 171 29 148 225 103 206 90 122 156 116 158 229 80 62 7 0 96 44 24 45 150 1 57 124 51 120 88 192 53 82 3 14 197 181 78 62 96 149 139 236 70 23 91 206 58 4 12 63 75 51 192 197 2 242 185 178 73 152 109 161 60 142 161 171 63 201 195 243 198 2 124 119 14 189 184 21 26 90 196 117 3 207 78 196 78 191 210 218 232 185 4 72 102 10 124 94 142 17 14 238 243 191 213 250 160 226 11 56 213 156 15 0 0 1 96 44 24 45 150 1 57 124 51 120 88 192 53 82 3 14 197 181 78 62 96 149 139 236 70 23 91 206 58 4 12 63 75 51 192 197 2 242 185 178 73 152 109 161 60 142 161 171 63 201 195 243 198 2 124 119 14 189 184 21 26 90 196 117 3 207 78 196 78 191 210 218 232 185 4 72 102 10 124 94 142 17 14 238 243 191 213 250 160 226 11 56 213 156 15 0 0 0 16 5 128 98 100 111 201 242 99 239 114 208 3 48 1 0 0 1 16 5 128 98 100 111 201 242 99 239 114 208 3 48 1 0 0 0 64 55 164 28 11 235 113 86 122 52 237 225 241 179 197 83 95 114 107 69 13 182 58 173 152 229 230 108 171 135 2 108 102 81 246 165 202 47 238 229 240 109 119 151 6 36 92 18 67 160 204 138 149 79 36 130 164 116 48 77 57 61 42 21 0 1 64 55 164 28 11 235 113 86 122 52 237 225 241 179 197 83 95 114 107 69 13 182 58 173 152 229 230 108 171 135 2 108 102 81 246 165 202 47 238 229 240 109 119 151 6 36 92 18 67 160 204 138 149 79 36 130 164 116 48 77 57 61 42 21 0 0 48 94 61 43 8 236 81 175 216 38 46 240 164 24 125 150 38 110 153 168 221 238 46 195 146 161 141 191 230 139 251 175 57 243 39 106 55 170 158 83 212 72 98 28 253 2 0 0 0 1 48 94 61 43 8 236 81 175 216 38 46 240 164 24 125 150 38 110 153 168 221 238 46 195 146 161 141 191 230 139 251 175 57 243 39 106 55 170 158 83 212 72 98 28 253 2 0 0 0 0 80 48 94 140 165 180 105 31 16 145 182 147 88 246 146 184 137 158 100 218 254 225 130 175 24 164 19 172 15 135 152 163 48 137 131 182 181 101 168 51 195 131 251 4 29 231 230 96 29 58 177 144 95 60 187 109 242 143 92 252 239 108 72 4 59 210 46 232 34 139 28 238 105 211 76 0 0 0 0 0 0 1 80 48 94 140 165 180 105 31 16 145 182 147 88 246 146 184 137 158 100 218 254 225 130 175 24 164 19 172 15 135 152 163 48 137 131 182 181 101 168 51 195 131 251 4 29 231 230 96 29 58 177 144 95 60 187 109 242 143 92 252 239 108 72 4 59 210 46 232 34 139 28 238 105 211 76 0 0 0 0 0 0 0 40 234 82 61 126 225 47 95 67 86 217 19 160 166 207 107 2 63 101 138 71 14 205 171 155 149 191 239 138 12 202 149 100 120 202 78 69 3 0 0 0 1 40 234 82 61 126 225 47 95 67 86 217 19 160 166 207 107 2 63 101 138 71 14 205 171 155 149 191 239 138 12 202 149 100 120 202 78 69 3 0 0 0 0 32 254 34 44 189 14 4 206 100 120 172 67 182 70 62 43 236 232 71 120 86 45 165 252 19 123 77 145 98 252 22 8 0 1 32 254 34 44 189 14 4 206 100 120 172 67 182 70 62 43 236 232 71 120 86 45 165 252 19 123 77 145 98 252 22 8 0 0 128 133 133 183 97 16 40 176 80 73 78 7 25 246 204 110 33 191 19 111 253 42 125 217 152 191 133 9 231 196 126 215 115 228 86 114 230 179 150 254 155 22 188 36 125 187 206 19 227 235 11 176 130 143 111 209 43 29 89 113 147 102 119 48 191 43 79 47 89 120 0 227 25 169 53 18 37 83 52 60 241 101 240 255 139 61 119 189 13 92 89 30 29 252 1 22 209 105 170 119 94 158 16 175 58 110 238 74 117 112 41 56 246 67 154 141 63 25 112 206 160 3 84 134 50 0 0 0 0 1 128 133 133 183 97 16 40 176 80 73 78 7 25 246 204 110 33 191 19 111 253 42 125 217 152 191 133 9 231 196 126 215 115 228 86 114 230 179 150 254 155 22 188 36 125 187 206 19 227 235 11 176 130 143 111 209 43 29 89 113 147 102 119 48 191 43 79 47 89 120 0 227 25 169 53 18 37 83 52 60 241 101 240 255 139 61 119 189 13 92 89 30 29 252 1 22 209 105 170 119 94 158 16 175 58 110 238 74 117 112 41 56 246 67 154 141 63 25 112 206 160 3 84 134 50 0 0 0 0 0 64 242 208 163 166 217 157 45 88 172 11 229 109 23 46 229 250 139 217 234 229 172 253 211 253 11 8 225 163 20 87 100 148 249 249 188 166 122 64 131 225 233 55 241 36 232 11 174 172 83 153 87 165 3 39 84 162 67 204 110 0 0 0 0 0 1 64 242 208 163 166 217 157 45 88 172 11 229 109 23 46 229 250 139 217 234 229 172 253 211 253 11 8 225 163 20 87 100 148 249 249 188 166 122 64 131 225 233 55 241 36 232 11 174 172 83 153 87 165 3 39 84 162 67 204 110 0 0 0 0 0 0 32 62 99 60 181 249 169 105 74 220 130 197 142 213 226 245 78 96 45 105 171 176 157 17 155 32 93 59 15 0 0 0 0 1 32 62 99 60 181 249 169 105 74 220 130 197 142 213 226 245 78 96 45 105 171 176 157 17 155 32 93 59 15 0 0 0 0
diff --git a/libs/multiprecision/test/cpp_int128_serial32.txt b/libs/multiprecision/test/cpp_int128_serial32.txt
new file mode 100644
index 0000000000..ed152d2fb4
--- /dev/null
+++ b/libs/multiprecision/test/cpp_int128_serial32.txt
@@ -0,0 +1 @@
+22 serialization::archive 10 0 0 0 0 0 16 37 8 254 63 21 239 57 20 229 108 249 176 89 1 0 0 1 16 37 8 254 63 21 239 57 20 229 108 249 176 89 1 0 0 0 4 44 53 2 0 1 4 44 53 2 0 0 16 255 227 23 91 116 215 6 77 105 216 187 1 221 183 7 0 1 16 255 227 23 91 116 215 6 77 105 216 187 1 221 183 7 0 0 16 215 97 73 133 223 240 209 70 227 76 76 44 42 9 0 0 1 16 215 97 73 133 223 240 209 70 227 76 76 44 42 9 0 0 0 4 26 205 1 0 1 4 26 205 1 0 0 16 171 248 220 122 202 115 96 223 240 82 153 66 149 194 43 14 1 16 171 248 220 122 202 115 96 223 240 82 153 66 149 194 43 14 0 16 73 169 70 111 188 124 78 80 182 195 40 65 247 218 58 0 1 16 73 169 70 111 188 124 78 80 182 195 40 65 247 218 58 0 0 4 55 1 42 59 1 4 55 1 42 59 0 12 112 146 42 85 255 28 14 50 168 228 0 0 1 12 112 146 42 85 255 28 14 50 168 228 0 0 0 8 3 132 142 0 89 0 0 0 1 8 3 132 142 0 89 0 0 0 0 4 59 31 0 0 1 4 59 31 0 0 0 12 128 184 17 143 213 41 148 184 91 0 0 0 1 12 128 184 17 143 213 41 148 184 91 0 0 0 0 8 52 43 163 205 58 0 0 0 1 8 52 43 163 205 58 0 0 0 0 4 7 136 199 3 1 4 7 136 199 3 0 12 103 144 142 223 219 161 68 75 104 0 0 0 1 12 103 144 142 223 219 161 68 75 104 0 0 0 0 16 231 211 175 248 223 4 118 100 4 104 73 218 45 121 30 164 1 16 231 211 175 248 223 4 118 100 4 104 73 218 45 121 30 164 0 16 64 136 51 28 35 115 186 14 0 15 31 170 194 137 96 1 1 16 64 136 51 28 35 115 186 14 0 15 31 170 194 137 96 1 0 16 6 253 75 10 176 96 217 180 15 153 73 162 221 96 13 175 1 16 6 253 75 10 176 96 217 180 15 153 73 162 221 96 13 175 0 16 9 195 227 5 98 90 197 22 123 173 13 24 184 217 65 14 1 16 9 195 227 5 98 90 197 22 123 173 13 24 184 217 65 14 0 16 36 207 83 207 252 162 46 155 216 62 210 211 118 157 254 13 1 16 36 207 83 207 252 162 46 155 216 62 210 211 118 157 254 13 0 4 48 115 9 0 1 4 48 115 9 0 0 12 18 132 205 178 240 43 208 33 177 56 170 10 1 12 18 132 205 178 240 43 208 33 177 56 170 10 0 16 0 134 168 204 110 75 199 196 245 20 142 108 179 194 4 27 1 16 0 134 168 204 110 75 199 196 245 20 142 108 179 194 4 27 0 16 137 40 185 28 226 228 143 223 62 177 68 144 87 133 253 16 1 16 137 40 185 28 226 228 143 223 62 177 68 144 87 133 253 16 0 16 241 205 249 80 146 210 1 55 43 173 109 143 84 117 209 0 1 16 241 205 249 80 146 210 1 55 43 173 109 143 84 117 209 0 0 4 171 208 0 0 1 4 171 208 0 0 0 8 131 223 243 126 121 98 88 88 1 8 131 223 243 126 121 98 88 88 0 16 34 183 141 118 51 30 229 127 23 141 157 166 11 0 0 0 1 16 34 183 141 118 51 30 229 127 23 141 157 166 11 0 0 0 0 16 58 245 156 2 19 251 183 255 219 45 27 253 9 0 0 0 1 16 58 245 156 2 19 251 183 255 219 45 27 253 9 0 0 0 0 8 153 44 205 37 255 0 0 0 1 8 153 44 205 37 255 0 0 0 0 4 246 238 8 0 1 4 246 238 8 0 0 4 7 0 0 0 1 4 7 0 0 0 0 8 8 53 135 13 104 37 51 0 1 8 8 53 135 13 104 37 51 0 0 4 89 148 1 0 1 4 89 148 1 0 0 16 220 42 79 160 82 149 191 194 119 33 248 143 15 159 45 0 1 16 220 42 79 160 82 149 191 194 119 33 248 143 15 159 45 0 0 12 85 100 42 49 80 139 191 189 106 176 0 0 1 12 85 100 42 49 80 139 191 189 106 176 0 0 0 16 244 148 210 156 57 140 123 241 227 171 90 25 5 0 0 0 1 16 244 148 210 156 57 140 123 241 227 171 90 25 5 0 0 0 0 16 11 118 127 38 199 175 117 18 23 63 204 177 158 199 1 0 1 16 11 118 127 38 199 175 117 18 23 63 204 177 158 199 1 0 0 16 133 146 81 4 4 226 254 92 139 68 104 13 103 27 212 5 1 16 133 146 81 4 4 226 254 92 139 68 104 13 103 27 212 5 0 12 32 198 99 47 231 25 151 81 1 0 0 0 1 12 32 198 99 47 231 25 151 81 1 0 0 0 0 12 137 233 68 65 94 40 65 221 33 159 2 0 1 12 137 233 68 65 94 40 65 221 33 159 2 0 0 16 83 34 240 62 72 73 173 41 206 111 192 80 37 0 0 0 1 16 83 34 240 62 72 73 173 41 206 111 192 80 37 0 0 0 0 4 97 0 0 0 1 4 97 0 0 0 0 8 138 189 92 247 169 147 0 0 1 8 138 189 92 247 169 147 0 0 0 16 161 190 61 94 114 107 106 245 122 129 25 170 59 22 0 0 1 16 161 190 61 94 114 107 106 245 122 129 25 170 59 22 0 0 0 4 2 130 235 26 1 4 2 130 235 26 0 16 109 53 53 179 152 230 103 254 224 148 134 9 132 15 236 0 1 16 109 53 53 179 152 230 103 254 224 148 134 9 132 15 236 0 0 12 213 70 114 188 144 14 234 210 9 163 24 0 1 12 213 70 114 188 144 14 234 210 9 163 24 0 0 12 33 107 225 17 111 28 212 164 73 197 193 0 1 12 33 107 225 17 111 28 212 164 73 197 193 0 0 8 146 173 184 73 148 56 4 0 1 8 146 173 184 73 148 56 4 0 0 12 44 163 145 53 213 144 139 110 48 114 127 219 1 12 44 163 145 53 213 144 139 110 48 114 127 219 0 12 173 188 229 221 105 34 146 117 254 239 166 51 1 12 173 188 229 221 105 34 146 117 254 239 166 51 0 12 4 69 232 58 38 108 238 203 253 199 77 145 1 12 4 69 232 58 38 108 238 203 253 199 77 145 0 8 107 215 91 159 76 215 198 33 1 8 107 215 91 159 76 215 198 33 0 8 11 77 137 244 167 98 1 0 1 8 11 77 137 244 167 98 1 0 0 8 186 129 52 47 127 178 152 0 1 8 186 129 52 47 127 178 152 0 0 12 201 180 214 22 110 46 55 229 64 200 26 0 1 12 201 180 214 22 110 46 55 229 64 200 26 0 0 4 208 223 215 0 1 4 208 223 215 0 0 4 64 29 111 0 1 4 64 29 111 0 0 8 189 214 205 206 195 1 0 0 1 8 189 214 205 206 195 1 0 0 0 12 186 181 125 189 118 38 122 114 34 230 100 1 1 12 186 181 125 189 118 38 122 114 34 230 100 1 0 16 48 214 190 50 128 72 169 213 65 189 101 126 93 0 0 0 1 16 48 214 190 50 128 72 169 213 65 189 101 126 93 0 0 0 0 4 30 0 0 0 1 4 30 0 0 0 0 8 13 245 224 15 53 1 0 0 1 8 13 245 224 15 53 1 0 0 0 8 202 238 193 147 15 0 0 0 1 8 202 238 193 147 15 0 0 0 0 16 128 116 52 14 187 110 131 0 144 16 182 41 228 82 0 0 1 16 128 116 52 14 187 110 131 0 144 16 182 41 228 82 0 0 0 4 100 0 0 0 1 4 100 0 0 0 0 4 89 180 24 0 1 4 89 180 24 0 0 4 34 124 0 0 1 4 34 124 0 0 0 16 250 39 95 39 67 1 167 94 233 155 216 3 100 183 116 118 1 16 250 39 95 39 67 1 167 94 233 155 216 3 100 183 116 118 0 16 128 143 58 104 102 58 4 109 40 213 225 112 135 3 0 0 1 16 128 143 58 104 102 58 4 109 40 213 225 112 135 3 0 0 0 16 182 167 174 164 204 91 160 188 128 28 213 237 236 1 0 0 1 16 182 167 174 164 204 91 160 188 128 28 213 237 236 1 0 0 0 12 198 204 232 165 163 187 202 201 158 244 103 2 1 12 198 204 232 165 163 187 202 201 158 244 103 2 0 4 52 41 2 0 1 4 52 41 2 0 0 8 95 141 198 19 2 2 0 0 1 8 95 141 198 19 2 2 0 0 0 16 254 2 20 231 85 24 126 151 177 138 78 145 2 0 0 0 1 16 254 2 20 231 85 24 126 151 177 138 78 145 2 0 0 0 0 16 127 34 155 130 248 106 222 183 31 216 113 190 213 220 134 3 1 16 127 34 155 130 248 106 222 183 31 216 113 190 213 220 134 3 0 8 185 223 116 102 248 10 180 190 1 8 185 223 116 102 248 10 180 190 0 4 28 0 0 0 1 4 28 0 0 0 0 12 152 5 232 129 30 191 73 187 48 122 16 0 1 12 152 5 232 129 30 191 73 187 48 122 16 0 0 8 22 174 151 82 172 15 209 0 1 8 22 174 151 82 172 15 209 0 0 4 167 181 0 0 1 4 167 181 0 0 0 8 34 164 28 2 70 207 0 0 1 8 34 164 28 2 70 207 0 0 0 4 73 175 2 31 1 4 73 175 2 31 0 16 191 123 4 56 221 89 117 10 45 163 68 188 6 0 0 0 1 16 191 123 4 56 221 89 117 10 45 163 68 188 6 0 0 0 0 4 32 0 0 0 1 4 32 0 0 0 0 16 153 114 240 104 169 142 230 72 169 205 183 45 29 0 0 0 1 16 153 114 240 104 169 142 230 72 169 205 183 45 29 0 0 0 0 4 104 0 0 0 1 4 104 0 0 0 0 4 250 4 201 0 1 4 250 4 201 0 0 8 235 69 188 51 63 136 32 0 1 8 235 69 188 51 63 136 32 0 0 8 194 197 163 82 68 56 132 186 1 8 194 197 163 82 68 56 132 186 0 8 209 149 168 103 172 0 245 13 1 8 209 149 168 103 172 0 245 13 0 8 95 103 181 13 108 192 162 0 1 8 95 103 181 13 108 192 162 0 0 8 203 201 28 164 225 153 81 140 1 8 203 201 28 164 225 153 81 140 0 12 61 213 68 146 15 4 91 15 163 73 1 0 1 12 61 213 68 146 15 4 91 15 163 73 1 0 0 16 94 145 165 53 103 5 192 143 85 206 43 169 47 0 0 0 1 16 94 145 165 53 103 5 192 143 85 206 43 169 47 0 0 0 0 12 50 151 92 208 203 159 144 76 92 251 123 11 1 12 50 151 92 208 203 159 144 76 92 251 123 11 0 16 190 5 157 205 191 246 224 1 231 37 151 216 251 10 66 0 1 16 190 5 157 205 191 246 224 1 231 37 151 216 251 10 66 0 0 12 77 149 133 65 141 196 79 8 138 249 60 120 1 12 77 149 133 65 141 196 79 8 138 249 60 120 0 16 220 86 90 254 157 201 65 199 11 135 199 91 106 0 0 0 1 16 220 86 90 254 157 201 65 199 11 135 199 91 106 0 0 0 0 8 204 151 79 174 7 0 0 0 1 8 204 151 79 174 7 0 0 0 0 12 24 141 202 136 150 117 206 49 76 1 63 7 1 12 24 141 202 136 150 117 206 49 76 1 63 7 0 12 119 133 5 211 186 190 56 29 220 201 21 0 1 12 119 133 5 211 186 190 56 29 220 201 21 0 0 4 7 0 0 0 1 4 7 0 0 0 0 12 72 15 156 17 9 105 177 79 67 146 0 0 1 12 72 15 156 17 9 105 177 79 67 146 0 0 0 12 249 168 160 82 66 6 134 143 40 37 107 13 1 12 249 168 160 82 66 6 134 143 40 37 107 13 0 4 4 185 65 0 1 4 4 185 65 0 0 12 12 112 73 235 143 130 15 35 185 148 4 0 1 12 12 112 73 235 143 130 15 35 185 148 4 0 0 4 245 60 0 0 1 4 245 60 0 0 0 8 42 49 128 144 182 3 210 10 1 8 42 49 128 144 182 3 210 10 0 12 213 148 0 33 85 171 97 185 1 0 0 0 1 12 213 148 0 33 85 171 97 185 1 0 0 0 0 16 54 54 252 21 199 151 88 16 3 233 15 10 1 0 0 0 1 16 54 54 252 21 199 151 88 16 3 233 15 10 1 0 0 0 0 16 34 61 250 8 165 194 32 79 231 214 230 190 194 240 114 7 1 16 34 61 250 8 165 194 32 79 231 214 230 190 194 240 114 7 0 12 104 245 221 84 173 227 229 31 19 5 0 0 1 12 104 245 221 84 173 227 229 31 19 5 0 0 0 8 240 84 253 169 3 21 0 0 1 8 240 84 253 169 3 21 0 0 0 16 178 134 22 38 169 249 193 201 236 162 74 212 159 200 1 0 1 16 178 134 22 38 169 249 193 201 236 162 74 212 159 200 1 0 0 12 188 15 207 107 111 126 74 110 184 12 0 0 1 12 188 15 207 107 111 126 74 110 184 12 0 0 0 16 135 53 52 188 239 136 188 128 108 91 237 149 155 0 0 0 1 16 135 53 52 188 239 136 188 128 108 91 237 149 155 0 0 0 0 4 214 243 150 104 1 4 214 243 150 104 0 4 28 0 0 0 1 4 28 0 0 0 0 16 176 32 111 181 139 147 85 223 223 124 248 32 1 0 0 0 1 16 176 32 111 181 139 147 85 223 223 124 248 32 1 0 0 0 0 16 220 111 201 142 140 206 56 69 169 37 41 8 209 2 0 0 1 16 220 111 201 142 140 206 56 69 169 37 41 8 209 2 0 0 0 8 49 22 111 81 3 0 0 0 1 8 49 22 111 81 3 0 0 0 0 16 12 25 137 51 170 194 60 198 250 154 97 254 184 1 0 0 1 16 12 25 137 51 170 194 60 198 250 154 97 254 184 1 0 0 0 12 69 58 72 167 111 230 201 95 3 0 0 0 1 12 69 58 72 167 111 230 201 95 3 0 0 0 0 16 125 163 188 25 216 18 75 50 70 157 149 113 247 26 143 0 1 16 125 163 188 25 216 18 75 50 70 157 149 113 247 26 143 0 0 12 178 36 11 168 110 204 18 55 17 174 31 2 1 12 178 36 11 168 110 204 18 55 17 174 31 2 0 8 54 253 119 216 234 173 18 0 1 8 54 253 119 216 234 173 18 0 0 16 58 138 90 25 198 44 141 36 21 50 150 6 116 188 7 0 1 16 58 138 90 25 198 44 141 36 21 50 150 6 116 188 7 0 0 8 48 232 209 253 50 174 219 0 1 8 48 232 209 253 50 174 219 0 0 16 98 231 108 128 132 248 24 45 51 233 172 99 10 48 164 6 1 16 98 231 108 128 132 248 24 45 51 233 172 99 10 48 164 6 0 12 63 148 202 142 42 126 95 240 217 3 0 0 1 12 63 148 202 142 42 126 95 240 217 3 0 0 0 12 211 178 116 92 43 40 217 152 60 0 0 0 1 12 211 178 116 92 43 40 217 152 60 0 0 0 0 4 173 137 40 0 1 4 173 137 40 0 0 4 205 61 6 0 1 4 205 61 6 0 0 16 88 56 246 47 152 18 79 21 156 80 31 84 2 0 0 0 1 16 88 56 246 47 152 18 79 21 156 80 31 84 2 0 0 0 0 4 47 61 12 0 1 4 47 61 12 0 0 4 160 13 53 81 1 4 160 13 53 81 0 8 32 187 228 46 5 0 0 0 1 8 32 187 228 46 5 0 0 0 0 16 182 2 196 123 7 142 61 89 72 17 68 180 113 1 0 0 1 16 182 2 196 123 7 142 61 89 72 17 68 180 113 1 0 0 0 16 120 38 117 243 129 114 66 195 74 148 250 9 85 2 0 0 1 16 120 38 117 243 129 114 66 195 74 148 250 9 85 2 0 0 0 16 233 65 214 75 155 124 3 9 180 156 12 179 244 180 184 111 1 16 233 65 214 75 155 124 3 9 180 156 12 179 244 180 184 111 0 8 23 43 78 31 7 0 0 0 1 8 23 43 78 31 7 0 0 0 0 8 229 205 68 230 125 8 0 0 1 8 229 205 68 230 125 8 0 0 0 16 141 13 91 38 76 112 200 170 250 212 26 1 124 1 0 0 1 16 141 13 91 38 76 112 200 170 250 212 26 1 124 1 0 0 0 8 41 127 133 106 252 0 0 0 1 8 41 127 133 106 252 0 0 0 0 8 60 152 174 163 1 0 0 0 1 8 60 152 174 163 1 0 0 0 0 4 15 0 0 0 1 4 15 0 0 0 0 16 24 134 100 43 20 248 31 252 145 239 220 39 16 158 117 0 1 16 24 134 100 43 20 248 31 252 145 239 220 39 16 158 117 0 0 4 175 72 124 35 1 4 175 72 124 35 0 8 244 49 63 40 249 6 0 0 1 8 244 49 63 40 249 6 0 0 0 16 200 70 212 56 217 96 254 3 156 68 43 183 192 143 8 0 1 16 200 70 212 56 217 96 254 3 156 68 43 183 192 143 8 0 0 4 219 122 30 5 1 4 219 122 30 5 0 16 152 26 100 200 15 32 129 3 69 217 98 106 201 17 0 0 1 16 152 26 100 200 15 32 129 3 69 217 98 106 201 17 0 0 0 4 220 43 90 166 1 4 220 43 90 166 0 16 1 74 237 23 159 49 174 181 39 193 105 137 206 197 208 2 1 16 1 74 237 23 159 49 174 181 39 193 105 137 206 197 208 2 0 12 2 162 116 55 83 71 3 224 58 31 0 0 1 12 2 162 116 55 83 71 3 224 58 31 0 0 0 16 219 109 251 155 10 110 246 132 227 114 221 29 13 0 0 0 1 16 219 109 251 155 10 110 246 132 227 114 221 29 13 0 0 0 0 8 142 91 8 37 228 217 181 55 1 8 142 91 8 37 228 217 181 55 0 16 189 154 57 63 85 92 144 161 46 212 177 53 47 4 29 90 1 16 189 154 57 63 85 92 144 161 46 212 177 53 47 4 29 90 0 8 14 190 95 210 115 71 0 0 1 8 14 190 95 210 115 71 0 0 0 4 47 2 0 0 1 4 47 2 0 0 0 16 174 101 211 131 68 66 216 221 166 22 253 95 142 0 0 0 1 16 174 101 211 131 68 66 216 221 166 22 253 95 142 0 0 0 0 16 198 1 17 204 40 96 166 196 65 117 215 34 58 0 0 0 1 16 198 1 17 204 40 96 166 196 65 117 215 34 58 0 0 0 0 12 155 139 7 253 130 3 210 83 54 12 0 0 1 12 155 139 7 253 130 3 210 83 54 12 0 0 0 12 164 44 176 210 229 112 131 132 31 15 0 0 1 12 164 44 176 210 229 112 131 132 31 15 0 0 0 12 197 192 242 64 16 33 210 29 215 0 0 0 1 12 197 192 242 64 16 33 210 29 215 0 0 0 0 12 247 202 39 209 87 88 199 30 93 71 125 42 1 12 247 202 39 209 87 88 199 30 93 71 125 42 0 16 4 91 228 117 233 235 177 229 123 87 8 196 42 243 50 0 1 16 4 91 228 117 233 235 177 229 123 87 8 196 42 243 50 0 0 12 177 254 109 38 43 208 254 238 71 49 150 0 1 12 177 254 109 38 43 208 254 238 71 49 150 0 0 8 66 45 234 248 31 0 0 0 1 8 66 45 234 248 31 0 0 0 0 12 105 210 161 233 29 116 129 70 143 74 88 0 1 12 105 210 161 233 29 116 129 70 143 74 88 0 0 16 43 147 216 50 132 234 9 232 69 151 33 92 3 0 0 0 1 16 43 147 216 50 132 234 9 232 69 151 33 92 3 0 0 0 0 8 205 117 182 80 150 98 9 0 1 8 205 117 182 80 150 98 9 0 0 16 58 110 227 57 169 95 102 122 66 27 229 232 1 0 0 0 1 16 58 110 227 57 169 95 102 122 66 27 229 232 1 0 0 0 0 12 230 26 192 136 251 74 228 31 223 1 0 0 1 12 230 26 192 136 251 74 228 31 223 1 0 0 0 8 27 77 126 125 205 208 0 0 1 8 27 77 126 125 205 208 0 0 0 4 105 207 185 22 1 4 105 207 185 22 0 12 177 81 106 231 133 43 4 174 118 0 0 0 1 12 177 81 106 231 133 43 4 174 118 0 0 0 0 12 151 193 51 229 154 159 106 17 13 0 0 0 1 12 151 193 51 229 154 159 106 17 13 0 0 0 0 4 9 5 0 0 1 4 9 5 0 0 0 8 154 3 91 22 110 99 13 0 1 8 154 3 91 22 110 99 13 0 0 4 46 0 0 0 1 4 46 0 0 0 0 8 165 178 204 139 226 102 0 0 1 8 165 178 204 139 226 102 0 0 0 12 255 166 141 198 137 1 215 240 13 0 0 0 1 12 255 166 141 198 137 1 215 240 13 0 0 0 0 12 240 214 172 107 207 30 49 24 165 26 0 0 1 12 240 214 172 107 207 30 49 24 165 26 0 0 0 16 169 62 163 160 84 45 148 118 196 244 39 206 4 0 0 0 1 16 169 62 163 160 84 45 148 118 196 244 39 206 4 0 0 0 0 8 51 45 245 18 221 94 0 0 1 8 51 45 245 18 221 94 0 0 0 16 56 138 53 228 133 56 250 127 145 126 56 71 96 42 205 0 1 16 56 138 53 228 133 56 250 127 145 126 56 71 96 42 205 0 0 16 96 10 238 153 254 99 179 181 215 150 183 141 204 183 59 15 1 16 96 10 238 153 254 99 179 181 215 150 183 141 204 183 59 15 0 4 234 122 2 0 1 4 234 122 2 0 0 4 171 166 2 0 1 4 171 166 2 0 0 12 70 249 164 0 38 67 121 141 34 1 0 0 1 12 70 249 164 0 38 67 121 141 34 1 0 0 0 8 114 2 113 130 156 93 2 0 1 8 114 2 113 130 156 93 2 0 0 8 128 254 47 66 253 230 215 9 1 8 128 254 47 66 253 230 215 9 0 8 128 118 25 126 97 184 0 0 1 8 128 118 25 126 97 184 0 0 0 4 6 0 0 0 1 4 6 0 0 0 0 12 98 121 37 228 245 254 160 122 192 239 13 51 1 12 98 121 37 228 245 254 160 122 192 239 13 51 0 8 32 22 37 123 21 27 0 0 1 8 32 22 37 123 21 27 0 0 0 8 128 162 228 118 64 127 3 0 1 8 128 162 228 118 64 127 3 0 0 4 166 181 11 0 1 4 166 181 11 0 0 16 28 166 115 28 45 10 239 211 13 246 240 137 229 3 80 0 1 16 28 166 115 28 45 10 239 211 13 246 240 137 229 3 80 0 0 16 234 15 55 214 194 155 139 231 81 180 44 125 14 0 0 0 1 16 234 15 55 214 194 155 139 231 81 180 44 125 14 0 0 0 0 8 177 167 106 207 184 208 150 0 1 8 177 167 106 207 184 208 150 0 0 8 13 195 217 57 88 2 0 0 1 8 13 195 217 57 88 2 0 0 0 16 54 96 61 217 136 240 218 168 74 235 61 179 94 124 0 0 1 16 54 96 61 217 136 240 218 168 74 235 61 179 94 124 0 0 0 8 133 19 3 202 163 74 201 191 1 8 133 19 3 202 163 74 201 191 0 12 76 246 211 13 154 46 92 228 43 105 0 0 1 12 76 246 211 13 154 46 92 228 43 105 0 0 0 4 238 231 7 0 1 4 238 231 7 0 0 4 121 5 0 0 1 4 121 5 0 0 0 12 254 32 157 147 246 229 100 39 232 13 0 0 1 12 254 32 157 147 246 229 100 39 232 13 0 0 0 8 148 204 30 203 96 118 103 26 1 8 148 204 30 203 96 118 103 26 0 8 86 94 188 134 7 0 0 0 1 8 86 94 188 134 7 0 0 0 0 8 190 236 210 228 178 0 0 0 1 8 190 236 210 228 178 0 0 0 0 12 159 29 240 26 162 129 48 140 42 98 6 0 1 12 159 29 240 26 162 129 48 140 42 98 6 0 0 12 201 94 127 117 141 245 104 70 17 0 0 0 1 12 201 94 127 117 141 245 104 70 17 0 0 0 0 12 186 185 167 145 50 174 180 1 50 29 53 1 1 12 186 185 167 145 50 174 180 1 50 29 53 1 0 12 104 112 112 189 66 154 31 214 228 234 171 7 1 12 104 112 112 189 66 154 31 214 228 234 171 7 0 12 165 159 159 174 251 240 214 4 220 88 34 125 1 12 165 159 159 174 251 240 214 4 220 88 34 125 0 16 231 72 142 22 2 169 79 36 221 251 129 37 230 30 25 38 1 16 231 72 142 22 2 169 79 36 221 251 129 37 230 30 25 38 0 8 95 25 73 135 187 21 41 2 1 8 95 25 73 135 187 21 41 2 0 12 203 77 25 62 42 39 26 203 12 34 248 30 1 12 203 77 25 62 42 39 26 203 12 34 248 30 0 4 19 6 0 0 1 4 19 6 0 0 0 16 68 151 207 206 205 132 15 184 12 208 217 190 252 148 29 0 1 16 68 151 207 206 205 132 15 184 12 208 217 190 252 148 29 0 0 4 172 170 222 106 1 4 172 170 222 106 0 12 255 209 208 122 18 160 62 50 2 0 0 0 1 12 255 209 208 122 18 160 62 50 2 0 0 0 0 16 71 17 98 35 48 147 54 205 13 239 235 222 162 130 39 0 1 16 71 17 98 35 48 147 54 205 13 239 235 222 162 130 39 0 0 12 123 91 181 63 20 138 251 142 208 1 0 0 1 12 123 91 181 63 20 138 251 142 208 1 0 0 0 4 223 195 7 0 1 4 223 195 7 0 0 12 46 37 83 84 120 104 86 18 1 0 0 0 1 12 46 37 83 84 120 104 86 18 1 0 0 0 0 16 11 123 221 123 22 39 126 107 97 71 79 173 196 6 0 0 1 16 11 123 221 123 22 39 126 107 97 71 79 173 196 6 0 0 0 8 53 164 236 57 255 127 20 4 1 8 53 164 236 57 255 127 20 4 0 12 35 197 22 114 86 55 189 134 3 0 0 0 1 12 35 197 22 114 86 55 189 134 3 0 0 0 0 12 77 141 58 157 14 215 57 68 1 0 0 0 1 12 77 141 58 157 14 215 57 68 1 0 0 0 0 16 102 255 109 147 11 143 27 213 47 176 30 89 64 94 213 66 1 16 102 255 109 147 11 143 27 213 47 176 30 89 64 94 213 66 0 8 190 247 33 10 138 0 6 6 1 8 190 247 33 10 138 0 6 6 0 4 110 2 0 0 1 4 110 2 0 0 0 16 223 83 113 107 137 221 86 37 48 2 144 161 169 28 0 0 1 16 223 83 113 107 137 221 86 37 48 2 144 161 169 28 0 0 0 8 189 254 123 237 246 176 128 2 1 8 189 254 123 237 246 176 128 2 0 12 243 132 245 46 238 29 255 200 206 118 0 0 1 12 243 132 245 46 238 29 255 200 206 118 0 0 0 4 239 125 0 0 1 4 239 125 0 0 0 12 127 161 236 25 121 208 120 214 1 0 0 0 1 12 127 161 236 25 121 208 120 214 1 0 0 0 0 16 228 98 93 251 246 45 27 244 12 210 234 8 62 105 184 6 1 16 228 98 93 251 246 45 27 244 12 210 234 8 62 105 184 6 0 16 113 250 216 245 216 14 84 151 148 66 63 170 143 150 213 62 1 16 113 250 216 245 216 14 84 151 148 66 63 170 143 150 213 62 0 4 7 0 0 0 1 4 7 0 0 0 0 4 97 0 0 0 1 4 97 0 0 0 0 16 82 196 148 115 94 248 196 4 103 173 17 224 1 0 0 0 1 16 82 196 148 115 94 248 196 4 103 173 17 224 1 0 0 0 0 16 185 187 181 2 210 30 161 158 53 90 42 42 63 15 50 26 1 16 185 187 181 2 210 30 161 158 53 90 42 42 63 15 50 26 0 16 92 251 45 61 79 154 189 99 62 231 106 244 104 0 0 0 1 16 92 251 45 61 79 154 189 99 62 231 106 244 104 0 0 0 0 8 200 11 39 38 1 71 0 0 1 8 200 11 39 38 1 71 0 0 0 16 78 168 146 148 101 102 80 36 225 226 239 154 140 83 0 0 1 16 78 168 146 148 101 102 80 36 225 226 239 154 140 83 0 0 0 12 245 138 45 63 143 110 236 183 77 53 123 0 1 12 245 138 45 63 143 110 236 183 77 53 123 0 0 4 243 27 0 0 1 4 243 27 0 0 0 8 2 242 30 180 34 49 0 0 1 8 2 242 30 180 34 49 0 0 0 8 153 218 239 31 13 11 23 0 1 8 153 218 239 31 13 11 23 0 0 16 114 73 75 167 80 26 136 206 243 161 150 47 210 18 0 0 1 16 114 73 75 167 80 26 136 206 243 161 150 47 210 18 0 0 0 8 152 52 243 192 4 0 0 0 1 8 152 52 243 192 4 0 0 0 0 4 129 0 0 0 1 4 129 0 0 0 0 16 18 75 75 202 113 21 113 107 89 238 2 38 55 0 0 0 1 16 18 75 75 202 113 21 113 107 89 238 2 38 55 0 0 0 0 12 248 15 6 162 79 31 165 111 116 213 2 0 1 12 248 15 6 162 79 31 165 111 116 213 2 0 0 8 131 38 69 53 220 0 194 1 1 8 131 38 69 53 220 0 194 1 0 16 74 116 239 154 166 169 107 46 39 173 51 0 1 0 0 0 1 16 74 116 239 154 166 169 107 46 39 173 51 0 1 0 0 0 0 16 216 204 156 85 182 172 130 76 251 193 13 135 156 80 17 0 1 16 216 204 156 85 182 172 130 76 251 193 13 135 156 80 17 0 0 4 230 159 4 0 1 4 230 159 4 0 0 4 240 94 116 1 1 4 240 94 116 1 0 16 186 26 109 17 247 224 109 236 131 235 91 201 8 59 206 53 1 16 186 26 109 17 247 224 109 236 131 235 91 201 8 59 206 53 0 8 213 56 129 36 10 0 0 0 1 8 213 56 129 36 10 0 0 0 0 4 150 105 0 0 1 4 150 105 0 0 0 4 24 96 0 0 1 4 24 96 0 0 0 8 125 198 15 213 57 0 0 0 1 8 125 198 15 213 57 0 0 0 0 4 72 171 5 0 1 4 72 171 5 0 0 16 125 217 106 251 35 137 192 207 157 60 119 110 60 0 0 0 1 16 125 217 106 251 35 137 192 207 157 60 119 110 60 0 0 0 0 16 40 33 166 229 75 32 114 134 8 182 91 119 101 246 0 0 1 16 40 33 166 229 75 32 114 134 8 182 91 119 101 246 0 0 0 4 50 6 0 0 1 4 50 6 0 0 0 12 46 7 188 46 21 139 235 139 174 6 0 0 1 12 46 7 188 46 21 139 235 139 174 6 0 0 0 12 122 184 52 227 177 59 175 38 160 93 2 0 1 12 122 184 52 227 177 59 175 38 160 93 2 0 0 12 51 236 9 239 42 71 1 118 244 0 0 0 1 12 51 236 9 239 42 71 1 118 244 0 0 0 0 4 9 0 0 0 1 4 9 0 0 0 0 4 112 253 24 0 1 4 112 253 24 0 0 12 170 155 98 70 194 229 34 226 165 82 10 0 1 12 170 155 98 70 194 229 34 226 165 82 10 0 0 16 141 162 219 102 243 250 189 2 52 69 45 8 37 48 0 0 1 16 141 162 219 102 243 250 189 2 52 69 45 8 37 48 0 0 0 12 114 76 220 134 106 96 50 45 46 0 0 0 1 12 114 76 220 134 106 96 50 45 46 0 0 0 0 12 83 216 166 163 69 55 198 40 4 192 0 0 1 12 83 216 166 163 69 55 198 40 4 192 0 0 0 8 33 162 20 8 117 90 28 1 1 8 33 162 20 8 117 90 28 1 0 8 196 49 182 125 208 15 0 0 1 8 196 49 182 125 208 15 0 0 0 4 133 3 165 3 1 4 133 3 165 3 0 12 35 198 36 50 11 227 67 35 5 0 0 0 1 12 35 198 36 50 11 227 67 35 5 0 0 0 0 4 217 58 6 0 1 4 217 58 6 0 0 8 27 199 198 6 169 98 3 0 1 8 27 199 198 6 169 98 3 0 0 8 208 172 62 88 120 203 5 0 1 8 208 172 62 88 120 203 5 0 0 4 90 8 0 0 1 4 90 8 0 0 0 16 72 150 61 92 250 232 245 163 67 167 172 175 2 0 0 0 1 16 72 150 61 92 250 232 245 163 67 167 172 175 2 0 0 0 0 4 109 255 102 254 1 4 109 255 102 254 0 4 36 0 0 0 1 4 36 0 0 0 0 4 235 105 3 0 1 4 235 105 3 0 0 8 157 43 115 210 3 0 0 0 1 8 157 43 115 210 3 0 0 0 0 4 227 128 137 1 1 4 227 128 137 1 0 12 21 49 26 107 236 12 129 206 3 0 0 0 1 12 21 49 26 107 236 12 129 206 3 0 0 0 0 8 129 32 189 16 1 0 0 0 1 8 129 32 189 16 1 0 0 0 0 16 146 130 114 247 111 207 165 146 3 137 7 108 202 3 0 0 1 16 146 130 114 247 111 207 165 146 3 137 7 108 202 3 0 0 0 8 39 239 53 138 178 87 103 0 1 8 39 239 53 138 178 87 103 0 0 16 93 101 243 102 175 163 130 167 97 174 190 36 53 183 138 34 1 16 93 101 243 102 175 163 130 167 97 174 190 36 53 183 138 34 0 4 248 0 0 0 1 4 248 0 0 0 0 16 62 103 144 183 253 247 47 175 131 2 146 108 70 0 0 0 1 16 62 103 144 183 253 247 47 175 131 2 146 108 70 0 0 0 0 16 242 249 139 183 120 173 114 251 225 239 132 139 200 207 5 0 1 16 242 249 139 183 120 173 114 251 225 239 132 139 200 207 5 0 0 8 155 82 241 50 32 1 0 0 1 8 155 82 241 50 32 1 0 0 0 16 60 134 203 255 253 239 75 71 228 52 78 20 210 216 164 3 1 16 60 134 203 255 253 239 75 71 228 52 78 20 210 216 164 3 0 4 240 0 0 0 1 4 240 0 0 0 0 8 74 91 152 79 191 112 95 219 1 8 74 91 152 79 191 112 95 219 0 4 225 143 234 246 1 4 225 143 234 246 0 8 59 117 218 172 152 176 204 177 1 8 59 117 218 172 152 176 204 177 0 12 24 92 218 89 248 53 68 137 80 0 0 0 1 12 24 92 218 89 248 53 68 137 80 0 0 0 0 8 135 175 3 193 49 7 0 0 1 8 135 175 3 193 49 7 0 0 0 16 84 36 200 56 126 134 172 99 144 135 104 167 75 161 1 0 1 16 84 36 200 56 126 134 172 99 144 135 104 167 75 161 1 0 0 16 32 97 136 27 224 36 111 146 219 92 164 16 135 119 12 0 1 16 32 97 136 27 224 36 111 146 219 92 164 16 135 119 12 0 0 8 150 186 205 101 122 21 0 0 1 8 150 186 205 101 122 21 0 0 0 8 61 0 74 249 72 64 1 0 1 8 61 0 74 249 72 64 1 0 0 4 5 0 0 0 1 4 5 0 0 0 0 4 85 231 0 0 1 4 85 231 0 0 0 4 7 53 39 0 1 4 7 53 39 0 0 16 184 113 56 241 136 99 250 169 41 38 17 218 6 0 0 0 1 16 184 113 56 241 136 99 250 169 41 38 17 218 6 0 0 0 0 16 76 17 162 144 32 230 52 94 118 23 68 114 229 89 0 0 1 16 76 17 162 144 32 230 52 94 118 23 68 114 229 89 0 0 0 8 89 183 34 241 180 158 11 0 1 8 89 183 34 241 180 158 11 0 0 4 71 186 244 17 1 4 71 186 244 17 0 4 63 193 206 147 1 4 63 193 206 147 0 8 65 67 174 89 21 0 0 0 1 8 65 67 174 89 21 0 0 0 0 8 24 124 240 73 208 51 10 0 1 8 24 124 240 73 208 51 10 0 0 8 127 149 228 141 130 187 206 212 1 8 127 149 228 141 130 187 206 212 0 4 150 21 0 0 1 4 150 21 0 0 0 4 36 148 234 13 1 4 36 148 234 13 0 4 22 10 2 0 1 4 22 10 2 0 0 8 112 48 196 1 161 60 78 227 1 8 112 48 196 1 161 60 78 227 0 16 141 191 62 222 54 255 93 191 23 154 244 121 104 127 150 0 1 16 141 191 62 222 54 255 93 191 23 154 244 121 104 127 150 0 0 16 1 239 62 155 92 171 183 88 243 250 73 64 154 209 61 6 1 16 1 239 62 155 92 171 183 88 243 250 73 64 154 209 61 6 0 16 226 241 36 137 89 204 106 60 252 68 23 9 46 14 188 7 1 16 226 241 36 137 89 204 106 60 252 68 23 9 46 14 188 7 0 12 168 243 51 12 205 84 127 124 104 103 17 0 1 12 168 243 51 12 205 84 127 124 104 103 17 0 0 12 199 246 222 200 216 155 75 134 115 5 0 0 1 12 199 246 222 200 216 155 75 134 115 5 0 0 0 12 205 246 227 212 19 202 146 146 12 32 222 104 1 12 205 246 227 212 19 202 146 146 12 32 222 104 0 4 231 2 0 0 1 4 231 2 0 0 0 8 112 223 182 198 202 220 170 0 1 8 112 223 182 198 202 220 170 0 0 4 0 212 75 197 1 4 0 212 75 197 0 12 138 108 72 105 190 154 118 34 30 0 0 0 1 12 138 108 72 105 190 154 118 34 30 0 0 0 0 8 48 85 228 16 168 11 0 0 1 8 48 85 228 16 168 11 0 0 0 4 62 1 0 0 1 4 62 1 0 0 0 16 6 102 249 196 237 58 2 184 77 192 3 21 141 0 0 0 1 16 6 102 249 196 237 58 2 184 77 192 3 21 141 0 0 0 0 8 8 78 34 173 18 4 0 0 1 8 8 78 34 173 18 4 0 0 0 4 7 0 0 0 1 4 7 0 0 0 0 8 239 135 16 50 170 2 57 0 1 8 239 135 16 50 170 2 57 0 0 4 183 0 0 0 1 4 183 0 0 0 0 16 177 22 53 249 155 145 101 251 26 74 122 154 45 100 11 0 1 16 177 22 53 249 155 145 101 251 26 74 122 154 45 100 11 0 0 4 80 56 225 0 1 4 80 56 225 0 0 16 76 235 10 21 204 158 27 14 68 131 188 49 79 0 0 0 1 16 76 235 10 21 204 158 27 14 68 131 188 49 79 0 0 0 0 12 251 170 198 48 126 70 130 132 60 154 11 0 1 12 251 170 198 48 126 70 130 132 60 154 11 0 0 8 191 30 191 254 3 0 0 0 1 8 191 30 191 254 3 0 0 0 0 12 54 216 58 148 106 237 238 143 196 75 61 50 1 12 54 216 58 148 106 237 238 143 196 75 61 50 0 4 179 134 5 0 1 4 179 134 5 0 0 12 241 40 126 116 35 208 214 118 64 224 2 0 1 12 241 40 126 116 35 208 214 118 64 224 2 0 0 8 192 249 163 87 76 23 44 169 1 8 192 249 163 87 76 23 44 169 0 8 20 54 151 190 175 212 60 7 1 8 20 54 151 190 175 212 60 7 0 8 216 96 161 160 23 138 1 0 1 8 216 96 161 160 23 138 1 0 0 12 229 209 203 219 86 233 187 99 117 0 0 0 1 12 229 209 203 219 86 233 187 99 117 0 0 0 0 12 245 229 198 81 226 138 11 41 33 213 8 22 1 12 245 229 198 81 226 138 11 41 33 213 8 22 0 8 123 178 141 23 108 0 0 0 1 8 123 178 141 23 108 0 0 0 0 8 209 241 222 253 33 0 0 0 1 8 209 241 222 253 33 0 0 0 0 12 220 85 110 10 15 95 4 6 252 132 103 77 1 12 220 85 110 10 15 95 4 6 252 132 103 77 0 12 189 132 98 150 159 168 163 157 176 8 1 0 1 12 189 132 98 150 159 168 163 157 176 8 1 0 0 4 226 130 140 1 1 4 226 130 140 1 0 16 143 231 15 168 10 112 155 62 246 19 188 101 111 0 0 0 1 16 143 231 15 168 10 112 155 62 246 19 188 101 111 0 0 0 0 12 90 83 73 223 21 149 198 225 16 118 121 1 1 12 90 83 73 223 21 149 198 225 16 118 121 1 0 8 250 107 147 104 78 3 0 0 1 8 250 107 147 104 78 3 0 0 0 4 112 132 221 2 1 4 112 132 221 2 0 8 233 38 129 60 112 9 2 0 1 8 233 38 129 60 112 9 2 0 0 8 31 200 44 22 247 29 0 0 1 8 31 200 44 22 247 29 0 0 0 8 64 140 226 178 63 3 0 0 1 8 64 140 226 178 63 3 0 0 0 12 102 203 87 33 78 209 7 212 252 71 0 0 1 12 102 203 87 33 78 209 7 212 252 71 0 0 0 16 124 235 50 2 230 251 163 236 12 65 16 16 124 0 0 0 1 16 124 235 50 2 230 251 163 236 12 65 16 16 124 0 0 0 0 16 150 159 188 85 64 141 109 45 11 90 81 64 1 0 0 0 1 16 150 159 188 85 64 141 109 45 11 90 81 64 1 0 0 0 0 12 167 59 70 31 206 169 7 64 31 128 72 0 1 12 167 59 70 31 206 169 7 64 31 128 72 0 0 4 44 3 0 0 1 4 44 3 0 0 0 8 245 254 182 131 34 27 3 0 1 8 245 254 182 131 34 27 3 0 0 16 127 105 58 125 131 87 50 215 211 128 179 128 247 65 82 0 1 16 127 105 58 125 131 87 50 215 211 128 179 128 247 65 82 0 0 8 201 118 45 227 189 189 136 2 1 8 201 118 45 227 189 189 136 2 0 16 73 205 21 184 2 160 55 216 156 146 207 246 12 0 0 0 1 16 73 205 21 184 2 160 55 216 156 146 207 246 12 0 0 0 0 8 88 131 129 83 59 1 0 0 1 8 88 131 129 83 59 1 0 0 0 8 118 58 124 202 93 158 94 84 1 8 118 58 124 202 93 158 94 84 0 16 114 144 11 78 137 113 34 58 211 201 128 28 24 49 27 0 1 16 114 144 11 78 137 113 34 58 211 201 128 28 24 49 27 0 0 8 227 62 145 88 15 34 21 0 1 8 227 62 145 88 15 34 21 0 0 8 144 79 175 34 58 184 155 52 1 8 144 79 175 34 58 184 155 52 0 8 169 92 48 156 119 52 152 6 1 8 169 92 48 156 119 52 152 6 0 16 64 241 66 116 157 84 90 13 43 150 240 179 1 0 0 0 1 16 64 241 66 116 157 84 90 13 43 150 240 179 1 0 0 0 0 8 249 36 108 106 67 0 0 0 1 8 249 36 108 106 67 0 0 0 0 4 24 219 0 0 1 4 24 219 0 0 0 12 132 220 144 75 157 31 158 221 3 0 0 0 1 12 132 220 144 75 157 31 158 221 3 0 0 0 0 8 22 51 150 54 80 88 15 0 1 8 22 51 150 54 80 88 15 0 0 12 254 143 211 239 187 165 87 122 3 0 0 0 1 12 254 143 211 239 187 165 87 122 3 0 0 0 0 16 90 132 24 254 5 211 89 38 55 116 158 144 100 66 0 0 1 16 90 132 24 254 5 211 89 38 55 116 158 144 100 66 0 0 0 16 119 186 36 149 246 36 59 35 232 254 155 141 203 2 0 0 1 16 119 186 36 149 246 36 59 35 232 254 155 141 203 2 0 0 0 8 203 46 49 133 154 163 0 0 1 8 203 46 49 133 154 163 0 0 0 16 173 84 223 120 95 131 253 29 244 109 99 100 18 0 0 0 1 16 173 84 223 120 95 131 253 29 244 109 99 100 18 0 0 0 0 16 163 90 76 225 185 170 229 28 217 73 104 176 75 142 57 0 1 16 163 90 76 225 185 170 229 28 217 73 104 176 75 142 57 0 0 12 253 112 155 58 247 162 195 140 168 20 3 0 1 12 253 112 155 58 247 162 195 140 168 20 3 0 0 12 249 122 124 0 146 109 174 30 4 0 0 0 1 12 249 122 124 0 146 109 174 30 4 0 0 0 0 8 144 2 45 119 93 56 2 0 1 8 144 2 45 119 93 56 2 0 0 4 45 33 10 0 1 4 45 33 10 0 0 16 186 27 85 177 145 135 52 106 165 148 53 70 246 1 0 0 1 16 186 27 85 177 145 135 52 106 165 148 53 70 246 1 0 0 0 4 68 52 17 4 1 4 68 52 17 4 0 12 241 159 13 20 11 64 214 104 47 0 0 0 1 12 241 159 13 20 11 64 214 104 47 0 0 0 0 16 32 95 224 178 8 58 144 200 201 145 83 22 116 60 79 2 1 16 32 95 224 178 8 58 144 200 201 145 83 22 116 60 79 2 0 8 215 108 179 124 111 116 0 0 1 8 215 108 179 124 111 116 0 0 0 16 72 135 153 119 46 195 147 13 252 2 59 0 117 125 64 77 1 16 72 135 153 119 46 195 147 13 252 2 59 0 117 125 64 77 0 16 93 46 81 15 142 242 250 221 79 61 178 228 143 87 244 0 1 16 93 46 81 15 142 242 250 221 79 61 178 228 143 87 244 0 0 4 139 93 95 57 1 4 139 93 95 57 0 16 76 36 152 198 40 178 106 21 207 164 31 24 28 10 1 0 1 16 76 36 152 198 40 178 106 21 207 164 31 24 28 10 1 0 0 4 19 0 0 0 1 4 19 0 0 0 0 12 9 25 202 138 170 88 179 0 75 0 0 0 1 12 9 25 202 138 170 88 179 0 75 0 0 0 0 8 169 231 136 224 45 30 2 0 1 8 169 231 136 224 45 30 2 0 0 12 54 251 180 193 77 7 254 217 190 81 0 0 1 12 54 251 180 193 77 7 254 217 190 81 0 0 0 16 167 75 62 7 42 70 13 12 21 5 163 135 11 0 0 0 1 16 167 75 62 7 42 70 13 12 21 5 163 135 11 0 0 0 0 12 138 166 227 194 104 244 199 0 232 12 0 0 1 12 138 166 227 194 104 244 199 0 232 12 0 0 0 8 203 27 84 77 12 139 18 28 1 8 203 27 84 77 12 139 18 28 0 4 159 124 135 1 1 4 159 124 135 1 0 12 211 117 92 112 68 205 243 46 127 0 0 0 1 12 211 117 92 112 68 205 243 46 127 0 0 0 0 8 173 148 132 161 87 0 0 0 1 8 173 148 132 161 87 0 0 0 0 4 9 0 0 0 1 4 9 0 0 0 0 8 133 26 216 191 172 89 213 40 1 8 133 26 216 191 172 89 213 40 0 16 211 26 153 111 42 16 37 94 105 14 57 163 225 193 0 0 1 16 211 26 153 111 42 16 37 94 105 14 57 163 225 193 0 0 0 4 128 164 207 191 1 4 128 164 207 191 0 4 133 171 31 6 1 4 133 171 31 6 0 16 58 142 105 140 176 184 239 208 55 131 225 185 144 11 0 0 1 16 58 142 105 140 176 184 239 208 55 131 225 185 144 11 0 0 0 16 69 153 92 71 249 203 122 156 39 73 222 95 210 32 1 0 1 16 69 153 92 71 249 203 122 156 39 73 222 95 210 32 1 0 0 4 230 66 104 5 1 4 230 66 104 5 0 8 161 45 37 11 195 19 140 0 1 8 161 45 37 11 195 19 140 0 0 4 234 74 122 82 1 4 234 74 122 82 0 4 177 246 13 0 1 4 177 246 13 0 0 4 49 224 136 0 1 4 49 224 136 0 0 8 125 71 166 1 1 0 0 0 1 8 125 71 166 1 1 0 0 0 0 4 141 121 130 15 1 4 141 121 130 15 0 16 86 207 74 133 184 161 240 207 34 130 144 107 83 0 0 0 1 16 86 207 74 133 184 161 240 207 34 130 144 107 83 0 0 0 0 8 35 48 213 98 222 69 132 0 1 8 35 48 213 98 222 69 132 0 0 8 182 209 82 82 113 25 178 59 1 8 182 209 82 82 113 25 178 59 0 8 180 86 59 54 31 2 0 0 1 8 180 86 59 54 31 2 0 0 0 4 45 45 0 0 1 4 45 45 0 0 0 16 21 185 217 174 9 133 26 231 15 65 115 190 75 64 49 0 1 16 21 185 217 174 9 133 26 231 15 65 115 190 75 64 49 0 0 12 165 110 209 80 73 74 135 193 159 99 14 0 1 12 165 110 209 80 73 74 135 193 159 99 14 0 0 8 212 39 10 198 84 40 188 1 1 8 212 39 10 198 84 40 188 1 0 12 229 117 144 57 201 122 60 120 207 235 3 0 1 12 229 117 144 57 201 122 60 120 207 235 3 0 0 4 219 123 115 0 1 4 219 123 115 0 0 12 191 142 53 119 168 100 219 47 160 3 0 0 1 12 191 142 53 119 168 100 219 47 160 3 0 0 0 16 227 12 18 159 53 213 206 140 179 189 209 125 126 174 21 0 1 16 227 12 18 159 53 213 206 140 179 189 209 125 126 174 21 0 0 12 108 182 247 254 150 50 85 5 140 125 196 22 1 12 108 182 247 254 150 50 85 5 140 125 196 22 0 16 92 126 28 210 248 52 158 233 246 129 152 227 129 228 4 25 1 16 92 126 28 210 248 52 158 233 246 129 152 227 129 228 4 25 0 8 211 136 158 83 43 95 0 0 1 8 211 136 158 83 43 95 0 0 0 8 83 253 195 70 35 14 7 1 1 8 83 253 195 70 35 14 7 1 0 12 105 111 185 175 206 124 63 83 199 79 41 0 1 12 105 111 185 175 206 124 63 83 199 79 41 0 0 4 6 50 0 0 1 4 6 50 0 0 0 12 183 89 151 17 18 108 172 173 36 98 141 13 1 12 183 89 151 17 18 108 172 173 36 98 141 13 0 8 218 149 242 52 5 0 0 0 1 8 218 149 242 52 5 0 0 0 0 4 84 210 0 0 1 4 84 210 0 0 0 8 227 16 100 125 154 10 22 0 1 8 227 16 100 125 154 10 22 0 0 4 99 11 2 0 1 4 99 11 2 0 0 12 59 200 146 111 178 201 210 58 7 10 0 0 1 12 59 200 146 111 178 201 210 58 7 10 0 0 0 8 245 98 135 241 52 234 83 2 1 8 245 98 135 241 52 234 83 2 0 8 111 24 151 152 13 0 0 0 1 8 111 24 151 152 13 0 0 0 0 4 214 0 0 0 1 4 214 0 0 0 0 12 107 171 142 230 68 214 222 6 143 20 0 0 1 12 107 171 142 230 68 214 222 6 143 20 0 0 0 16 31 138 93 248 13 219 151 196 232 112 179 55 114 0 0 0 1 16 31 138 93 248 13 219 151 196 232 112 179 55 114 0 0 0 0 12 126 160 35 63 198 30 3 106 28 63 3 6 1 12 126 160 35 63 198 30 3 106 28 63 3 6 0 4 104 8 59 0 1 4 104 8 59 0 0 4 211 64 154 42 1 4 211 64 154 42 0 16 190 175 183 140 51 33 188 44 220 15 129 79 197 5 0 0 1 16 190 175 183 140 51 33 188 44 220 15 129 79 197 5 0 0 0 4 58 149 0 0 1 4 58 149 0 0 0 8 168 78 159 61 141 1 0 0 1 8 168 78 159 61 141 1 0 0 0 8 50 34 114 75 132 0 0 0 1 8 50 34 114 75 132 0 0 0 0 12 228 96 210 155 189 131 157 123 187 84 8 0 1 12 228 96 210 155 189 131 157 123 187 84 8 0 0 8 105 43 140 252 152 3 0 0 1 8 105 43 140 252 152 3 0 0 0 8 93 153 83 251 251 19 6 0 1 8 93 153 83 251 251 19 6 0 0 8 59 202 65 95 133 34 100 0 1 8 59 202 65 95 133 34 100 0 0 16 175 130 225 146 216 107 99 14 39 177 93 74 28 0 0 0 1 16 175 130 225 146 216 107 99 14 39 177 93 74 28 0 0 0 0 12 60 102 67 81 214 180 246 82 1 0 0 0 1 12 60 102 67 81 214 180 246 82 1 0 0 0 0 4 29 156 0 0 1 4 29 156 0 0 0 4 144 22 0 0 1 4 144 22 0 0 0 16 126 85 237 254 119 29 6 190 202 60 208 130 101 7 221 121 1 16 126 85 237 254 119 29 6 190 202 60 208 130 101 7 221 121 0 8 109 138 127 241 6 0 0 0 1 8 109 138 127 241 6 0 0 0 0 4 104 29 47 0 1 4 104 29 47 0 0 16 105 197 115 163 120 218 156 57 157 204 105 245 2 0 0 0 1 16 105 197 115 163 120 218 156 57 157 204 105 245 2 0 0 0 0 16 43 62 73 147 228 196 140 60 148 83 16 164 4 0 0 0 1 16 43 62 73 147 228 196 140 60 148 83 16 164 4 0 0 0 0 4 31 0 0 0 1 4 31 0 0 0 0 8 241 157 192 68 3 0 0 0 1 8 241 157 192 68 3 0 0 0 0 16 108 147 5 178 33 167 30 134 205 25 105 66 48 22 245 0 1 16 108 147 5 178 33 167 30 134 205 25 105 66 48 22 245 0 0 8 129 42 147 65 1 0 0 0 1 8 129 42 147 65 1 0 0 0 0 12 246 130 162 45 151 113 85 86 26 158 229 111 1 12 246 130 162 45 151 113 85 86 26 158 229 111 0 4 169 64 0 0 1 4 169 64 0 0 0 8 239 189 219 253 42 82 213 153 1 8 239 189 219 253 42 82 213 153 0 8 3 41 244 12 23 4 0 0 1 8 3 41 244 12 23 4 0 0 0 12 45 29 75 228 251 90 142 140 229 6 0 0 1 12 45 29 75 228 251 90 142 140 229 6 0 0 0 8 46 253 114 12 61 0 0 0 1 8 46 253 114 12 61 0 0 0 0 4 182 105 196 214 1 4 182 105 196 214 0 16 85 197 138 192 105 13 137 11 199 237 60 146 247 3 63 24 1 16 85 197 138 192 105 13 137 11 199 237 60 146 247 3 63 24 0 8 62 83 233 195 226 186 158 9 1 8 62 83 233 195 226 186 158 9 0 4 255 213 102 22 1 4 255 213 102 22
diff --git a/libs/multiprecision/test/cpp_int128_serial64.txt b/libs/multiprecision/test/cpp_int128_serial64.txt
new file mode 100644
index 0000000000..f5c841c522
--- /dev/null
+++ b/libs/multiprecision/test/cpp_int128_serial64.txt
@@ -0,0 +1 @@
+22 serialization::archive 10 0 0 0 0 0 16 37 8 254 63 21 239 57 20 229 108 249 176 89 1 0 0 1 16 37 8 254 63 21 239 57 20 229 108 249 176 89 1 0 0 0 8 44 53 2 0 0 0 0 0 1 8 44 53 2 0 0 0 0 0 0 16 255 227 23 91 116 215 6 77 105 216 187 1 221 183 7 0 1 16 255 227 23 91 116 215 6 77 105 216 187 1 221 183 7 0 0 16 215 97 73 133 223 240 209 70 227 76 76 44 42 9 0 0 1 16 215 97 73 133 223 240 209 70 227 76 76 44 42 9 0 0 0 8 26 205 1 0 0 0 0 0 1 8 26 205 1 0 0 0 0 0 0 16 171 248 220 122 202 115 96 223 240 82 153 66 149 194 43 14 1 16 171 248 220 122 202 115 96 223 240 82 153 66 149 194 43 14 0 16 73 169 70 111 188 124 78 80 182 195 40 65 247 218 58 0 1 16 73 169 70 111 188 124 78 80 182 195 40 65 247 218 58 0 0 8 55 1 42 59 0 0 0 0 1 8 55 1 42 59 0 0 0 0 0 16 112 146 42 85 255 28 14 50 168 228 0 0 0 0 0 0 1 16 112 146 42 85 255 28 14 50 168 228 0 0 0 0 0 0 0 8 3 132 142 0 89 0 0 0 1 8 3 132 142 0 89 0 0 0 0 8 59 31 0 0 0 0 0 0 1 8 59 31 0 0 0 0 0 0 0 16 128 184 17 143 213 41 148 184 91 0 0 0 0 0 0 0 1 16 128 184 17 143 213 41 148 184 91 0 0 0 0 0 0 0 0 8 52 43 163 205 58 0 0 0 1 8 52 43 163 205 58 0 0 0 0 8 7 136 199 3 0 0 0 0 1 8 7 136 199 3 0 0 0 0 0 16 103 144 142 223 219 161 68 75 104 0 0 0 0 0 0 0 1 16 103 144 142 223 219 161 68 75 104 0 0 0 0 0 0 0 0 16 231 211 175 248 223 4 118 100 4 104 73 218 45 121 30 164 1 16 231 211 175 248 223 4 118 100 4 104 73 218 45 121 30 164 0 16 64 136 51 28 35 115 186 14 0 15 31 170 194 137 96 1 1 16 64 136 51 28 35 115 186 14 0 15 31 170 194 137 96 1 0 16 6 253 75 10 176 96 217 180 15 153 73 162 221 96 13 175 1 16 6 253 75 10 176 96 217 180 15 153 73 162 221 96 13 175 0 16 9 195 227 5 98 90 197 22 123 173 13 24 184 217 65 14 1 16 9 195 227 5 98 90 197 22 123 173 13 24 184 217 65 14 0 16 36 207 83 207 252 162 46 155 216 62 210 211 118 157 254 13 1 16 36 207 83 207 252 162 46 155 216 62 210 211 118 157 254 13 0 8 48 115 9 0 0 0 0 0 1 8 48 115 9 0 0 0 0 0 0 16 18 132 205 178 240 43 208 33 177 56 170 10 0 0 0 0 1 16 18 132 205 178 240 43 208 33 177 56 170 10 0 0 0 0 0 16 0 134 168 204 110 75 199 196 245 20 142 108 179 194 4 27 1 16 0 134 168 204 110 75 199 196 245 20 142 108 179 194 4 27 0 16 137 40 185 28 226 228 143 223 62 177 68 144 87 133 253 16 1 16 137 40 185 28 226 228 143 223 62 177 68 144 87 133 253 16 0 16 241 205 249 80 146 210 1 55 43 173 109 143 84 117 209 0 1 16 241 205 249 80 146 210 1 55 43 173 109 143 84 117 209 0 0 8 171 208 0 0 0 0 0 0 1 8 171 208 0 0 0 0 0 0 0 8 131 223 243 126 121 98 88 88 1 8 131 223 243 126 121 98 88 88 0 16 34 183 141 118 51 30 229 127 23 141 157 166 11 0 0 0 1 16 34 183 141 118 51 30 229 127 23 141 157 166 11 0 0 0 0 16 58 245 156 2 19 251 183 255 219 45 27 253 9 0 0 0 1 16 58 245 156 2 19 251 183 255 219 45 27 253 9 0 0 0 0 8 153 44 205 37 255 0 0 0 1 8 153 44 205 37 255 0 0 0 0 8 246 238 8 0 0 0 0 0 1 8 246 238 8 0 0 0 0 0 0 8 7 0 0 0 0 0 0 0 1 8 7 0 0 0 0 0 0 0 0 8 8 53 135 13 104 37 51 0 1 8 8 53 135 13 104 37 51 0 0 8 89 148 1 0 0 0 0 0 1 8 89 148 1 0 0 0 0 0 0 16 220 42 79 160 82 149 191 194 119 33 248 143 15 159 45 0 1 16 220 42 79 160 82 149 191 194 119 33 248 143 15 159 45 0 0 16 85 100 42 49 80 139 191 189 106 176 0 0 0 0 0 0 1 16 85 100 42 49 80 139 191 189 106 176 0 0 0 0 0 0 0 16 244 148 210 156 57 140 123 241 227 171 90 25 5 0 0 0 1 16 244 148 210 156 57 140 123 241 227 171 90 25 5 0 0 0 0 16 11 118 127 38 199 175 117 18 23 63 204 177 158 199 1 0 1 16 11 118 127 38 199 175 117 18 23 63 204 177 158 199 1 0 0 16 133 146 81 4 4 226 254 92 139 68 104 13 103 27 212 5 1 16 133 146 81 4 4 226 254 92 139 68 104 13 103 27 212 5 0 16 32 198 99 47 231 25 151 81 1 0 0 0 0 0 0 0 1 16 32 198 99 47 231 25 151 81 1 0 0 0 0 0 0 0 0 16 137 233 68 65 94 40 65 221 33 159 2 0 0 0 0 0 1 16 137 233 68 65 94 40 65 221 33 159 2 0 0 0 0 0 0 16 83 34 240 62 72 73 173 41 206 111 192 80 37 0 0 0 1 16 83 34 240 62 72 73 173 41 206 111 192 80 37 0 0 0 0 8 97 0 0 0 0 0 0 0 1 8 97 0 0 0 0 0 0 0 0 8 138 189 92 247 169 147 0 0 1 8 138 189 92 247 169 147 0 0 0 16 161 190 61 94 114 107 106 245 122 129 25 170 59 22 0 0 1 16 161 190 61 94 114 107 106 245 122 129 25 170 59 22 0 0 0 8 2 130 235 26 0 0 0 0 1 8 2 130 235 26 0 0 0 0 0 16 109 53 53 179 152 230 103 254 224 148 134 9 132 15 236 0 1 16 109 53 53 179 152 230 103 254 224 148 134 9 132 15 236 0 0 16 213 70 114 188 144 14 234 210 9 163 24 0 0 0 0 0 1 16 213 70 114 188 144 14 234 210 9 163 24 0 0 0 0 0 0 16 33 107 225 17 111 28 212 164 73 197 193 0 0 0 0 0 1 16 33 107 225 17 111 28 212 164 73 197 193 0 0 0 0 0 0 8 146 173 184 73 148 56 4 0 1 8 146 173 184 73 148 56 4 0 0 16 44 163 145 53 213 144 139 110 48 114 127 219 0 0 0 0 1 16 44 163 145 53 213 144 139 110 48 114 127 219 0 0 0 0 0 16 173 188 229 221 105 34 146 117 254 239 166 51 0 0 0 0 1 16 173 188 229 221 105 34 146 117 254 239 166 51 0 0 0 0 0 16 4 69 232 58 38 108 238 203 253 199 77 145 0 0 0 0 1 16 4 69 232 58 38 108 238 203 253 199 77 145 0 0 0 0 0 8 107 215 91 159 76 215 198 33 1 8 107 215 91 159 76 215 198 33 0 8 11 77 137 244 167 98 1 0 1 8 11 77 137 244 167 98 1 0 0 8 186 129 52 47 127 178 152 0 1 8 186 129 52 47 127 178 152 0 0 16 201 180 214 22 110 46 55 229 64 200 26 0 0 0 0 0 1 16 201 180 214 22 110 46 55 229 64 200 26 0 0 0 0 0 0 8 208 223 215 0 0 0 0 0 1 8 208 223 215 0 0 0 0 0 0 8 64 29 111 0 0 0 0 0 1 8 64 29 111 0 0 0 0 0 0 8 189 214 205 206 195 1 0 0 1 8 189 214 205 206 195 1 0 0 0 16 186 181 125 189 118 38 122 114 34 230 100 1 0 0 0 0 1 16 186 181 125 189 118 38 122 114 34 230 100 1 0 0 0 0 0 16 48 214 190 50 128 72 169 213 65 189 101 126 93 0 0 0 1 16 48 214 190 50 128 72 169 213 65 189 101 126 93 0 0 0 0 8 30 0 0 0 0 0 0 0 1 8 30 0 0 0 0 0 0 0 0 8 13 245 224 15 53 1 0 0 1 8 13 245 224 15 53 1 0 0 0 8 202 238 193 147 15 0 0 0 1 8 202 238 193 147 15 0 0 0 0 16 128 116 52 14 187 110 131 0 144 16 182 41 228 82 0 0 1 16 128 116 52 14 187 110 131 0 144 16 182 41 228 82 0 0 0 8 100 0 0 0 0 0 0 0 1 8 100 0 0 0 0 0 0 0 0 8 89 180 24 0 0 0 0 0 1 8 89 180 24 0 0 0 0 0 0 8 34 124 0 0 0 0 0 0 1 8 34 124 0 0 0 0 0 0 0 16 250 39 95 39 67 1 167 94 233 155 216 3 100 183 116 118 1 16 250 39 95 39 67 1 167 94 233 155 216 3 100 183 116 118 0 16 128 143 58 104 102 58 4 109 40 213 225 112 135 3 0 0 1 16 128 143 58 104 102 58 4 109 40 213 225 112 135 3 0 0 0 16 182 167 174 164 204 91 160 188 128 28 213 237 236 1 0 0 1 16 182 167 174 164 204 91 160 188 128 28 213 237 236 1 0 0 0 16 198 204 232 165 163 187 202 201 158 244 103 2 0 0 0 0 1 16 198 204 232 165 163 187 202 201 158 244 103 2 0 0 0 0 0 8 52 41 2 0 0 0 0 0 1 8 52 41 2 0 0 0 0 0 0 8 95 141 198 19 2 2 0 0 1 8 95 141 198 19 2 2 0 0 0 16 254 2 20 231 85 24 126 151 177 138 78 145 2 0 0 0 1 16 254 2 20 231 85 24 126 151 177 138 78 145 2 0 0 0 0 16 127 34 155 130 248 106 222 183 31 216 113 190 213 220 134 3 1 16 127 34 155 130 248 106 222 183 31 216 113 190 213 220 134 3 0 8 185 223 116 102 248 10 180 190 1 8 185 223 116 102 248 10 180 190 0 8 28 0 0 0 0 0 0 0 1 8 28 0 0 0 0 0 0 0 0 16 152 5 232 129 30 191 73 187 48 122 16 0 0 0 0 0 1 16 152 5 232 129 30 191 73 187 48 122 16 0 0 0 0 0 0 8 22 174 151 82 172 15 209 0 1 8 22 174 151 82 172 15 209 0 0 8 167 181 0 0 0 0 0 0 1 8 167 181 0 0 0 0 0 0 0 8 34 164 28 2 70 207 0 0 1 8 34 164 28 2 70 207 0 0 0 8 73 175 2 31 0 0 0 0 1 8 73 175 2 31 0 0 0 0 0 16 191 123 4 56 221 89 117 10 45 163 68 188 6 0 0 0 1 16 191 123 4 56 221 89 117 10 45 163 68 188 6 0 0 0 0 8 32 0 0 0 0 0 0 0 1 8 32 0 0 0 0 0 0 0 0 16 153 114 240 104 169 142 230 72 169 205 183 45 29 0 0 0 1 16 153 114 240 104 169 142 230 72 169 205 183 45 29 0 0 0 0 8 104 0 0 0 0 0 0 0 1 8 104 0 0 0 0 0 0 0 0 8 250 4 201 0 0 0 0 0 1 8 250 4 201 0 0 0 0 0 0 8 235 69 188 51 63 136 32 0 1 8 235 69 188 51 63 136 32 0 0 8 194 197 163 82 68 56 132 186 1 8 194 197 163 82 68 56 132 186 0 8 209 149 168 103 172 0 245 13 1 8 209 149 168 103 172 0 245 13 0 8 95 103 181 13 108 192 162 0 1 8 95 103 181 13 108 192 162 0 0 8 203 201 28 164 225 153 81 140 1 8 203 201 28 164 225 153 81 140 0 16 61 213 68 146 15 4 91 15 163 73 1 0 0 0 0 0 1 16 61 213 68 146 15 4 91 15 163 73 1 0 0 0 0 0 0 16 94 145 165 53 103 5 192 143 85 206 43 169 47 0 0 0 1 16 94 145 165 53 103 5 192 143 85 206 43 169 47 0 0 0 0 16 50 151 92 208 203 159 144 76 92 251 123 11 0 0 0 0 1 16 50 151 92 208 203 159 144 76 92 251 123 11 0 0 0 0 0 16 190 5 157 205 191 246 224 1 231 37 151 216 251 10 66 0 1 16 190 5 157 205 191 246 224 1 231 37 151 216 251 10 66 0 0 16 77 149 133 65 141 196 79 8 138 249 60 120 0 0 0 0 1 16 77 149 133 65 141 196 79 8 138 249 60 120 0 0 0 0 0 16 220 86 90 254 157 201 65 199 11 135 199 91 106 0 0 0 1 16 220 86 90 254 157 201 65 199 11 135 199 91 106 0 0 0 0 8 204 151 79 174 7 0 0 0 1 8 204 151 79 174 7 0 0 0 0 16 24 141 202 136 150 117 206 49 76 1 63 7 0 0 0 0 1 16 24 141 202 136 150 117 206 49 76 1 63 7 0 0 0 0 0 16 119 133 5 211 186 190 56 29 220 201 21 0 0 0 0 0 1 16 119 133 5 211 186 190 56 29 220 201 21 0 0 0 0 0 0 8 7 0 0 0 0 0 0 0 1 8 7 0 0 0 0 0 0 0 0 16 72 15 156 17 9 105 177 79 67 146 0 0 0 0 0 0 1 16 72 15 156 17 9 105 177 79 67 146 0 0 0 0 0 0 0 16 249 168 160 82 66 6 134 143 40 37 107 13 0 0 0 0 1 16 249 168 160 82 66 6 134 143 40 37 107 13 0 0 0 0 0 8 4 185 65 0 0 0 0 0 1 8 4 185 65 0 0 0 0 0 0 16 12 112 73 235 143 130 15 35 185 148 4 0 0 0 0 0 1 16 12 112 73 235 143 130 15 35 185 148 4 0 0 0 0 0 0 8 245 60 0 0 0 0 0 0 1 8 245 60 0 0 0 0 0 0 0 8 42 49 128 144 182 3 210 10 1 8 42 49 128 144 182 3 210 10 0 16 213 148 0 33 85 171 97 185 1 0 0 0 0 0 0 0 1 16 213 148 0 33 85 171 97 185 1 0 0 0 0 0 0 0 0 16 54 54 252 21 199 151 88 16 3 233 15 10 1 0 0 0 1 16 54 54 252 21 199 151 88 16 3 233 15 10 1 0 0 0 0 16 34 61 250 8 165 194 32 79 231 214 230 190 194 240 114 7 1 16 34 61 250 8 165 194 32 79 231 214 230 190 194 240 114 7 0 16 104 245 221 84 173 227 229 31 19 5 0 0 0 0 0 0 1 16 104 245 221 84 173 227 229 31 19 5 0 0 0 0 0 0 0 8 240 84 253 169 3 21 0 0 1 8 240 84 253 169 3 21 0 0 0 16 178 134 22 38 169 249 193 201 236 162 74 212 159 200 1 0 1 16 178 134 22 38 169 249 193 201 236 162 74 212 159 200 1 0 0 16 188 15 207 107 111 126 74 110 184 12 0 0 0 0 0 0 1 16 188 15 207 107 111 126 74 110 184 12 0 0 0 0 0 0 0 16 135 53 52 188 239 136 188 128 108 91 237 149 155 0 0 0 1 16 135 53 52 188 239 136 188 128 108 91 237 149 155 0 0 0 0 8 214 243 150 104 0 0 0 0 1 8 214 243 150 104 0 0 0 0 0 8 28 0 0 0 0 0 0 0 1 8 28 0 0 0 0 0 0 0 0 16 176 32 111 181 139 147 85 223 223 124 248 32 1 0 0 0 1 16 176 32 111 181 139 147 85 223 223 124 248 32 1 0 0 0 0 16 220 111 201 142 140 206 56 69 169 37 41 8 209 2 0 0 1 16 220 111 201 142 140 206 56 69 169 37 41 8 209 2 0 0 0 8 49 22 111 81 3 0 0 0 1 8 49 22 111 81 3 0 0 0 0 16 12 25 137 51 170 194 60 198 250 154 97 254 184 1 0 0 1 16 12 25 137 51 170 194 60 198 250 154 97 254 184 1 0 0 0 16 69 58 72 167 111 230 201 95 3 0 0 0 0 0 0 0 1 16 69 58 72 167 111 230 201 95 3 0 0 0 0 0 0 0 0 16 125 163 188 25 216 18 75 50 70 157 149 113 247 26 143 0 1 16 125 163 188 25 216 18 75 50 70 157 149 113 247 26 143 0 0 16 178 36 11 168 110 204 18 55 17 174 31 2 0 0 0 0 1 16 178 36 11 168 110 204 18 55 17 174 31 2 0 0 0 0 0 8 54 253 119 216 234 173 18 0 1 8 54 253 119 216 234 173 18 0 0 16 58 138 90 25 198 44 141 36 21 50 150 6 116 188 7 0 1 16 58 138 90 25 198 44 141 36 21 50 150 6 116 188 7 0 0 8 48 232 209 253 50 174 219 0 1 8 48 232 209 253 50 174 219 0 0 16 98 231 108 128 132 248 24 45 51 233 172 99 10 48 164 6 1 16 98 231 108 128 132 248 24 45 51 233 172 99 10 48 164 6 0 16 63 148 202 142 42 126 95 240 217 3 0 0 0 0 0 0 1 16 63 148 202 142 42 126 95 240 217 3 0 0 0 0 0 0 0 16 211 178 116 92 43 40 217 152 60 0 0 0 0 0 0 0 1 16 211 178 116 92 43 40 217 152 60 0 0 0 0 0 0 0 0 8 173 137 40 0 0 0 0 0 1 8 173 137 40 0 0 0 0 0 0 8 205 61 6 0 0 0 0 0 1 8 205 61 6 0 0 0 0 0 0 16 88 56 246 47 152 18 79 21 156 80 31 84 2 0 0 0 1 16 88 56 246 47 152 18 79 21 156 80 31 84 2 0 0 0 0 8 47 61 12 0 0 0 0 0 1 8 47 61 12 0 0 0 0 0 0 8 160 13 53 81 0 0 0 0 1 8 160 13 53 81 0 0 0 0 0 8 32 187 228 46 5 0 0 0 1 8 32 187 228 46 5 0 0 0 0 16 182 2 196 123 7 142 61 89 72 17 68 180 113 1 0 0 1 16 182 2 196 123 7 142 61 89 72 17 68 180 113 1 0 0 0 16 120 38 117 243 129 114 66 195 74 148 250 9 85 2 0 0 1 16 120 38 117 243 129 114 66 195 74 148 250 9 85 2 0 0 0 16 233 65 214 75 155 124 3 9 180 156 12 179 244 180 184 111 1 16 233 65 214 75 155 124 3 9 180 156 12 179 244 180 184 111 0 8 23 43 78 31 7 0 0 0 1 8 23 43 78 31 7 0 0 0 0 8 229 205 68 230 125 8 0 0 1 8 229 205 68 230 125 8 0 0 0 16 141 13 91 38 76 112 200 170 250 212 26 1 124 1 0 0 1 16 141 13 91 38 76 112 200 170 250 212 26 1 124 1 0 0 0 8 41 127 133 106 252 0 0 0 1 8 41 127 133 106 252 0 0 0 0 8 60 152 174 163 1 0 0 0 1 8 60 152 174 163 1 0 0 0 0 8 15 0 0 0 0 0 0 0 1 8 15 0 0 0 0 0 0 0 0 16 24 134 100 43 20 248 31 252 145 239 220 39 16 158 117 0 1 16 24 134 100 43 20 248 31 252 145 239 220 39 16 158 117 0 0 8 175 72 124 35 0 0 0 0 1 8 175 72 124 35 0 0 0 0 0 8 244 49 63 40 249 6 0 0 1 8 244 49 63 40 249 6 0 0 0 16 200 70 212 56 217 96 254 3 156 68 43 183 192 143 8 0 1 16 200 70 212 56 217 96 254 3 156 68 43 183 192 143 8 0 0 8 219 122 30 5 0 0 0 0 1 8 219 122 30 5 0 0 0 0 0 16 152 26 100 200 15 32 129 3 69 217 98 106 201 17 0 0 1 16 152 26 100 200 15 32 129 3 69 217 98 106 201 17 0 0 0 8 220 43 90 166 0 0 0 0 1 8 220 43 90 166 0 0 0 0 0 16 1 74 237 23 159 49 174 181 39 193 105 137 206 197 208 2 1 16 1 74 237 23 159 49 174 181 39 193 105 137 206 197 208 2 0 16 2 162 116 55 83 71 3 224 58 31 0 0 0 0 0 0 1 16 2 162 116 55 83 71 3 224 58 31 0 0 0 0 0 0 0 16 219 109 251 155 10 110 246 132 227 114 221 29 13 0 0 0 1 16 219 109 251 155 10 110 246 132 227 114 221 29 13 0 0 0 0 8 142 91 8 37 228 217 181 55 1 8 142 91 8 37 228 217 181 55 0 16 189 154 57 63 85 92 144 161 46 212 177 53 47 4 29 90 1 16 189 154 57 63 85 92 144 161 46 212 177 53 47 4 29 90 0 8 14 190 95 210 115 71 0 0 1 8 14 190 95 210 115 71 0 0 0 8 47 2 0 0 0 0 0 0 1 8 47 2 0 0 0 0 0 0 0 16 174 101 211 131 68 66 216 221 166 22 253 95 142 0 0 0 1 16 174 101 211 131 68 66 216 221 166 22 253 95 142 0 0 0 0 16 198 1 17 204 40 96 166 196 65 117 215 34 58 0 0 0 1 16 198 1 17 204 40 96 166 196 65 117 215 34 58 0 0 0 0 16 155 139 7 253 130 3 210 83 54 12 0 0 0 0 0 0 1 16 155 139 7 253 130 3 210 83 54 12 0 0 0 0 0 0 0 16 164 44 176 210 229 112 131 132 31 15 0 0 0 0 0 0 1 16 164 44 176 210 229 112 131 132 31 15 0 0 0 0 0 0 0 16 197 192 242 64 16 33 210 29 215 0 0 0 0 0 0 0 1 16 197 192 242 64 16 33 210 29 215 0 0 0 0 0 0 0 0 16 247 202 39 209 87 88 199 30 93 71 125 42 0 0 0 0 1 16 247 202 39 209 87 88 199 30 93 71 125 42 0 0 0 0 0 16 4 91 228 117 233 235 177 229 123 87 8 196 42 243 50 0 1 16 4 91 228 117 233 235 177 229 123 87 8 196 42 243 50 0 0 16 177 254 109 38 43 208 254 238 71 49 150 0 0 0 0 0 1 16 177 254 109 38 43 208 254 238 71 49 150 0 0 0 0 0 0 8 66 45 234 248 31 0 0 0 1 8 66 45 234 248 31 0 0 0 0 16 105 210 161 233 29 116 129 70 143 74 88 0 0 0 0 0 1 16 105 210 161 233 29 116 129 70 143 74 88 0 0 0 0 0 0 16 43 147 216 50 132 234 9 232 69 151 33 92 3 0 0 0 1 16 43 147 216 50 132 234 9 232 69 151 33 92 3 0 0 0 0 8 205 117 182 80 150 98 9 0 1 8 205 117 182 80 150 98 9 0 0 16 58 110 227 57 169 95 102 122 66 27 229 232 1 0 0 0 1 16 58 110 227 57 169 95 102 122 66 27 229 232 1 0 0 0 0 16 230 26 192 136 251 74 228 31 223 1 0 0 0 0 0 0 1 16 230 26 192 136 251 74 228 31 223 1 0 0 0 0 0 0 0 8 27 77 126 125 205 208 0 0 1 8 27 77 126 125 205 208 0 0 0 8 105 207 185 22 0 0 0 0 1 8 105 207 185 22 0 0 0 0 0 16 177 81 106 231 133 43 4 174 118 0 0 0 0 0 0 0 1 16 177 81 106 231 133 43 4 174 118 0 0 0 0 0 0 0 0 16 151 193 51 229 154 159 106 17 13 0 0 0 0 0 0 0 1 16 151 193 51 229 154 159 106 17 13 0 0 0 0 0 0 0 0 8 9 5 0 0 0 0 0 0 1 8 9 5 0 0 0 0 0 0 0 8 154 3 91 22 110 99 13 0 1 8 154 3 91 22 110 99 13 0 0 8 46 0 0 0 0 0 0 0 1 8 46 0 0 0 0 0 0 0 0 8 165 178 204 139 226 102 0 0 1 8 165 178 204 139 226 102 0 0 0 16 255 166 141 198 137 1 215 240 13 0 0 0 0 0 0 0 1 16 255 166 141 198 137 1 215 240 13 0 0 0 0 0 0 0 0 16 240 214 172 107 207 30 49 24 165 26 0 0 0 0 0 0 1 16 240 214 172 107 207 30 49 24 165 26 0 0 0 0 0 0 0 16 169 62 163 160 84 45 148 118 196 244 39 206 4 0 0 0 1 16 169 62 163 160 84 45 148 118 196 244 39 206 4 0 0 0 0 8 51 45 245 18 221 94 0 0 1 8 51 45 245 18 221 94 0 0 0 16 56 138 53 228 133 56 250 127 145 126 56 71 96 42 205 0 1 16 56 138 53 228 133 56 250 127 145 126 56 71 96 42 205 0 0 16 96 10 238 153 254 99 179 181 215 150 183 141 204 183 59 15 1 16 96 10 238 153 254 99 179 181 215 150 183 141 204 183 59 15 0 8 234 122 2 0 0 0 0 0 1 8 234 122 2 0 0 0 0 0 0 8 171 166 2 0 0 0 0 0 1 8 171 166 2 0 0 0 0 0 0 16 70 249 164 0 38 67 121 141 34 1 0 0 0 0 0 0 1 16 70 249 164 0 38 67 121 141 34 1 0 0 0 0 0 0 0 8 114 2 113 130 156 93 2 0 1 8 114 2 113 130 156 93 2 0 0 8 128 254 47 66 253 230 215 9 1 8 128 254 47 66 253 230 215 9 0 8 128 118 25 126 97 184 0 0 1 8 128 118 25 126 97 184 0 0 0 8 6 0 0 0 0 0 0 0 1 8 6 0 0 0 0 0 0 0 0 16 98 121 37 228 245 254 160 122 192 239 13 51 0 0 0 0 1 16 98 121 37 228 245 254 160 122 192 239 13 51 0 0 0 0 0 8 32 22 37 123 21 27 0 0 1 8 32 22 37 123 21 27 0 0 0 8 128 162 228 118 64 127 3 0 1 8 128 162 228 118 64 127 3 0 0 8 166 181 11 0 0 0 0 0 1 8 166 181 11 0 0 0 0 0 0 16 28 166 115 28 45 10 239 211 13 246 240 137 229 3 80 0 1 16 28 166 115 28 45 10 239 211 13 246 240 137 229 3 80 0 0 16 234 15 55 214 194 155 139 231 81 180 44 125 14 0 0 0 1 16 234 15 55 214 194 155 139 231 81 180 44 125 14 0 0 0 0 8 177 167 106 207 184 208 150 0 1 8 177 167 106 207 184 208 150 0 0 8 13 195 217 57 88 2 0 0 1 8 13 195 217 57 88 2 0 0 0 16 54 96 61 217 136 240 218 168 74 235 61 179 94 124 0 0 1 16 54 96 61 217 136 240 218 168 74 235 61 179 94 124 0 0 0 8 133 19 3 202 163 74 201 191 1 8 133 19 3 202 163 74 201 191 0 16 76 246 211 13 154 46 92 228 43 105 0 0 0 0 0 0 1 16 76 246 211 13 154 46 92 228 43 105 0 0 0 0 0 0 0 8 238 231 7 0 0 0 0 0 1 8 238 231 7 0 0 0 0 0 0 8 121 5 0 0 0 0 0 0 1 8 121 5 0 0 0 0 0 0 0 16 254 32 157 147 246 229 100 39 232 13 0 0 0 0 0 0 1 16 254 32 157 147 246 229 100 39 232 13 0 0 0 0 0 0 0 8 148 204 30 203 96 118 103 26 1 8 148 204 30 203 96 118 103 26 0 8 86 94 188 134 7 0 0 0 1 8 86 94 188 134 7 0 0 0 0 8 190 236 210 228 178 0 0 0 1 8 190 236 210 228 178 0 0 0 0 16 159 29 240 26 162 129 48 140 42 98 6 0 0 0 0 0 1 16 159 29 240 26 162 129 48 140 42 98 6 0 0 0 0 0 0 16 201 94 127 117 141 245 104 70 17 0 0 0 0 0 0 0 1 16 201 94 127 117 141 245 104 70 17 0 0 0 0 0 0 0 0 16 186 185 167 145 50 174 180 1 50 29 53 1 0 0 0 0 1 16 186 185 167 145 50 174 180 1 50 29 53 1 0 0 0 0 0 16 104 112 112 189 66 154 31 214 228 234 171 7 0 0 0 0 1 16 104 112 112 189 66 154 31 214 228 234 171 7 0 0 0 0 0 16 165 159 159 174 251 240 214 4 220 88 34 125 0 0 0 0 1 16 165 159 159 174 251 240 214 4 220 88 34 125 0 0 0 0 0 16 231 72 142 22 2 169 79 36 221 251 129 37 230 30 25 38 1 16 231 72 142 22 2 169 79 36 221 251 129 37 230 30 25 38 0 8 95 25 73 135 187 21 41 2 1 8 95 25 73 135 187 21 41 2 0 16 203 77 25 62 42 39 26 203 12 34 248 30 0 0 0 0 1 16 203 77 25 62 42 39 26 203 12 34 248 30 0 0 0 0 0 8 19 6 0 0 0 0 0 0 1 8 19 6 0 0 0 0 0 0 0 16 68 151 207 206 205 132 15 184 12 208 217 190 252 148 29 0 1 16 68 151 207 206 205 132 15 184 12 208 217 190 252 148 29 0 0 8 172 170 222 106 0 0 0 0 1 8 172 170 222 106 0 0 0 0 0 16 255 209 208 122 18 160 62 50 2 0 0 0 0 0 0 0 1 16 255 209 208 122 18 160 62 50 2 0 0 0 0 0 0 0 0 16 71 17 98 35 48 147 54 205 13 239 235 222 162 130 39 0 1 16 71 17 98 35 48 147 54 205 13 239 235 222 162 130 39 0 0 16 123 91 181 63 20 138 251 142 208 1 0 0 0 0 0 0 1 16 123 91 181 63 20 138 251 142 208 1 0 0 0 0 0 0 0 8 223 195 7 0 0 0 0 0 1 8 223 195 7 0 0 0 0 0 0 16 46 37 83 84 120 104 86 18 1 0 0 0 0 0 0 0 1 16 46 37 83 84 120 104 86 18 1 0 0 0 0 0 0 0 0 16 11 123 221 123 22 39 126 107 97 71 79 173 196 6 0 0 1 16 11 123 221 123 22 39 126 107 97 71 79 173 196 6 0 0 0 8 53 164 236 57 255 127 20 4 1 8 53 164 236 57 255 127 20 4 0 16 35 197 22 114 86 55 189 134 3 0 0 0 0 0 0 0 1 16 35 197 22 114 86 55 189 134 3 0 0 0 0 0 0 0 0 16 77 141 58 157 14 215 57 68 1 0 0 0 0 0 0 0 1 16 77 141 58 157 14 215 57 68 1 0 0 0 0 0 0 0 0 16 102 255 109 147 11 143 27 213 47 176 30 89 64 94 213 66 1 16 102 255 109 147 11 143 27 213 47 176 30 89 64 94 213 66 0 8 190 247 33 10 138 0 6 6 1 8 190 247 33 10 138 0 6 6 0 8 110 2 0 0 0 0 0 0 1 8 110 2 0 0 0 0 0 0 0 16 223 83 113 107 137 221 86 37 48 2 144 161 169 28 0 0 1 16 223 83 113 107 137 221 86 37 48 2 144 161 169 28 0 0 0 8 189 254 123 237 246 176 128 2 1 8 189 254 123 237 246 176 128 2 0 16 243 132 245 46 238 29 255 200 206 118 0 0 0 0 0 0 1 16 243 132 245 46 238 29 255 200 206 118 0 0 0 0 0 0 0 8 239 125 0 0 0 0 0 0 1 8 239 125 0 0 0 0 0 0 0 16 127 161 236 25 121 208 120 214 1 0 0 0 0 0 0 0 1 16 127 161 236 25 121 208 120 214 1 0 0 0 0 0 0 0 0 16 228 98 93 251 246 45 27 244 12 210 234 8 62 105 184 6 1 16 228 98 93 251 246 45 27 244 12 210 234 8 62 105 184 6 0 16 113 250 216 245 216 14 84 151 148 66 63 170 143 150 213 62 1 16 113 250 216 245 216 14 84 151 148 66 63 170 143 150 213 62 0 8 7 0 0 0 0 0 0 0 1 8 7 0 0 0 0 0 0 0 0 8 97 0 0 0 0 0 0 0 1 8 97 0 0 0 0 0 0 0 0 16 82 196 148 115 94 248 196 4 103 173 17 224 1 0 0 0 1 16 82 196 148 115 94 248 196 4 103 173 17 224 1 0 0 0 0 16 185 187 181 2 210 30 161 158 53 90 42 42 63 15 50 26 1 16 185 187 181 2 210 30 161 158 53 90 42 42 63 15 50 26 0 16 92 251 45 61 79 154 189 99 62 231 106 244 104 0 0 0 1 16 92 251 45 61 79 154 189 99 62 231 106 244 104 0 0 0 0 8 200 11 39 38 1 71 0 0 1 8 200 11 39 38 1 71 0 0 0 16 78 168 146 148 101 102 80 36 225 226 239 154 140 83 0 0 1 16 78 168 146 148 101 102 80 36 225 226 239 154 140 83 0 0 0 16 245 138 45 63 143 110 236 183 77 53 123 0 0 0 0 0 1 16 245 138 45 63 143 110 236 183 77 53 123 0 0 0 0 0 0 8 243 27 0 0 0 0 0 0 1 8 243 27 0 0 0 0 0 0 0 8 2 242 30 180 34 49 0 0 1 8 2 242 30 180 34 49 0 0 0 8 153 218 239 31 13 11 23 0 1 8 153 218 239 31 13 11 23 0 0 16 114 73 75 167 80 26 136 206 243 161 150 47 210 18 0 0 1 16 114 73 75 167 80 26 136 206 243 161 150 47 210 18 0 0 0 8 152 52 243 192 4 0 0 0 1 8 152 52 243 192 4 0 0 0 0 8 129 0 0 0 0 0 0 0 1 8 129 0 0 0 0 0 0 0 0 16 18 75 75 202 113 21 113 107 89 238 2 38 55 0 0 0 1 16 18 75 75 202 113 21 113 107 89 238 2 38 55 0 0 0 0 16 248 15 6 162 79 31 165 111 116 213 2 0 0 0 0 0 1 16 248 15 6 162 79 31 165 111 116 213 2 0 0 0 0 0 0 8 131 38 69 53 220 0 194 1 1 8 131 38 69 53 220 0 194 1 0 16 74 116 239 154 166 169 107 46 39 173 51 0 1 0 0 0 1 16 74 116 239 154 166 169 107 46 39 173 51 0 1 0 0 0 0 16 216 204 156 85 182 172 130 76 251 193 13 135 156 80 17 0 1 16 216 204 156 85 182 172 130 76 251 193 13 135 156 80 17 0 0 8 230 159 4 0 0 0 0 0 1 8 230 159 4 0 0 0 0 0 0 8 240 94 116 1 0 0 0 0 1 8 240 94 116 1 0 0 0 0 0 16 186 26 109 17 247 224 109 236 131 235 91 201 8 59 206 53 1 16 186 26 109 17 247 224 109 236 131 235 91 201 8 59 206 53 0 8 213 56 129 36 10 0 0 0 1 8 213 56 129 36 10 0 0 0 0 8 150 105 0 0 0 0 0 0 1 8 150 105 0 0 0 0 0 0 0 8 24 96 0 0 0 0 0 0 1 8 24 96 0 0 0 0 0 0 0 8 125 198 15 213 57 0 0 0 1 8 125 198 15 213 57 0 0 0 0 8 72 171 5 0 0 0 0 0 1 8 72 171 5 0 0 0 0 0 0 16 125 217 106 251 35 137 192 207 157 60 119 110 60 0 0 0 1 16 125 217 106 251 35 137 192 207 157 60 119 110 60 0 0 0 0 16 40 33 166 229 75 32 114 134 8 182 91 119 101 246 0 0 1 16 40 33 166 229 75 32 114 134 8 182 91 119 101 246 0 0 0 8 50 6 0 0 0 0 0 0 1 8 50 6 0 0 0 0 0 0 0 16 46 7 188 46 21 139 235 139 174 6 0 0 0 0 0 0 1 16 46 7 188 46 21 139 235 139 174 6 0 0 0 0 0 0 0 16 122 184 52 227 177 59 175 38 160 93 2 0 0 0 0 0 1 16 122 184 52 227 177 59 175 38 160 93 2 0 0 0 0 0 0 16 51 236 9 239 42 71 1 118 244 0 0 0 0 0 0 0 1 16 51 236 9 239 42 71 1 118 244 0 0 0 0 0 0 0 0 8 9 0 0 0 0 0 0 0 1 8 9 0 0 0 0 0 0 0 0 8 112 253 24 0 0 0 0 0 1 8 112 253 24 0 0 0 0 0 0 16 170 155 98 70 194 229 34 226 165 82 10 0 0 0 0 0 1 16 170 155 98 70 194 229 34 226 165 82 10 0 0 0 0 0 0 16 141 162 219 102 243 250 189 2 52 69 45 8 37 48 0 0 1 16 141 162 219 102 243 250 189 2 52 69 45 8 37 48 0 0 0 16 114 76 220 134 106 96 50 45 46 0 0 0 0 0 0 0 1 16 114 76 220 134 106 96 50 45 46 0 0 0 0 0 0 0 0 16 83 216 166 163 69 55 198 40 4 192 0 0 0 0 0 0 1 16 83 216 166 163 69 55 198 40 4 192 0 0 0 0 0 0 0 8 33 162 20 8 117 90 28 1 1 8 33 162 20 8 117 90 28 1 0 8 196 49 182 125 208 15 0 0 1 8 196 49 182 125 208 15 0 0 0 8 133 3 165 3 0 0 0 0 1 8 133 3 165 3 0 0 0 0 0 16 35 198 36 50 11 227 67 35 5 0 0 0 0 0 0 0 1 16 35 198 36 50 11 227 67 35 5 0 0 0 0 0 0 0 0 8 217 58 6 0 0 0 0 0 1 8 217 58 6 0 0 0 0 0 0 8 27 199 198 6 169 98 3 0 1 8 27 199 198 6 169 98 3 0 0 8 208 172 62 88 120 203 5 0 1 8 208 172 62 88 120 203 5 0 0 8 90 8 0 0 0 0 0 0 1 8 90 8 0 0 0 0 0 0 0 16 72 150 61 92 250 232 245 163 67 167 172 175 2 0 0 0 1 16 72 150 61 92 250 232 245 163 67 167 172 175 2 0 0 0 0 8 109 255 102 254 0 0 0 0 1 8 109 255 102 254 0 0 0 0 0 8 36 0 0 0 0 0 0 0 1 8 36 0 0 0 0 0 0 0 0 8 235 105 3 0 0 0 0 0 1 8 235 105 3 0 0 0 0 0 0 8 157 43 115 210 3 0 0 0 1 8 157 43 115 210 3 0 0 0 0 8 227 128 137 1 0 0 0 0 1 8 227 128 137 1 0 0 0 0 0 16 21 49 26 107 236 12 129 206 3 0 0 0 0 0 0 0 1 16 21 49 26 107 236 12 129 206 3 0 0 0 0 0 0 0 0 8 129 32 189 16 1 0 0 0 1 8 129 32 189 16 1 0 0 0 0 16 146 130 114 247 111 207 165 146 3 137 7 108 202 3 0 0 1 16 146 130 114 247 111 207 165 146 3 137 7 108 202 3 0 0 0 8 39 239 53 138 178 87 103 0 1 8 39 239 53 138 178 87 103 0 0 16 93 101 243 102 175 163 130 167 97 174 190 36 53 183 138 34 1 16 93 101 243 102 175 163 130 167 97 174 190 36 53 183 138 34 0 8 248 0 0 0 0 0 0 0 1 8 248 0 0 0 0 0 0 0 0 16 62 103 144 183 253 247 47 175 131 2 146 108 70 0 0 0 1 16 62 103 144 183 253 247 47 175 131 2 146 108 70 0 0 0 0 16 242 249 139 183 120 173 114 251 225 239 132 139 200 207 5 0 1 16 242 249 139 183 120 173 114 251 225 239 132 139 200 207 5 0 0 8 155 82 241 50 32 1 0 0 1 8 155 82 241 50 32 1 0 0 0 16 60 134 203 255 253 239 75 71 228 52 78 20 210 216 164 3 1 16 60 134 203 255 253 239 75 71 228 52 78 20 210 216 164 3 0 8 240 0 0 0 0 0 0 0 1 8 240 0 0 0 0 0 0 0 0 8 74 91 152 79 191 112 95 219 1 8 74 91 152 79 191 112 95 219 0 8 225 143 234 246 0 0 0 0 1 8 225 143 234 246 0 0 0 0 0 8 59 117 218 172 152 176 204 177 1 8 59 117 218 172 152 176 204 177 0 16 24 92 218 89 248 53 68 137 80 0 0 0 0 0 0 0 1 16 24 92 218 89 248 53 68 137 80 0 0 0 0 0 0 0 0 8 135 175 3 193 49 7 0 0 1 8 135 175 3 193 49 7 0 0 0 16 84 36 200 56 126 134 172 99 144 135 104 167 75 161 1 0 1 16 84 36 200 56 126 134 172 99 144 135 104 167 75 161 1 0 0 16 32 97 136 27 224 36 111 146 219 92 164 16 135 119 12 0 1 16 32 97 136 27 224 36 111 146 219 92 164 16 135 119 12 0 0 8 150 186 205 101 122 21 0 0 1 8 150 186 205 101 122 21 0 0 0 8 61 0 74 249 72 64 1 0 1 8 61 0 74 249 72 64 1 0 0 8 5 0 0 0 0 0 0 0 1 8 5 0 0 0 0 0 0 0 0 8 85 231 0 0 0 0 0 0 1 8 85 231 0 0 0 0 0 0 0 8 7 53 39 0 0 0 0 0 1 8 7 53 39 0 0 0 0 0 0 16 184 113 56 241 136 99 250 169 41 38 17 218 6 0 0 0 1 16 184 113 56 241 136 99 250 169 41 38 17 218 6 0 0 0 0 16 76 17 162 144 32 230 52 94 118 23 68 114 229 89 0 0 1 16 76 17 162 144 32 230 52 94 118 23 68 114 229 89 0 0 0 8 89 183 34 241 180 158 11 0 1 8 89 183 34 241 180 158 11 0 0 8 71 186 244 17 0 0 0 0 1 8 71 186 244 17 0 0 0 0 0 8 63 193 206 147 0 0 0 0 1 8 63 193 206 147 0 0 0 0 0 8 65 67 174 89 21 0 0 0 1 8 65 67 174 89 21 0 0 0 0 8 24 124 240 73 208 51 10 0 1 8 24 124 240 73 208 51 10 0 0 8 127 149 228 141 130 187 206 212 1 8 127 149 228 141 130 187 206 212 0 8 150 21 0 0 0 0 0 0 1 8 150 21 0 0 0 0 0 0 0 8 36 148 234 13 0 0 0 0 1 8 36 148 234 13 0 0 0 0 0 8 22 10 2 0 0 0 0 0 1 8 22 10 2 0 0 0 0 0 0 8 112 48 196 1 161 60 78 227 1 8 112 48 196 1 161 60 78 227 0 16 141 191 62 222 54 255 93 191 23 154 244 121 104 127 150 0 1 16 141 191 62 222 54 255 93 191 23 154 244 121 104 127 150 0 0 16 1 239 62 155 92 171 183 88 243 250 73 64 154 209 61 6 1 16 1 239 62 155 92 171 183 88 243 250 73 64 154 209 61 6 0 16 226 241 36 137 89 204 106 60 252 68 23 9 46 14 188 7 1 16 226 241 36 137 89 204 106 60 252 68 23 9 46 14 188 7 0 16 168 243 51 12 205 84 127 124 104 103 17 0 0 0 0 0 1 16 168 243 51 12 205 84 127 124 104 103 17 0 0 0 0 0 0 16 199 246 222 200 216 155 75 134 115 5 0 0 0 0 0 0 1 16 199 246 222 200 216 155 75 134 115 5 0 0 0 0 0 0 0 16 205 246 227 212 19 202 146 146 12 32 222 104 0 0 0 0 1 16 205 246 227 212 19 202 146 146 12 32 222 104 0 0 0 0 0 8 231 2 0 0 0 0 0 0 1 8 231 2 0 0 0 0 0 0 0 8 112 223 182 198 202 220 170 0 1 8 112 223 182 198 202 220 170 0 0 8 0 212 75 197 0 0 0 0 1 8 0 212 75 197 0 0 0 0 0 16 138 108 72 105 190 154 118 34 30 0 0 0 0 0 0 0 1 16 138 108 72 105 190 154 118 34 30 0 0 0 0 0 0 0 0 8 48 85 228 16 168 11 0 0 1 8 48 85 228 16 168 11 0 0 0 8 62 1 0 0 0 0 0 0 1 8 62 1 0 0 0 0 0 0 0 16 6 102 249 196 237 58 2 184 77 192 3 21 141 0 0 0 1 16 6 102 249 196 237 58 2 184 77 192 3 21 141 0 0 0 0 8 8 78 34 173 18 4 0 0 1 8 8 78 34 173 18 4 0 0 0 8 7 0 0 0 0 0 0 0 1 8 7 0 0 0 0 0 0 0 0 8 239 135 16 50 170 2 57 0 1 8 239 135 16 50 170 2 57 0 0 8 183 0 0 0 0 0 0 0 1 8 183 0 0 0 0 0 0 0 0 16 177 22 53 249 155 145 101 251 26 74 122 154 45 100 11 0 1 16 177 22 53 249 155 145 101 251 26 74 122 154 45 100 11 0 0 8 80 56 225 0 0 0 0 0 1 8 80 56 225 0 0 0 0 0 0 16 76 235 10 21 204 158 27 14 68 131 188 49 79 0 0 0 1 16 76 235 10 21 204 158 27 14 68 131 188 49 79 0 0 0 0 16 251 170 198 48 126 70 130 132 60 154 11 0 0 0 0 0 1 16 251 170 198 48 126 70 130 132 60 154 11 0 0 0 0 0 0 8 191 30 191 254 3 0 0 0 1 8 191 30 191 254 3 0 0 0 0 16 54 216 58 148 106 237 238 143 196 75 61 50 0 0 0 0 1 16 54 216 58 148 106 237 238 143 196 75 61 50 0 0 0 0 0 8 179 134 5 0 0 0 0 0 1 8 179 134 5 0 0 0 0 0 0 16 241 40 126 116 35 208 214 118 64 224 2 0 0 0 0 0 1 16 241 40 126 116 35 208 214 118 64 224 2 0 0 0 0 0 0 8 192 249 163 87 76 23 44 169 1 8 192 249 163 87 76 23 44 169 0 8 20 54 151 190 175 212 60 7 1 8 20 54 151 190 175 212 60 7 0 8 216 96 161 160 23 138 1 0 1 8 216 96 161 160 23 138 1 0 0 16 229 209 203 219 86 233 187 99 117 0 0 0 0 0 0 0 1 16 229 209 203 219 86 233 187 99 117 0 0 0 0 0 0 0 0 16 245 229 198 81 226 138 11 41 33 213 8 22 0 0 0 0 1 16 245 229 198 81 226 138 11 41 33 213 8 22 0 0 0 0 0 8 123 178 141 23 108 0 0 0 1 8 123 178 141 23 108 0 0 0 0 8 209 241 222 253 33 0 0 0 1 8 209 241 222 253 33 0 0 0 0 16 220 85 110 10 15 95 4 6 252 132 103 77 0 0 0 0 1 16 220 85 110 10 15 95 4 6 252 132 103 77 0 0 0 0 0 16 189 132 98 150 159 168 163 157 176 8 1 0 0 0 0 0 1 16 189 132 98 150 159 168 163 157 176 8 1 0 0 0 0 0 0 8 226 130 140 1 0 0 0 0 1 8 226 130 140 1 0 0 0 0 0 16 143 231 15 168 10 112 155 62 246 19 188 101 111 0 0 0 1 16 143 231 15 168 10 112 155 62 246 19 188 101 111 0 0 0 0 16 90 83 73 223 21 149 198 225 16 118 121 1 0 0 0 0 1 16 90 83 73 223 21 149 198 225 16 118 121 1 0 0 0 0 0 8 250 107 147 104 78 3 0 0 1 8 250 107 147 104 78 3 0 0 0 8 112 132 221 2 0 0 0 0 1 8 112 132 221 2 0 0 0 0 0 8 233 38 129 60 112 9 2 0 1 8 233 38 129 60 112 9 2 0 0 8 31 200 44 22 247 29 0 0 1 8 31 200 44 22 247 29 0 0 0 8 64 140 226 178 63 3 0 0 1 8 64 140 226 178 63 3 0 0 0 16 102 203 87 33 78 209 7 212 252 71 0 0 0 0 0 0 1 16 102 203 87 33 78 209 7 212 252 71 0 0 0 0 0 0 0 16 124 235 50 2 230 251 163 236 12 65 16 16 124 0 0 0 1 16 124 235 50 2 230 251 163 236 12 65 16 16 124 0 0 0 0 16 150 159 188 85 64 141 109 45 11 90 81 64 1 0 0 0 1 16 150 159 188 85 64 141 109 45 11 90 81 64 1 0 0 0 0 16 167 59 70 31 206 169 7 64 31 128 72 0 0 0 0 0 1 16 167 59 70 31 206 169 7 64 31 128 72 0 0 0 0 0 0 8 44 3 0 0 0 0 0 0 1 8 44 3 0 0 0 0 0 0 0 8 245 254 182 131 34 27 3 0 1 8 245 254 182 131 34 27 3 0 0 16 127 105 58 125 131 87 50 215 211 128 179 128 247 65 82 0 1 16 127 105 58 125 131 87 50 215 211 128 179 128 247 65 82 0 0 8 201 118 45 227 189 189 136 2 1 8 201 118 45 227 189 189 136 2 0 16 73 205 21 184 2 160 55 216 156 146 207 246 12 0 0 0 1 16 73 205 21 184 2 160 55 216 156 146 207 246 12 0 0 0 0 8 88 131 129 83 59 1 0 0 1 8 88 131 129 83 59 1 0 0 0 8 118 58 124 202 93 158 94 84 1 8 118 58 124 202 93 158 94 84 0 16 114 144 11 78 137 113 34 58 211 201 128 28 24 49 27 0 1 16 114 144 11 78 137 113 34 58 211 201 128 28 24 49 27 0 0 8 227 62 145 88 15 34 21 0 1 8 227 62 145 88 15 34 21 0 0 8 144 79 175 34 58 184 155 52 1 8 144 79 175 34 58 184 155 52 0 8 169 92 48 156 119 52 152 6 1 8 169 92 48 156 119 52 152 6 0 16 64 241 66 116 157 84 90 13 43 150 240 179 1 0 0 0 1 16 64 241 66 116 157 84 90 13 43 150 240 179 1 0 0 0 0 8 249 36 108 106 67 0 0 0 1 8 249 36 108 106 67 0 0 0 0 8 24 219 0 0 0 0 0 0 1 8 24 219 0 0 0 0 0 0 0 16 132 220 144 75 157 31 158 221 3 0 0 0 0 0 0 0 1 16 132 220 144 75 157 31 158 221 3 0 0 0 0 0 0 0 0 8 22 51 150 54 80 88 15 0 1 8 22 51 150 54 80 88 15 0 0 16 254 143 211 239 187 165 87 122 3 0 0 0 0 0 0 0 1 16 254 143 211 239 187 165 87 122 3 0 0 0 0 0 0 0 0 16 90 132 24 254 5 211 89 38 55 116 158 144 100 66 0 0 1 16 90 132 24 254 5 211 89 38 55 116 158 144 100 66 0 0 0 16 119 186 36 149 246 36 59 35 232 254 155 141 203 2 0 0 1 16 119 186 36 149 246 36 59 35 232 254 155 141 203 2 0 0 0 8 203 46 49 133 154 163 0 0 1 8 203 46 49 133 154 163 0 0 0 16 173 84 223 120 95 131 253 29 244 109 99 100 18 0 0 0 1 16 173 84 223 120 95 131 253 29 244 109 99 100 18 0 0 0 0 16 163 90 76 225 185 170 229 28 217 73 104 176 75 142 57 0 1 16 163 90 76 225 185 170 229 28 217 73 104 176 75 142 57 0 0 16 253 112 155 58 247 162 195 140 168 20 3 0 0 0 0 0 1 16 253 112 155 58 247 162 195 140 168 20 3 0 0 0 0 0 0 16 249 122 124 0 146 109 174 30 4 0 0 0 0 0 0 0 1 16 249 122 124 0 146 109 174 30 4 0 0 0 0 0 0 0 0 8 144 2 45 119 93 56 2 0 1 8 144 2 45 119 93 56 2 0 0 8 45 33 10 0 0 0 0 0 1 8 45 33 10 0 0 0 0 0 0 16 186 27 85 177 145 135 52 106 165 148 53 70 246 1 0 0 1 16 186 27 85 177 145 135 52 106 165 148 53 70 246 1 0 0 0 8 68 52 17 4 0 0 0 0 1 8 68 52 17 4 0 0 0 0 0 16 241 159 13 20 11 64 214 104 47 0 0 0 0 0 0 0 1 16 241 159 13 20 11 64 214 104 47 0 0 0 0 0 0 0 0 16 32 95 224 178 8 58 144 200 201 145 83 22 116 60 79 2 1 16 32 95 224 178 8 58 144 200 201 145 83 22 116 60 79 2 0 8 215 108 179 124 111 116 0 0 1 8 215 108 179 124 111 116 0 0 0 16 72 135 153 119 46 195 147 13 252 2 59 0 117 125 64 77 1 16 72 135 153 119 46 195 147 13 252 2 59 0 117 125 64 77 0 16 93 46 81 15 142 242 250 221 79 61 178 228 143 87 244 0 1 16 93 46 81 15 142 242 250 221 79 61 178 228 143 87 244 0 0 8 139 93 95 57 0 0 0 0 1 8 139 93 95 57 0 0 0 0 0 16 76 36 152 198 40 178 106 21 207 164 31 24 28 10 1 0 1 16 76 36 152 198 40 178 106 21 207 164 31 24 28 10 1 0 0 8 19 0 0 0 0 0 0 0 1 8 19 0 0 0 0 0 0 0 0 16 9 25 202 138 170 88 179 0 75 0 0 0 0 0 0 0 1 16 9 25 202 138 170 88 179 0 75 0 0 0 0 0 0 0 0 8 169 231 136 224 45 30 2 0 1 8 169 231 136 224 45 30 2 0 0 16 54 251 180 193 77 7 254 217 190 81 0 0 0 0 0 0 1 16 54 251 180 193 77 7 254 217 190 81 0 0 0 0 0 0 0 16 167 75 62 7 42 70 13 12 21 5 163 135 11 0 0 0 1 16 167 75 62 7 42 70 13 12 21 5 163 135 11 0 0 0 0 16 138 166 227 194 104 244 199 0 232 12 0 0 0 0 0 0 1 16 138 166 227 194 104 244 199 0 232 12 0 0 0 0 0 0 0 8 203 27 84 77 12 139 18 28 1 8 203 27 84 77 12 139 18 28 0 8 159 124 135 1 0 0 0 0 1 8 159 124 135 1 0 0 0 0 0 16 211 117 92 112 68 205 243 46 127 0 0 0 0 0 0 0 1 16 211 117 92 112 68 205 243 46 127 0 0 0 0 0 0 0 0 8 173 148 132 161 87 0 0 0 1 8 173 148 132 161 87 0 0 0 0 8 9 0 0 0 0 0 0 0 1 8 9 0 0 0 0 0 0 0 0 8 133 26 216 191 172 89 213 40 1 8 133 26 216 191 172 89 213 40 0 16 211 26 153 111 42 16 37 94 105 14 57 163 225 193 0 0 1 16 211 26 153 111 42 16 37 94 105 14 57 163 225 193 0 0 0 8 128 164 207 191 0 0 0 0 1 8 128 164 207 191 0 0 0 0 0 8 133 171 31 6 0 0 0 0 1 8 133 171 31 6 0 0 0 0 0 16 58 142 105 140 176 184 239 208 55 131 225 185 144 11 0 0 1 16 58 142 105 140 176 184 239 208 55 131 225 185 144 11 0 0 0 16 69 153 92 71 249 203 122 156 39 73 222 95 210 32 1 0 1 16 69 153 92 71 249 203 122 156 39 73 222 95 210 32 1 0 0 8 230 66 104 5 0 0 0 0 1 8 230 66 104 5 0 0 0 0 0 8 161 45 37 11 195 19 140 0 1 8 161 45 37 11 195 19 140 0 0 8 234 74 122 82 0 0 0 0 1 8 234 74 122 82 0 0 0 0 0 8 177 246 13 0 0 0 0 0 1 8 177 246 13 0 0 0 0 0 0 8 49 224 136 0 0 0 0 0 1 8 49 224 136 0 0 0 0 0 0 8 125 71 166 1 1 0 0 0 1 8 125 71 166 1 1 0 0 0 0 8 141 121 130 15 0 0 0 0 1 8 141 121 130 15 0 0 0 0 0 16 86 207 74 133 184 161 240 207 34 130 144 107 83 0 0 0 1 16 86 207 74 133 184 161 240 207 34 130 144 107 83 0 0 0 0 8 35 48 213 98 222 69 132 0 1 8 35 48 213 98 222 69 132 0 0 8 182 209 82 82 113 25 178 59 1 8 182 209 82 82 113 25 178 59 0 8 180 86 59 54 31 2 0 0 1 8 180 86 59 54 31 2 0 0 0 8 45 45 0 0 0 0 0 0 1 8 45 45 0 0 0 0 0 0 0 16 21 185 217 174 9 133 26 231 15 65 115 190 75 64 49 0 1 16 21 185 217 174 9 133 26 231 15 65 115 190 75 64 49 0 0 16 165 110 209 80 73 74 135 193 159 99 14 0 0 0 0 0 1 16 165 110 209 80 73 74 135 193 159 99 14 0 0 0 0 0 0 8 212 39 10 198 84 40 188 1 1 8 212 39 10 198 84 40 188 1 0 16 229 117 144 57 201 122 60 120 207 235 3 0 0 0 0 0 1 16 229 117 144 57 201 122 60 120 207 235 3 0 0 0 0 0 0 8 219 123 115 0 0 0 0 0 1 8 219 123 115 0 0 0 0 0 0 16 191 142 53 119 168 100 219 47 160 3 0 0 0 0 0 0 1 16 191 142 53 119 168 100 219 47 160 3 0 0 0 0 0 0 0 16 227 12 18 159 53 213 206 140 179 189 209 125 126 174 21 0 1 16 227 12 18 159 53 213 206 140 179 189 209 125 126 174 21 0 0 16 108 182 247 254 150 50 85 5 140 125 196 22 0 0 0 0 1 16 108 182 247 254 150 50 85 5 140 125 196 22 0 0 0 0 0 16 92 126 28 210 248 52 158 233 246 129 152 227 129 228 4 25 1 16 92 126 28 210 248 52 158 233 246 129 152 227 129 228 4 25 0 8 211 136 158 83 43 95 0 0 1 8 211 136 158 83 43 95 0 0 0 8 83 253 195 70 35 14 7 1 1 8 83 253 195 70 35 14 7 1 0 16 105 111 185 175 206 124 63 83 199 79 41 0 0 0 0 0 1 16 105 111 185 175 206 124 63 83 199 79 41 0 0 0 0 0 0 8 6 50 0 0 0 0 0 0 1 8 6 50 0 0 0 0 0 0 0 16 183 89 151 17 18 108 172 173 36 98 141 13 0 0 0 0 1 16 183 89 151 17 18 108 172 173 36 98 141 13 0 0 0 0 0 8 218 149 242 52 5 0 0 0 1 8 218 149 242 52 5 0 0 0 0 8 84 210 0 0 0 0 0 0 1 8 84 210 0 0 0 0 0 0 0 8 227 16 100 125 154 10 22 0 1 8 227 16 100 125 154 10 22 0 0 8 99 11 2 0 0 0 0 0 1 8 99 11 2 0 0 0 0 0 0 16 59 200 146 111 178 201 210 58 7 10 0 0 0 0 0 0 1 16 59 200 146 111 178 201 210 58 7 10 0 0 0 0 0 0 0 8 245 98 135 241 52 234 83 2 1 8 245 98 135 241 52 234 83 2 0 8 111 24 151 152 13 0 0 0 1 8 111 24 151 152 13 0 0 0 0 8 214 0 0 0 0 0 0 0 1 8 214 0 0 0 0 0 0 0 0 16 107 171 142 230 68 214 222 6 143 20 0 0 0 0 0 0 1 16 107 171 142 230 68 214 222 6 143 20 0 0 0 0 0 0 0 16 31 138 93 248 13 219 151 196 232 112 179 55 114 0 0 0 1 16 31 138 93 248 13 219 151 196 232 112 179 55 114 0 0 0 0 16 126 160 35 63 198 30 3 106 28 63 3 6 0 0 0 0 1 16 126 160 35 63 198 30 3 106 28 63 3 6 0 0 0 0 0 8 104 8 59 0 0 0 0 0 1 8 104 8 59 0 0 0 0 0 0 8 211 64 154 42 0 0 0 0 1 8 211 64 154 42 0 0 0 0 0 16 190 175 183 140 51 33 188 44 220 15 129 79 197 5 0 0 1 16 190 175 183 140 51 33 188 44 220 15 129 79 197 5 0 0 0 8 58 149 0 0 0 0 0 0 1 8 58 149 0 0 0 0 0 0 0 8 168 78 159 61 141 1 0 0 1 8 168 78 159 61 141 1 0 0 0 8 50 34 114 75 132 0 0 0 1 8 50 34 114 75 132 0 0 0 0 16 228 96 210 155 189 131 157 123 187 84 8 0 0 0 0 0 1 16 228 96 210 155 189 131 157 123 187 84 8 0 0 0 0 0 0 8 105 43 140 252 152 3 0 0 1 8 105 43 140 252 152 3 0 0 0 8 93 153 83 251 251 19 6 0 1 8 93 153 83 251 251 19 6 0 0 8 59 202 65 95 133 34 100 0 1 8 59 202 65 95 133 34 100 0 0 16 175 130 225 146 216 107 99 14 39 177 93 74 28 0 0 0 1 16 175 130 225 146 216 107 99 14 39 177 93 74 28 0 0 0 0 16 60 102 67 81 214 180 246 82 1 0 0 0 0 0 0 0 1 16 60 102 67 81 214 180 246 82 1 0 0 0 0 0 0 0 0 8 29 156 0 0 0 0 0 0 1 8 29 156 0 0 0 0 0 0 0 8 144 22 0 0 0 0 0 0 1 8 144 22 0 0 0 0 0 0 0 16 126 85 237 254 119 29 6 190 202 60 208 130 101 7 221 121 1 16 126 85 237 254 119 29 6 190 202 60 208 130 101 7 221 121 0 8 109 138 127 241 6 0 0 0 1 8 109 138 127 241 6 0 0 0 0 8 104 29 47 0 0 0 0 0 1 8 104 29 47 0 0 0 0 0 0 16 105 197 115 163 120 218 156 57 157 204 105 245 2 0 0 0 1 16 105 197 115 163 120 218 156 57 157 204 105 245 2 0 0 0 0 16 43 62 73 147 228 196 140 60 148 83 16 164 4 0 0 0 1 16 43 62 73 147 228 196 140 60 148 83 16 164 4 0 0 0 0 8 31 0 0 0 0 0 0 0 1 8 31 0 0 0 0 0 0 0 0 8 241 157 192 68 3 0 0 0 1 8 241 157 192 68 3 0 0 0 0 16 108 147 5 178 33 167 30 134 205 25 105 66 48 22 245 0 1 16 108 147 5 178 33 167 30 134 205 25 105 66 48 22 245 0 0 8 129 42 147 65 1 0 0 0 1 8 129 42 147 65 1 0 0 0 0 16 246 130 162 45 151 113 85 86 26 158 229 111 0 0 0 0 1 16 246 130 162 45 151 113 85 86 26 158 229 111 0 0 0 0 0 8 169 64 0 0 0 0 0 0 1 8 169 64 0 0 0 0 0 0 0 8 239 189 219 253 42 82 213 153 1 8 239 189 219 253 42 82 213 153 0 8 3 41 244 12 23 4 0 0 1 8 3 41 244 12 23 4 0 0 0 16 45 29 75 228 251 90 142 140 229 6 0 0 0 0 0 0 1 16 45 29 75 228 251 90 142 140 229 6 0 0 0 0 0 0 0 8 46 253 114 12 61 0 0 0 1 8 46 253 114 12 61 0 0 0 0 8 182 105 196 214 0 0 0 0 1 8 182 105 196 214 0 0 0 0 0 16 85 197 138 192 105 13 137 11 199 237 60 146 247 3 63 24 1 16 85 197 138 192 105 13 137 11 199 237 60 146 247 3 63 24 0 8 62 83 233 195 226 186 158 9 1 8 62 83 233 195 226 186 158 9 0 8 255 213 102 22 0 0 0 0 1 8 255 213 102 22 0 0 0 0
diff --git a/libs/multiprecision/test/cpp_int64_serial32.txt b/libs/multiprecision/test/cpp_int64_serial32.txt
new file mode 100644
index 0000000000..c5becf8a3d
--- /dev/null
+++ b/libs/multiprecision/test/cpp_int64_serial32.txt
@@ -0,0 +1 @@
+22 serialization::archive 10 0 0 0 0 0 8 154 227 28 82 91 187 17 0 1 8 154 227 28 82 91 187 17 0 0 4 238 2 0 0 1 4 238 2 0 0 0 8 179 21 191 74 120 31 195 5 1 8 179 21 191 74 120 31 195 5 0 8 38 72 203 241 222 183 7 0 1 8 38 72 203 241 222 183 7 0 0 4 225 3 0 0 1 4 225 3 0 0 0 8 242 170 246 107 183 113 31 11 1 8 242 170 246 107 183 113 31 11 0 8 159 2 53 187 36 166 22 4 1 8 159 2 53 187 36 166 22 4 0 4 26 205 0 0 1 4 26 205 0 0 0 8 177 10 45 114 95 1 0 0 1 8 177 10 45 114 95 1 0 0 0 4 231 42 31 0 1 4 231 42 31 0 0 4 228 0 0 0 1 4 228 0 0 0 0 8 161 235 183 0 9 0 0 0 1 8 161 235 183 0 9 0 0 0 0 4 161 84 9 0 1 4 161 84 9 0 0 4 17 21 0 0 1 4 17 21 0 0 0 8 132 60 177 2 3 0 0 0 1 8 132 60 177 2 3 0 0 0 0 8 112 146 42 85 255 28 14 50 1 8 112 146 42 85 255 28 14 50 0 8 56 155 123 75 170 217 61 52 1 8 56 155 123 75 170 217 61 52 0 8 128 184 17 143 213 41 148 184 1 8 128 184 17 143 213 41 148 184 0 8 211 92 36 214 185 177 216 48 1 8 211 92 36 214 185 177 216 48 0 8 103 144 142 223 219 161 68 11 1 8 103 144 142 223 219 161 68 11 0 4 136 9 0 0 1 4 136 9 0 0 0 8 110 109 102 36 76 159 0 0 1 8 110 109 102 36 76 159 0 0 0 8 212 44 7 134 98 246 52 74 1 8 212 44 7 134 98 246 52 74 0 8 5 18 148 245 212 213 152 2 1 8 5 18 148 245 212 213 152 2 0 8 215 29 169 9 145 141 144 10 1 8 215 29 169 9 145 141 144 10 0 4 205 0 0 0 1 4 205 0 0 0 0 8 242 218 75 187 1 0 0 0 1 8 242 218 75 187 1 0 0 0 0 8 196 242 164 7 110 253 8 0 1 8 196 242 164 7 110 253 8 0 0 8 87 7 181 132 51 102 13 0 1 8 87 7 181 132 51 102 13 0 0 4 18 228 18 0 1 4 18 228 18 0 0 4 190 5 0 0 1 4 190 5 0 0 0 4 7 0 0 0 1 4 7 0 0 0 0 4 89 137 26 12 1 4 89 137 26 12 0 4 130 0 0 0 1 4 130 0 0 0 0 8 128 249 218 245 47 115 9 1 1 8 128 249 218 245 47 115 9 1 0 8 162 100 122 44 193 2 0 0 1 8 162 100 122 44 193 2 0 0 0 8 101 75 177 242 99 85 12 0 1 8 101 75 177 242 99 85 12 0 0 8 240 219 82 212 216 69 123 0 1 8 240 219 82 212 216 69 123 0 0 8 0 241 147 64 173 200 15 13 1 8 0 241 147 64 173 200 15 13 0 8 123 176 87 114 3 0 0 0 1 8 123 176 87 114 3 0 0 0 0 8 199 125 85 138 128 0 0 0 1 8 199 125 85 138 128 0 0 0 0 8 212 151 16 161 84 117 1 0 1 8 212 151 16 161 84 117 1 0 0 4 6 0 0 0 1 4 6 0 0 0 0 4 3 195 58 0 1 4 3 195 58 0 0 8 97 114 34 212 170 208 45 0 1 8 97 114 34 212 170 208 45 0 0 4 146 232 0 0 1 4 146 232 0 0 0 8 133 179 117 190 9 133 28 13 1 8 133 179 117 190 9 133 28 13 0 8 73 171 130 38 191 22 0 0 1 8 73 171 130 38 191 22 0 0 0 8 18 152 190 20 249 26 0 0 1 8 18 152 190 20 249 26 0 0 0 4 252 198 62 5 1 4 252 198 62 5 0 8 73 97 191 10 234 239 1 0 1 8 73 97 191 10 234 239 1 0 0 8 153 44 205 37 255 196 0 0 1 8 153 44 205 37 255 196 0 0 0 8 81 132 37 54 246 238 0 0 1 8 81 132 37 54 246 238 0 0 0 4 8 53 135 13 1 4 8 53 135 13 0 4 89 148 169 6 1 4 89 148 169 6 0 4 17 159 173 20 1 4 17 159 173 20 0 8 201 182 183 82 169 6 0 0 1 8 201 182 183 82 169 6 0 0 0 4 182 0 0 0 1 4 182 0 0 0 0 4 108 16 0 0 1 4 108 16 0 0 0 4 39 236 0 0 1 4 39 236 0 0 0 8 181 1 156 121 15 32 0 0 1 8 181 1 156 121 15 32 0 0 0 8 29 56 214 10 51 145 14 0 1 8 29 56 214 10 51 145 14 0 0 4 6 0 0 0 1 4 6 0 0 0 0 4 161 199 49 0 1 4 161 199 49 0 0 4 248 149 1 0 1 4 248 149 1 0 0 8 180 167 79 137 212 132 35 1 1 8 180 167 79 137 212 132 35 1 0 4 8 0 0 0 1 4 8 0 0 0 0 4 195 6 0 0 1 4 195 6 0 0 0 4 82 1 0 0 1 4 82 1 0 0 0 8 33 248 118 22 198 96 57 183 1 8 33 248 118 22 198 96 57 183 0 8 94 181 212 144 197 233 13 0 1 8 94 181 212 144 197 233 13 0 0 8 102 74 34 111 163 102 6 0 1 8 102 74 34 111 163 102 6 0 0 8 26 210 173 182 38 49 0 0 1 8 26 210 173 182 38 49 0 0 0 4 86 0 0 0 1 4 86 0 0 0 0 4 143 140 20 0 1 4 143 140 20 0 0 8 73 116 37 159 96 31 0 0 1 8 73 116 37 159 96 31 0 0 0 8 8 37 96 156 51 81 22 12 1 8 8 37 96 156 51 81 22 12 0 4 237 236 131 159 1 4 237 236 131 159 0 4 10 0 0 0 1 4 10 0 0 0 0 8 130 141 0 7 2 2 0 0 1 8 130 141 0 7 2 2 0 0 0 4 109 195 74 15 1 4 109 195 74 15 0 4 230 2 0 0 1 4 230 2 0 0 0 4 106 192 15 1 1 4 106 192 15 1 0 4 10 163 0 0 1 4 10 163 0 0 0 8 203 163 89 123 164 84 3 0 1 8 203 163 89 123 164 84 3 0 0 4 10 0 0 0 1 4 10 0 0 0 0 8 215 165 31 197 2 167 7 0 1 8 215 165 31 197 2 167 7 0 0 4 21 0 0 0 1 4 21 0 0 0 0 4 39 38 0 0 1 4 39 38 0 0 0 4 57 137 152 9 1 4 57 137 152 9 0 8 5 3 11 74 1 0 0 0 1 8 5 3 11 74 1 0 0 0 0 4 160 216 17 103 1 4 160 216 17 103 0 4 29 8 124 52 1 4 29 8 124 52 0 8 154 188 176 41 1 0 0 0 1 8 154 188 176 41 1 0 0 0 0 8 76 178 160 131 39 5 0 0 1 8 76 178 160 131 39 5 0 0 0 8 184 146 71 183 150 91 6 0 1 8 184 146 71 183 150 91 6 0 0 8 171 6 120 246 94 47 0 0 1 8 171 6 120 246 94 47 0 0 0 8 146 132 93 2 22 222 211 5 1 8 146 132 93 2 22 222 211 5 0 8 204 2 222 46 179 175 0 0 1 8 204 2 222 46 179 175 0 0 0 8 9 148 45 199 56 52 13 0 1 8 9 148 45 199 56 52 13 0 0 4 241 190 12 0 1 4 241 190 12 0 0 8 88 52 207 19 120 43 0 0 1 8 88 52 207 19 120 43 0 0 0 8 132 70 133 92 64 29 0 0 1 8 132 70 133 92 64 29 0 0 0 4 1 0 0 0 1 4 1 0 0 0 0 8 153 12 223 211 34 6 0 0 1 8 153 12 223 211 34 6 0 0 0 8 140 14 165 245 82 66 0 0 1 8 140 14 165 245 82 66 0 0 0 4 221 15 0 0 1 4 221 15 0 0 0 8 50 119 85 166 157 1 0 0 1 8 50 119 85 166 157 1 0 0 0 4 30 3 0 0 1 4 30 3 0 0 0 4 13 245 224 15 1 4 13 245 224 15 0 8 202 238 193 147 1 0 0 0 1 8 202 238 193 147 1 0 0 0 0 8 91 182 236 7 230 82 3 0 1 8 91 182 236 7 230 82 3 0 0 8 63 175 86 139 154 53 6 37 1 8 63 175 86 139 154 53 6 37 0 8 201 71 17 19 25 0 0 0 1 8 201 71 17 19 25 0 0 0 0 4 14 211 37 0 1 4 14 211 37 0 0 8 202 176 13 183 153 3 12 1 1 8 202 176 13 183 153 3 12 1 0 8 34 164 43 13 117 0 0 0 1 8 34 164 43 13 117 0 0 0 0 8 55 100 235 195 135 199 4 0 1 8 55 100 235 195 135 199 4 0 0 4 77 59 0 0 1 4 77 59 0 0 0 4 6 0 0 0 1 4 6 0 0 0 0 8 91 176 44 141 237 201 1 0 1 8 91 176 44 141 237 201 1 0 0 8 91 247 129 23 149 242 13 0 1 8 91 247 129 23 149 242 13 0 0 4 159 244 3 0 1 4 159 244 3 0 0 8 39 216 128 123 225 164 26 0 1 8 39 216 128 123 225 164 26 0 0 8 206 236 127 202 3 0 0 0 1 8 206 236 127 202 3 0 0 0 0 8 227 22 89 80 97 163 24 23 1 8 227 22 89 80 97 163 24 23 0 8 6 163 204 40 124 57 0 0 1 8 6 163 204 40 124 57 0 0 0 4 72 96 82 7 1 4 72 96 82 7 0 8 205 145 127 61 215 220 134 3 1 8 205 145 127 61 215 220 134 3 0 4 187 177 86 19 1 4 187 177 86 19 0 8 195 158 155 140 132 204 144 36 1 8 195 158 155 140 132 204 144 36 0 8 141 29 202 70 15 0 0 0 1 8 141 29 202 70 15 0 0 0 0 8 80 57 26 165 1 0 0 0 1 8 80 57 26 165 1 0 0 0 0 4 232 14 0 0 1 4 232 14 0 0 0 4 172 7 0 0 1 4 172 7 0 0 0 8 229 247 251 162 193 189 0 0 1 8 229 247 251 162 193 189 0 0 0 4 70 15 0 0 1 4 70 15 0 0 0 4 104 115 1 0 1 4 104 115 1 0 0 4 73 175 2 0 1 4 73 175 2 0 0 8 139 107 110 161 47 228 20 0 1 8 139 107 110 161 47 228 20 0 0 8 52 16 150 150 195 76 61 0 1 8 52 16 150 150 195 76 61 0 0 8 3 233 1 255 93 196 239 229 1 8 3 233 1 255 93 196 239 229 0 4 210 243 2 0 1 4 210 243 2 0 0 4 136 103 92 0 1 4 136 103 92 0 0 8 146 79 153 7 104 181 15 0 1 8 146 79 153 7 104 181 15 0 0 4 63 136 0 0 1 4 63 136 0 0 0 4 42 206 0 0 1 4 42 206 0 0 0 4 0 0 0 0 0 4 0 0 0 0 0 8 10 253 104 129 179 201 249 12 1 8 10 253 104 129 179 201 249 12 0 4 173 0 0 0 1 4 173 0 0 0 0 4 126 150 157 0 1 4 126 150 157 0 0 8 95 103 181 13 108 192 162 0 1 8 95 103 181 13 108 192 162 0 0 4 8 34 0 0 1 4 8 34 0 0 0 8 195 39 2 201 240 221 6 0 1 8 195 39 2 201 240 221 6 0 0 4 164 73 1 0 1 4 164 73 1 0 0 8 24 150 136 250 66 244 117 28 1 8 24 150 136 250 66 244 117 28 0 8 188 211 235 56 103 1 0 0 1 8 188 211 235 56 103 1 0 0 0 8 147 116 238 204 203 134 5 0 1 8 147 116 238 204 203 134 5 0 0 4 212 155 224 212 1 4 212 155 224 212 0 8 162 39 186 255 226 48 217 253 1 8 162 39 186 255 226 48 217 253 0 4 96 45 87 0 1 4 96 45 87 0 0 4 43 0 0 0 1 4 43 0 0 0 0 8 21 190 140 128 8 199 26 0 1 8 21 190 140 128 8 199 26 0 0 8 223 96 39 236 140 66 12 0 1 8 223 96 39 236 140 66 12 0 0 8 168 80 9 35 78 0 0 0 1 8 168 80 9 35 78 0 0 0 0 8 88 244 56 44 112 0 0 0 1 8 88 244 56 44 112 0 0 0 0 8 57 42 143 22 20 0 0 0 1 8 57 42 143 22 20 0 0 0 0 8 203 139 139 233 47 120 0 0 1 8 203 139 139 233 47 120 0 0 0 8 151 136 78 80 220 201 21 3 1 8 151 136 78 80 220 201 21 3 0 8 41 214 136 67 14 14 0 0 1 8 41 214 136 67 14 14 0 0 0 4 68 146 0 0 1 4 68 146 0 0 0 8 4 125 187 175 144 13 0 0 1 8 4 125 187 175 144 13 0 0 0 8 107 43 241 204 40 37 1 0 1 8 107 43 241 204 40 37 1 0 0 4 100 212 145 7 1 4 100 212 145 7 0 8 181 219 82 238 3 185 1 0 1 8 181 219 82 238 3 185 1 0 0 8 83 219 52 188 1 0 0 0 1 8 83 219 52 188 1 0 0 0 0 4 245 60 150 2 1 4 245 60 150 2 0 4 182 3 0 0 1 4 182 3 0 0 0 8 35 242 99 17 31 0 0 0 1 8 35 242 99 17 31 0 0 0 0 8 210 109 74 20 3 0 0 0 1 8 210 109 74 20 3 0 0 0 0 4 113 0 0 0 1 4 113 0 0 0 0 4 215 146 221 1 1 4 215 146 221 1 0 4 33 0 0 0 1 4 33 0 0 0 0 4 241 68 169 0 1 4 241 68 169 0 0 8 109 184 204 61 3 0 0 0 1 8 109 184 204 61 3 0 0 0 0 8 181 132 45 203 59 0 0 0 1 8 181 132 45 203 59 0 0 0 0 8 193 232 39 3 20 5 2 0 1 8 193 232 39 3 20 5 2 0 0 4 41 222 5 0 1 4 41 222 5 0 0 8 240 84 253 169 3 245 134 14 1 8 240 84 253 169 3 245 134 14 0 8 53 101 132 186 140 107 194 48 1 8 53 101 132 186 140 107 194 48 0 4 231 3 0 0 1 4 231 3 0 0 0 4 185 12 0 0 1 4 185 12 0 0 0 8 3 35 9 8 33 0 0 0 1 8 3 35 9 8 33 0 0 0 0 4 156 36 211 5 1 4 156 36 211 5 0 4 92 228 169 22 1 4 92 228 169 22 0 4 127 62 177 0 1 4 127 62 177 0 0 4 2 0 0 0 1 4 2 0 0 0 0 8 164 101 187 91 120 0 0 0 1 8 164 101 187 91 120 0 0 0 0 4 33 58 42 0 1 4 33 58 42 0 0 4 65 43 119 4 1 4 65 43 119 4 0 4 171 27 0 0 1 4 171 27 0 0 0 8 151 115 89 236 58 107 231 6 1 8 151 115 89 236 58 107 231 6 0 8 53 244 97 77 30 194 11 0 1 8 53 244 97 77 30 194 11 0 0 4 227 66 108 47 1 4 227 66 108 47 0 4 67 137 26 0 1 4 67 137 26 0 0 8 70 250 222 204 115 159 137 0 1 8 70 250 222 204 115 159 137 0 0 8 164 93 158 196 7 0 0 0 1 8 164 93 158 196 7 0 0 0 0 8 113 106 97 177 105 0 0 0 1 8 113 106 97 177 105 0 0 0 0 4 38 28 0 0 1 4 38 28 0 0 0 4 144 3 0 0 1 4 144 3 0 0 0 8 55 211 179 66 249 0 0 0 1 8 55 211 179 66 249 0 0 0 0 4 70 208 8 215 1 4 70 208 8 215 0 4 17 174 7 0 1 4 17 174 7 0 0 4 145 40 82 0 1 4 145 40 82 0 0 8 185 14 149 132 50 7 0 0 1 8 185 14 149 132 50 7 0 0 0 4 84 17 37 245 1 4 84 17 37 245 0 8 218 94 35 43 115 7 0 0 1 8 218 94 35 43 115 7 0 0 0 8 170 8 238 147 136 37 0 0 1 8 170 8 238 147 136 37 0 0 0 8 169 153 246 116 99 150 1 0 1 8 169 153 246 116 99 150 1 0 0 8 110 23 17 63 97 104 44 241 1 8 110 23 17 63 97 104 44 241 0 4 219 131 208 47 1 4 219 131 208 47 0 8 100 16 250 222 223 5 0 0 1 8 100 16 250 222 223 5 0 0 0 4 189 0 0 0 1 4 189 0 0 0 0 8 22 198 182 249 164 1 85 6 1 8 22 198 182 249 164 1 85 6 0 4 173 137 0 0 1 4 173 137 0 0 0 4 111 190 230 246 1 4 111 190 230 246 0 8 51 99 110 105 78 69 86 3 1 8 51 99 110 105 78 69 86 3 0 8 104 165 202 140 7 0 0 0 1 8 104 165 202 140 7 0 0 0 0 4 136 13 0 0 1 4 136 13 0 0 0 8 5 138 36 135 3 0 0 0 1 8 5 138 36 135 3 0 0 0 0 8 39 105 124 108 77 96 30 0 1 8 39 105 124 108 77 96 30 0 0 4 78 159 129 13 1 4 78 159 129 13 0 8 223 6 27 79 8 0 0 0 1 8 223 6 27 79 8 0 0 0 0 8 203 6 61 205 13 0 0 0 1 8 203 6 61 205 13 0 0 0 0 8 111 62 45 160 194 14 103 96 1 8 111 62 45 160 194 14 103 96 0 4 82 143 196 30 1 4 82 143 196 30 0 4 54 0 0 0 1 4 54 0 0 0 0 8 37 180 24 111 34 94 97 0 1 8 37 180 24 111 34 94 97 0 0 4 94 61 200 42 1 4 94 61 200 42 0 8 229 205 68 230 125 0 0 0 1 8 229 205 68 230 125 0 0 0 0 4 125 1 0 0 1 4 125 1 0 0 0 4 70 69 227 171 1 4 70 69 227 171 0 8 121 93 176 157 92 133 17 34 1 8 121 93 176 157 92 133 17 34 0 8 211 207 179 76 229 87 229 73 1 8 211 207 179 76 229 87 229 73 0 4 0 0 0 0 0 4 0 0 0 0 0 4 3 0 0 0 1 4 3 0 0 0 0 8 101 90 156 136 105 177 2 0 1 8 101 90 156 136 105 177 2 0 0 8 163 122 187 139 155 245 97 88 1 8 163 122 187 139 155 245 97 88 0 8 31 100 188 227 193 143 8 0 1 8 31 100 188 227 193 143 8 0 0 4 85 153 46 1 1 4 85 153 46 1 0 8 221 254 215 194 253 123 70 0 1 8 221 254 215 194 253 123 70 0 0 8 215 60 213 115 201 17 0 0 1 8 215 60 213 115 201 17 0 0 0 4 245 0 0 0 1 4 245 0 0 0 0 4 182 69 1 0 1 4 182 69 1 0 0 4 16 115 202 1 1 4 16 115 202 1 0 8 229 38 172 10 236 158 36 0 1 8 229 38 172 10 236 158 36 0 0 4 152 18 4 0 1 4 152 18 4 0 0 4 29 0 0 0 1 4 29 0 0 0 0 8 164 28 2 236 150 2 6 0 1 8 164 28 2 236 150 2 6 0 0 8 199 130 156 17 201 5 0 0 1 8 199 130 156 17 201 5 0 0 0 4 13 53 72 26 1 4 13 53 72 26 0 8 238 224 211 162 10 18 0 0 1 8 238 224 211 162 10 18 0 0 0 8 120 226 140 214 213 131 23 1 1 8 120 226 140 214 213 131 23 1 0 4 127 6 0 0 1 4 127 6 0 0 0 4 191 27 0 0 1 4 191 27 0 0 0 8 27 167 239 216 56 139 31 36 1 8 27 167 239 216 56 139 31 36 0 4 82 31 0 0 1 4 82 31 0 0 0 4 244 0 0 0 1 4 244 0 0 0 0 4 116 7 0 0 1 4 116 7 0 0 0 4 130 5 6 0 1 4 130 5 6 0 0 4 47 2 0 0 1 4 47 2 0 0 0 8 196 55 144 21 143 144 9 0 1 8 196 55 144 21 143 144 9 0 0 8 234 45 67 110 61 33 47 0 1 8 234 45 67 110 61 33 47 0 0 4 124 0 0 0 1 4 124 0 0 0 0 8 105 213 125 231 51 0 0 0 1 8 105 213 125 231 51 0 0 0 0 8 11 175 154 185 42 1 0 0 1 8 11 175 154 185 42 1 0 0 0 8 101 255 202 218 14 0 0 0 1 8 101 255 202 218 14 0 0 0 0 4 0 0 0 0 0 4 0 0 0 0 0 4 37 7 0 0 1 4 37 7 0 0 0 8 47 33 204 49 169 12 0 0 1 8 47 33 204 49 169 12 0 0 0 8 237 178 210 116 191 60 18 0 1 8 237 178 210 116 191 60 18 0 0 8 226 16 6 156 2 0 0 0 1 8 226 16 6 156 2 0 0 0 0 8 21 186 33 53 89 1 0 0 1 8 21 186 33 53 89 1 0 0 0 4 43 243 242 11 1 4 43 243 242 11 0 4 253 48 225 0 1 4 253 48 225 0 0 4 98 116 0 0 1 4 98 116 0 0 0 4 180 159 4 1 1 4 180 159 4 1 0 4 187 2 0 0 1 4 187 2 0 0 0 4 36 0 3 2 1 4 36 0 3 2 0 4 160 47 250 0 1 4 160 47 250 0 0 4 98 0 0 0 1 4 98 0 0 0 0 8 174 190 217 68 144 74 0 0 1 8 174 190 217 68 144 74 0 0 0 4 23 145 1 0 1 4 23 145 1 0 0 4 13 0 0 0 1 4 13 0 0 0 0 4 44 1 0 0 1 4 44 1 0 0 0 4 245 250 2 0 1 4 245 250 2 0 0 4 65 32 0 0 1 4 65 32 0 0 0 8 205 117 182 80 2 0 0 0 1 8 205 117 182 80 2 0 0 0 0 4 186 246 0 0 1 4 186 246 0 0 0 8 234 122 75 99 110 255 9 0 1 8 234 122 75 99 110 255 9 0 0 4 222 223 37 8 1 4 222 223 37 8 0 8 230 26 192 136 251 74 228 31 1 8 230 26 192 136 251 74 228 31 0 4 14 0 0 0 1 4 14 0 0 0 0 8 128 177 66 193 232 29 55 0 1 8 128 177 66 193 232 29 55 0 0 8 253 35 145 164 119 248 140 2 1 8 253 35 145 164 119 248 140 2 0 4 174 117 27 0 1 4 174 117 27 0 0 8 8 228 105 75 109 68 255 25 1 8 8 228 105 75 109 68 255 25 0 4 31 0 0 0 1 4 31 0 0 0 0 8 101 158 131 43 1 0 0 0 1 8 101 158 131 43 1 0 0 0 0 4 8 103 0 0 1 4 8 103 0 0 0 4 181 252 244 53 1 4 181 252 244 53 0 8 39 186 76 130 8 0 0 0 1 8 39 186 76 130 8 0 0 0 0 4 231 168 14 0 1 4 231 168 14 0 0 8 111 30 175 61 55 124 64 1 1 8 111 30 175 61 55 124 64 1 0 8 74 60 189 200 26 84 16 2 1 8 74 60 189 200 26 84 16 2 0 4 103 99 236 0 1 4 103 99 236 0 0 4 248 30 237 0 1 4 248 30 237 0 0 4 15 0 0 0 1 4 15 0 0 0 0 4 39 0 0 0 1 4 39 0 0 0 0 4 221 30 0 0 1 4 221 30 0 0 0 8 83 158 61 244 15 140 7 0 1 8 83 158 61 244 15 140 7 0 0 8 21 183 50 199 183 253 159 0 1 8 21 183 50 199 183 253 159 0 0 4 176 107 53 5 1 4 176 107 53 5 0 4 53 53 0 0 1 4 53 53 0 0 0 4 162 140 0 0 1 4 162 140 0 0 0 4 126 253 1 0 1 4 126 253 1 0 0 4 233 141 234 3 1 4 233 141 234 3 0 8 178 136 48 203 1 0 0 0 1 8 178 136 48 203 1 0 0 0 0 4 171 0 0 0 1 4 171 0 0 0 0 4 35 241 0 0 1 4 35 241 0 0 0 4 107 5 0 0 1 4 107 5 0 0 0 8 15 48 198 223 1 0 0 0 1 8 15 48 198 223 1 0 0 0 0 8 203 94 65 224 14 96 19 27 1 8 203 94 65 224 14 96 19 27 0 8 187 120 141 217 244 218 89 38 1 8 187 120 141 217 244 218 89 38 0 8 185 95 188 66 117 96 49 6 1 8 185 95 188 66 117 96 49 6 0 8 181 238 174 109 232 4 0 0 1 8 181 238 174 109 232 4 0 0 0 8 241 227 21 206 37 0 0 0 1 8 241 227 21 206 37 0 0 0 0 8 11 46 148 129 54 81 1 0 1 8 11 46 148 129 54 81 1 0 0 4 1 0 0 0 1 4 1 0 0 0 0 4 166 181 139 21 1 4 166 181 139 21 0 4 231 3 0 0 1 4 231 3 0 0 0 8 58 0 224 93 1 0 0 0 1 8 58 0 224 93 1 0 0 0 0 4 61 170 163 0 1 4 61 170 163 0 0 4 16 0 0 0 1 4 16 0 0 0 0 8 19 80 184 100 0 136 17 0 1 8 19 80 184 100 0 136 17 0 0 4 141 166 59 0 1 4 141 166 59 0 0 4 1 0 0 0 1 4 1 0 0 0 0 4 106 120 1 0 1 4 106 120 1 0 0 4 24 0 0 0 1 4 24 0 0 0 0 8 250 206 237 235 100 45 220 2 1 8 250 206 237 235 100 45 220 2 0 4 104 0 0 0 1 4 104 0 0 0 0 8 45 124 107 88 59 188 20 0 1 8 45 124 107 88 59 188 20 0 0 8 133 86 244 174 225 3 0 0 1 8 133 86 244 174 225 3 0 0 0 4 10 106 7 0 1 4 10 106 7 0 0 8 198 151 96 192 44 105 0 0 1 8 198 151 96 192 44 105 0 0 0 4 18 6 0 0 1 4 18 6 0 0 0 8 139 29 156 22 238 7 0 0 1 8 139 29 156 22 238 7 0 0 0 4 223 115 28 171 1 4 223 115 28 171 0 4 221 148 185 62 1 4 221 148 185 62 0 4 61 47 108 1 1 4 61 47 108 1 0 8 87 157 178 141 10 0 0 0 1 8 87 157 178 141 10 0 0 0 0 8 86 94 188 134 23 82 0 0 1 8 86 94 188 134 23 82 0 0 0 4 179 64 23 0 1 4 179 64 23 0 0 4 113 45 10 0 1 4 113 45 10 0 0 8 204 227 150 219 42 98 0 0 1 8 204 227 150 219 42 98 0 0 0 8 72 207 3 4 107 1 0 0 1 8 72 207 3 4 107 1 0 0 0 4 242 22 0 0 1 4 242 22 0 0 0 8 43 248 193 8 8 37 19 0 1 8 43 248 193 8 8 37 19 0 0 8 135 156 114 210 151 8 0 0 1 8 135 156 114 210 151 8 0 0 0 4 126 63 25 0 1 4 126 63 25 0 0 4 94 41 0 0 1 4 94 41 0 0 0 4 132 46 67 3 1 4 132 46 67 3 0 4 12 53 213 1 1 4 12 53 213 1 0 4 224 181 149 0 1 4 224 181 149 0 0 8 214 73 249 129 122 0 0 0 1 8 214 73 249 129 122 0 0 0 0 8 141 160 27 51 90 159 14 0 1 8 141 160 27 51 90 159 14 0 0 8 123 185 72 150 135 30 2 0 1 8 123 185 72 150 135 30 2 0 0 8 132 79 251 109 16 13 0 0 1 8 132 79 251 109 16 13 0 0 0 4 187 0 0 0 1 4 187 0 0 0 0 4 26 47 114 1 1 4 26 47 114 1 0 8 36 142 132 192 11 54 198 0 1 8 36 142 132 192 11 54 198 0 0 4 167 191 148 125 1 4 167 191 148 125 0 8 234 206 244 113 18 198 0 0 1 8 234 206 244 113 18 198 0 0 0 4 3 143 18 0 1 4 3 143 18 0 0 4 62 157 58 195 1 4 62 157 58 195 0 8 172 170 222 106 83 163 194 4 1 8 172 170 222 106 83 163 194 4 0 4 88 220 20 57 1 4 88 220 20 57 0 8 167 245 187 129 1 0 0 0 1 8 167 245 187 129 1 0 0 0 0 4 164 130 167 36 1 4 164 130 167 36 0 8 61 130 34 172 248 118 0 0 1 8 61 130 34 172 248 118 0 0 0 4 40 22 12 0 1 4 40 22 12 0 0 4 209 1 0 0 1 4 209 1 0 0 0 8 170 133 218 207 1 0 0 0 1 8 170 133 218 207 1 0 0 0 0 4 223 195 71 3 1 4 223 195 71 3 0 8 197 87 218 147 1 0 0 0 1 8 197 87 218 147 1 0 0 0 0 8 210 1 234 57 242 124 45 0 1 8 210 1 234 57 242 124 45 0 0 8 119 110 205 24 176 195 21 0 1 8 119 110 205 24 176 195 21 0 0 4 71 104 194 0 1 4 71 104 194 0 0 8 53 164 236 57 255 127 4 0 1 8 53 164 236 57 255 127 4 0 0 8 218 132 146 91 132 77 213 4 1 8 218 132 146 91 132 77 213 4 0 8 133 79 247 151 252 1 0 0 1 8 133 79 247 151 252 1 0 0 0 8 203 243 153 55 2 0 0 0 1 8 203 243 153 55 2 0 0 0 0 4 197 193 53 2 1 4 197 193 53 2 0 4 84 5 0 0 1 4 84 5 0 0 0 8 177 187 206 97 141 85 1 0 1 8 177 187 206 97 141 85 1 0 0 4 166 94 0 0 1 4 166 94 0 0 0 8 190 247 33 10 10 0 0 0 1 8 190 247 33 10 10 0 0 0 0 8 61 186 120 114 110 34 74 14 1 8 61 186 120 114 110 34 74 14 0 4 48 152 216 0 1 4 48 152 216 0 0 8 157 24 37 230 113 32 156 61 1 8 157 24 37 230 113 32 156 61 0 8 26 71 250 167 179 175 252 27 1 8 26 71 250 167 179 175 252 27 0 4 138 11 1 0 1 4 138 11 1 0 0 8 64 228 47 79 174 153 235 1 1 8 64 228 47 79 174 153 235 1 0 4 12 0 0 0 1 4 12 0 0 0 0 8 227 20 33 239 16 0 0 0 1 8 227 20 33 239 16 0 0 0 0 4 89 117 39 6 1 4 89 117 39 6 0 8 56 143 170 210 159 0 0 0 1 8 56 143 170 210 159 0 0 0 0 8 83 94 139 170 42 227 7 0 1 8 83 94 139 170 42 227 7 0 0 8 158 24 234 182 90 0 0 0 1 8 158 24 234 182 90 0 0 0 0 4 184 250 218 70 1 4 184 250 218 70 0 4 199 13 0 0 1 4 199 13 0 0 0 8 162 245 210 10 15 0 0 0 1 8 162 245 210 10 15 0 0 0 0 4 163 218 24 0 1 4 163 218 24 0 0 4 14 0 0 0 1 4 14 0 0 0 0 4 167 97 145 202 1 4 167 97 145 202 0 8 207 69 56 26 219 188 172 2 1 8 207 69 56 26 219 188 172 2 0 4 19 245 0 0 1 4 19 245 0 0 0 4 101 116 0 0 1 4 101 116 0 0 0 8 144 67 225 251 217 0 96 0 1 8 144 67 225 251 217 0 96 0 0 8 141 129 40 88 123 180 46 1 1 8 141 129 40 88 123 180 46 1 0 4 83 65 0 0 1 4 83 65 0 0 0 4 1 71 241 42 1 4 1 71 241 42 0 4 201 82 0 0 1 4 201 82 0 0 0 4 143 3 0 0 1 4 143 3 0 0 0 4 140 29 0 0 1 4 140 29 0 0 0 4 209 38 0 0 1 4 209 38 0 0 0 4 34 69 0 0 1 4 34 69 0 0 0 8 221 163 103 107 78 53 11 0 1 8 221 163 103 107 78 53 11 0 0 4 210 46 149 42 1 4 210 46 149 42 0 4 48 85 36 205 1 4 48 85 36 205 0 4 37 35 35 0 1 4 37 35 35 0 0 4 13 0 0 0 1 4 13 0 0 0 0 8 46 173 250 215 165 229 166 2 1 8 46 173 250 215 165 229 166 2 0 8 67 188 30 254 109 2 0 0 1 8 67 188 30 254 109 2 0 0 0 4 137 152 11 16 1 4 137 152 11 16 0 8 152 52 243 192 36 1 0 0 1 8 152 52 243 192 36 1 0 0 0 4 129 59 0 0 1 4 129 59 0 0 0 8 201 94 53 127 56 0 0 0 1 8 201 94 53 127 56 0 0 0 0 8 73 236 21 75 203 154 66 5 1 8 73 236 21 75 203 154 66 5 0 8 196 244 167 127 116 213 0 0 1 8 196 244 167 127 116 213 0 0 0 8 63 43 243 86 100 247 101 30 1 8 63 43 243 86 100 247 101 30 0 4 179 18 79 0 1 4 179 18 79 0 0 4 62 229 32 2 1 4 62 229 32 2 0 8 191 161 29 68 10 28 0 0 1 8 191 161 29 68 10 28 0 0 0 4 157 0 0 0 1 4 157 0 0 0 0 8 177 110 144 211 209 51 0 0 1 8 177 110 144 211 209 51 0 0 0 4 38 140 6 0 1 4 38 140 6 0 0 4 230 31 0 0 1 4 230 31 0 0 0 4 240 94 116 15 1 4 240 94 116 15 0 4 182 7 0 0 1 4 182 7 0 0 0 8 1 177 12 133 96 0 0 0 1 8 1 177 12 133 96 0 0 0 0 4 240 7 185 0 1 4 240 7 185 0 0 4 243 73 7 0 1 4 243 73 7 0 0 4 26 0 0 0 1 4 26 0 0 0 0 8 103 9 1 204 46 0 0 0 1 8 103 9 1 204 46 0 0 0 0 8 98 214 177 103 24 96 0 0 1 8 98 214 177 103 24 96 0 0 0 8 81 174 115 76 247 124 0 0 1 8 81 174 115 76 247 124 0 0 0 4 61 12 0 0 1 4 61 12 0 0 0 4 85 161 0 0 1 4 85 161 0 0 0 8 101 4 40 150 22 103 32 0 1 8 101 4 40 150 22 103 32 0 0 4 103 2 0 0 1 4 103 2 0 0 0 4 60 153 25 0 1 4 60 153 25 0 0 4 143 111 7 0 1 4 143 111 7 0 0 8 80 120 24 232 225 5 0 0 1 8 80 120 24 232 225 5 0 0 0 4 174 134 41 0 1 4 174 134 41 0 0 4 113 152 62 21 1 4 113 152 62 21 0 4 241 24 81 31 1 4 241 24 81 31 0 8 82 153 37 103 160 93 6 0 1 8 82 153 37 103 160 93 6 0 0 8 40 224 161 201 3 0 0 0 1 8 40 224 161 201 3 0 0 0 0 4 19 3 0 0 1 4 19 3 0 0 0 4 82 0 0 0 1 4 82 0 0 0 0 8 64 200 218 23 94 23 70 119 1 8 64 200 218 23 94 23 70 119 0 4 15 139 7 0 1 4 15 139 7 0 0 4 18 20 0 0 1 4 18 20 0 0 0 8 128 37 176 212 38 112 1 0 1 8 128 37 176 212 38 112 1 0 0 8 13 125 43 146 204 213 0 0 1 8 13 125 43 146 204 213 0 0 0 4 14 0 0 0 1 4 14 0 0 0 0 4 70 145 5 0 1 4 70 145 5 0 0 8 186 122 94 51 73 69 56 8 1 8 186 122 94 51 73 69 56 8 0 4 77 183 3 0 1 4 77 183 3 0 0 8 217 138 24 241 155 207 0 0 1 8 217 138 24 241 155 207 0 0 0 4 150 0 0 0 1 4 150 0 0 0 0 4 196 49 182 125 1 4 196 49 182 125 0 4 133 3 165 0 1 4 133 3 165 0 0 8 0 245 2 102 53 0 0 0 1 8 0 245 2 102 53 0 0 0 0 4 35 187 7 0 1 4 35 187 7 0 0 4 217 58 0 0 1 4 217 58 0 0 0 8 93 4 23 102 114 100 3 1 1 8 93 4 23 102 114 100 3 1 0 4 18 224 241 10 1 4 18 224 241 10 0 4 100 120 0 0 1 4 100 120 0 0
diff --git a/libs/multiprecision/test/cpp_int64_serial64.txt b/libs/multiprecision/test/cpp_int64_serial64.txt
new file mode 100644
index 0000000000..7a42fa0220
--- /dev/null
+++ b/libs/multiprecision/test/cpp_int64_serial64.txt
@@ -0,0 +1 @@
+22 serialization::archive 10 0 0 0 0 0 8 154 227 28 82 91 187 17 0 1 8 154 227 28 82 91 187 17 0 0 8 238 2 0 0 0 0 0 0 1 8 238 2 0 0 0 0 0 0 0 8 179 21 191 74 120 31 195 5 1 8 179 21 191 74 120 31 195 5 0 8 38 72 203 241 222 183 7 0 1 8 38 72 203 241 222 183 7 0 0 8 225 3 0 0 0 0 0 0 1 8 225 3 0 0 0 0 0 0 0 8 242 170 246 107 183 113 31 11 1 8 242 170 246 107 183 113 31 11 0 8 159 2 53 187 36 166 22 4 1 8 159 2 53 187 36 166 22 4 0 8 26 205 0 0 0 0 0 0 1 8 26 205 0 0 0 0 0 0 0 8 177 10 45 114 95 1 0 0 1 8 177 10 45 114 95 1 0 0 0 8 231 42 31 0 0 0 0 0 1 8 231 42 31 0 0 0 0 0 0 8 228 0 0 0 0 0 0 0 1 8 228 0 0 0 0 0 0 0 0 8 161 235 183 0 9 0 0 0 1 8 161 235 183 0 9 0 0 0 0 8 161 84 9 0 0 0 0 0 1 8 161 84 9 0 0 0 0 0 0 8 17 21 0 0 0 0 0 0 1 8 17 21 0 0 0 0 0 0 0 8 132 60 177 2 3 0 0 0 1 8 132 60 177 2 3 0 0 0 0 8 112 146 42 85 255 28 14 50 1 8 112 146 42 85 255 28 14 50 0 8 56 155 123 75 170 217 61 52 1 8 56 155 123 75 170 217 61 52 0 8 128 184 17 143 213 41 148 184 1 8 128 184 17 143 213 41 148 184 0 8 211 92 36 214 185 177 216 48 1 8 211 92 36 214 185 177 216 48 0 8 103 144 142 223 219 161 68 11 1 8 103 144 142 223 219 161 68 11 0 8 136 9 0 0 0 0 0 0 1 8 136 9 0 0 0 0 0 0 0 8 110 109 102 36 76 159 0 0 1 8 110 109 102 36 76 159 0 0 0 8 212 44 7 134 98 246 52 74 1 8 212 44 7 134 98 246 52 74 0 8 5 18 148 245 212 213 152 2 1 8 5 18 148 245 212 213 152 2 0 8 215 29 169 9 145 141 144 10 1 8 215 29 169 9 145 141 144 10 0 8 205 0 0 0 0 0 0 0 1 8 205 0 0 0 0 0 0 0 0 8 242 218 75 187 1 0 0 0 1 8 242 218 75 187 1 0 0 0 0 8 196 242 164 7 110 253 8 0 1 8 196 242 164 7 110 253 8 0 0 8 87 7 181 132 51 102 13 0 1 8 87 7 181 132 51 102 13 0 0 8 18 228 18 0 0 0 0 0 1 8 18 228 18 0 0 0 0 0 0 8 190 5 0 0 0 0 0 0 1 8 190 5 0 0 0 0 0 0 0 8 7 0 0 0 0 0 0 0 1 8 7 0 0 0 0 0 0 0 0 8 89 137 26 12 0 0 0 0 1 8 89 137 26 12 0 0 0 0 0 8 130 0 0 0 0 0 0 0 1 8 130 0 0 0 0 0 0 0 0 8 128 249 218 245 47 115 9 1 1 8 128 249 218 245 47 115 9 1 0 8 162 100 122 44 193 2 0 0 1 8 162 100 122 44 193 2 0 0 0 8 101 75 177 242 99 85 12 0 1 8 101 75 177 242 99 85 12 0 0 8 240 219 82 212 216 69 123 0 1 8 240 219 82 212 216 69 123 0 0 8 0 241 147 64 173 200 15 13 1 8 0 241 147 64 173 200 15 13 0 8 123 176 87 114 3 0 0 0 1 8 123 176 87 114 3 0 0 0 0 8 199 125 85 138 128 0 0 0 1 8 199 125 85 138 128 0 0 0 0 8 212 151 16 161 84 117 1 0 1 8 212 151 16 161 84 117 1 0 0 8 6 0 0 0 0 0 0 0 1 8 6 0 0 0 0 0 0 0 0 8 3 195 58 0 0 0 0 0 1 8 3 195 58 0 0 0 0 0 0 8 97 114 34 212 170 208 45 0 1 8 97 114 34 212 170 208 45 0 0 8 146 232 0 0 0 0 0 0 1 8 146 232 0 0 0 0 0 0 0 8 133 179 117 190 9 133 28 13 1 8 133 179 117 190 9 133 28 13 0 8 73 171 130 38 191 22 0 0 1 8 73 171 130 38 191 22 0 0 0 8 18 152 190 20 249 26 0 0 1 8 18 152 190 20 249 26 0 0 0 8 252 198 62 5 0 0 0 0 1 8 252 198 62 5 0 0 0 0 0 8 73 97 191 10 234 239 1 0 1 8 73 97 191 10 234 239 1 0 0 8 153 44 205 37 255 196 0 0 1 8 153 44 205 37 255 196 0 0 0 8 81 132 37 54 246 238 0 0 1 8 81 132 37 54 246 238 0 0 0 8 8 53 135 13 0 0 0 0 1 8 8 53 135 13 0 0 0 0 0 8 89 148 169 6 0 0 0 0 1 8 89 148 169 6 0 0 0 0 0 8 17 159 173 20 0 0 0 0 1 8 17 159 173 20 0 0 0 0 0 8 201 182 183 82 169 6 0 0 1 8 201 182 183 82 169 6 0 0 0 8 182 0 0 0 0 0 0 0 1 8 182 0 0 0 0 0 0 0 0 8 108 16 0 0 0 0 0 0 1 8 108 16 0 0 0 0 0 0 0 8 39 236 0 0 0 0 0 0 1 8 39 236 0 0 0 0 0 0 0 8 181 1 156 121 15 32 0 0 1 8 181 1 156 121 15 32 0 0 0 8 29 56 214 10 51 145 14 0 1 8 29 56 214 10 51 145 14 0 0 8 6 0 0 0 0 0 0 0 1 8 6 0 0 0 0 0 0 0 0 8 161 199 49 0 0 0 0 0 1 8 161 199 49 0 0 0 0 0 0 8 248 149 1 0 0 0 0 0 1 8 248 149 1 0 0 0 0 0 0 8 180 167 79 137 212 132 35 1 1 8 180 167 79 137 212 132 35 1 0 8 8 0 0 0 0 0 0 0 1 8 8 0 0 0 0 0 0 0 0 8 195 6 0 0 0 0 0 0 1 8 195 6 0 0 0 0 0 0 0 8 82 1 0 0 0 0 0 0 1 8 82 1 0 0 0 0 0 0 0 8 33 248 118 22 198 96 57 183 1 8 33 248 118 22 198 96 57 183 0 8 94 181 212 144 197 233 13 0 1 8 94 181 212 144 197 233 13 0 0 8 102 74 34 111 163 102 6 0 1 8 102 74 34 111 163 102 6 0 0 8 26 210 173 182 38 49 0 0 1 8 26 210 173 182 38 49 0 0 0 8 86 0 0 0 0 0 0 0 1 8 86 0 0 0 0 0 0 0 0 8 143 140 20 0 0 0 0 0 1 8 143 140 20 0 0 0 0 0 0 8 73 116 37 159 96 31 0 0 1 8 73 116 37 159 96 31 0 0 0 8 8 37 96 156 51 81 22 12 1 8 8 37 96 156 51 81 22 12 0 8 237 236 131 159 0 0 0 0 1 8 237 236 131 159 0 0 0 0 0 8 10 0 0 0 0 0 0 0 1 8 10 0 0 0 0 0 0 0 0 8 130 141 0 7 2 2 0 0 1 8 130 141 0 7 2 2 0 0 0 8 109 195 74 15 0 0 0 0 1 8 109 195 74 15 0 0 0 0 0 8 230 2 0 0 0 0 0 0 1 8 230 2 0 0 0 0 0 0 0 8 106 192 15 1 0 0 0 0 1 8 106 192 15 1 0 0 0 0 0 8 10 163 0 0 0 0 0 0 1 8 10 163 0 0 0 0 0 0 0 8 203 163 89 123 164 84 3 0 1 8 203 163 89 123 164 84 3 0 0 8 10 0 0 0 0 0 0 0 1 8 10 0 0 0 0 0 0 0 0 8 215 165 31 197 2 167 7 0 1 8 215 165 31 197 2 167 7 0 0 8 21 0 0 0 0 0 0 0 1 8 21 0 0 0 0 0 0 0 0 8 39 38 0 0 0 0 0 0 1 8 39 38 0 0 0 0 0 0 0 8 57 137 152 9 0 0 0 0 1 8 57 137 152 9 0 0 0 0 0 8 5 3 11 74 1 0 0 0 1 8 5 3 11 74 1 0 0 0 0 8 160 216 17 103 0 0 0 0 1 8 160 216 17 103 0 0 0 0 0 8 29 8 124 52 0 0 0 0 1 8 29 8 124 52 0 0 0 0 0 8 154 188 176 41 1 0 0 0 1 8 154 188 176 41 1 0 0 0 0 8 76 178 160 131 39 5 0 0 1 8 76 178 160 131 39 5 0 0 0 8 184 146 71 183 150 91 6 0 1 8 184 146 71 183 150 91 6 0 0 8 171 6 120 246 94 47 0 0 1 8 171 6 120 246 94 47 0 0 0 8 146 132 93 2 22 222 211 5 1 8 146 132 93 2 22 222 211 5 0 8 204 2 222 46 179 175 0 0 1 8 204 2 222 46 179 175 0 0 0 8 9 148 45 199 56 52 13 0 1 8 9 148 45 199 56 52 13 0 0 8 241 190 12 0 0 0 0 0 1 8 241 190 12 0 0 0 0 0 0 8 88 52 207 19 120 43 0 0 1 8 88 52 207 19 120 43 0 0 0 8 132 70 133 92 64 29 0 0 1 8 132 70 133 92 64 29 0 0 0 8 1 0 0 0 0 0 0 0 1 8 1 0 0 0 0 0 0 0 0 8 153 12 223 211 34 6 0 0 1 8 153 12 223 211 34 6 0 0 0 8 140 14 165 245 82 66 0 0 1 8 140 14 165 245 82 66 0 0 0 8 221 15 0 0 0 0 0 0 1 8 221 15 0 0 0 0 0 0 0 8 50 119 85 166 157 1 0 0 1 8 50 119 85 166 157 1 0 0 0 8 30 3 0 0 0 0 0 0 1 8 30 3 0 0 0 0 0 0 0 8 13 245 224 15 0 0 0 0 1 8 13 245 224 15 0 0 0 0 0 8 202 238 193 147 1 0 0 0 1 8 202 238 193 147 1 0 0 0 0 8 91 182 236 7 230 82 3 0 1 8 91 182 236 7 230 82 3 0 0 8 63 175 86 139 154 53 6 37 1 8 63 175 86 139 154 53 6 37 0 8 201 71 17 19 25 0 0 0 1 8 201 71 17 19 25 0 0 0 0 8 14 211 37 0 0 0 0 0 1 8 14 211 37 0 0 0 0 0 0 8 202 176 13 183 153 3 12 1 1 8 202 176 13 183 153 3 12 1 0 8 34 164 43 13 117 0 0 0 1 8 34 164 43 13 117 0 0 0 0 8 55 100 235 195 135 199 4 0 1 8 55 100 235 195 135 199 4 0 0 8 77 59 0 0 0 0 0 0 1 8 77 59 0 0 0 0 0 0 0 8 6 0 0 0 0 0 0 0 1 8 6 0 0 0 0 0 0 0 0 8 91 176 44 141 237 201 1 0 1 8 91 176 44 141 237 201 1 0 0 8 91 247 129 23 149 242 13 0 1 8 91 247 129 23 149 242 13 0 0 8 159 244 3 0 0 0 0 0 1 8 159 244 3 0 0 0 0 0 0 8 39 216 128 123 225 164 26 0 1 8 39 216 128 123 225 164 26 0 0 8 206 236 127 202 3 0 0 0 1 8 206 236 127 202 3 0 0 0 0 8 227 22 89 80 97 163 24 23 1 8 227 22 89 80 97 163 24 23 0 8 6 163 204 40 124 57 0 0 1 8 6 163 204 40 124 57 0 0 0 8 72 96 82 7 0 0 0 0 1 8 72 96 82 7 0 0 0 0 0 8 205 145 127 61 215 220 134 3 1 8 205 145 127 61 215 220 134 3 0 8 187 177 86 19 0 0 0 0 1 8 187 177 86 19 0 0 0 0 0 8 195 158 155 140 132 204 144 36 1 8 195 158 155 140 132 204 144 36 0 8 141 29 202 70 15 0 0 0 1 8 141 29 202 70 15 0 0 0 0 8 80 57 26 165 1 0 0 0 1 8 80 57 26 165 1 0 0 0 0 8 232 14 0 0 0 0 0 0 1 8 232 14 0 0 0 0 0 0 0 8 172 7 0 0 0 0 0 0 1 8 172 7 0 0 0 0 0 0 0 8 229 247 251 162 193 189 0 0 1 8 229 247 251 162 193 189 0 0 0 8 70 15 0 0 0 0 0 0 1 8 70 15 0 0 0 0 0 0 0 8 104 115 1 0 0 0 0 0 1 8 104 115 1 0 0 0 0 0 0 8 73 175 2 0 0 0 0 0 1 8 73 175 2 0 0 0 0 0 0 8 139 107 110 161 47 228 20 0 1 8 139 107 110 161 47 228 20 0 0 8 52 16 150 150 195 76 61 0 1 8 52 16 150 150 195 76 61 0 0 8 3 233 1 255 93 196 239 229 1 8 3 233 1 255 93 196 239 229 0 8 210 243 2 0 0 0 0 0 1 8 210 243 2 0 0 0 0 0 0 8 136 103 92 0 0 0 0 0 1 8 136 103 92 0 0 0 0 0 0 8 146 79 153 7 104 181 15 0 1 8 146 79 153 7 104 181 15 0 0 8 63 136 0 0 0 0 0 0 1 8 63 136 0 0 0 0 0 0 0 8 42 206 0 0 0 0 0 0 1 8 42 206 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 8 10 253 104 129 179 201 249 12 1 8 10 253 104 129 179 201 249 12 0 8 173 0 0 0 0 0 0 0 1 8 173 0 0 0 0 0 0 0 0 8 126 150 157 0 0 0 0 0 1 8 126 150 157 0 0 0 0 0 0 8 95 103 181 13 108 192 162 0 1 8 95 103 181 13 108 192 162 0 0 8 8 34 0 0 0 0 0 0 1 8 8 34 0 0 0 0 0 0 0 8 195 39 2 201 240 221 6 0 1 8 195 39 2 201 240 221 6 0 0 8 164 73 1 0 0 0 0 0 1 8 164 73 1 0 0 0 0 0 0 8 24 150 136 250 66 244 117 28 1 8 24 150 136 250 66 244 117 28 0 8 188 211 235 56 103 1 0 0 1 8 188 211 235 56 103 1 0 0 0 8 147 116 238 204 203 134 5 0 1 8 147 116 238 204 203 134 5 0 0 8 212 155 224 212 0 0 0 0 1 8 212 155 224 212 0 0 0 0 0 8 162 39 186 255 226 48 217 253 1 8 162 39 186 255 226 48 217 253 0 8 96 45 87 0 0 0 0 0 1 8 96 45 87 0 0 0 0 0 0 8 43 0 0 0 0 0 0 0 1 8 43 0 0 0 0 0 0 0 0 8 21 190 140 128 8 199 26 0 1 8 21 190 140 128 8 199 26 0 0 8 223 96 39 236 140 66 12 0 1 8 223 96 39 236 140 66 12 0 0 8 168 80 9 35 78 0 0 0 1 8 168 80 9 35 78 0 0 0 0 8 88 244 56 44 112 0 0 0 1 8 88 244 56 44 112 0 0 0 0 8 57 42 143 22 20 0 0 0 1 8 57 42 143 22 20 0 0 0 0 8 203 139 139 233 47 120 0 0 1 8 203 139 139 233 47 120 0 0 0 8 151 136 78 80 220 201 21 3 1 8 151 136 78 80 220 201 21 3 0 8 41 214 136 67 14 14 0 0 1 8 41 214 136 67 14 14 0 0 0 8 68 146 0 0 0 0 0 0 1 8 68 146 0 0 0 0 0 0 0 8 4 125 187 175 144 13 0 0 1 8 4 125 187 175 144 13 0 0 0 8 107 43 241 204 40 37 1 0 1 8 107 43 241 204 40 37 1 0 0 8 100 212 145 7 0 0 0 0 1 8 100 212 145 7 0 0 0 0 0 8 181 219 82 238 3 185 1 0 1 8 181 219 82 238 3 185 1 0 0 8 83 219 52 188 1 0 0 0 1 8 83 219 52 188 1 0 0 0 0 8 245 60 150 2 0 0 0 0 1 8 245 60 150 2 0 0 0 0 0 8 182 3 0 0 0 0 0 0 1 8 182 3 0 0 0 0 0 0 0 8 35 242 99 17 31 0 0 0 1 8 35 242 99 17 31 0 0 0 0 8 210 109 74 20 3 0 0 0 1 8 210 109 74 20 3 0 0 0 0 8 113 0 0 0 0 0 0 0 1 8 113 0 0 0 0 0 0 0 0 8 215 146 221 1 0 0 0 0 1 8 215 146 221 1 0 0 0 0 0 8 33 0 0 0 0 0 0 0 1 8 33 0 0 0 0 0 0 0 0 8 241 68 169 0 0 0 0 0 1 8 241 68 169 0 0 0 0 0 0 8 109 184 204 61 3 0 0 0 1 8 109 184 204 61 3 0 0 0 0 8 181 132 45 203 59 0 0 0 1 8 181 132 45 203 59 0 0 0 0 8 193 232 39 3 20 5 2 0 1 8 193 232 39 3 20 5 2 0 0 8 41 222 5 0 0 0 0 0 1 8 41 222 5 0 0 0 0 0 0 8 240 84 253 169 3 245 134 14 1 8 240 84 253 169 3 245 134 14 0 8 53 101 132 186 140 107 194 48 1 8 53 101 132 186 140 107 194 48 0 8 231 3 0 0 0 0 0 0 1 8 231 3 0 0 0 0 0 0 0 8 185 12 0 0 0 0 0 0 1 8 185 12 0 0 0 0 0 0 0 8 3 35 9 8 33 0 0 0 1 8 3 35 9 8 33 0 0 0 0 8 156 36 211 5 0 0 0 0 1 8 156 36 211 5 0 0 0 0 0 8 92 228 169 22 0 0 0 0 1 8 92 228 169 22 0 0 0 0 0 8 127 62 177 0 0 0 0 0 1 8 127 62 177 0 0 0 0 0 0 8 2 0 0 0 0 0 0 0 1 8 2 0 0 0 0 0 0 0 0 8 164 101 187 91 120 0 0 0 1 8 164 101 187 91 120 0 0 0 0 8 33 58 42 0 0 0 0 0 1 8 33 58 42 0 0 0 0 0 0 8 65 43 119 4 0 0 0 0 1 8 65 43 119 4 0 0 0 0 0 8 171 27 0 0 0 0 0 0 1 8 171 27 0 0 0 0 0 0 0 8 151 115 89 236 58 107 231 6 1 8 151 115 89 236 58 107 231 6 0 8 53 244 97 77 30 194 11 0 1 8 53 244 97 77 30 194 11 0 0 8 227 66 108 47 0 0 0 0 1 8 227 66 108 47 0 0 0 0 0 8 67 137 26 0 0 0 0 0 1 8 67 137 26 0 0 0 0 0 0 8 70 250 222 204 115 159 137 0 1 8 70 250 222 204 115 159 137 0 0 8 164 93 158 196 7 0 0 0 1 8 164 93 158 196 7 0 0 0 0 8 113 106 97 177 105 0 0 0 1 8 113 106 97 177 105 0 0 0 0 8 38 28 0 0 0 0 0 0 1 8 38 28 0 0 0 0 0 0 0 8 144 3 0 0 0 0 0 0 1 8 144 3 0 0 0 0 0 0 0 8 55 211 179 66 249 0 0 0 1 8 55 211 179 66 249 0 0 0 0 8 70 208 8 215 0 0 0 0 1 8 70 208 8 215 0 0 0 0 0 8 17 174 7 0 0 0 0 0 1 8 17 174 7 0 0 0 0 0 0 8 145 40 82 0 0 0 0 0 1 8 145 40 82 0 0 0 0 0 0 8 185 14 149 132 50 7 0 0 1 8 185 14 149 132 50 7 0 0 0 8 84 17 37 245 0 0 0 0 1 8 84 17 37 245 0 0 0 0 0 8 218 94 35 43 115 7 0 0 1 8 218 94 35 43 115 7 0 0 0 8 170 8 238 147 136 37 0 0 1 8 170 8 238 147 136 37 0 0 0 8 169 153 246 116 99 150 1 0 1 8 169 153 246 116 99 150 1 0 0 8 110 23 17 63 97 104 44 241 1 8 110 23 17 63 97 104 44 241 0 8 219 131 208 47 0 0 0 0 1 8 219 131 208 47 0 0 0 0 0 8 100 16 250 222 223 5 0 0 1 8 100 16 250 222 223 5 0 0 0 8 189 0 0 0 0 0 0 0 1 8 189 0 0 0 0 0 0 0 0 8 22 198 182 249 164 1 85 6 1 8 22 198 182 249 164 1 85 6 0 8 173 137 0 0 0 0 0 0 1 8 173 137 0 0 0 0 0 0 0 8 111 190 230 246 0 0 0 0 1 8 111 190 230 246 0 0 0 0 0 8 51 99 110 105 78 69 86 3 1 8 51 99 110 105 78 69 86 3 0 8 104 165 202 140 7 0 0 0 1 8 104 165 202 140 7 0 0 0 0 8 136 13 0 0 0 0 0 0 1 8 136 13 0 0 0 0 0 0 0 8 5 138 36 135 3 0 0 0 1 8 5 138 36 135 3 0 0 0 0 8 39 105 124 108 77 96 30 0 1 8 39 105 124 108 77 96 30 0 0 8 78 159 129 13 0 0 0 0 1 8 78 159 129 13 0 0 0 0 0 8 223 6 27 79 8 0 0 0 1 8 223 6 27 79 8 0 0 0 0 8 203 6 61 205 13 0 0 0 1 8 203 6 61 205 13 0 0 0 0 8 111 62 45 160 194 14 103 96 1 8 111 62 45 160 194 14 103 96 0 8 82 143 196 30 0 0 0 0 1 8 82 143 196 30 0 0 0 0 0 8 54 0 0 0 0 0 0 0 1 8 54 0 0 0 0 0 0 0 0 8 37 180 24 111 34 94 97 0 1 8 37 180 24 111 34 94 97 0 0 8 94 61 200 42 0 0 0 0 1 8 94 61 200 42 0 0 0 0 0 8 229 205 68 230 125 0 0 0 1 8 229 205 68 230 125 0 0 0 0 8 125 1 0 0 0 0 0 0 1 8 125 1 0 0 0 0 0 0 0 8 70 69 227 171 0 0 0 0 1 8 70 69 227 171 0 0 0 0 0 8 121 93 176 157 92 133 17 34 1 8 121 93 176 157 92 133 17 34 0 8 211 207 179 76 229 87 229 73 1 8 211 207 179 76 229 87 229 73 0 8 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 8 3 0 0 0 0 0 0 0 1 8 3 0 0 0 0 0 0 0 0 8 101 90 156 136 105 177 2 0 1 8 101 90 156 136 105 177 2 0 0 8 163 122 187 139 155 245 97 88 1 8 163 122 187 139 155 245 97 88 0 8 31 100 188 227 193 143 8 0 1 8 31 100 188 227 193 143 8 0 0 8 85 153 46 1 0 0 0 0 1 8 85 153 46 1 0 0 0 0 0 8 221 254 215 194 253 123 70 0 1 8 221 254 215 194 253 123 70 0 0 8 215 60 213 115 201 17 0 0 1 8 215 60 213 115 201 17 0 0 0 8 245 0 0 0 0 0 0 0 1 8 245 0 0 0 0 0 0 0 0 8 182 69 1 0 0 0 0 0 1 8 182 69 1 0 0 0 0 0 0 8 16 115 202 1 0 0 0 0 1 8 16 115 202 1 0 0 0 0 0 8 229 38 172 10 236 158 36 0 1 8 229 38 172 10 236 158 36 0 0 8 152 18 4 0 0 0 0 0 1 8 152 18 4 0 0 0 0 0 0 8 29 0 0 0 0 0 0 0 1 8 29 0 0 0 0 0 0 0 0 8 164 28 2 236 150 2 6 0 1 8 164 28 2 236 150 2 6 0 0 8 199 130 156 17 201 5 0 0 1 8 199 130 156 17 201 5 0 0 0 8 13 53 72 26 0 0 0 0 1 8 13 53 72 26 0 0 0 0 0 8 238 224 211 162 10 18 0 0 1 8 238 224 211 162 10 18 0 0 0 8 120 226 140 214 213 131 23 1 1 8 120 226 140 214 213 131 23 1 0 8 127 6 0 0 0 0 0 0 1 8 127 6 0 0 0 0 0 0 0 8 191 27 0 0 0 0 0 0 1 8 191 27 0 0 0 0 0 0 0 8 27 167 239 216 56 139 31 36 1 8 27 167 239 216 56 139 31 36 0 8 82 31 0 0 0 0 0 0 1 8 82 31 0 0 0 0 0 0 0 8 244 0 0 0 0 0 0 0 1 8 244 0 0 0 0 0 0 0 0 8 116 7 0 0 0 0 0 0 1 8 116 7 0 0 0 0 0 0 0 8 130 5 6 0 0 0 0 0 1 8 130 5 6 0 0 0 0 0 0 8 47 2 0 0 0 0 0 0 1 8 47 2 0 0 0 0 0 0 0 8 196 55 144 21 143 144 9 0 1 8 196 55 144 21 143 144 9 0 0 8 234 45 67 110 61 33 47 0 1 8 234 45 67 110 61 33 47 0 0 8 124 0 0 0 0 0 0 0 1 8 124 0 0 0 0 0 0 0 0 8 105 213 125 231 51 0 0 0 1 8 105 213 125 231 51 0 0 0 0 8 11 175 154 185 42 1 0 0 1 8 11 175 154 185 42 1 0 0 0 8 101 255 202 218 14 0 0 0 1 8 101 255 202 218 14 0 0 0 0 8 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 8 37 7 0 0 0 0 0 0 1 8 37 7 0 0 0 0 0 0 0 8 47 33 204 49 169 12 0 0 1 8 47 33 204 49 169 12 0 0 0 8 237 178 210 116 191 60 18 0 1 8 237 178 210 116 191 60 18 0 0 8 226 16 6 156 2 0 0 0 1 8 226 16 6 156 2 0 0 0 0 8 21 186 33 53 89 1 0 0 1 8 21 186 33 53 89 1 0 0 0 8 43 243 242 11 0 0 0 0 1 8 43 243 242 11 0 0 0 0 0 8 253 48 225 0 0 0 0 0 1 8 253 48 225 0 0 0 0 0 0 8 98 116 0 0 0 0 0 0 1 8 98 116 0 0 0 0 0 0 0 8 180 159 4 1 0 0 0 0 1 8 180 159 4 1 0 0 0 0 0 8 187 2 0 0 0 0 0 0 1 8 187 2 0 0 0 0 0 0 0 8 36 0 3 2 0 0 0 0 1 8 36 0 3 2 0 0 0 0 0 8 160 47 250 0 0 0 0 0 1 8 160 47 250 0 0 0 0 0 0 8 98 0 0 0 0 0 0 0 1 8 98 0 0 0 0 0 0 0 0 8 174 190 217 68 144 74 0 0 1 8 174 190 217 68 144 74 0 0 0 8 23 145 1 0 0 0 0 0 1 8 23 145 1 0 0 0 0 0 0 8 13 0 0 0 0 0 0 0 1 8 13 0 0 0 0 0 0 0 0 8 44 1 0 0 0 0 0 0 1 8 44 1 0 0 0 0 0 0 0 8 245 250 2 0 0 0 0 0 1 8 245 250 2 0 0 0 0 0 0 8 65 32 0 0 0 0 0 0 1 8 65 32 0 0 0 0 0 0 0 8 205 117 182 80 2 0 0 0 1 8 205 117 182 80 2 0 0 0 0 8 186 246 0 0 0 0 0 0 1 8 186 246 0 0 0 0 0 0 0 8 234 122 75 99 110 255 9 0 1 8 234 122 75 99 110 255 9 0 0 8 222 223 37 8 0 0 0 0 1 8 222 223 37 8 0 0 0 0 0 8 230 26 192 136 251 74 228 31 1 8 230 26 192 136 251 74 228 31 0 8 14 0 0 0 0 0 0 0 1 8 14 0 0 0 0 0 0 0 0 8 128 177 66 193 232 29 55 0 1 8 128 177 66 193 232 29 55 0 0 8 253 35 145 164 119 248 140 2 1 8 253 35 145 164 119 248 140 2 0 8 174 117 27 0 0 0 0 0 1 8 174 117 27 0 0 0 0 0 0 8 8 228 105 75 109 68 255 25 1 8 8 228 105 75 109 68 255 25 0 8 31 0 0 0 0 0 0 0 1 8 31 0 0 0 0 0 0 0 0 8 101 158 131 43 1 0 0 0 1 8 101 158 131 43 1 0 0 0 0 8 8 103 0 0 0 0 0 0 1 8 8 103 0 0 0 0 0 0 0 8 181 252 244 53 0 0 0 0 1 8 181 252 244 53 0 0 0 0 0 8 39 186 76 130 8 0 0 0 1 8 39 186 76 130 8 0 0 0 0 8 231 168 14 0 0 0 0 0 1 8 231 168 14 0 0 0 0 0 0 8 111 30 175 61 55 124 64 1 1 8 111 30 175 61 55 124 64 1 0 8 74 60 189 200 26 84 16 2 1 8 74 60 189 200 26 84 16 2 0 8 103 99 236 0 0 0 0 0 1 8 103 99 236 0 0 0 0 0 0 8 248 30 237 0 0 0 0 0 1 8 248 30 237 0 0 0 0 0 0 8 15 0 0 0 0 0 0 0 1 8 15 0 0 0 0 0 0 0 0 8 39 0 0 0 0 0 0 0 1 8 39 0 0 0 0 0 0 0 0 8 221 30 0 0 0 0 0 0 1 8 221 30 0 0 0 0 0 0 0 8 83 158 61 244 15 140 7 0 1 8 83 158 61 244 15 140 7 0 0 8 21 183 50 199 183 253 159 0 1 8 21 183 50 199 183 253 159 0 0 8 176 107 53 5 0 0 0 0 1 8 176 107 53 5 0 0 0 0 0 8 53 53 0 0 0 0 0 0 1 8 53 53 0 0 0 0 0 0 0 8 162 140 0 0 0 0 0 0 1 8 162 140 0 0 0 0 0 0 0 8 126 253 1 0 0 0 0 0 1 8 126 253 1 0 0 0 0 0 0 8 233 141 234 3 0 0 0 0 1 8 233 141 234 3 0 0 0 0 0 8 178 136 48 203 1 0 0 0 1 8 178 136 48 203 1 0 0 0 0 8 171 0 0 0 0 0 0 0 1 8 171 0 0 0 0 0 0 0 0 8 35 241 0 0 0 0 0 0 1 8 35 241 0 0 0 0 0 0 0 8 107 5 0 0 0 0 0 0 1 8 107 5 0 0 0 0 0 0 0 8 15 48 198 223 1 0 0 0 1 8 15 48 198 223 1 0 0 0 0 8 203 94 65 224 14 96 19 27 1 8 203 94 65 224 14 96 19 27 0 8 187 120 141 217 244 218 89 38 1 8 187 120 141 217 244 218 89 38 0 8 185 95 188 66 117 96 49 6 1 8 185 95 188 66 117 96 49 6 0 8 181 238 174 109 232 4 0 0 1 8 181 238 174 109 232 4 0 0 0 8 241 227 21 206 37 0 0 0 1 8 241 227 21 206 37 0 0 0 0 8 11 46 148 129 54 81 1 0 1 8 11 46 148 129 54 81 1 0 0 8 1 0 0 0 0 0 0 0 1 8 1 0 0 0 0 0 0 0 0 8 166 181 139 21 0 0 0 0 1 8 166 181 139 21 0 0 0 0 0 8 231 3 0 0 0 0 0 0 1 8 231 3 0 0 0 0 0 0 0 8 58 0 224 93 1 0 0 0 1 8 58 0 224 93 1 0 0 0 0 8 61 170 163 0 0 0 0 0 1 8 61 170 163 0 0 0 0 0 0 8 16 0 0 0 0 0 0 0 1 8 16 0 0 0 0 0 0 0 0 8 19 80 184 100 0 136 17 0 1 8 19 80 184 100 0 136 17 0 0 8 141 166 59 0 0 0 0 0 1 8 141 166 59 0 0 0 0 0 0 8 1 0 0 0 0 0 0 0 1 8 1 0 0 0 0 0 0 0 0 8 106 120 1 0 0 0 0 0 1 8 106 120 1 0 0 0 0 0 0 8 24 0 0 0 0 0 0 0 1 8 24 0 0 0 0 0 0 0 0 8 250 206 237 235 100 45 220 2 1 8 250 206 237 235 100 45 220 2 0 8 104 0 0 0 0 0 0 0 1 8 104 0 0 0 0 0 0 0 0 8 45 124 107 88 59 188 20 0 1 8 45 124 107 88 59 188 20 0 0 8 133 86 244 174 225 3 0 0 1 8 133 86 244 174 225 3 0 0 0 8 10 106 7 0 0 0 0 0 1 8 10 106 7 0 0 0 0 0 0 8 198 151 96 192 44 105 0 0 1 8 198 151 96 192 44 105 0 0 0 8 18 6 0 0 0 0 0 0 1 8 18 6 0 0 0 0 0 0 0 8 139 29 156 22 238 7 0 0 1 8 139 29 156 22 238 7 0 0 0 8 223 115 28 171 0 0 0 0 1 8 223 115 28 171 0 0 0 0 0 8 221 148 185 62 0 0 0 0 1 8 221 148 185 62 0 0 0 0 0 8 61 47 108 1 0 0 0 0 1 8 61 47 108 1 0 0 0 0 0 8 87 157 178 141 10 0 0 0 1 8 87 157 178 141 10 0 0 0 0 8 86 94 188 134 23 82 0 0 1 8 86 94 188 134 23 82 0 0 0 8 179 64 23 0 0 0 0 0 1 8 179 64 23 0 0 0 0 0 0 8 113 45 10 0 0 0 0 0 1 8 113 45 10 0 0 0 0 0 0 8 204 227 150 219 42 98 0 0 1 8 204 227 150 219 42 98 0 0 0 8 72 207 3 4 107 1 0 0 1 8 72 207 3 4 107 1 0 0 0 8 242 22 0 0 0 0 0 0 1 8 242 22 0 0 0 0 0 0 0 8 43 248 193 8 8 37 19 0 1 8 43 248 193 8 8 37 19 0 0 8 135 156 114 210 151 8 0 0 1 8 135 156 114 210 151 8 0 0 0 8 126 63 25 0 0 0 0 0 1 8 126 63 25 0 0 0 0 0 0 8 94 41 0 0 0 0 0 0 1 8 94 41 0 0 0 0 0 0 0 8 132 46 67 3 0 0 0 0 1 8 132 46 67 3 0 0 0 0 0 8 12 53 213 1 0 0 0 0 1 8 12 53 213 1 0 0 0 0 0 8 224 181 149 0 0 0 0 0 1 8 224 181 149 0 0 0 0 0 0 8 214 73 249 129 122 0 0 0 1 8 214 73 249 129 122 0 0 0 0 8 141 160 27 51 90 159 14 0 1 8 141 160 27 51 90 159 14 0 0 8 123 185 72 150 135 30 2 0 1 8 123 185 72 150 135 30 2 0 0 8 132 79 251 109 16 13 0 0 1 8 132 79 251 109 16 13 0 0 0 8 187 0 0 0 0 0 0 0 1 8 187 0 0 0 0 0 0 0 0 8 26 47 114 1 0 0 0 0 1 8 26 47 114 1 0 0 0 0 0 8 36 142 132 192 11 54 198 0 1 8 36 142 132 192 11 54 198 0 0 8 167 191 148 125 0 0 0 0 1 8 167 191 148 125 0 0 0 0 0 8 234 206 244 113 18 198 0 0 1 8 234 206 244 113 18 198 0 0 0 8 3 143 18 0 0 0 0 0 1 8 3 143 18 0 0 0 0 0 0 8 62 157 58 195 0 0 0 0 1 8 62 157 58 195 0 0 0 0 0 8 172 170 222 106 83 163 194 4 1 8 172 170 222 106 83 163 194 4 0 8 88 220 20 57 0 0 0 0 1 8 88 220 20 57 0 0 0 0 0 8 167 245 187 129 1 0 0 0 1 8 167 245 187 129 1 0 0 0 0 8 164 130 167 36 0 0 0 0 1 8 164 130 167 36 0 0 0 0 0 8 61 130 34 172 248 118 0 0 1 8 61 130 34 172 248 118 0 0 0 8 40 22 12 0 0 0 0 0 1 8 40 22 12 0 0 0 0 0 0 8 209 1 0 0 0 0 0 0 1 8 209 1 0 0 0 0 0 0 0 8 170 133 218 207 1 0 0 0 1 8 170 133 218 207 1 0 0 0 0 8 223 195 71 3 0 0 0 0 1 8 223 195 71 3 0 0 0 0 0 8 197 87 218 147 1 0 0 0 1 8 197 87 218 147 1 0 0 0 0 8 210 1 234 57 242 124 45 0 1 8 210 1 234 57 242 124 45 0 0 8 119 110 205 24 176 195 21 0 1 8 119 110 205 24 176 195 21 0 0 8 71 104 194 0 0 0 0 0 1 8 71 104 194 0 0 0 0 0 0 8 53 164 236 57 255 127 4 0 1 8 53 164 236 57 255 127 4 0 0 8 218 132 146 91 132 77 213 4 1 8 218 132 146 91 132 77 213 4 0 8 133 79 247 151 252 1 0 0 1 8 133 79 247 151 252 1 0 0 0 8 203 243 153 55 2 0 0 0 1 8 203 243 153 55 2 0 0 0 0 8 197 193 53 2 0 0 0 0 1 8 197 193 53 2 0 0 0 0 0 8 84 5 0 0 0 0 0 0 1 8 84 5 0 0 0 0 0 0 0 8 177 187 206 97 141 85 1 0 1 8 177 187 206 97 141 85 1 0 0 8 166 94 0 0 0 0 0 0 1 8 166 94 0 0 0 0 0 0 0 8 190 247 33 10 10 0 0 0 1 8 190 247 33 10 10 0 0 0 0 8 61 186 120 114 110 34 74 14 1 8 61 186 120 114 110 34 74 14 0 8 48 152 216 0 0 0 0 0 1 8 48 152 216 0 0 0 0 0 0 8 157 24 37 230 113 32 156 61 1 8 157 24 37 230 113 32 156 61 0 8 26 71 250 167 179 175 252 27 1 8 26 71 250 167 179 175 252 27 0 8 138 11 1 0 0 0 0 0 1 8 138 11 1 0 0 0 0 0 0 8 64 228 47 79 174 153 235 1 1 8 64 228 47 79 174 153 235 1 0 8 12 0 0 0 0 0 0 0 1 8 12 0 0 0 0 0 0 0 0 8 227 20 33 239 16 0 0 0 1 8 227 20 33 239 16 0 0 0 0 8 89 117 39 6 0 0 0 0 1 8 89 117 39 6 0 0 0 0 0 8 56 143 170 210 159 0 0 0 1 8 56 143 170 210 159 0 0 0 0 8 83 94 139 170 42 227 7 0 1 8 83 94 139 170 42 227 7 0 0 8 158 24 234 182 90 0 0 0 1 8 158 24 234 182 90 0 0 0 0 8 184 250 218 70 0 0 0 0 1 8 184 250 218 70 0 0 0 0 0 8 199 13 0 0 0 0 0 0 1 8 199 13 0 0 0 0 0 0 0 8 162 245 210 10 15 0 0 0 1 8 162 245 210 10 15 0 0 0 0 8 163 218 24 0 0 0 0 0 1 8 163 218 24 0 0 0 0 0 0 8 14 0 0 0 0 0 0 0 1 8 14 0 0 0 0 0 0 0 0 8 167 97 145 202 0 0 0 0 1 8 167 97 145 202 0 0 0 0 0 8 207 69 56 26 219 188 172 2 1 8 207 69 56 26 219 188 172 2 0 8 19 245 0 0 0 0 0 0 1 8 19 245 0 0 0 0 0 0 0 8 101 116 0 0 0 0 0 0 1 8 101 116 0 0 0 0 0 0 0 8 144 67 225 251 217 0 96 0 1 8 144 67 225 251 217 0 96 0 0 8 141 129 40 88 123 180 46 1 1 8 141 129 40 88 123 180 46 1 0 8 83 65 0 0 0 0 0 0 1 8 83 65 0 0 0 0 0 0 0 8 1 71 241 42 0 0 0 0 1 8 1 71 241 42 0 0 0 0 0 8 201 82 0 0 0 0 0 0 1 8 201 82 0 0 0 0 0 0 0 8 143 3 0 0 0 0 0 0 1 8 143 3 0 0 0 0 0 0 0 8 140 29 0 0 0 0 0 0 1 8 140 29 0 0 0 0 0 0 0 8 209 38 0 0 0 0 0 0 1 8 209 38 0 0 0 0 0 0 0 8 34 69 0 0 0 0 0 0 1 8 34 69 0 0 0 0 0 0 0 8 221 163 103 107 78 53 11 0 1 8 221 163 103 107 78 53 11 0 0 8 210 46 149 42 0 0 0 0 1 8 210 46 149 42 0 0 0 0 0 8 48 85 36 205 0 0 0 0 1 8 48 85 36 205 0 0 0 0 0 8 37 35 35 0 0 0 0 0 1 8 37 35 35 0 0 0 0 0 0 8 13 0 0 0 0 0 0 0 1 8 13 0 0 0 0 0 0 0 0 8 46 173 250 215 165 229 166 2 1 8 46 173 250 215 165 229 166 2 0 8 67 188 30 254 109 2 0 0 1 8 67 188 30 254 109 2 0 0 0 8 137 152 11 16 0 0 0 0 1 8 137 152 11 16 0 0 0 0 0 8 152 52 243 192 36 1 0 0 1 8 152 52 243 192 36 1 0 0 0 8 129 59 0 0 0 0 0 0 1 8 129 59 0 0 0 0 0 0 0 8 201 94 53 127 56 0 0 0 1 8 201 94 53 127 56 0 0 0 0 8 73 236 21 75 203 154 66 5 1 8 73 236 21 75 203 154 66 5 0 8 196 244 167 127 116 213 0 0 1 8 196 244 167 127 116 213 0 0 0 8 63 43 243 86 100 247 101 30 1 8 63 43 243 86 100 247 101 30 0 8 179 18 79 0 0 0 0 0 1 8 179 18 79 0 0 0 0 0 0 8 62 229 32 2 0 0 0 0 1 8 62 229 32 2 0 0 0 0 0 8 191 161 29 68 10 28 0 0 1 8 191 161 29 68 10 28 0 0 0 8 157 0 0 0 0 0 0 0 1 8 157 0 0 0 0 0 0 0 0 8 177 110 144 211 209 51 0 0 1 8 177 110 144 211 209 51 0 0 0 8 38 140 6 0 0 0 0 0 1 8 38 140 6 0 0 0 0 0 0 8 230 31 0 0 0 0 0 0 1 8 230 31 0 0 0 0 0 0 0 8 240 94 116 15 0 0 0 0 1 8 240 94 116 15 0 0 0 0 0 8 182 7 0 0 0 0 0 0 1 8 182 7 0 0 0 0 0 0 0 8 1 177 12 133 96 0 0 0 1 8 1 177 12 133 96 0 0 0 0 8 240 7 185 0 0 0 0 0 1 8 240 7 185 0 0 0 0 0 0 8 243 73 7 0 0 0 0 0 1 8 243 73 7 0 0 0 0 0 0 8 26 0 0 0 0 0 0 0 1 8 26 0 0 0 0 0 0 0 0 8 103 9 1 204 46 0 0 0 1 8 103 9 1 204 46 0 0 0 0 8 98 214 177 103 24 96 0 0 1 8 98 214 177 103 24 96 0 0 0 8 81 174 115 76 247 124 0 0 1 8 81 174 115 76 247 124 0 0 0 8 61 12 0 0 0 0 0 0 1 8 61 12 0 0 0 0 0 0 0 8 85 161 0 0 0 0 0 0 1 8 85 161 0 0 0 0 0 0 0 8 101 4 40 150 22 103 32 0 1 8 101 4 40 150 22 103 32 0 0 8 103 2 0 0 0 0 0 0 1 8 103 2 0 0 0 0 0 0 0 8 60 153 25 0 0 0 0 0 1 8 60 153 25 0 0 0 0 0 0 8 143 111 7 0 0 0 0 0 1 8 143 111 7 0 0 0 0 0 0 8 80 120 24 232 225 5 0 0 1 8 80 120 24 232 225 5 0 0 0 8 174 134 41 0 0 0 0 0 1 8 174 134 41 0 0 0 0 0 0 8 113 152 62 21 0 0 0 0 1 8 113 152 62 21 0 0 0 0 0 8 241 24 81 31 0 0 0 0 1 8 241 24 81 31 0 0 0 0 0 8 82 153 37 103 160 93 6 0 1 8 82 153 37 103 160 93 6 0 0 8 40 224 161 201 3 0 0 0 1 8 40 224 161 201 3 0 0 0 0 8 19 3 0 0 0 0 0 0 1 8 19 3 0 0 0 0 0 0 0 8 82 0 0 0 0 0 0 0 1 8 82 0 0 0 0 0 0 0 0 8 64 200 218 23 94 23 70 119 1 8 64 200 218 23 94 23 70 119 0 8 15 139 7 0 0 0 0 0 1 8 15 139 7 0 0 0 0 0 0 8 18 20 0 0 0 0 0 0 1 8 18 20 0 0 0 0 0 0 0 8 128 37 176 212 38 112 1 0 1 8 128 37 176 212 38 112 1 0 0 8 13 125 43 146 204 213 0 0 1 8 13 125 43 146 204 213 0 0 0 8 14 0 0 0 0 0 0 0 1 8 14 0 0 0 0 0 0 0 0 8 70 145 5 0 0 0 0 0 1 8 70 145 5 0 0 0 0 0 0 8 186 122 94 51 73 69 56 8 1 8 186 122 94 51 73 69 56 8 0 8 77 183 3 0 0 0 0 0 1 8 77 183 3 0 0 0 0 0 0 8 217 138 24 241 155 207 0 0 1 8 217 138 24 241 155 207 0 0 0 8 150 0 0 0 0 0 0 0 1 8 150 0 0 0 0 0 0 0 0 8 196 49 182 125 0 0 0 0 1 8 196 49 182 125 0 0 0 0 0 8 133 3 165 0 0 0 0 0 1 8 133 3 165 0 0 0 0 0 0 8 0 245 2 102 53 0 0 0 1 8 0 245 2 102 53 0 0 0 0 8 35 187 7 0 0 0 0 0 1 8 35 187 7 0 0 0 0 0 0 8 217 58 0 0 0 0 0 0 1 8 217 58 0 0 0 0 0 0 0 8 93 4 23 102 114 100 3 1 1 8 93 4 23 102 114 100 3 1 0 8 18 224 241 10 0 0 0 0 1 8 18 224 241 10 0 0 0 0 0 8 100 120 0 0 0 0 0 0 1 8 100 120 0 0 0 0 0 0
diff --git a/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp b/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp
new file mode 100644
index 0000000000..b36c89e1be
--- /dev/null
+++ b/libs/multiprecision/test/include_test/cpp_bin_float_include_test.cpp
@@ -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;
+
+
diff --git a/libs/multiprecision/test/include_test/cpp_dec_float_include_test.cpp b/libs/multiprecision/test/include_test/cpp_dec_float_include_test.cpp
new file mode 100644
index 0000000000..bdf09e83f0
--- /dev/null
+++ b/libs/multiprecision/test/include_test/cpp_dec_float_include_test.cpp
@@ -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_dec_float.hpp>
+
+using namespace boost::multiprecision;
+
+cpp_dec_float<50> a;
+
+
diff --git a/libs/multiprecision/test/include_test/cpp_int_include_test.cpp b/libs/multiprecision/test/include_test/cpp_int_include_test.cpp
new file mode 100644
index 0000000000..e374261233
--- /dev/null
+++ b/libs/multiprecision/test/include_test/cpp_int_include_test.cpp
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+using namespace boost::multiprecision;
+
+number<cpp_int_backend<> > a;
+number<cpp_int_backend<>, et_off> b;
+number<cpp_int_backend<64, 64, signed_magnitude, checked, void>, et_off> c;
+number<cpp_int_backend<128, 128, signed_magnitude, checked, void>, et_off> d;
+number<cpp_int_backend<500, 500, signed_magnitude, checked, void>, et_off> e;
+
+
diff --git a/libs/multiprecision/test/include_test/gmp_include_test.cpp b/libs/multiprecision/test/include_test/gmp_include_test.cpp
new file mode 100644
index 0000000000..4b07266fe6
--- /dev/null
+++ b/libs/multiprecision/test/include_test/gmp_include_test.cpp
@@ -0,0 +1,14 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+
+using namespace boost::multiprecision;
+
+mpf_float a;
+mpz_int b;
+mpq_rational c;
+
+
diff --git a/libs/multiprecision/test/include_test/mpfr_include_test.cpp b/libs/multiprecision/test/include_test/mpfr_include_test.cpp
new file mode 100644
index 0000000000..f84cbb959e
--- /dev/null
+++ b/libs/multiprecision/test/include_test/mpfr_include_test.cpp
@@ -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/mpfr.hpp>
+
+using namespace boost::multiprecision;
+
+mpfr_float a;
+
+
diff --git a/libs/multiprecision/test/include_test/tommath_include_test.cpp b/libs/multiprecision/test/include_test/tommath_include_test.cpp
new file mode 100644
index 0000000000..bc000fefbd
--- /dev/null
+++ b/libs/multiprecision/test/include_test/tommath_include_test.cpp
@@ -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/tommath.hpp>
+
+using namespace boost::multiprecision;
+
+tom_int a;
+
+
diff --git a/libs/multiprecision/test/math/high_prec/gamma.ipp b/libs/multiprecision/test/math/high_prec/gamma.ipp
new file mode 100644
index 0000000000..dae325a5fa
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/gamma.ipp
@@ -0,0 +1,505 @@
+ static const boost::array<boost::array<typename table_type<T>::type, 3>, 500> gamma = {{
+ { SC_(8.45530509948730468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.11676792084632275714192215809847832812560655161416701540037514678588899552795223636051283861515685855053582939146274240113874531527973814210488207830128530900559599074170389066138081891070712920623473461857632254352617595899153121789055651865429663273105801624222067275035146160407682419814612559770937851333313258174693831239060158272144283644033402005812336141640353704703451805075743457651474500575180336149704581761302422616802534269713673320145810616702623379426577267381016596640646036780085640e+00), SC_(1.10438728442867816609665916944098399086765601795314917615577669041382221945245269046345957164829024229823010663264720601624809651655116368339246859099278886577422386896811750937967494940960029250224075543433744666205413027910764506859493838993507216401131983731121529344952082060498119577899781093069658373786189150246027769179901839580061229387653730476486565832292623869480613925012343335744507187985817127088673548820437219886661135524261767270766239756270078148544872782377812888609878714473093021e-01) },
+ { SC_(1.39026832580566406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.87837246534584512058304626597150000489120292563756272246130863589440629431328166236343343023478965830481648988944668013833863592688512739847732271129409060356695212103238739655240822053671736250775878014127604440817225103010320322756075484745769185701456653223475749864397685319786785385530182719007531303116138466452735235078861018575437520732342354574967183308070807923233032727588780923086501266291147367564653286869648484915713961300281876539970618140056759819325004245961660980554836491213594461e-01), SC_(-1.18966833717491030777529019926331960352855377707641323046275606078389124027926611789911603150540144713683748681801863772072067302459578683018790819197528173413969356904557087663396842789779718125888832504274452988602707088024742817513733531775897173110489239191365127876847654130551501903438865671258532679739640203442463217240189322306203147786367096739239036281487648421042118138143391813517167916949838797835701356844050619004326570975617904601257077440910867376277877219954044806432791089137635152e-01) },
+ { SC_(1.43504619598388671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.85908592055477020544823146996462988920753671462990877927427523793784391636857990149923096368122868020391764231333911220440936193158035215379333873738823239728773696032128851923243880532734156757960723683643045365212843713096041451134263420009087064362953191913886157628325070283143368675406959711653730415068180223485945836948634468821206791379329892575297995361852566312748126836116054701645545213593209611892028096694432232545135202461301088136703343459844999000604508302338782169984763967607501314e-01), SC_(-1.21141502936978554470331924245181844536653300286225422140798757837139525637498346623087068230762388958190805297179369893104223420947821790937027145400844138709085611406641604698885150056395888192847451388558341660380510005326476801210828545697252686002267491495285666799318711798085628503140489815338199728719860874280450505965277773655528536902886328052951994398070322644031431224912585052114632613788261969630244977993915035447500319483308338977079266591371885961850522890584558525442875774358053017e-01) },
+ { SC_(2.42817401885986328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.26548780776578840420381427518520449855608041962978420562324571651972061904909219213050500986673056140976438565871543352029900201913847740572555310587852358164122797887781229263011351199466922757394212036282675265716319706112696638181549111225164845253224133071688478880244916384306812998466169110572223013741424946407661202839829092882797566392445456945362691783965322378415320774013882498835505927125822970066960016136071528037620210173970460365408629248314390843812310532824823798560386378408531758e+00), SC_(2.35457666634852101044747755129837867262195483343254983494923132129084740599968117459876158642974817916730545060077157131801833625262395918879296296970891493947670708984616066541861044565554092681572085484952572699514279293900419924199381144525738569464382042666825565090748449951697963176145208698932021640416912747873111038321169415221202446804427993828714087337477405157815350337354930690780319199568346826770338612483088645913829939414504125261936354188139129621440596127411902107048621213505069787e-01) },
+ { SC_(3.57062149047851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(3.59555262870334436745200120641865977981082010640223266050140391459729626943767312409363221404703574210201792392329936976650125743512284944198899260106526015752278902956864105662898272567210147921868074256078713905235180221793465538428466586341769298190208746120283067730378397892254705825257704963837122035302991309312466980646767864250193651830956876235658931110573123437458150313676328781121766284025470150078590315090776590886236623802578555557213388547550022167969734537803949609965981618094724875e+00), SC_(1.27969770083427483263559414629301871307474084102320799462455928302879005205354752125421307226546605400047836370140458006536267143631687873530833586669309191906361501163139082755585388593517415370654307293917178772625291488912516115091663101505703539344031184872454811817406134618932582617064239611554551844783746009143025742360911718166833619539628430237988628690562327369791903400381585434826128475496317596229670997626757602054430015393131562841666713598775620637208642977504313979362509202895607109e+00) },
+ { SC_(4.06173896789550781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(6.48731472437243796002214852775228043537971289437086104501487473581409244022420469963455826960525084857707369435964359746591711750992308312134021384929133564129501204286710897020809578552486451934456957768860362014269537717479180144139729241339620855382881397577147860000032919343487135060920390418900375031787607691106910209429859657872451356560041801073390128288706215902201331458057657139826067439256351480798777075962425946562343717935253011331255750532440357025778171100855280846427732600917368427e+00), SC_(1.86984868922060153870312299296985062230442937856531056759619014069475862184353028955695412404454321279039154862003433554749490171187759936732026866110412946881723664011929498452905443575544100221689429429301260523169470423568601285968829370009543627369171932027568492297164723547129769130081972774445920326671338017681314020368749098739160450063373166716481506986205918192305159100153286510376407089509591108263911145163810109598636638395246173348456104955704883803210682048233858516700403662613611101e+00) },
+ { SC_(4.62103271484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.37858022875149594619786107410279090175590970152450034841009699269673431346004116478067172178520246853732831755995428799078017457601602619929245113749007303704101480579352988396977510269794581778372002589383281670752713644566761172166567385676042002118864154022560147254396699337453643014632090052598274319291935807114460343942482405484801703954155955722485464313407185661674729088557545190877905944424466140889980199318964713781724109009297813878567602461975916768052038274217796168549609238659912800e+01), SC_(2.62363924281956010702136640841955277162733070564811703055105753296189488826361566652602311409061111092399672290884891722467926760684437721593990663312995512755267781429591466685062354923692239092672056520234671473631058306668809726966855071037418632102365123873577786382809134249130150505178623394283970906330326508036001313708698839654499118129718097194782427944111675244162629125074561075136961120514757170446709158397509674944733810061359837990599512420837675518506637113899833273305688678962765784e+00) },
+ { SC_(4.95617485046386718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.24718008439809442788209027528859402116653573943432441740659531453629499472973958227907469705875895142256631027950914323449546506579797438670714453791272026575254913719473832861478582258396938106853301770393264870159399799869055007015434958058676797199878997709812870727729689757402018497925646205685684353323505015838079500055817602615533853494694556319446442067489405159190640294404045513497256563510451692946446390653895786899381651426750779600703169258576911088938000280179624657230202494914554453e+01), SC_(3.11226122735527283001436732061482084336251639227376046279662642923418290806738326523996478116609979831948179805587928769153274855556446413175508510433259718452181123790997348386826344699161670878673065209529046397787130480356474953162252901005463887577216685154644547997310645330563385245975795829493688812633389752782939580849857192152477705251876040149405364402545536520601697980677272545641602109841104148780306607027762094861640754264955688050582460828241131111154401178777085333226922469763304802e+00) },
+ { SC_(5.33216857910156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(4.00553052022210672861172891969975874467163632878273365599590082567135977861246512342058540785194845011420653067457140609085806825580056355742227407837692060683249358855542773800094606807421366553650993901731609418359571760967157147365961249446904066775876923068467870410926669834554889478280924299804868385789300760220221433734929715355322308163278946871106748327149891409242787740148917181937009887358066189115112391852948848072127151790776708831129634358782375387973685405984021144936522217818263887e+01), SC_(3.69026112921665738447356052157805826006261575754715146030823722328052224219481629888200194228992542456666326715599926038404343629111229712712603676960882556465809932702973923780945184481220774715262397366111250231958769743093585550788457957942102664449774653173349379675999754811893646753690219918461483472316926459116111911304869770192038163555120045323216247334529547388917331185628279325595929211450347309515919824526889077762242709640299863499904979658370855846132644540836771202986689516605307719e+00) },
+ { SC_(5.53525352478027343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(5.54085693989980056689828323360533202581167492518911769584949988804497359322368776091779140395452638417269585036316553435037135219086785310992316684430301271806800120535089861233390960140463559245483746277411779351099714760817803251461088125523272968642271161431162315313967100838668611319145908704926154612773615372669849504199366490997719787759920807270196610305978144012121816428514168683064363810139266508908745055811779478349322540193892120037252674767004050526902154688580542341833753952471325027e+01), SC_(4.01473426408354864195493680270670709888838156351643199813406405422986896254574554048671301238364016812565923123175708018422414574326651898972233934077155639420144616008014038365563539926679491360504159807520765365221328661239870485108541575449867980981545393136165252219742866201168516059324361308415876884333514156647228147093027677746525367094610600724933388522700653405326906335784642279271969391106974692408051454996866825096351519387380897644271891521149125368306133131088394686999544511101518839e+00) },
+ { SC_(8.76608276367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.45168218533635930619607726245392030762486255761328567765573105304410142150402005341157069836143490261271426854222130497382499323807115021070916489489298478742485634020491842325402560577110358831959602293247200484183054212413532479513045660120433744022721285308357503948919422710448107932657085485948275312721884150067715974091281450199363008662962715355890258330430671461730647408910607363125434042429218606193952080701992994548099674296660794648968213053267218182313689092204527768537711239353651776e+04), SC_(1.01071147671863185327950157842771848355690961582839471529235262209976315476828727800911954615182577061463048910838217130723874185086084459846607683789832726142832119336764584676848615401316033063394103140884481795844812690718880319719415999249412615982273170075510120797100374050563252653874652680187908298681878272779417833833904258535562275198810553332530273476763030738280101705876045770738375074123044968182559538889713229283788787867195197583120537344575175235851164600007251143003173078342333609e+01) },
+ { SC_(9.54985427856445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.33124191564895517786198318510639290524555281956888985019623709579905630894735541649077494627871914408573260648955262263687000687922389445792928188297142800467321281724332423337091736902596942422833231242875215268585640866036266522615474645034218515281333865398887209402026567283141579237158080499743426939983616583610354938189196173205223749820692938362654992436789626030738847465823771087487947240361096515842184486374295691072049728572766139104577726261341789838495401824728814337996569514215672530e+05), SC_(1.17990377426754288264606297368466274228437984450810542718576338503909998685774762341929430182869490356000015066861395002069084429748581801250795379187983074979512796001712324478984009900922203447046990385175865774213093475908924123603675885921802990784925766315829148516934071379020928361215249532812742053156207303049568661090315018584992187158785059549794406558582306711751933404845316792962749621780233564966634413100993442521511005188505728824353480225249328012213643562389033203444688486307902948e+01) },
+ { SC_(9.98056793212890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(3.47351022609890987414462933366655334807141833319973833485251821949760940947774277743644751214737192294292705395291451794427578900001693769046543125025183131602481174315151788533280598536553924629403649863673849420583250744590458701199142358875405761725682245457269733335734933972176546054405142766845620327689012944814485692211235417261699291965304764803083155748787532975237567590477444265639447563674720522368236482299715573776562543955819648355145672683431444493845732956957961329768309749681829985e+05), SC_(1.27580911401497751821060654166800202590984496449712229747428650640526916490109555857587661865937014134922557424041425172181625752089956083590448352036948806676504958753151299078856881837898249233659905040282763080155929482264803438269944110781266460182301983820012339338329983248392343095209177995416838143030575826729498027778841804157021072458776021811820523457953320987753027666066945590262453676053331880351804554644478900495289023610283211137423667420410851307848590104509490230146431500262752007e+01) },
+ { SC_(1.02951927185058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.08612298941736643153732276006220971148644659875558920927931593935920431599528738660802469977290774445824488741549217537449446921507610892464943125096025919672129084867587667593276450909932572372137644264808977599843418764122976594717814108353372457029584218389242429510238722931886606180430128463378160039188017925774025486288889709479511768650943318951092782687590293596990714433871292584636475060962701358649279139597185057212208578482611189796103472554385131334860031392843178420809951208156923205e+05), SC_(1.34710638279404681644246606540609769374801440275032660885401198256118967063141577514087022647397538479355822457739408871059474039830713174834411157800996577575003311438166402418585060431559564293388138836927893978284436415357597898062083173462936431367544773331148767502281557730664161817089644271957806633291453970250267498511964473754051015546891232872019548172225307272336307735201303435433404493851119019530317135541933469566759049768381966972245871852168677664931061501876261076443912299692533597e+01) },
+ { SC_(1.03338241577148437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.73986220626843824927920782808904522315975049074439916300919381933777932420492642527484802029254954306553334393810376403407168820887408988932837497169960027734038427684853032090933230195065129695346654952158714462914263685195391164935001537212016209463929695503000587847065615191145442143323988524634373944112251531098789566603760664904054993411039655201562870364683675613858124103659455770298515793225998426718316092021479792672373860638612991767438527054522949865358951955431484811761620729003812382e+05), SC_(1.35593093496056969893535567112872929008143709636940002546329087550711754131154961097197217187455599859178992371199445448253184723282798555078431187938048489946441825776243184601290612049872086792875137747821946976340754196960872289509848440846460379366990183257537708184661560651042893934128712949967929943476493798876208818924397255136148931131306701168208553291581298942881419034795011951056848436534335079031462364949005620152601355133144874348094130199610942718142353840569740996333028520392372556e+01) },
+ { SC_(1.07135047912597656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.85721439538838439705306064451879294595570947494672710722016789190114576336023487676613177353802996774898485646539303627310434036056012918512753580667010178877478176833272081798430115689170325758260542022430547407739443230778886561790259780329336075012938809440026955925762010679712962413276914273448632895358656771817332068220175020343563819741374166286834026905759809649949412322517870913703226957295986639927654451683223262755262903967113925053844635980417582441070491472062229124222544924029831654e+06), SC_(1.44345882862223439605716424404599011683811886773747370676003171837626128033041503920384113195787471603683676214899764638312008488583005220488335395789219780613434308649120312121034729352210431866865784472394171554538335954672405161157639621786194857241841889876862506839092638714724364137545606219369672259196484835450223961242251728879195312134729976462122220398692613546962503263752599725385404222086718253046013692763924083452585153651775377988077421839166494678150854383938719506103970152877660484e+01) },
+ { SC_(1.09323768615722656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.09592640575239809666846121677771927780752936023924158222634560987255697519482790694905618663865531239972019760869700752710049719590581148223169481122444885785273943932972303081018927714284131922497997127430750960113524416767507128317210990572045260941311586013903134659634029880246927905370185375976258340419589414037729179865857038384049918002627831330701395495031815286029217668797369925413755055132642560604612676671367161537762429344852598381811521248141946161530867133014459723058597428437642298e+06), SC_(1.49455977426574165881859039685195966050036759954579121951129510480837185650712389225508184363631645514043826849142044045040551855302422436604545319679526057379569083519990130330113590282035739010196088875383247254732201194190303019409460033340883098002366906771159957984278579595308398344453039602978600230132604751443572911980490843010703162398503070960907011556740635051049333707402400411399198983397314439988590436484712278449948781729679812491581015270188673991965076859499698834498233560917960844e+01) },
+ { SC_(1.21413345336914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.64239751689040135371528638503817996701835072784502236912289045699792089781694820687717658364779020991311296750597862504701825127504810312222159827182159743586084452766637995854336280264240514840579371599354707442049464154449281372330704925798340213382877182134914296548090310931517654388018712040859984515487022805743836777133727700635356020676861026294060728418886449803915821559424461129887396581535139042681015145325091941876084305153799657023785097396446763077777426340282617918626524288619395821e+07), SC_(1.78484047177896642639445392863215588612603563477346865541091120435845320539752039062941627703344836229145165912845742723048104642698908304308667638772267977520902894756788859805097365912048607248507329066498228754882410916966189530240937511360454967870449691910124814867332860502660647255668051145601077719174263919348318346132226844241305817669112243947100811203383986012421488579157948402877689650632629847846451925035467415986612379374365476171911041288360390893986721132229765766169947887290345542e+01) },
+ { SC_(1.26162376403808593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.82777774460762820033523820034243728079553256953006439450420968262439443258229978114270959300622199344017589718484337858393249911256829041745903345314343540021091394102881560287779214677084313708562306054370961578828297883697715344793988582246419530881616323476544054179572977852567036054414406650284290159158304002405447887376199358950937031103957302647245972058773317232396195945757609876519304214193127881603995124500024819624489413779759179354940420338115740406968621859707865148350733475845952234e+08), SC_(1.90237816256797246227486669171399919483589830643410829499611169780971203727215705417400879721688136824911355853063650984902731234860248092757443311504792998093607313455433758450408496059290244242681574445768041303125717871774734258258916678641036751240624455054024730673671153289368603688545314472036533629426132929060447459830632651096898621496595339844352016930762821590055173084188243609293665424086528103390756940221127719143780039156761291057797334820481397090824517603472596681788452312169840980e+01) },
+ { SC_(1.29071388244628906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.78979711385686127340767130471521612722379599046594038090610466732167125460890560800984410126533342426520606719054063104503899485854375039568888760720567975382288567002034953346831754769783894495550746676294468918343305967613458205336282656145318524932407160094387129343422463229080277186575794507758607320164639659871754591094259369822469703782501303055901719999275366090375714916904397953707312302390870259506790449629046479476191967195743783510726934853174357019092037673410791812913166721722086061e+08), SC_(1.97529932296499248899054969602240355084343277816619556255091621997733876181221840458375733310196135385376238395185401100147169373094887231377881737783120407576462599446938149701246857892596701863463492500388160036922963943049284016497002288337499802270953933638642449541165787258346216476205325085465966266931418111121786445927723544963171253130667638943355007515068244083212372359033804849408937371366530665125994577600484715961413509838873453584307755874929916416402267850814780033556716715227762552e+01) },
+ { SC_(1.35178642272949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.79077380560185807841570990731673158935617629510395723286664787382434734070420593877008246737894206914955382051323852831817642175680990221901969610060683074622704421995675281008392086832771359843513683914881713246638554404384417070742716548305737956113214094245552797225951078125611475598587551455830850591617669298207289396654820780436070659318515035173482574219537805431072651843159786010862043473811995143369242030904717771431696545720568246265152229327411357391069165707328893357622936422285295649e+09), SC_(2.13059136570194254239407391037067150343599098058780133116230659201053633257372017234341370601553301782276116790588041904156794338078073857655337466751556849619829258270710327303032110154928475210007538757757396856518851171282354554599684740830735844823274301963455406614426566730360797546058398185390735765301739067716955024649756045796974198109080635531733693266385265544023263308650055411770824121854510040354730758618787977954637753032683746887026837598494068620361627965127360986086863865184764952e+01) },
+ { SC_(1.38514175415039062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.23325137095218598823971508296873948225192100644656374441758763040983693132346484605144687295568219742283016535118774974652008388142683636350053130008764423355018809447400487103279915093742480389910985450980067599008027299644082243337006654575030469262199653819047967799574420944180011273945204186267448102919341312955232949125097106021914351153335517551925258398293551930646836566455578001158894380204272564162401610398812172090461275428017675992538882528626329695230610272518852177524672384928016285e+09), SC_(2.21662361803630197383736953990278887110574274522483085040259559845237723788490205822308182030543596883541881395918821078845085775974446457476054196005815674612301742772034161774111373919630099608884702083164754366541205908960231443997976417378733390798364374463072495586005992104412336471714153044446120371382372201888375362378102351203405905480129381177692493032749613678787997288916943591927641771378065548744049361287040407849471796087174360733780998130688837875865278700496584306157387077295518105e+01) },
+ { SC_(1.43832855224609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.69784802869578241859347170270044660362887975172105734174126024565266258464185679860969819855411237159494880208775659644483956130836332702232190530810929795054649744757422772161305573550173240764511358994665056914899731991099146899770847475853729703216656351615055364186019583922630511131963769089890507495016742632213307435586487273302550332698495539906067716345084493618187494962743675749595552332810650864210967199048154977243646054575151056382106763855672206878008442750138657969446338772392977931e+10), SC_(2.35552125136450700909588091745369060423028983139872816520903248095735988926096539408608197096209270376093052063987604229172439260225265802753685264545909375191912435806334754171252744005893682713003301574855225372780111914101629076576865532039773643327758840495625596026543437624197390101438239785844326137114997048983495383674156592651243325855108913317388476131107876404382144566047990082712164794523533480397041648000824123176019495113050076473636073664863555590914648212166240698682112904657612891e+01) },
+ { SC_(1.48963279724121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.60935895139790537882629053978367065158097494775553779389162718199800962660976404867451369776960552719236591600432068910267380128788079356527364053960742437279838325192792879200780876443511952756771766081043863962521162104251062512261561306936965054762849927286751693584912828216488502812828560112184399975250481114240534601033379784321671805062685095378497826204531693763778896248141719307161590520638212293837683630156089631247838355678237432158041439105369297598948436211360132325716321014950992967e+10), SC_(2.49143375974668240626505214390533380688347483901923600653194410711886779420898803117624305175150341043802258914439817725968253567447217611716808423940751959127906426790655770430309975977208455470753965004376884277299048155174271626994824768948180598101500479226249068284441503076898274128487586798561957754510391434547445793560602560270702926430292523945864871226551425545008082382964277470607798416267823092545061380983203872604535986283661640712327778671943611430748664004317504626424589546239492000e+01) },
+ { SC_(1.53649291992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.32398807872101770462604880522949845437561627327099970169031926625880177450787091305806943792425166226349760109416361742988524722129994365817234844238217238280776183875198531958136053329307878216615519634840197124976984100478274525072421035701533163566711522102036089012153312827728373125004089091452062656302048171592405945248902229742770091130711022681649993555144430335475329700255829237894423454387315510994513159322878742867851744054629488404979443584886753077599413674731935221399660481631292785e+11), SC_(2.61717207322728943748655952468525991290519456198208118720796690982830007941145343499391768661158582463079187427238318410030877071806806689640550339944814862447936256191385266543955562161363885472431312410894245972233609522570605788757616905274288631653175310899279503906728266948467958956851326816621095525631182949074151124133792081477439296299976706029974164766593650975684320159080549146560042369407008513487199017496956162903888043233189053512653189235110362053698908875636116486463805068025729702e+01) },
+ { SC_(1.59457702636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.12715953502483062538557724081013911658822971839811638302861945974572255693067688962255936258136107927159156397019302467458578812492570380812155193959085864099568927830194891977976197587003543495844952826714426145342302680345261219277889687416267358065688920139224042982062304137579381400020918547309462488468333765784769924476330423965481843915430241826273531524867193316237485463139697249608343870171918262645258569752948674306051499024008349628321871360036489296090979855831343665951404747705820007e+12), SC_(2.77507218982215256456907361110029229287160594943095798751436085766564504848854056383180784211923609266348581824808197706776547521649865250928950387154147803287982062394737447091407237366260446253353498962361092296149900138781573804265098616530053928097718490754142074711308776540737540544940575655663700893805298458558736564909026609952731500867191306772061678923921512976870506621853315858796712939270551000744125644547207963447164060931746695822731105902019293199464525704273081787738905029417478261e+01) },
+ { SC_(1.61850357055664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.17392722860575210882743801148121974761526064642942975611851093967221905620309266419763230958019607719000964328222165770505474606502916318180914198593539748204197180563392900865765447623021484552114088793224264781542092820754404856979476987230596794282235555744748141761312510208561694016754873643072407001696236285213178526503889324998095255469101726657562023259585497407965044819950637365173544139973145694386482527985943557955822398804411240998455445554905356819455967232872943701528948385375416924e+12), SC_(2.84075564305649017910192637580161893383118048529446948578453913521326656332735959875038712393333194906778182926725108659503499356843472051464004490569862771906374142762551592434578842405679502902794587372543569122097856395778041583912094359797049297611712374378720254058067502855335154430899898507999303154087163660771590573370318847901286702302096288936111417508352764313313004247849530921319320099265194394899418464209193302262016659209266350773235272677342977910119493741328205818274708511919664895e+01) },
+ { SC_(1.79338607788085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.94378015972887884516054763336910522189606118466825966602817074458033507748376119333205280093377734568080933812880181397469279239108543720418046546393242253747231118747614435825455274299153710665198721150627177394186314404834695391882245373547307599961727815738420343965876901510326203038625545238547437760286841659242817122054781772597614247162591992302074382664668628852013285031977346808546879744116856146662512084091293248247506035169514171475602206223147110130035231646012874447469928518936288101e+14), SC_(3.33158858259898907905342233247024675861169393707251938469191257033208410100917459972779143360867650229432762775061293525931944909544742308642071992211692350145763818232133352151340411577042857364193387310895562018291498977196157678047600884999805062602410706712089770431715110819479340956053207090126277256504183113502483235445467450928666924159010047323141890303181109020773812171510173380978164764095893619679219250456889910946305970721684560117313859764609917216519924334102644122154693368351826177e+01) },
+ { SC_(2.02786102294921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.78859109957017847350282806920274651443560302946482537725653125558373588979620547457174307951510988004914510354699121792937106881509562013001424269265755625105237218390644714062461417356368115049002169379320461604955950947878703486762597646209323773900580501157767451153175713764274367992499988740605431735689546683299489274110181899056071627310526130380543907317998501513254047217553619093579672465892040589757413955618873138414486248533989782506156014995258049759728528931005608771532253666614776864e+17), SC_(4.01694830669526712285716830720908080882784605592145521661108558578316317527808950051455910908149355285774153589463257476880357990334424535910402395335745791832884031280007396583426939303870758983307128710895934002284078747537321267500943681680075881059064170031571211276699731527486478859823036488211903833218942468550621597608313941585272130442321011122624067155297304145649696594141596950613934123390910581816377733641660900214634788029862302747808523415329729542689300928045459098419353956909660512e+01) },
+ { SC_(2.27562866210937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.26972717526065453243497606415341251348549318454328749063345501016789022692738877593139482043483197655452092404409624945435401219712933394751055303990142982542638490626258864903914758776542688825607921286094934655746026741953782617609006929140731656413762147816621347941826019166397620687687617958338526588369802976978492139986030868846810514654286239871261821515071359533295231298352162735118150234734814078164911480645099484217443573112986205065139813455381998998545524503845393344966318045384553643e+20), SC_(4.77136804516938476798186533137278659568953865881033246633845276278658930669490843676898202801665172965195014497394786428050799441324442769697063319265977100562116857211797345235476803678040110610393920650678206124524914628475872696681953068587543500695636587855133335172354100595270626035010678536436625753656761085054662461148396845219288688834873129706103341090689496045171046767844064903536927719224669351215677098391551160145540606820140357781318863155446012873587956509028891262429102384752237783e+01) },
+ { SC_(2.27900009155273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.85098335220656084805303753490068761820757328359109281073754662291972968463434371144214286766024639873517031309922165539968225455173766065339586915138107926116592127888942444414715885558417950943361068757427461766594924751498397917726333322398470362673163297540882067039707423998766149888779324104167300223636316709020288618852558987393457348461154024630406699740543022425870516117498401176476538043477712028469899604089430212225785183179305838104047207860532079130574368373942186221880210190007152526e+20), SC_(4.78183116013926830266939183259939860179077401608681053044395603667528238495675049839336412704201043952154019083949862173611780027988181004560828830103443451954397089056210419243214747839359840199778090722414767193111651430144242363037947410279734322169557386711391485096580518452505090282238086183149731814313987854823078824578754372724074767852358281888048711745936844806125636457727893417650220468092526639171962956440715985639690264187827522903473648954513132769343415198697642180909536890448571370e+01) },
+ { SC_(2.32671051025390625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.58604880812110241454443187344936017835854008969901521612448078397011725521182274260449918557110867645491107680639172390431077293986497620091929943773518926625158875779142019678847319857283976396460950914258149177614913206540387945470639191549918779093413871219422081680931454303332602911745577297158040318588167794015942180633957877188108408414511350070549894143107543827204317830609472493471081736807394919923691843857608432586473210000605737670045134417963755562386466190925672412878850646405985887e+21), SC_(4.93044181070299253236362391869236800187815014597272180541031308288681644381707365789003158170467418713749315130448968112655720169833488122960784450610406416247180917673304201957658843133539076388057790707488923355640879455639581251965002019288706112569136442372744159529269447953305171290350588295132657475268242628869310697250145988245409523776241535152519668623579732121296216600629204372942165520109491547688534215654314055296728672031442410394104670473467792491661621391099880487208839854451013164e+01) },
+ { SC_(2.34526596069335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.62194975792841895720749223385860556288827451704690827966867908358586186377510532992856117196302979122682031742504675468607786075384709904759085834558269602839780592168397856053584192386946531537679056796693158685843165754560716769122635655901255012872787428573542960450960109793983675945004952430318551725091155795551025628653468443465024160434232452983803513580832219466805463816175449786449373136370649942608714940833213805408426003631122813929992880369255230264983494510767186840201746783450842382e+21), SC_(4.98851035944665136137672192015001725735574448523513365461276385649832019558648067889044179541346456242532613476455989696732448879451563256006193760059216702387425562105599088225278858290384189947360462270135584506260058165911777571573884965611063658304139334304428754483287036131773544287342207371086479812475077828218358906305532901236624147816345056599647796401492252269211474910191441753003225672987417389814408598457591482775445660906950641840923145254581785944936501393209938814257429135828147670e+01) },
+ { SC_(2.43377304077148437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.52671715713697706891160979125509726305938336857375227981739347280081698156098205470753157358393470750460871546434129104796564469110666737796570417551872488487369188073057706502594714426114378400481728758709479982948715130976959130779570582764471731950180408630090081483358852495530725513094749077112560162052669265512824439653875495097130381916363837830846819531583435928645935366793957053876871421785132869570879272293855874083797851986233376775948840120201836281261161838742176319534574897501178287e+22), SC_(5.26753310241112015000557522065224390350586849934355945402173111140887220444172828628317710236715689207521455346719297310453881219153304785874778678385796785828487745332446719392011066902186110879351599887877146447912243725688438833509660397006601972675603832872488107271508427519999279790089693902852256436143910726195407163225441297282809223811266507340119799040506075622206616925202471755069436203816801744865249899061716663635367511603763321855757959797826421739362819278936784467235526333240005423e+01) },
+ { SC_(2.51464080810546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.91481931939477877200409821527464389427790319314797981010141882262885019600788076048644650040650377535362177964203706602145245768311983616827224624813381373244539635935498182983132360406349699087792646029860366167832523331450326682612483319992522395430103670071900483202700829114060346675708927264287445975661170857236542789818463947863119214258860704868166437681591110751004614832328001369775822848877648740658467576865672192485902213245799314604742998766424238759484022554804825427810329237718912340e+23), SC_(5.52534876777131248526088011136399421247639005261200942662339884519382967508816892218214048321898008927408573543448324823195874404479702411208644428859048494602762423291775256567201245544467201367992361359313525579920316298681194519601969564215992810071603097749504526447365148514435274271195385846780047802038148332510936367474259891938847053684708322750072216689143695444833185320648783070435734567796528700749836875689519053250541378436858107409851809731784721711286317464058683088715442244108225872e+01) },
+ { SC_(2.53307495117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.79121106112468838114091066050696844501804129293613245609247373367728816889376752295492985773345298518680345254160672777414539504784062244034366992927071130241068099215571660785123653342892863707964883249932645030018511623502406446490102199974777274991930181335480495211340080137603634352285453834075031871718395777239743551495314947314361106557691247822941892794875598790154099400695381011643266719344568091225519853749774286383156255603731266332110509289734693913588439967324719134777130623892593179e+24), SC_(5.58449341933998661286597122372310908068026588697772263463044249340345894176388328944725581420298209141152460517528540753526893441781211306768929743670148144017974107618983180476923611386416457648485096243289792960090120596855752984855873603997392677295099339567129282671168990101291687441406306439558829817161464809106382589575255498512347192513308661185569879472434035194625729156771795356097872108174749327142347398543920205622238328863320715757170431227274886985176738777251222302350541069469760158e+01) },
+ { SC_(2.56547317504882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.08185222038264310688484759500453549449343601064644164578226877871835233183599988599849700771875502956914278412964901381416613960210544679350823989995570437369036190734750778318562793404061483974309879014653863257393556814923674671866439781516249984035720382974086561705649167984614024640607429055768235065807548056537920522450166912638945908740103020466720001647701905360891552471313012203374488015308653398882613931193426996660927901125500252723485067627245831870925718793482515777531619053612687460e+24), SC_(5.68877180373048439806916604413364161076870205125629884067172953865884788640557118206524342356674419695257884468542292195573826085853803663075083194084437053651584483581690843123643213703040991328755997152307630162420977755970157738226132226009170471317409024940261640805586477529151547757888099874951697765060606236562111098316847459517577939192610719956677422578169633736070048128858421326896189519142109020020555616416933177181768098595337956671066929651426668945879292365721802750367824630784573999e+01) },
+ { SC_(2.69469451904296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.38946145226621904297694624320451302066263074623211393616779873785651027366717911648120891981347459583972771523166906685960614818223537432379830257868186481779524300591340059147240741531278586780245686715266947950598093181762116682854730864826733954340270125961248165415267045490110541647104674953517683504102672070314779850010955167318136591288937266213480474554707223709046826452399185053344741367632997822647833919635890641991088509209448968323023529655570431435255168043168502497343886638000217508e+26), SC_(6.10878834629790988160802927408530013637487637537408024086854879487937538346516092817902884700523912851786680663531728945594087355952290948434712469565483226874890331364554842522170361208548681220518063358284304337845142884753062170082309483382202799671294604562888151796855985913051886219982752646724472534051089361710730038401364058530216782736954910601778240054306252894308364042420468921770314303281112548652243358425470904234578569201244720441942444412712160479229668466116080101258970797763193003e+01) },
+ { SC_(2.86065521240234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.18297535561400529862154201588364124930726316786053177741785127024911984659957345520275127146976325947623851930449300294321327287322540455295178302795770977364632677858658542197868062436973426239080094795366182479671021295104621542595009889405064932729645817668857395088805081325759068124462747875534272079475902645304662223083207008913183208964990676916644116280376693740913044811987470193425546341939265091095248895519540770857586981347068792465579320037618105504314455654476903086548497888600391790e+28), SC_(6.65744384237173842615460580640110866830348471432619027751155697794991693556178792187152050398500030319196838124695595345295036549337326091217666830844852771807996923397693517071067680518019247408431217179931029441945675593036150502785807644274142395991615983425158657556886396005376861112808847592605413421879099833573662691886365132153489527485249192638773347480454987269091802611271643541747113868528167028724782368679415651577580896606709898140508508556601010526085370686307990029623178600021561237e+01) },
+ { SC_(2.89363555908203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.46364169422991361911522707578343379455720401498976706085708772208004310307378137253150372308002784981732170240094025073900289172767739328344138660064293375101443634174935987514315071992162722725383072608509641160645023665173358444455855164226679929391852601054044121137601734835260033769268144202422171248364140069795502358616158799151473495887212541426467037741443982494760074928831400539768195579118314513062832534540055300337488029865295302834134358823392899209355307899399975837372513512615528262e+29), SC_(6.76766083156218277259765307036062635553227023339066248067234884992807148318643296403891585461022484029987169548871600200984229656567414527135292403055378517881471207722154621994051797163447572374473358813303159020377166394396154103712732393989825413389704424065299279408848274531031692626640889901897059424873169831268752195564405077908811735292342504900309993677035536590868613014160891096302448676770957030034583001066480278991292017941290191602708891680676674452826414806539974597961193334063516752e+01) },
+ { SC_(2.91395339965820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.86734729521848082710338701890470644781523979144988928547521261078461371643143804003634544436307379536701089936804033119939526653843615648442229267012609024807113082453171604450219011300824936008035118170099021658680615814976974679835360871193258898622693738894568685412676828664766739487806291253172480406131437510013598190306985820790872533379477435332338651334325566223190849428336741119210959477577377495620582613192165806843439901031017616746525463204501806407089611814441940521988506672497750797e+29), SC_(6.83575167822765613078684054515645393136576932380725334766476664365352993590275062109168114307596103453010108572728218976725262757036021598627832561241938784794755114892484886153522451656847822582362719077906293051861728306450132286688917383098776586452863162933819969125264194211479702244724500335892028324658730280000067192121885937096181331752363056120072640955413598291279300652293302670284003703187827689607921107713327366686226032251376905617946954001970012496577909171241743428353950962394964080e+01) },
+ { SC_(2.92621154785156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.34523745563155188256040850939691712650558781254414493284991099149137086775804978560403467599728219475856175016819544619020204249467030945623725845540950345058678326769601337070738476482943736837088975580253665438542042740591916109828199825079851763141821593378584210340486225854165051144199045290135047844682296062829530542554728086498690404716811675041099263451123596611795451479772232958162850444504127494422572533383884316076437492806332042890701380253588643377173905471284161483319427666467625361e+29), SC_(6.87690198348116810755812737868634699468768949217905626771535888361356100725282583209314122253247668616093135958957553107771336225034668220637724665306401194336890593782398203171190925637074066752678780699802538897175854158127889554586448762692453288812540699296363525839207569798672579000882179456645801295452654363970906333003928529475402363082584130085014788661889705740056095052998499027843848922205804376125960585791770656488154392778071834778842343072126162268133953305536914279513720072126961022e+01) },
+ { SC_(3.02215423583984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.87297339346442413223626441881552996749321322868278677388442717804533541719793945413780361025036005578239666197991100518333589788384638801500010329805962773586448566558417273032380150895643250888070791874193065889150921484137985142416411695450300740875263016453355656734191678187675741194964512719726130824949769908095511629218244723723630403258622347581987003968996993057199504979872174846428171029999991758822801819524388081710906001015766599541753063033276293523002868633523464206937949347128472368e+31), SC_(7.20076651008718393001846413394830211369113155296905387227354397003624157955172192372818147723165782354086885513643610166959516337066924865599773015660602163993110463698236133192801490805972757732043844737488363072660380105391287770687977882635109700948168715378611974019099812843028483020620951971385640401828381583612714653451198525471027241404044969339383278643839951906402460060093046138787896253406949282594744469482087285350575317701851773982283579551304384758910839844880960048254488720717351531e+01) },
+ { SC_(3.19958267211914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.10529722092897347908375684350487190665386510730995276652694837226076152333891160209381011736663624367269277904203119494159424128154849290145466186191251358876514454753794811668164171088503081783194295000984263660061488617874426296564985345060633416828688738656050177656080448564016966741708683129986866682190353169745781845160526162005405982688031758376601477472002985161237064932920608952502081314817246651441220918323804178243806445392459543046096048748961265026413160455472006160838251124796817586e+33), SC_(7.80778258946240115261517045561166005792687796547024600776968032807657415113574297406466783012067674621855018033737058839515115740858860654069616412947264441341384570632838998094338026850938979006690501945806609196265904893321792150114088608539539741776326911715297018531473204914273174095721894921550227325411988498328959109687266688893801219762969037285120247383013653504865071864740541405778651655191375983172120022638414111231251259362331464540155947096964038949774188789788535095913097967665089985e+01) },
+ { SC_(3.24185638427734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.49438161917542816534549417847110972760529902701104654598890087201011890720206561865852952926013434976490024873073435910795715920427118281149452661845289951217891902764247541018950583339572116892564901102645427222988297070750380042289494295927433982082431879908501042110776671962769426274191594098526350490499516762791016191688736257490680490659195962464698070712029836564078042389440069057635876071638944161783898392349333989011139633739055040406159649536024346516120217708186552130193376168867187554e+34), SC_(7.95390495888318212998760521002149494523088095049632835167693899200198082090417159595012046716410467802260264700130964429772344648971739989016371122586195899096394787637702142096084678211476489290836862451591217695503566590775034007077763468945954230266946092732190012837261614121604340229450019002476022441998401781862534130907660183488294438797763449874362792394654275157077174892751537287233687405534258323091423343923021443606445885357115522172366770443711515407865380305091563963432540105037663781e+01) },
+ { SC_(3.29585266113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.27761128930354919701485516775667587490850229398554669934207151381442314632638880588591793769213728389937267758877156797146431055220502649647576202415695404415293690290835812871829309812033783385556845448116306922255075063107579160364093224587629500425003631224353942082977712187414611070893088706021680061826748100814195305872240240281013895126124269098074441195123008020302776033608084468484346891950551401159486446276412149880984130857820108962206580715231553561781131362399471520223258292277658124e+35), SC_(8.14136054684274741964145377939215014807692010292090966149434708384796696984176953862437082883743812556422595798902123120393622328481916071778051151799663129957386718254369476701375784883357238860912730696684301085661489681041613263972448106796350804708520721594200966626630627375617024352994350036701446953170131728026058978104853485950120261498236749505855833440820778208559278867213296060430539496763904209131345097333341183094665414276490139448832082529973477245744065749067843522574988437041848634e+01) },
+ { SC_(3.33357543945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.48300159181761200701204355363695060229791968154368538754064262719097995063035564600374025008951067252483790948590967248724178893972678588775440775549447497293942678266653534753786827947462288065307814703139034747179856597160532948750746902188231563587909018174823911788915768593476118531727242871056689064731971077728987075607744609112629093496420251907631517330062434138506878049509818111073159446603636714880112371770070022582019195746855578498298366073462908413983843045898442239545322487107538287e+35), SC_(8.27285426032651351766507271768183412890756355274009940387465402129137436561575209724804631194218211989913771391949002133767203973838994464541580492006666861174959066106401079823967507815953112500273849939997916717763734452443126349117613296752896480185065537237343706449268677750584685983026546829631494775101667241984395834326209591964078498650831020349540175250722375517632363885845822067443894671624263457755868122233911423047215640037633600146529028518371062907190179673629943284929582240228457933e+01) },
+ { SC_(3.33608245849609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.25910975788742653205146646366082007340773610996176154798821130540958169768564085960223240057348637196035929960628015222869494448079409889252897937593634818967229880319441221801264922080032552468069216002312576208837467708731971964200629039661948814022629825999101060910619328263555037652878100470180845146148712279665244935657445018110862558457547071725686710241891281196021326790690207821250385916687871554698057461130870747660433547873539611604037601274071252230760029267104222180344524243865665364e+35), SC_(8.28160861603710079118490053139180341967390190183525780661970734769298370225490936552881352084318266572549229847106951262515221025161177591569889171913498625190184460679288204802168171780327141884782319041783323341744977849737124137079856773929397936817750860289617101494377478049120537435300917814010237687503184844519123896060589568190512563668803865162575733154754837230457246786300598905794327235054896571232850622277200782063661993728071438869663986891063212286553580700214568365161762642741449976e+01) },
+ { SC_(3.37393493652343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.48031922819823306403456121055533618854815349116051084146233699504748076904249935854937286448179965262152721118856843542120460979737215048811700334413415327659952769299589060285169409827822674705143801238912097877845412052224385841228833750504879006197212007063193332967923414106315429839140702588109049569590790890068717314510166172831649739497878166199567098912310727916539484778388585294038930091526234141318642268922494504101512277533859788856836664268133488842793137383127949202371793208199372652e+36), SC_(8.41401873696057544417316920924880046938250235320124753087311223250489866574699437076387096536169707942889447446804102388757224486826658788938004867333184091912546002317298246728424266932353180419646334522781207966104359297728072535824671094515322040354822991604351531178940114578851898290053775097461417376852674842647500815188669436253178796934787422746875982052670423777598961614364976136407177160333955853407004352977148066120346666204332050285075576875146205115570129251576319589461496209867854095e+01) },
+ { SC_(3.39577484130859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.48619298028061209986594333844848533957474181352087908334467421738975887543824669352195537925855435254962699056278972594896552243395516661570162654604207808668441002329965436921613187220878992455054164458716043116563863146011454580903097467081800181534328436201435735200565174945504067082424441373813455174315131792153573341277760856295122752191631892485396891765788245229424967621381462454620224418898356765251078488288810214189182624366940263882437751772551099000045085151783935984545593227937300553e+36), SC_(8.49061237357601677757426820584806409653635968531783207842298956209531777624307597237621381316962998494942150317275507789715941449133943051889962932131394249277725601498149620868390677403670219936860302219377586891581268839739950203958740517866213446058571530484194674956798719844014554494087163357384615608021899824063679303890626979693426040721560448647891115365732436107517123110779205849000803887184538252508823293046458420647545970247437214057700091133222182379355251152683343470428337908248743977e+01) },
+ { SC_(3.52252960205078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.56071715152585497023092290905655959502920460034220527312022335847447157154956146842645630131605527008005874505359774339299742273930860461033228954281920264089749626896578868226710868563927042854240358804527652171128934251989148616435512438069075763900427149132989690880480177660180054073738041633796251162327302376422301097941705408765062731669475812705657287562983925078410268640206842398117229936138220828044117537896910765536074516823769915511458415983380113545538145635109478905390510739920050025e+38), SC_(8.93793334526334738411682956961255144453790132511539285738028665409834504718444888464037221580061474593309610175221455653957374652755769082019267799560912280759842580615594011644440759597791065105166102263051244385684737404118153326841745732831937820401128679071393078811998593562915566091676512497508547760871102253963272015067862936340161303105660559596765477645243666783294043576540378593611717496449877183394450670074809802713021946770650132022480046114445191025317965061628660311957807807192746963e+01) },
+ { SC_(3.56992950439453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.53689053093554857618544159347188992495443284898295702182825966086324146810862756817904814830792850077597275262900840906884137773903601193086797431603300382282886366275248632332271576233699015109917579568871683861086177595480505648823337658476139211255709306272488775058725681443846528296758964994516545248044490395799486386700760890674575753723174710531471038216033893492356552206670520206684537324374000788465207024929065117767768126198999045992857823887533746905922201915892267316660275240932491649e+39), SC_(9.10640665868190858448532660505908724776333955128402397523296439018923986341125101822015045933309583940961784261950267375844113972950394330335314672511761753499894659082898535243666439383791158489256919862750008378539198210427205060068688218594844978402783702908704355316521120318879716251526598853592425781150901117478569631977765902386804588349601910594652674056748675521414811504462212070930437095416179775298078616861077465917526850161944018776608228044914807483704248490120440411257414585404454543e+01) },
+ { SC_(3.58641510009765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.36424295432157511535440720990490713142478928850445545882177788146631899583265243156599175619499745407860152595623106429048800824391118470396354418159458891946526901518510468502225964275013364445514500603839105828272246032594586879111881480532434185612132159762451613795842833858892548735482618893000745983825064789554050634942435506397112024172110375299723154354678671706272365214527471172105826515102783386847223543521346016357252788490199361446234119782003104301862373067091039928786671563470091942e+39), SC_(9.16515139128693651595196512708547636324651709683123172234498719549521297558840840169159075720023119839428299786498929100525813570217317085650748538899182704393280910655074778183239450945435128247151520084833379444108879242189647258521809568987184893901906094154668037535011831330451742257699231391514383734240951685863272212864615171585376112089136287668760813342388267415735962675469412313082132336996282245207389344858159858989553753059675271824412086490559176145293682277127850119334630174597027170e+01) },
+ { SC_(3.69956817626953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.66259459422706588699222738869782517771013101489628084466644305870430406070798942163490690127991724184561667952578780416627685499790363015334958157277107962880588462998393004757322874708922780685347930191019262345739771673209110527629711456840852047746136361035805476632115828791555934130976955731492222877982759318769041605433626949821770046523696970438061167452953903697439594188383812573031381320960762917804462780349360037016873659307232172834758981537825701637399385060943954402291803761025188656e+41), SC_(9.57041606145408355846377105120823310875286105242288743240649449931243534372494492033165984965615897580866359774857197083580527214825807028474050660229744076817699154124010984704156257051369003061832044509444512636886565464528020771580658305752979819543996593298215761253550380750340318878379006801358477171218731347554516929031213372595059582888328507472127737586391933992553030899119731228858902002898978177293675803817519606691852163068196667587353923848696248145698269407401972926102876192198856403e+01) },
+ { SC_(3.75548248291015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.74892943333515253042738100908952443037802362410857001178764229199499845111375247272035285187196798098716219931748693667186931599552210927405756323100223125808217466598800945427146736702619067016437164165956073787698936391766902777295693220076385374900233043835056148278714940830326392134463942329279148370477479770746280321753286950085635627572858440912629457352464345539633215981584384577339680355270522130806324842705563048601979210064025901207358610376736679572198026858224873784671735129803922494e+42), SC_(9.77197854446636261549767992618612153338901331734174669538240849915777728762665304807044964569279468081317072465445392919466603094510230879224662720866001647403529844997948257752306473456879331453240965568476477444279665524301166509246024032003595520346950239876945351260944757676816304846242018005998244715086433298063772518276585730102267193042838546658977872168589228695054959695774148909268194979897704922505548574157071890259226103350432160503061387135033879084934257843059503719574103241324813901e+01) },
+ { SC_(3.77689819335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.96230102874396888499645027742495248912447947437066102094493234389694530402927062586053005763812544416332451548507571624128507918007597186949911423259731332697345887948321691383515686149543224694114422053539249065095491560459129555622893486016029603928552949258140662583746543652350183245380752554459137575155817510605776788743415928620015393908452765207340603246552035088794620482996203019784540524531971739259410827368602035166344872030932413661636795971207162080060617878261642791350386883582954744e+42), SC_(9.84940303909663096910241318409289245212500019975324319490665242340160947312198602634920535331626298288860399479371441659954832274982476753196020766157386868652317205632431548553765514639828150740532472745982635933859447403915457191153481050654421953287290317189592103415626818480295779308359194099684087776250961300213691244090639997986010124824245592443696072734945753336322423458290341388515832355186237545984748745345296644163498644022002138599063586519001741166436802987643212337888398090681552556e+01) },
+ { SC_(3.80960388183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.94966310132054302397003765407203158363486041136357047081300608006350006717205229120710244797692588870835750721429283227140051425723505967609469428044605287187966408282088301594708353782058645924215880213449355758049345549942894658204524680477066959068297785174881565146038159618757197413159523147013373237312323781047617212934678594456598493072554434900688249329779014143005241366335087359096559424072461639852732323393623317543297851215372216617977352868874773093064273882043088007553752439030053374e+43), SC_(9.96788155878398464050970974823848018555124016340239710302064417988281268688475838835239358450786421871399679931398797995835233726341480134191811204238900043548692242681716750073416459676325619327228606567408071791041231548207582968697208109467767013876045530146014314654216878827838721817400523024921837183738330582752480169454610303023596022550679002303388123338606507066113662753266806342456079882031076214547198353221502702511114200315582468949405891307760099327072576116921468452800633334968338123e+01) },
+ { SC_(3.89539489746093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.42099252482505175224053491172987287464999395110917309159539664973197176042409395425197153828926115134536219562912529335489935304617549050753694848890326784187104443214648869569501137238672773548427757359572273213897705118085729449223906502037596529602469147874376024285396564985400296213619760577825594742208116824657396999627685210334609177578842262952054514305445759630225916599065166880216435147871714146695241425637568248234770007348891729125230806186695311999312890685043669601127902723920549747e+44), SC_(1.02800108315747176667580757624829155137160586685435413939740338603105579138210801292181451092389926592138418710192414626474950090060776597949734074627296310738607025324151493885220015841053889049529946606110349099977487577341271553333304748516674899399995745728225290763832733902563955246130788629755283822495538598306738794563140063680581754879586565113212214718427262543292536373096680727403567530069559782665899562623362724635818341486292882965759589700454690944614847393328224912276180561566065964e+02) },
+ { SC_(3.89718627929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.71969740749970897730290012846147911686009295785003916412901622093553119195538207033808624095475273429440041234995502918525910378308579137893316016944614824299884881505188300485682346316635475893326590902073416685810355968417714306010036179159455369986745977573646382266585974939814873071165709069115729131193158330432726853181872954032010799755564920125347309967318331099101478259410726026710700865683645570693157050660905015788213110721919051452797761639065826101198888774024165468417198360511986211e+44), SC_(1.02865488780699861093280112199126891329699001554222129308544815672432515028407075944529333679710293149443274036217115425818460906925868653036116530838271231845983723398621926711333323680767611079507871939945224386116305319732929747226426231187768839594051257964947193446101142422220266262855570986577873280585722389225128219470540478608400204575528092251890460091176254511727568693251840571516976921269938059194303054284592498400851945638696563192595531273277999456371365165093683664759202661955453253e+02) },
+ { SC_(3.95919799804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.56094771887852659754339674542850544692401459751758415883425527494896691657591433112864036598563840079475388260010228239613975962598011953360072295567475554942703652000460050230046640009911511053410735581139875607363314195967702151493277296382101296360216341042964206487286690492474027343515140566285280821536541768298788592515741054243967328597974804693646128792971486653117608353240114118421559251016802090607898167429626748932448659899792094485347321058606630943042209155693453189531774741842546225e+45), SC_(1.05133859619751442523240614026983326612739656777413443094256832978622427439856340253648166152679010556697821281893454391166534792755872927350004043092036260784892300492613463717273263792090452502567869782859374087618583257230710949894488889157036516384452562108265394912037257984765405157055684158071284455805768007363253644757106005305345135932486240034601443873038626841783178895988705252616961545535592391173264126938223796906149475573371275187276597618947176255298870317039030185309540989920657883e+02) },
+ { SC_(3.98988037109375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.40627593316492444992272825412223262199673436499899274677726470023082915445824866560883298321178664586000020727213649149362741692666250092112899640459218507995683203027836958023404493373619001614106360496422473928381026688562865920584034814624925452283815578341383405590966758597941647998792595251927194506602941990484534536954859045350149803944597373911154560785502492566964912792324178856844111383480846116465140788837075282904017135001794788951305979165560179546941585375123808713637899776357770658e+46), SC_(1.06259859305888378907799738967210580839428887862346589832422646064411864637416651304345889163867424880543696554072713410634078133737343313928341868911506283937450816542628397936908503587683112341752316515252368286680202218031445568313709099582003218980293434823768931289876952350750914371043681284514674653547662409120048898441288382045222987739167127214935250264656780339430988611790989613500898841643685370671893866307781570424733993859701243964579656627126825398781572968795666477881860259909590879e+02) },
+ { SC_(4.01209106445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.18208916857154395368702420922162848388742166024044813062272795566235213609746749799338864763870238526778712988027884513751820183187654812982992902723115157504157903691430537559791337701464306927810443105593740233499397841866595345518575638157812382630916092366746782345952459608920163041236268086753016916702027845839374869326421498055020440558419581789592663923320342627972875884370276143283894930553232704113807619621842185618990407121653376284442190681954184665323900163113646750719325004409065903e+46), SC_(1.07076452230055961349018934745963009530408242685899091904199838913486514387760205596491425780538983791270407761736341587942426767707401182094852188846903951692725216878150525398824647879901311614817395461224548594179988807081033015265253650683792469069589486412803831092929069079995089595050710980032465698300202811465535855146769754426551932930019839824999335677507135381848141539172684033420408805268269916705873041553871757695257600369210361634571992292136556517653138497930604300512241679666923505e+02) },
+ { SC_(4.06430969238281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.18082308580047031513981867693577135844953709455788995033927078437485549163341744994659324610448675205268598737314781061892395944903689750754334036944685391608952301161815358037089584556246568491089654734140280148469134598272099686824970323828495736821141447121275150871410273803476560050882524501896961102850106224667959869457944400000142782600575521603363928626040333995457611724197183012279413386055224125252627414715903126580378222565406209200875218927571867836787784546849410912775700152767099491e+47), SC_(1.09001201738556231502109212028821747819744173956937210611145484264719711766529469851601226202101966363674044959771068322529405703004076853427974169568790980436150996312637283223952251608940600902363778319452023869102298665641807940473320405315253276624239835080330467460005112831893908538319723111328787953563154033212840356431710476416136889509518166405292530241843482629331557000897340467712989345938014565837127436715649812066402504490281339082467632965896864817788227698937607171213816703009689475e+02) },
+ { SC_(4.08205566406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.20115641331440339467310215647884183473659029888921122709491804851243055826685883831686008341760302325362966434000996094005610893172525461862777958822533083698245624745695683931800910290742279054784103111180548974580560857857998796163113975003594791881891987057953771318195446012956801609200507156275155523646011353122292253918238750951175292540631928616440892348597646166577336605887813437522385049922505785826990842424641728141841630627868589447100238126726740130420110706707049750568248233449196792e+47), SC_(1.09656859194614760424481999745730080743689952003240194837592904982820016761495823384151814047070800938228767295724381370266368325577544870673863719799856491179412459655379074570077143642096179778941173607408388539921704892876303972073935153969731007313339109515516504838047336843452280164504414683517404081658767756776332645522534734617981654176135384648344172056441923584367044372654115811002135162379615965022393207966077402824245957958379472204188883421647250253204160191473856460368539032329410990e+02) },
+ { SC_(4.14003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.59845508598368999690356822122786192315007321315447283315450935378396176720469915594152097905704129591162266777830663415849047027907750838429775541831407696504392052400572121244223497656077607413870009833655228571199174047652016520604380423446828383907772606021709062080986687817756548591328205748985050739484302737720191387375280437378840194735961822813725566987452710076060158391972854275750636578040087619684469317030177741135396923298210480860913790889397509964510394078850965088315821477380776088e+48), SC_(1.11804589074285832381098988403766806882167453395786572096767020977168709412715983641058656609392882765351906530753747748674759546000501253383475774797153523883205963055438064127027071634192397585343592926146251572155586296982850390149169324103514178552519548061443253673605754847105252438455119244896239056965464264638034015785618021431808089844667707221953518060774777061581753081236358805014661389146949376409476029618453753218158016321577730881781246449884935092425611660099548318304231590337873089e+02) },
+ { SC_(4.15873260498046875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.20430850488529878836364552230116299589347139302018600134994455219285339709369731597644890276614623827683116140537538396715869823317619972266589012874381591244984977401846711457385911850204936287595687811998227590480489823148356281121021601075546520736955694475027986337379895562659885275955049946488528780140151750253515909768287231178419256423666497593936884971433525548497845269710395217999826831412786980017642018557542666638085883545424574454847755827465747444331168181845032946278548455872510465e+48), SC_(1.12498763714220540438563524043282372771462861555428713271523103445069408737133622132683121385631156666035245178814443182982329791609993821751785565723767774874223089328820219825695895391915295530433626089156327800417687038667437651350019555366647713635319509137297336970765651464651843715112398253676843172558891061738496378388977055210658974573259349134471597651761705973215638004653278207036224383533445539659302602104811301330599416142944383381481264448711734199195374854997388262185607977034033386e+02) },
+ { SC_(4.20431518554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.92880881251103730967749510912480493598843595405471163324545178842772962570010986824734097484061068455093401771772721121531905075903632713457103680305348742610712310874643764232296115355411579409633692937815546374130725635890491394915622412113033710488694412608042964148263407503190063442834332858662083332519073678297422005007330537623373751447891670513197624271083086765042342900506820193007162544510882574550533247086767901068075725892817904636702513614279189463973072045013791188933640113446761420e+49), SC_(1.14195005835502743373307382571057774122368294248710931511975477944474224935395676810003354533563234879263171895376838390229431712878450108220128468846535066479841227481417495748296278603888367872358959348591301458722294073709700839403319205740502995726587431105009713221826249006571718933027393628970732036766349857156430552700157390780713658988715267424292177543833550294196408998572552973896299393525854502939937276559743068770595510048601765523209161655344238224667839406329041480127203972644153661e+02) },
+ { SC_(4.25659027099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.76541747444828339579038017619796984359471286039806019316727048877048257539380358253089339523676320298696081898260684379974048573693162756925809315902370541128833474377931812078634583236915517735326549337250047384463153119151884209825460848162821785228341141203651681096449503478365171880240273602509414989550086203413758399602004230055331417266786182692483906103345380471241262882413062169697340607110713479035900893740354405763128235764347187263956844572265588059922589158433642194681578424386410597e+50), SC_(1.16146446258613362025105869625318571393084872722164662450811852325819135149344676536830510727855931806617837276011625611567469842242910743015303242047386557609659788419300778657225959510400921822756093994824407895633345859742201847602706421538229935465533134042778503324053901507147782681107782285461584115094814278955607068224865608673981699876775906032963995715147420329086417091040813993002158649646890276778769302510589547078761773598472659240756642426717399693291853959152186765572951211196144748e+02) },
+ { SC_(4.34864349365234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.72956656289594422179555435645719665669151490833170931930540394923332882106150775823183828332220383617382510756932983303586915971736098282331585692286768505004181816760462959102656258137386783432201464814268127276757454206286843303172156957352836291888388893119984878538541897998791928690633028009722293016372498432461107862848660944247995493388469064754794464528855028498449553615946195023389978643421041637870937140583011320703704692717358020944793180093220881326254134670415296923074827029778197932e+51), SC_(1.19598555462162467933148026457348534355944193130390148152606330964950606221650592192613479655954671569609330547775869597899466079145779091282799032516775641299076734660916615477683671761556060464003016474451294004767328010445462608326438799050403655130043418389705009651601146153278786675780496717162315309320268991161246457767219490461631831265493559014025530287815822035748847456349829171011845315753981529970028456542663639290669871114712818412020749472624292340800036522128290544206868424173436070e+02) },
+ { SC_(4.36616973876953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.68814993652251794863224878981547465786534513650004201127112212499173138764713817937139783355819330391823621919799549392189984387660232298430029730994597271728974002087860459810819914998571269691400620834607400152357489032975871154006275142032822382102291315307408953002930868517119909628230070576512926794992880041033667617964619069842646694788337585073682192514955151687845228629957372784705408183386612377901465234782668096718165488873061596447190452739003526477286481993297697013318925649609156329e+52), SC_(1.20258058052873536606684749211320913841318151774994016424062717103555487530105994837794793472882164536014792368199410342812750725570440917170492422759674508616322478334545463606118065035246344840252935442447026513835003563333039593965539598067163193208964897341963900598735929785806647192749611989499779600275587111896635290788289254445462814510539615286540681330222410686601717760100330615252014854253402490991006888805973485701862169066213877234224767156317774928010126959591214640230596839461830891e+02) },
+ { SC_(4.43486938476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.25468791812059674818075802726253273137197118389500421767647560630915719230566372874805755091307271651210328590029349884142749446165098393203525442334507103793135727453765596469246795513053050205478613191355679257965108739878334191098237820732126348132220181848752784559742716149943714927169182566203113208033329469765353694740919325562090320321287992957548867642768909406976086490542910518621169243395437240396518869340617343894813308282912032715520834572908498174785851002365797607975470857365115363e+53), SC_(1.22850021496549589904106719454578947931632038847321962566863177484470988831972373472928283280292886713704642219705797223420020854888945961080804508893510944936553093798879377213844669481321378157164169646064383220886223821127014941079511752768795228450699483966463786047007034222715103412001785676653468851334388436720728303295782673317779798050475460885436853687370151208583485504058104087062550415852325039810218442842861270794195245093707199758807677284186254790202386093743873559636061406926588127e+02) },
+ { SC_(4.47341918945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.70051768757705787005643221470781194832110659669260732490569084761259949445373930344602352754134547843607814413559865870653444288084354780008568386496571756770590116919940137054759042323190520830096899456266200917379520710874285797058116513189434882771150673968931300996051810213106882475828122998907839209847395178439543785649629732774647393938811580789297673134309473455986785492853786386676589392766954242379779333402121722590790390721840948655807960929785284246141397812978871417000406569154097752e+53), SC_(1.24309189182622943375037734563801974736052548685045190679047145642944399136878976110953100048370266139467196398387244758623610482609359098186417799117194294840939266874146185433296262149426750483379751307615953537745853268580981343684728567395638480560599565758864428224070365072509754246648958054305875196539342924852749871276537707041372694482750537772405019200044601308756097073098620381025132603017029627009758457770899915858550187083703967813384108647208048033750398229894059929781335876419925270e+02) },
+ { SC_(4.47881927490234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.19037024787675703270175906824802256668177081322569037374198471868314294187129454601713334226158013396153676975596092094045100532798117503704133665203016590433864389581583864000633714389579846243947748106569550907467089547958630535202463362783895123615607549081555441274565969241979835396858131475534300471286406592205619591878302135023399512555867647254188327963666245636949162413520398427502772639464363877586984294087038276975401950153279258436991500098280019827786097195639103068956276315504273530e+54), SC_(1.24513859413079716889471609149241942716494855657922499808839894694292777650624863833898685903676326925038786164757268460095580647000754352776499175721803590494435582033180536808736692606281673139127694932223203775262221520114380284811901136965375921716273693603354819612296765247177033895333364738342530178933237998008574871220342264341590540844843438163019458832092461223509223687642679511898705977569609176084109816510700188357800752241155562857115035298751914915182894875188271900249895635023723271e+02) },
+ { SC_(4.57134094238281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.00895985290233668670115700433024083746043210901127969768373352568053703827249253423594342763451352126382377318449657081168034935524493333635557477725982118090998765898303952391564641407905200994222518634479384643334463710034339731549737840578045581764014018294486920638770652996724550267061034708139238146646656924230998620237790675184993271033067273392496695475878552249851339975691034041680399364597040291053269735313150315432017445945415798985208279073996905846439545084621066029644386016432767382e+55), SC_(1.28030711934040369170085309853315597227241145401747153640034732528030582212569910331297382322800356855682037417638163950624408603182347996363131314614965009557147445524418096128223220793705867708483717563206995164971391583728919535379788775190549358067415149827563122933154649794855111962415462311815980167072594373161961801038630838275601277930510440672951033494274773898066936481666055852803363087906658370311631606089216774517991442775368076850394323971774695447095042326288081304896631929106818814e+02) },
+ { SC_(4.63315277099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.24633970510507375036559094674156377099419907568922363303903492850844317662813653019477386735973985177161212739874200979711294338447730474049016228761263271752884456089449825831843270569278309670544869163579920596429350006069074209949900748626912423168029920991458384786198991131770280160077208354816753922904957064286491706095964965292514470849442763410757990865377051954391465148410911370575466485228977574335931993387471519823227077476617228714901522411169999281994184409464650004261241911979274201e+56), SC_(1.30390822573659961338953885492676430504665318415000929930781588727919660473425330004665599213258366743276860977259356309724373064227612999936828017700106088400776000722598615709466144474264636357244405886761721391443398396975162054811810036726395042116626137632154634040479605170823260376657811882616309641898973459451948187097879871916870730849711466430394406473832927502387853125314990621335923390986635297785229547982617274024804834064479825192274186986047795822045408221180842199929067855081710101e+02) },
+ { SC_(4.72839202880859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.63821708870461670236425303997171857446030642780412338351173306670769420147013288475535988037410648087799473150752400456568173627908249768063455553049942951523776155895248754336474963088628030133266198919030517445804497569759652017168608526087979704838259502475893736023690377526230499083604699664347661676504249685925344027667270918850991470512026405416304869157971883893321338683873535306925612356247012349279223576584924497035099790542099372214842899830944429445647061766741233489485547108824785872e+58), SC_(1.34043543903090534762118836981051230555585566568719196383506269461388128995869812946092345008605522173013494204003842705732506469940880871502996137876794902558316655804394646347257188110906618332788660273115107153055290361642853427022117840853464302501387721367941642749893103110450462429556839844591187120760400036347174278368681942538682269212945273519985921088228798700698799134555201169279281163880632451610594798285227398823616422503499241630841435993254601481530490830078736679504569142528714243e+02) },
+ { SC_(4.74172668457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.73625544353333265615781749855687672233275458008612417052192696528350181797907711794066393266805605907648891659785659212580380748995033976037597055011340614756467279295328929392709562750982325216429658258074075406921660853023861284568266983181973267710575610686993785571322544755119893993236976569824276682221793147216715122417400178890934718771009766770235731147486984899141231312311950165863618395961023563287555561952201873749013746536845402848476835697894251003725120888188217151015886016512516844e+58), SC_(1.34556525752921341531248264471300762341650218841420667462600236955290462762285912840676523938265773113078123711064711053986400179808182028454108757531005055589184901863123207311642722195665966206977456990345232704234193636114226803754398726597017005098191161913021688454814870817048365254142793415000968698201250929034048276110055429109297691792531542243165635466316019586517494151877464553481293731302774038733399293521435396511900710315629691219341794148881653920974852763841833978027174519521269214e+02) },
+ { SC_(4.86546783447265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.25325538407266915987338128054208766591917080521625232032844421606051606716692398018934495896583835190168394578450544655593684941639460458609078491932924683876005138093769628988685898032468113839313519672841054158902627568138818383065501903544435727569688200034282590190525849337393146535954334850871690759709421545986963882893742725261113224768353821553484890973093373366532100337559039997766419927152717363468430531396385149501726769479316851724933345852867587952241741466215585423270199892907944840e+60), SC_(1.39334761731298862804294539283176125542719436431058675147008496329375768272120874433207437459271939792468453525676563654931838065228633597665996854592456445418437480491771651687917346455353598725781373478363207223312979418798095127626210148168237532580925885969940796364602265897149086132306230778377574686988087734968651616593042854070549623519949581173709044613343996738031038884087072158192721688170089096734410995550902737931277134299753629372186581111952604576449382332015708599711385812002727929e+02) },
+ { SC_(4.86985473632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.85605192834029189218382008738179247292631112150377520053854361588702465308236543788152859643955616159717704347800062618153825956926948758269128379908040436439460739519248730865784730020101969228605174442358741738309648260938369518383894853506074652829517475555256853569367065354399148381461160001322676112571630439361796016624499301429175718970541254456863490084321031011506829533833770403337825140862081641063908721929082024238174556656134000812422538966413364709887795809753131069028025245303704612e+60), SC_(1.39504749423193591654786436428893291086751708723890647425720776660306813217983849065409301485801164208541110792857647302169748170165192109645040609190672295254145233711255779044092868648154127012809911646563314549786886632500661524379697745831608982215969810270206463912893191422465892270650284797102021309328842937434353263073188688514655448627946379412277805897064154026444676069848850427370729572762314038766464302486857035527720598909564265778204169823731366702461502569042454590366866462252383308e+02) },
+ { SC_(4.87835235595703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.36035892866928323626003597490688298592375085756767687580221413110290395246119363501254042500161483751096000604731192001474955543954177845351057533404447997454363373648247759245791041482807247733920568308160729224963878297687386572001273988043235573836188152434837448508035574458472108371808169176721812026052119485230621321321887290212166143989977041958322903310001939825724443421609001421308977780470412959500421034470008880264094468021925933219347165639145160097908898804181657671336666324020580857e+60), SC_(1.39834136516787413500007587510694826864396401968853849617697111291158848844054838105490882170287712108401023447992982600168348901295419931547058652315336259524674161908561489574985783144794297757797852248887839090209890498688958249246323290452674141068652938048123555610984820856797509233451931845192133243191526079925354634863247560686566326020005669477315470653309578451268479417275395192731453183344478148664850424200854190633948493894743148373211421781497087971495371828255297385048072836357631041e+02) },
+ { SC_(4.88616333007812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.25676402517775076301468278496934692656483126051057917150182178191344337389295682456895134834722163155658017436685311521936985635026182128820450734590168196821488800119072137854226239436945319459336791804472147889086556562163276827272717286292245052201245450202750152430921971312971942793062920469104989094121415606025694182596873705238964298040995046264827257894977852019200307570425098485465822290848065650171735085078091132334101899949959914884493767480321306446032861913394329267741285906711103952e+60), SC_(1.40137039582554296669086379035601909857486506353212457088148813998433361338780193219865913033475110183234265070635911641095928723479322965406468549987886564786421092927422630145370616108794441359965549476717203659758010615719404053449140959679261059542424230988025529277186859295920766064316356915371416710280108171860963364853471914176384067382710684936643955768838392051528115925620120815181805633665843979941904830873787847412819338996882527616461587934247663102092108148772042092241438971390445839e+02) },
+ { SC_(4.96946105957031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.84926051435419488511811853980745691886596467533990571070047115255720116282369824411456771076467653111164982159613206766501049189841537324822586271014364389581042302691647366555548159603118608864628163832875165777040744349536109872788458951641450125095608129869448380801609179867060104893607719181097145340673922819404866959063254399533632259195570417957400062003248515558895842302329502301062521977222044431722867167965545645096271129720006691983917625256444131530340709039540437261910682571183129859e+62), SC_(1.43375061602840238196387911284923355888759486677703347734243939633177676980594469572540596647627951945711183677110134004531635998116079359743547196710154174966205304265997127571931089769441782084653674499867407219577029036057998836843043540801353893116712152785856625677177920896429671428856336776949787962164030038320010305538321393785686820222214835038242007614244993161677050533283474490782441167642129200667383925185368224667881315570566275605276821283548240903636414523362833347642677414643623122e+02) },
+ { SC_(5.02667388916015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.72359609248419203124278009510985183150244007574292494821063931905291192550361199874577620746648765405775126508129293236688227427346471719162252422650453345352475326215160709168099099325488762829380297106893673243955407060725519552650264510115770619462810338844939975728898103700983305307932912418966347390578099419744232245992772015011779396591256115246555221742020146312599500423864539907811528577739346790592133120230665473591894081245216058989214623669344437495460284751390267766164518674189213402e+63), SC_(1.45607273718315360812077351825961960655360335275523759898423031326599125330681285563961346185235347194447848365591085818579430678126800784165200011806167432152401388929448256893026604697653644245440858771972921457080997743870753230688959517171196148580006810436189017937770375761209803895109732893592165660935605510308168495911111906296905196270497034759766422177237314325587252445463647197616815725300323392577986855382680195617434026290840780964702849787897642616565059952095849864010312060252081938e+02) },
+ { SC_(5.06970062255859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.27644503160924816142832113419390792965291766778937392868625148313812295073960597236367734058867673715159417145390229408534004058590561681905994413322197072847690081504170463658644289597444428583296688754211124952090816353074693404099089089522805150846599390193061140900157003665853955147172152552991287890472933088712333479727116843837275204812883579703691969894360803743262499013764977020715239580640744754902720015964274589271972396515438127488544650757003287351203634500502482942637661308177291122e+63), SC_(1.47290339253539295464002145624242690865101200698759610546313109459314524573119664887849635992343918037054039970448863432946580921064132657981311964698024477353552127320982967180335656081109421094348022842803378303624637039558575136707903053327940879482691080653896232524430500832118478313562318060480974630816752136336011526404841504140903498989821005535936495309592708879760743479628647174400353504680504476422616510089906998023546490011818143779872437202137302789823443968254533389555814196188140398e+02) },
+ { SC_(5.12124023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.99927687563654832163120177574826164473492516304373483263720224434975728090156994949225082026115772458036505101589570526516824973432795981988428144914029285497164326398802375171273990641022287224424401732206944003581561112156522275454116816621229223008793908586894194170593136109541189183575424736089418849585627318980032235653127492913398162962134870463407859904734476897546237961538370005461048857120820195515090940047137209178643079618644113912972824144160270923947959220286021609552771102745451890e+64), SC_(1.49311252791857571944426443742989240699293169189104984644328788533525071766062614852651073668833512464197788105537498139220394509186286770568588467534532456111838319290866539755611126101502125037727889023843649090520797315622671809084602100822709946349482175131824617113945666387479044506740241810153417195036975445814082078347448259125312588036700092111250540454173356138964523836583453379889372133114319367547150774128027019566755710894205995742742073109015256513593788534779850640976780823596208118e+02) },
+ { SC_(5.13560028076171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.23026192637653829089933206267149964173181878750951137696266425435477766894776959662393783465354622510883166332313096861504304874217242045231455687124373685234765546537380906671149144631151556882423384102699948151576804252589990470079816451923653014079199791860836899051780037952091022656131842521787241251049432588833471535361080041988546532822087692740422650115265516193410139725509602539651590030574971762007831872907261184051820389377156437317770759725191585333705132134581317603939326528788120470e+65), SC_(1.49875258139600638677384317905313051110930801241264726031823123493178787964241545162365061893622252359253420828909574612757026646021507513309437547545277475444768358612137193307312374400012176105129375230060395894921288074531612453050914778782924708171613350467577656066140634079316430886465783766714152321878107968964528462731310279262933101768782533568602487689238832241854772517147076307206021006254224136315719558970885725011297528338864980243200993681035553490026602098042547489545481928320640399e+02) },
+ { SC_(5.21595458984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.90981363532390545321821957580981160389379575340353083725526256797176963279392859769357846541564731609442597893669540874701936055129537935484451190072143044000222738279488869366532435971590546803721041182171177688738154267257066471125241819107721424237495527897378823511727860857970760154399303290489105510632949624545822762708632342233005590846781101245713190716795382609572353369541851158507962047279715422507459867212111957471715401541457172773147951175626054512245232328120485001172045198910443721e+66), SC_(1.53038705173895567049914543155942539529563108424105025798868954839393701782777434849481176175639815531720609524352444839956063026657808950015560763311429110479726455402604523788186886421026505595724516333809087073552716062699773479432983413235305842921735857421175536537380992743676101280137113483114395340363769814615698190132874387690604324261096519258991825073089702866596561150304867906248340763186131591391391787918369957028071021291990784941422501181569793228008259915879084846469200023417336312e+02) },
+ { SC_(5.44718933105468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.80173460431759042276531692713781140224690587653067416859419330202555272594989519785776442562413672670314844845499831814456396603542418495392131474699424007810337531388846940463846884535489991705941523480800988009529316999708021842571965686802509207137254401158482624305999707415827714148979174195240510041877334333999469012836629211860992333238496390024839787170544088609050327601905616073272453702431232853641400462326479878566836051665182851779178144685903980102157367712961317755422758532378214935e+70), SC_(1.62211195236494486842137679955399170210821952986639965664170409799102885629436798584179104241517223062978567846790211939285341389185597963171844038546805098393168320539348298180993080511725958212127383019538951139319500426412312663973743171437651265600679423008288688394357920195658536773809676397543581796728439157519560740884067835306939932346578856048493383325511119070524158665272591734958337263086066922987842300651994068789268007151868001817260951294743313380717844919047107129432137234945088316e+02) },
+ { SC_(5.45541076660156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.88923093954475296555460010384225108082343518598289742785860838621540066167743233082083037149631143450772288566621466871158873924441131457703196747998028599268995080065238846466216411793416383771276769983993012465337486970399379120945924722620793564589846394211714533987285947129015549885511215640122352742105756827920577188242283366633572586516180526272406089739238082483458311057365615733115202707409705441125056979536148015597812278487353231068666952931126180364642533905090214065855160751150570253e+70), SC_(1.62539167945751436784365061461200949005630300411607114008314187648909852415129401768594670826889962061935904856663650035128421537930667621120193872601440847111405352872571020367561445717633284481417612169617741083612708055944527541391662257911146210363739372586741093027681854255554446655006091132290669608078027957869792605133562698565732501973658345610170317281702751071987392216962406615635572634798673703332621049982782083567199976464591918134442209306173953999317128537923466369577831811990505059e+02) },
+ { SC_(5.50533447265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.85730944855171128837952400852020457732681738535776686067033565638595958409944167197144361023729960216161600023159694184489531348717782562536407434426714296769627483724028605749310394264725759155728265167995310344108963472950279318135602602405619976237322233553754966277906532700177676410923166095578127366105347200870494860524374321518146934073189297475897914958501944436895033247992910281617521511740888108212444520135924477737728458215906734304055568108571319399902797584473184704901951618601401224e+71), SC_(1.64533422032369233555064135775082372564903634891929403891212957385782265078635506984317907710713735389157508226127087133347180522811226385654349518357170803522331589646835742411988907955552403694425202656698721669355856890469805183019074507700497641719763363327136524479713989118739444056128582381046066604259279394515710551116967860833091013105018097573175423841933592160766326992151395034082321062661561787350295280940705488051266462611896718603847686645062109996393774788240170135481392777288490570e+02) },
+ { SC_(5.51723327636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.59912571876643112843423672581711050010048297317961607409825899152201568265814939524420270783676418983565192336821959178308980267384169529844813114515861139342326949176632824266265482473183125037840450257459957900212150939142923073681233762674075587052192448025588088282932927107938038749967806775395259684873810981499095151858552234659724816251014527026911090935249406686093634962334581572982993744620288722853674961939196712451509769700523090747951376519438102824496906099852506740240121078438482055e+71), SC_(1.65009407826870653612651933214957347531916913256171357048034416707968507274796838179768517286247353976812021079376446710071709918891506283503353252749845939622475785517947468014113580751946861761977807445698139136003999090928604434264914562129227594145225130236704164978424029429423971788106902840659087081085602478976117497757721020106416920731243987640848390588291719822433054772349194724340191601936560723898339546139749382460638530415300746726876973444199391562140782410955411138156479694530761867e+02) },
+ { SC_(5.54448852539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.36963348859129932162725830083885765244565298120707229165880920560014323244220273824004697217390516951031394823135845449317019210615190366107106578822663857637154953631879413783762758791737654221732809493474544825324816456840318661919152960357357555388443966261856466700801561203734123800247936068531733100738427856642639151771290953169330378816709811944085113405163922644421852150582157231830068470226209468036866154060478617724774942146332669428672162944119724143173739570707335535113322498841820437e+72), SC_(1.66100669873044010904501433288458732499812967893510651881848204943272568308438668632802976387744572965702081639784750195299092078626713239781119668835184616238019332450833479935928951025069106212418491420026061659292911620401090108396262046980730549281511096258695057625873055136884628573905936028503115321061043301503194818309842899671082066259686213249217936866681165807345765765864262235205654246463596164138969890804318684364225340323672345829962204119687379612492068585994745111171624256672951720e+02) },
+ { SC_(5.60617828369140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.62728406523296111131355808896408220483122212493644530547421409440889381677426598214179515024723875571304139457495625118625370238465377699843404971592441195605019230840968886831456268096329174168019131782115361294034477360839270231255641106839370252937972696173709528605243232234934094126811293362160797978384326890310737756907774144291689575885298983860501089605430193321841929026875631620592449674704579391768483259112420485117912758686374200703034840412187265262286052457833550937813696437999510829e+73), SC_(1.68575624196050997267266028127284627373835439062853280709730250641775691895659080234915944809115351391194349799081170650336129460284583581311182837182434777787020365926067248555954377811444098668933371106314388177858633906779013732328021748296720192733105063123796421239840606117383188280665865626704745056680142896335801095600347583401898777316702764187536635745970202725607621594424872915595196978772906401516245756637987366616577772028231781285735190365681022311742523413918589921589652465404639048e+02) },
+ { SC_(5.65145874023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.00532796061027588342555634039840958050072003725524897780153120525098039110972677596923302643017425247011776700456138656970587815343252699971432589970304541137216971653146921253019828921373932258505387424233563536965637072767427539040695829500810356303246421059814881499893139107001150451269597055112993867253825858647093910267606972605767467096492303580321271252736901613460849517094992901230956665411827631262731029008430550242963503955925018314197909669408289089678939618884714603915651885774093117e+74), SC_(1.70396610698802152306545992028045088771637522788687162217040911655994103120991078484591541044681814790234322605912505103279643770594640862031996645079876918340627167621799875799132805688459562663055836041839080964225203965870990530884592024930226824328588293910979352119356940879703753504807864546230692672217401386749251975954569686363045717806665309755015678650005954843235693630661880028625814985348135511544047438477027345440190935907742739453062649940307557554216607174200782135239117705440723125e+02) },
+ { SC_(5.66864929199218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.00893463079459638306852377972162212832314281566339974094846403036833933679188303046055230387181667031933042449188201886422958599767084705176877993559428627960437073918886961487109618272999237251180284680777602364352806575884701907864629117084864327798406054087618133419827665763186982313802818804484662379248030769718776783842512416335502226422458514344068771367203490351672278569905316747759436759190325047231031396542725204357314732687817257818939988969471353446714317126638405408286279074800705704e+74), SC_(1.71088901428681912074940442067870210399918955371544005621396360219841515025008273102784409149753294662455477907345342433925316078920639523342844469477264979432830558435811422842728066450696651669699657071024334864037418969229809753531292356478515883546040020790521605315474695373051968354857737158398676456447944828086746246078055573703027656096829984338245632039102648845378550125773172367923607477081418755563573116154024358661756787074602643281274378133464726584156719335260469091519291187320234883e+02) },
+ { SC_(5.83486022949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.66581874590082465496734219192934428465315333521254767418155023566452551364671696043600154602064786390918015735794727953682909582293741899527795433835466229225777782017578053755928795450576702258516311538492179414197412787539060300069046660508877295084686993107797129273447838446631248831643936224431698066040453728941611191917556730641074451575955824045650867440725370691279897877397079313549571165216405585458263738561225559243034873003030010837858599717957007061657127273454442703054197549781535638e+77), SC_(1.77809368902389560556519654747745448286133172277814730190202423572238433139459498749757973337779309761402913422192990146044788403885949227861537332221601596940991035689185054557174332115771043545920552344987525372742450169315871776578854464324264816033096820391038456926902066367740213891366558650708302768798931468897897175393899041471179739295386490478563083906086506690354436492491188848330806379184668481561917447521582179012903931952812528845553214118197733608383457336735789605458597140262568222e+02) },
+ { SC_(5.84292755126953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.31111967907968108564453995966284273070652166577412570137755436665123577124838509441936653645447598576576026037074759853571168566602779123395303099783690660924490120450513769954709948709011202016999747959079100427549136730815050629753848445397095734003665257163391679334625280792749112291303920083984170684582246813632656063567466419038283733376599906778545803403574425352630710904790589519407199933474550681175535686868562007253713481702903319248809189782732834090717268736522302713544246016616289193e+77), SC_(1.78136784277199791355980792993301578877401705177001075500315339022921965898320852451122120109942991987872235659312837341982115462584258391166452781567213633529952056867920213872386761172375807748643983194728614291717942731369559504670522696088784050388841124328589714361309478662831427762779233609754195822939445772722611522584916683049270125720102199221013596849873478037351888114024969976004496166291593935489527520236453106735125128078448367001664408677906231281405007287820569237580932655505337116e+02) },
+ { SC_(5.89785766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.15434273852608175052051007957642130376175355567520986844405556707169579584277006050601431497552351794410079718939397622430842292284069664653775293360690691144451364004675301732538948711177929343415531902649211880657979203798645415145113592481692269065315857656050259143492366733773252421884545554189076127852258046550549044604541757433866428171998298663197078716604101092736549227739434262194055095943034111018376417700479683389120931266108913510501887702995757124007870448387721782901462590044575863e+78), SC_(1.80369122936847833747244620569394042241403568233584693954872045262000138107949636178412482662572222067060256012498246282026848613652111521810028375472949571037943007108229418943905242079480072521774758221319676601855780617550008032128487904542540431362243741808393437284925124052171322198361092511256761756805568840787495249969603080415359347576499135535249451812386160912834561464667861208207405943872521131917824342896068023785679236468172670460985637658921039909878761896734630899508143826458508817e+02) },
+ { SC_(5.98653564453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.00132385823406532195342969241575307062220442173885196890428813567099088944230699644113824335346668962868193903487477473257524420549118385296443027202466553272385575239725160345326269538237168306474105845435233094726596350253358535142477920588235087499265949077286638979519744020953413231617901088981004226798455018084713439728199569166897944080677336032949816347254619616891551126954818721258802245261331958655929372783202877550532197146374267293901424907475973903859686473262195736368518574304724290e+79), SC_(1.83983829356798021112695277102918916473354077226552128937050486109009612802197835789738736961915496095990330934870586550492358340881933348554061876390420029246386508770057884901756947512682678410133178882335106137027931123425242262509468851698599678577917986859627502006572635669264212991783791259182455083384598201976527201156604576062694711662752407780348989716944966241981177183352380049513170749345083806975563338443088290155990565362951436323577941305336038226907855799662285201997239942491174813e+02) },
+ { SC_(5.99618530273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.18668722102926537686863939509792177324229461246086173298665244660060212626005303967211923026239764928480666430339370818761178314295116738937328950259822069208094863002206170870796473287216774849356450437446051969409744263120254398739732763046364310264795258893303437793700374326669976157331901934865550261825914359068943169512619064038979210313222455753372124869774505344923318152917450863789512421579479738334432508076125486689930362625524901574853660403217646683635521674487002926598422228858901666e+80), SC_(1.84377973016661553300761083998264163865041999231213658531016469846184962844040216010269828613767503702200271396320439405197315796937770361355914016214453751567338529140029955190627434035790921793172278249561877341251490913832954139497108122400060599323840039514043471997972511225474546435241748986793882562481512955086942096212395141866194720887944537106646237238255359617235172430682472462560851135251878435044590521732878437044695408173963600011371193781768056156302719569901165806818818566873081647e+02) },
+ { SC_(6.23226776123046875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.91912456670046432469852028589778466351728144671338027224238548727258605194466678572928419297177448918791979245220722313814355499221027013903704799880617596448233076474701583332203353566959481686926189218031159629624421889569371759574983747270910431395179217232975957379645136744743804228085152542422986726758752459429669982098014666639714849501097444268034200478506951313388425485759765909606913437555419471482645604506503985352870252218852203638516838282424150305484003613426746707079008036610862687e+84), SC_(1.94069016938717002121600868465417170068275722132136830549618739673540558528595721646986474264244223997245366273670281481954381402563333141326592053919264453523185795443198806564053180604379559769938027888770407669907747539473560815410497659889430116583677006755491651924796112845533170563607089203807483875211251378906735074149245804771030420040753961966836276519727633696564992683265102297464748789065038807327540135272530607479359251689316239030159424321824274758007537996660136043615694512713923461e+02) },
+ { SC_(6.24204101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.87204070452368133653844358723219684465183819009686917972438864950303983526648003998000078903116434656906362028654248915812455366066883079692852261024214133379293179572879333758317510445761200423979917977777319858647495824203654635929565314050503868097559911139962937671629145171641481071329414102124252208250217633461118428689666383022894295062276894555947097299092847546251830224087702187626073543130546956809963957622996880721653073905973385612413024120900809097679013486079273744980732653070468486e+84), SC_(1.94472170635469670990129901877781037441234931236216684713262077122035127860610772038408743403779382316925792913510258617846476491211139695534707320363709525445945968639324638064740214239560630493495130726799393135575689124672391884286110335100009167957317042894860507476742519787005926382667001472755932127084995266518174229613287419023814214494746387155814766215779110520219447018454861865608050915048474823759933764583932302677383449086940115653251190200643736920299436772417482218824788254615502032e+02) },
+ { SC_(6.30627136230468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.07883809322567587351304757700919210201400372370028014733669087628987589983158274706635048998196074484636986287053637580284941284019292351038519817662734698756805000503791605776404718964179164829752346964420397249229213797900541748569898231526572393623133190548136164426880316375610214932566459240778317683457371797073553184975848305506903222036894019361630611615621088249827934571099891820583768933088571065492922189640245014904782422808773799277443981896105025033510586570306426738661697302847069341e+85), SC_(1.97125545071279985432055206158754163270540648066516758657013378166384538578266055959270557408892575336885482608794000336080223297390417923023114804281023887503320918760718681135095586908775440404505075418483157233375973119353660228493481652445978888497972610501593218423789175261014894766342625067988760426210673357531336816557704135310997621019268260940292968299563365486947135813716127173841000025739979707835004269227483468161153151246727699291670427800414125264412036226352142701587621084843256505e+02) },
+ { SC_(6.30905609130859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.57679865750026937130403923658564977522695010429730697956762246223763963254944582095624083570446236139633946216828720775064575249565825108056873168699600737856992778588391840698550523979297625479814939161335851759855722980810086831768127340710930960729019286335431680773329676256863623979576264110485129404743954192093539203153625739684379335089870802004829007562145642119923820657807875466895498912481110055111761241384215082335460167017039523979462575056521850291932064701022425782985118168843548349e+85), SC_(1.97240732675138865404966804720479811590190385318354047554648859340319512572550562926118989787546352461154699317140709430612541875001002602391460101795979044389923331104070975137782943289806651025391656450371895942135634950530237013746064731025064678707401765676305921885664469729627213468465279967518694064279728433332635769201668442507443550642503464029098718510526907763856324902018709089779176595806441529143846106552685370658607660243268315489642814834632633008382960728962777104428378537063900488e+02) },
+ { SC_(6.35773010253906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.43413031568444785230583446080523334353678344672827638890428072339897608400118287075075748023575441301152252081381518778105909960253202649716579087577790006138717813293929711234603593342889945612147466568848588310068827187349087762503062501361532456509808803806370919672068134422458480643496217169097363785641909057230701881150030598693049060661775637645655530388973347468061009784075202018600226911603743905594144035721867585123234504154294951857771941049092626495361012512470892419575559684220599104e+86), SC_(1.99256081707899105995238537106332708026334244963919723532514110952603392293425804378689627822409513988073007866856612085968395236548793856786165144179368152868330812796117304609784819548590189391029998601290429925391101535366306045639002309495224031473582463016679597605011525217050180259191810616270062645849536614663707082699976497201935204365325221630524442864415807503299603937528538236291174847569491278382517658996181943173995923450076572037101653211885771916905333999022232021675301162810521983e+02) },
+ { SC_(6.41318054199218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.42698519898335022546569319874437414223161000361853491645314507012246930440411849024371126814203890210117420903688773509265950146019646804999322046159830789746426084532755841419833713009469348095814753785276557813342806360547275468512809281273857182746592448980100258242561981413748711829776566203219384363064291338316358626801822999624152821809531297592767666163800955537894771893334785422176052647269926841199742845116784302273434716885975538788388539714047585834048357448183283245905993491094483591e+87), SC_(2.01556584014422414705416034728203732392205944644801811404502168456434376113630315163232898457402016141182911028807363439651328454836614863527616927626599755374990658967127451481932277045225117961544308086635341225409726591288485039940137540880564875688261058269186495982113937086209632615041014780508375528611128332946977437941680417056557805521035777021329897035964936079010863537427455263131990129119080954927720597875082491541518620821296109588951507936968477013760594935907715801177547198838422484e+02) },
+ { SC_(6.51713562011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.59176538800911938350814428766006978735945421889918747449436416176734427252777388352821120714757111560344853866869242754596614235407063187052084519490127367917461657689856477158122827538313663948496743163417391816727552524399420700989108905425941816917039799183267240679248758347210698287716414463976400404936117652776448357880746252798439463824712564801107914120618254084707517725422190286662576461758872999940377255406507185400907527167274291615298548601355364186235814615625035289236954368588135354e+89), SC_(2.05882412536978094604492822987905038263933337923558139097816338191759338923650770311106570155528318679110140524205765896765715783439245284881543589855028997014931969590587891245257589050135016960379801058699133550089355823471261271483420702999297086101179456455422738790343489292132383400900435369796318443279665308348186077844574157190017761709342311710175434225437182344225198416855422822849165263353074825246033175874829300040290034949824528522691849044017704163743277517242304803034340516836073205e+02) },
+ { SC_(6.63102111816406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.02042767502802236838052517332070636095415859169105291322614886559121189733678241986292075208016773103947665521996041465641301844729658254655013812226948565114442422547281040480132634202599651244616039520633843921307466447913810731030067065695885450690904548777892319268591263171440880592547970815812433995605132186502349603009727226107723853692642251515143204480281646113214547704739214532918847942892910865647709977877888032239013084740695535189025579840934541409863276417526792192505931529959857981e+91), SC_(2.10640641898066274039032912775682771492148229468233994108303959301748156780453696985967152523444533629282724550139219905281963706053673921436112311017807494239048063400112752991704577927550433643728258578568132056387253315525251876173518206873100174136766538138261863562198346084044445996825023130868924131313576937241312855820375033397304911073941499725560879661034357252668623689396388749398002019488847220513461349610575365395135451608745788625026382151715306395782047438833586733014561981163445820e+02) },
+ { SC_(6.65240173339843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.39575122167677575610208270386905265806729379941853186968465262209497100975510972380161552808692742665779438250305547514419290093652214875451605701218704075674462088117785674406527678262530298325164572156064158323693760229616518608304153170438231372807984698086309690520793295480452320535401442063000537533059350350288541391932286503974746178889933960602387029641055958763358111090943791587971557202668425888836069857913931126277006417588153765341610635832007349595746112280707875714069931567289920811e+91), SC_(2.11536149138542881429953686350281053300655756618879611049698159678932781608060947504644554480742151376381461339145780777164563886056584828272014896244304294127461783692773902298599152911376586807152218480938440856918333672768654828848322692993711493512910124245380697103447169245927887156729519911056083251564743753952766433718528529400914505812145000197339639864206343409356733570994638564012049842630578161967664437238116642276612216504343225306849207855887203688608862952346693486753793358417226619e+02) },
+ { SC_(6.70259704589843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.07038187670595133629430007175837432959290946324944333023736730996362439759386622286470232089193331923584334413950641053543771258225138373425862108125488059451118296745371352622417181207120845004565066108038733562551562401132363377720862326126821923914024246148719899804740883548994873018718782653014005434650987876618543298801582017146827879797323285517205221379267910018340442548423315614973812748071871945567795717366271080107924314832979851285930901109782882648617544440093418815787162720366729316e+92), SC_(2.13641250070687384819721023298141854021674308522169699945863526766372631226582693285959195606567409637003709392029624732096703067979349517331008524414985605987119357701477031607859451802951467613970098779547036798545577512518280150523311197695896483937933016610121921897172597952911336551357300967589197328630945125647322578991469766915109898429859732859211713226663253802217668559098004420396578326155965147156055622763520240103001095622696401445939943714952532596484885727462059067739973900614225589e+02) },
+ { SC_(6.71435852050781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.94654537945542967401303266491965790751135473718332919421309929007687837274073521038496729732185349496360972407556564901268661671079342273794410552499384881092793967734398463779298365152005655118301245048534032769019823477681162565194438728072292877726040908450241010020686027879375861425121224921153291348822636245749868981305654304622482235625212970405991969804089865390472145451576041211655732473907395508260288375509085670079949991686131665876920159108687012939811203138959286213610108382816911859e+92), SC_(2.14135053848290827980384905957152639408443824026010193681584489110942310126243185979385219220756963214320908219292035061403237189243551069499740711645081582968202936867810735282903902280326311100947540780539614924584882544996605110362005409273401341732635401108637729726695608609691853395730754929969880242143643026047293456110413346231976904980922843961028802475219762261569645554798859653297485445421638385289736580847935992207389649744522270606239292155807389736671409208364902918381623727408885929e+02) },
+ { SC_(6.77765197753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.42329763943920629786424084656741602177180860476122439376656705986831463674502641173192798441368875545663640838622189524635348813597797599658428178363017662961048512050298836108614557492997978056923113761690573574598964007328708512232703783225888329182799049392903679599962725062094493137928907978794362252063902382230328721329785607967811827657503486237002502359505944620656402414340485916600840331870478584879096444165574504087380072906092173084628459970463197911541316728118307647336691208112146320e+94), SC_(2.16795975202020894959331067783611790241560176157791421153126679456220429243228883228918420730853315357353207568803869203688330691136792045010826542419499052259815629750175692876361572434583284891588446275913905962383345754994948038812469663554314080399736094688636379112725908900709351636469025824840213785169018208417640182991911580842706850103389522631573021289780106348322079882478206677282917783743570640057263485251177052349305371022677908707518709713462763284102106606549773598947439659599324084e+02) },
+ { SC_(6.82992858886718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.28742728434753828470950476373460937230032048651940555648949326006453882895637418882283825736228591181830700026820424453917638544173629674644723558264007129307065859795981033520492449956951693686957120036443188702573162473328012082936878647736488091582498164371505160579680594612610246164757992856923720952956388260560404273989795199596507365335656143579362306826603961790464250912402365212438307219440061856805177242373633455799268254384021758889527365496892631661843137744874008746911337847621644182e+95), SC_(2.18998229708218472573221124383337319575285443959933652214730444555778968544528871363492835295996330510778846644463129525381504046406834553254285787162473540821992287327195138826382561913503202031608620913208487263375221420207779131355930504270217809136342782183648485925931369193382673398755606007846749454319400029536613121756413080896375333067702367554833212950148397289927961931522491545519692572197670162034618763874158341068695781524700037151022285783627122033713599144787290106762266119419035844e+02) },
+ { SC_(6.86930847167968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.78194524198764253935293924685960457304186507685341002124795160098720397877248055084547074129421459978314217860635897835210742481364957032335321817600502372035091090721049627357295736936985016617932355533307724475488403022170372901012537447057064407222750371792229474898811793803655895384557679919461705505238331617192249427768904744203739044846861797803931051857381486653754869112682629123778313994659394748686240728046366514815648010511692752805050983119394324243019276569152142835273111131600739305e+95), SC_(2.20659847804083906384907051514872082061230620414541674044042921288843119583551298204632257060496765706867059434541256865718056715357766042999851689620781307975502879660162551314304874688575088583418644818982822427963726538178844288967778976291078192323861012077958372167260468411242670517406288263354005147124463832622774308429881070899793057196386309054065644897572808994660335187044558707052835530972888952967277974508071086506597317741709813213979340438569164933284793186907303388894211408854792992e+02) },
+ { SC_(6.90468139648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.02274133511019485583988469899204776980456774056684066672286969620453688307444228491814508991434754830000820409365066402249512140453233753077127934740479709875672706144369331562365000549295378072233131975358641001193506696992584528857667157933091543789086178697447848031835456706532575059842492635758962253361643070511799598205228352711927090751127148286879531092647429814165348528175265811953037424595680858019938674670963305706080467545069331967872512258184827331019538116894453702243713920673210901e+96), SC_(2.22154333073937963309284270464451305415567713356183916996809028250224446324976629918561880255034594588139465610035548638444479892335980626915207148799415948364392093782126809151718720827813726904213047270727073845012006511768403305403791771252433182022505470552892587913386905125799070732624224012150635775743017726040000023583318144128558407083977660335631622322836590245813033509831928838790173778685268563388558828899739378886330796996037861831987696663717952401004216895270706364036468781635421504e+02) },
+ { SC_(6.91464538574218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.60649260710529772233473137984105410544232054261726481804901382352456603736791207353288895878692489945797454994320261720519981568199528074068243600307457024299096270656939240358519093216643966960316998852658905467409459743025668321894542307141623557025880996958371404487147215287026431391504473435758388440094311393508369867761317353700422529638292656142883895250773165627587110507038824743522069804645711709312079958726863572820726828956578534635459474570140307017716422854786215483659376104193538697e+96), SC_(2.22575635672110695115918590577182031381966802318930949156616309616868514484270689147444392774966118458931416771691192119217283518753777221963892104377362200368507925400050176951613839266277524613349776088293713738939903474184705526304759499313018568067983097681361651924611784414420788881822624226463125441429517020372283342751973503754599128184144820600535877488980638508126185420353735890080633115417401716461134997981796942552310592995641498450430406389193343801815830115905801596467675090472416441e+02) },
+ { SC_(7.04339599609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.07955168370258431501067303765307041042253511749662108499654172995195919890728621572472265604548157874425594951154488292915690876822306705540706807497155520368115695313979997540753080862207102914364114167949746652315616647011583985106051436261150572485947960668686207997789998067343052714998635702824843686520461266899198993863582597484559559022194974388735364402673541227979847184402063848834687319523585326114498450674922707083475386513114793967781049780967212396264967735570494025081299191102600215e+99), SC_(2.28032470053682814150909693659939401086917190673111549985833216202733442036570175244345294263137322389334082412883205915850819372371153905224137138568851070681942685426002412704795068433740533335020313801587357225658388021327925840302498743460913140248750979805432142282679056431020456697874356644535352384674096157999420250192127556344582057179264673020098873791204751289807990176010774686471374333310634428685169600262753904165502175379975971287196138991380181729373176666849173285889871685443192502e+02) },
+ { SC_(7.11850585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.63350639773014098330391986843573998095148344846438639704280326830561525054532992266151394782624557657729556558678640210625187841674630182373257217648180868976835851508169037646737210618405346034928397410814234450897871401906937806043520003563445652706752649218899032858007417374978845485122177335751403563652773554947671601689033491144144324684814326258879173333280476762089154236210635460147379080147574135092948768026951044779584253185730061594787890924261378815328110413923272130365565592245349050e+100), SC_(2.31226825488706942320221372209052759874582593881790219288020218185543021092397231928378819282290633396851269467760376214835813537601586809929350368068369106408868208462608101592366234623994189052700749994189050838419131640345688000684932907809888196801722858616196932788075245301007454503206331714091483786519540760772557945245114058781412186499228946577913932289437780929138851984933005344343339761935519213236709763065510382791519155409439843482777059517548135082900878411139308805363383410085533831e+02) },
+ { SC_(7.18507385253906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.49732330886114956729903492967231099120981689988470614601064338672708151166612212409693570573697532552453303336069988141982860111367711698182206854590245467087429086510932930642838004332475148547653465131896243811450945687151783960665902929229554392946636288454705065990897116487932510488896425121635005727457531756737839020028190140709062395495772982206742132290104264959510934652975963427615519539426105392687228317301810268033563861263131522138185870575767315052749438067728273033861538427160068365e+101), SC_(2.34064576791946060896313606119182488082566529844459748960355933124315417775876694818169147442870367658128072602308015711339409451957631318365734395020638352073825545811417527613101240287387166495001733714730462773451775603992969559210417622967701828034603900976804223721336845723876182097307746315092522887814477094532177768451945462296621415438098797333009453107985658002443597004122700883763626112244440083086420053250212325853266731701488423921240429786666074904542048428895402985062775020780609270e+02) },
+ { SC_(7.19748229980468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.63799471891136424534781581037881734270209689591691691081570741626642848063715581515463925408287199445978593847300138730779433961633501177058550310117564525664058272076855042491774645034794591212729305598946520940175098602170881847040428529672184500046688023767346931914653501159766628184918989164050591313897018136001253593550610968679908774841461364253808215884587220575731471838139199944268527092762417993923355816335944505951209359016119144117907046251862182229203833394494471672149610892614669429e+101), SC_(2.34594229489778730713395183268481268533313625049321103875300316143286582678917655079164628572296479114156318367073710880351321060647563247630502264645451992444023031952017156904306798526134821751416899017432876584158140320330851463120804059509775078069199431076511808513669124909294314859261410937564808861779079999863781431595903854446961976571791779814964065183234651321058423766174913297352318301976488510550472104180145775350394475463204546994493226096306737923551596471864643784269614031627401875e+02) },
+ { SC_(7.19857482910156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.00270707801080667284049137931007921397071295858533190749182181674533881049617386936830453405939377809182267841513942539726511171736762460427803321822929563423006253553551302220529378391240077466565459187851544672111764831101397708541056852997129266454471645598874823171404589319991748783062461420243374104014114054229392406314737220859305688382677447311497957896298449260797868887844371397774886361677480978196153679381787665490340524747298068806251709718124920062314551977212941639835784458709791310e+101), SC_(2.34640874261590593094127152924672401647639982404939559186941475505215425504035334920198363939078389457481819167880046593190391024230612216202981537917474010637750415091165615994957577277305363583060006173286690346793212661694349941719407081780582350194583204552812083593148042583454042845941903084773893307192833332140901636375439025610597818798045159225257684627844390762342071267673003184928742894850480752496758083244850624302604526313698595834705671677315868214301011365215142174377762024987919291e+02) },
+ { SC_(7.20227661132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.37303805465152212002933833481069295182808010592267121190344032897885570445603922324812010280450755478774902585298695970671508035354187420144033783169240640838653864920083997632382117139666203979520402870913656694719573287280930814348789662709159554341652970995619762734437041159008417774513513575175997159826455311393615474032080189567347307824752893439818807444114127616338517289998206205732345037054157126317153754271771112658168316678156292870405480742977954214021160941019096116246926351436978164e+101), SC_(2.34798931668183689489811003714947822248687075416433892703360967951861728101603554652920009368534958567518413137244607063745355575358759569756280248655040957334433376108428711420069724040151198409411134694564740958346393856536904924842105919713613062181164174088917032677415822388455660178097338717105926628433933783419222660487149698654081950085336262631094590672129121860761900722620760385227790497260852982842757021734835281954304352709204338967635475836677001274419319261528043022078402221616872309e+02) },
+ { SC_(7.25073852539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.43520106836729084085778956456263007366457610660211308356804607795903604205903006861626940571616758431188483708705112541065913612170982868979138374222057745044530838311693207402258346596133020939130766196380325691152564593723037668386878730891740735487495367730021135561331968282946393311387564533951038834032038906087160256673685147382181654337851041727860353702694472391018833498621069942838095743280549222839978177874201310102654927981792274736107415722890492564295715073245406504748411010278457116e+102), SC_(2.36869905108431683936809799701037213902840132962445950159087863767151392537365457829088012233860101415133446664625069179705407273558177815837911402413725567621227251553290403977011004098283213060126615067528770905043526027425714284293642772945512987034649149749940987987282066153578004652877777069205069806361585955091537122404255644671900305284645385248418831413253227335874194856373739115256548574919845614247054282038560824065753222632104305482406642615557915998379231124924466235671891452085471228e+02) },
+ { SC_(7.30574951171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.83368904948692821415701462368046695202486612714101765523339198368422240427056106672521727020788297278838134755029853525826240430171775696905992365128734083532239559070717069572014894326939860499578167798833295684570854229896751700580561265945686503512548554188728825057363206984887300823450384333435198218629970990833645722377925579365942064093032376859696969471250241177602826353281251607669250065823723888615059026741805474782258611176825211988273205012026413517684390964185594288523589770185452205e+103), SC_(2.39224698120410479538322942693900100750302371932518498513970196809717285652555406363425567070534620185762039330299531580293666524672539016689119664898814223622248034618742951717581421540067495872362627125366893309516167623038435271704408134175732192131341050335394507347567907240217514740760674515613232222441102582815234411374214121906829085760029636754767176893524536921973066034719634005122069259187062974845953794788953499793268622745250139533192406234834053053126593008530180248729385294424110576e+02) },
+ { SC_(7.32414855957031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.72351873906468427927434749243813946718492824644298051464033227651267721874131369030686360453838674597281399653454392712519996838482097315107046317757791590222027589172411232504621489664643848650270625328529794090865340207075554086734771760739189005347247497561092355456867147799893035155774929656399042984297099726370028645869467397024372525417150906070220931522239593143561251296312656675039260494381956881118249845133633386942844663451695203906956726307735499310146186355391329884667423153322820283e+104), SC_(2.40013217650976835621157835233793262249556249983525975778051994370838624089108870584615523205800434868396676458119595830101103363230974997475748135773578471342878612674199773452945355873782988600437154233324008409519071732216320083908700784750442896633871090689414559645936711466290041943618756257745187631302129212076472621111660377092879798381611049325838760290122015763532662852607044508731411589596965193851766890674323066780737296733477691014068044838476213088598919241840640959953310417958070890e+02) },
+ { SC_(7.43542785644531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.05057539261721842528885509969765973447368871778403642251340693683832762582599686981915475758777749628249363962669620141299715335451343165630801212919842103593909541427972819750900099159556082957831589787429058178547275551230067634268190277872910180466774262088408710522934303590920264498295736830153661283971355721388880579406568443053300160496066408381694585894458038897108824998578614767961733859040676188324483688946286431897634148725088944123683570990210525326213482732816270511822193032938057778e+106), SC_(2.44792140290461559015608660191683906647538337402235360992803950058276397205841643970107666957090600251577902918891601081931217556177441460385443330358798306259795876776818599203615425018561219763807467394039107536233629358829593264171294184649424927776279069503493001556067798490179396110412631967842755164760965853830835968513373138323962196968498642464328928626116147386543025368199899990416183041916861269940388736111702241880139889967663889428674332508520198705205469187793144595358628515304034126e+02) },
+ { SC_(7.53251342773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.34450173886605871850746175647689853845137789653006693475073046311373226224027841491530308732711009686586842056304257354013893945718172394735140639993167627210518718411216631690896419969571876344561671600388880830098642765589735803154418308628711332909033149022575200265268797452406626511994213601291123000753123661105766161403857816977935150857042024764226795181284878290595587741079595041602434781314700349706197292957258354683643495630988675216599917063436026736324763554545773796709916187725651109e+108), SC_(2.48975213533400885587637691407121384810544183192148335858861452453468279767415393776527155273533576836354512459448312350622908135443050111088976233097955451277405326746182472346034496114600748614371719947507542546467300701612516141702635968086610245143035634860001899594688878405584897710701059457452625844410950210744613604800040262747640680619205824048405143301800770844766969588318895622046783778912109087656103522244258726909926657151419246134983372663728981134772950698713692886267202772290239989e+02) },
+ { SC_(7.58867797851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.52064099241120839241553555175065154800825782614604145472044725679618326874368100714829996224430528944422099953301775491447673521847023758692869380818929370072753340828440188353412171234222451046111156082148590337005097363676186470812736096355739264956973599076774002187509871114514244238270432371453933456401086514329982789654412301889250531378151629276080470889528069665845043022094265532108347096706819057706648218300430313387835745459242829301745686486046199414046908590639218083263199743197595955e+109), SC_(2.51400907087850065913573947414625032904671121383447551970348482268163455985642835731430617808248297652550140604113191015187375045974571150714301822493699595430322794110657302437321260873980014851953656343264038486498436740894972501820645365798347590337834137982813027441633538926570243517443985279225897432905162521435549176598139109497346323391120019990290150009034934628687017185188831652277517092336899156528663579733300039421610455619418045056887614965483270716367739725999067896145673923299273256e+02) },
+ { SC_(7.62846374511718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.49922614094816158687439961093661481037234810702887805516931122154637493554212818932955073139417858865556442362239274940666473504207297806766385685660179254296756645324382472145132719416670933652209264214351147717858113551215145625224552303504637643220376444209573042722311431724120473342395806440765185717702904512609122454950044602469120536144869356135738716318579159461251534764894261031872874364617223515229921670219532040826309832424582619620031545239192210739605925994909956967596442929984888754e+109), SC_(2.53121750253461261157926165483338259506280329295050669213959805473005613085786853264918544920351424774759224890919503206082158569005711201804286932818636123198065034824258540195752455187274769227201462726202428280344798809973069251017733585289389080574191285152182058016757534913424799037881047219705041395775580668115715995698157561159537648352763988254360776036505973177141699047221833125099631699656501946106828699155634763374572586547346355388965816585722422683987931689969984006767292244890365688e+02) },
+ { SC_(7.65285339355468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.44328233143715865979067125362218230750511545691741833774669401675093822089298916821946021749252994666055618327326639446756594002322692098327061303976382405175725973297465838679821381012919266387290046952061939154345453911454165050224113452847446481526177049450322842349725029204286296504235394215207283967407565742687133377051738810399251865021358404288107379562055972010855458043773100181817459739385583448879867365058483501289268058848398485010733777363308695038824615742826196288630982490737619083e+110), SC_(2.54177702582457404872599490166618690101396619429694510433333174582246355837919426933697108445480960272390662026845326249949216372762237888604462531876530331763138586218132408418266282112006133279665782434076767039342072318958799692295680538293762592852051844924349525576494678256521832924987145984682152496544478562763167898941483491938838964834902734326521933830878319015435622053505214202281673655648142102864872210356314882899338205344297510694121925220450582814976347866533520588982742320766439488e+02) },
+ { SC_(7.72524719238281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.63869307336051372959408243660312533363160373438260403644142677514038035500017680411528973659763860595946543595355948939034470985819043891159099267948201467366660281597652900701211516596330385863199386254721860339020957922080099766864203598309704547571894873772947649942164988823440922198664615400569707361018370742266695047806428050897559497924940067587680446013069045998943685434113022629105921541439968982931122191532865303630945552174649927475106238161562965905486263818811438986496825513637014581e+111), SC_(2.57316597636415280125839885539832422327028384008465105290539607418833102861464491225192479961609800598603388977003020277656192421494339452190729124101492463431890165256699199041374479756510159928563896369245691749784052847992085392738924762063155623268080207335467141395162714018568674082778047127838097779641551291941776339847523209381716124106191078166858784799123524766863312212028306342532526489067229074022676360465811189965473674708416255220146449182899327412136084950163226199948137452893680442e+02) },
+ { SC_(7.74194030761718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.16396089613489472016995377678658380446923473961245920062030532600259290874052185870763071323324256479433026727236377805170595562642403572323515509706405293503612638534638124581548346108886569907276507031504079347672665740771712883539118519211205906850696296862664443174013717675289484573935053571684852228068285897882661720487640714252756969472629393320568755609971119607547454193719554772166309047227968669585212681948658637840249673648359931543555176934236488679101517981820203875534938182054528036e+112), SC_(2.58041359169692229394146470361757102165171481664924088601840051965221160090493629861255364611644912107425923030168859131035219386259396531102485379780552486978801953153190487248001969894813943359995888684168354367524976902645748180465727249368626912195861924811960911588788400035921242866085423934141173065042123358071932446406617142131624614833689962894262245461566888105904778058762073759481272262928070662967439223048222714778709958246110214128080579870289345281284344445624208510454423495356501333e+02) },
+ { SC_(7.74887695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.57318503556727811778535046198574625914763729721329800188881059948624355392224696914387989746465413861123970505464968181390903309008515740780910945865981792858625294044088283319093981345833143509860817185609094808435220499094014905467770825885351007714244936734979151217533584392146957401656086507563928928175770816739721410291117377012227173693774106159236840499739132409784400495436998690624432116376101102365629523652827118641421933684786146996920727761397639054842551147160965304785710365897347221e+112), SC_(2.58342632664765299479261435032591639897367252976699088770326519539616458751460436198267419198929221817391439292446653099231773357359378953909093696958925732441991326719007853975630750664600116022789643028746413824014096475355722522052341236795413172551448202780306300398706230667980974479833198735645461251771059269197235819448033765448433853896655518402335711421785716185757300432929144147828841660031749371859857434653339192478951210484668250481047873215582224562308994807088571889566499812208579266e+02) },
+ { SC_(7.79611206054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.22592881794156458446052462717595126536262539090658937723483697079416119671002260444795643872522105776563001197318927781078731229717855149387116040683142410400288660857353459094132627642437287400100131928719033799002443287445543810490300646052632335621698671153552243167639303608865981129351233813614118131149101613467461610042458138597058419807568525249250630798103454408426222503790875152936389126191608008771920051555513329641652288754274772662938190006918185060994323146861705058362696710330744166e+113), SC_(2.60395814283749057130079935554277584867813599877917620661240914444376387406811844822383436557177931094472429008274043483007263670532295108521433652222694381426330087436463972983665698624623201467334190235491047796740683233227534777329571432018271488637975693352766700581687049143464728836443474208841916151709004417302089301594887700875721776638799017258725766477572363416260427171722136077719566612571650358218332597734123984669843135210714237285262719294895510682502823915696104275394521940544919085e+02) },
+ { SC_(7.86635131835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.61050567305592220456152565164230942148564845008876468783079125218738568867109739531648027886908405561920936404327008113338837668823045462401416814664853080167844534284333759220396595413078747532795418553321714788783912512656022776146260949338158924577520045933863185993029648129748796563225259082682813710331126899403283474477532377595464796028358150441834390887390602333872930828230106771171894718510083301238439996675425133564310770982602045974376029057672235890376329572299897207660789102547476188e+114), SC_(2.63454244548355645406557573404138621150450803835148763287902126807962988944888186782690423821551077565964473228346552243343425023594359629932950671821996960194806057329125965993803317853525313585118175847049038259803134572085080825944549279422931339045215986274550237455342692737666976538056517491589701667225209690441329079917551451728242728647018956436123513148819620671153439928606916027213268680772701127633453892183849889751158464692401042242515527605717337698362059975173305670741190034582345513e+02) },
+ { SC_(7.87446594238281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.71837624022682653050662525112014758816867875003265131847902688055964642517176593117496287671116136563264491789852708222849348640239441380785771635209017580907263863687289741192677847138949151131649311369876561874912704943331918988855886232533705013511310935868278254710745534548689545057888076936160205888610699783645733278440630405505887873943782027122090065276384500599678106888523954477191375611451517934837045651078621522364579858561084030976295747171725697367071221913449939276734367948915626281e+114), SC_(2.63807987679752100016175435094436543969868151920491747261488057556253844905264224201473242499982049961008046751556044728136159727267854644919940576112165419414802234138378185979596500527688970168541730602570167372809159118442057938651283236319820022026854148490814115502143927520204879728916437074242250572621439294603499695241505072139606003819854900195753589328738735320410047165217770312930492650858332385736701370183913635591828104119352224598698412801595961685080520596865151065157552096804467251e+02) },
+ { SC_(7.88913879394531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(7.05078178357726410474499063325837303106920910137103134019210104418158882633130228551893986765522818663440917130327860147833061843615538131479644991925275085115368694397206296587077791582003608613030789955656819980122303298903900251318009299018370819489337668916736108240082513671186640654973589456517440546988704885759583400584082572413524186749008182054736492250396198262161257003088599222961663885218760682149801289472257557104489823675144839902973674850172712268025619505445748264626498551225801131e+114), SC_(2.64447839103284956128235684594872838722673490951947089399274815716094892209302547464293885712494797370283683422781177442364743783116820914043603349899664703253477540140367138878150328404445864988238511331734092922313868756906609435883645125621324352909387547291631944141820483150765666108068429269928198949363614471852366168035632259245468001541921511923247124519423964486485058911434025471884809396247264243909679683975547281199015891927901064232110010913948020149398704248939970397857783512416201869e+02) },
+ { SC_(7.91408691406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.09408630889928784995366101034741320822207279834027238270453249877880584352669825603178562703284706934951631129471239102447693830793569725967938487137562041240629518418460157493730099318010606043518294809161339258419997179007349381751297235189597986225603736673752801175758389468868908522525458882947950545150550030322078819854648909136701639378272181333812445555534256765672912080535194117216902242324000109327520303102170890466509052343854202275380426325647730946059107590555586681253687814620983684e+115), SC_(2.65536403023153584181009366509944939933636512249483928265309684189563613494760548624391320929669336631354799737976611608913222008521274835382161622182309975779259029765302144876959170847767080160732361049556841935864400648818702093248178882045296280850512931678721234983400481397860250228997304157007006352976939819877862820296819278998885809808276622234696039204137254724104197213765964626523801038106954428152996443899583239076910904674512885475994700472760824262723489540535051774095749851263249929e+02) },
+ { SC_(7.97761840820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.36079199634029091076938651799381162227395151854994589288343070392917661651832778942033252044086374956158961748049622438314469763959461683034382310349408060154074518497763738460082990990829647834192310943330698134017546905950238846166131473096056251978957157805264833546417571995706041453604675019148879806136858368888755272252525296383236157048398929667609392513772845625191397222628185041916430700732817309729016015053983279819231463094079090001106112163736903059352653651668590397732314816765520047e+116), SC_(2.68312047446704936551201646268308565989055995669224270332238971177523275624114106350924550827954832893926360128561841213655745069215375268280053327774384246966880049772271110277211800705320934862873007557937526250918855419370827771874390100701496371022372316379233768522789505608766708182727707608743777576965999789704312554625387227826464806494002725220159991665546408752810364171404216636162283932101127607340416316313963340855647610740487718780190284536361353566264092648153963919226671135448911486e+02) },
+ { SC_(8.18258972167968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.69497801715505291341823944466394478653573226015069840233760301344112615036232003853340643491253897084350091966138150705300215882019420164546028377252930702792521589338261508474246880627609446162999468530730121238092726471747329156922095797928479805876451237606446524587852029517769329801343279088501888513954275307497747337763865806806406346467581445157182819019726753590749164267109489952242163494169562783305480340836442791424720704311125592005637989205351675021345658628837029739353259846801475693e+120), SC_(2.77301601206713380033617693878153786830344875545259297416229835015583825907512523049571737167755512875924722446676821999765409491382152022874842176237305706792335228881488212118956848611402510374718226442209228435834294021556287185295412732101171221125002257563707702688402289790980389117777811679193784649416884695842513310123040215065358413741319245326119322458004021327888264601330050922125827878039913706293920225934979437023174398406286148561214942428656926999902319051063278086461970390249047859e+02) },
+ { SC_(8.28075256347656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.03355259286154819704219551226654395906504099781980718189010222046388212585372158450768002121529565043941554076356321710498359531557447501064276145807321202398521366659833156357752972507906824738391654526335132932573107398337998291798297386653691663749579403316591054269038802812169004153547651014880281564220416404484856409392749834859784000416182037739572623416447024555101585323087262487565041454643160808490925993113405987429965247852197914385018523039216649953285606019240086795842095595940237530e+122), SC_(2.81625165654526077068925249924073121003016044311700871305387088866293803727317559314224290963119864575313632947917677680669519628303166226702784572771996712364168797470224812933324626509432447937204021470084030660427032168951011823872492136779555076262106191456052996396539130060062732303932743480718984452917269033526737946263143307278506852358007407585518712083349536526597660621880354083566603740686029120834703866962079788033455307212822174973485847830329491718286072881212539315054338676887614104e+02) },
+ { SC_(8.30768737792968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.67371114734752908061547616501953362888754075123545344701696519965806930080461201134144351921409889131577000496545476418900593918789113203113291903553623430829522236655918744889767943693226589545898620418956144487819505119387848652166385429031636818347206755380790194158017299123963514719805333452005960947638713859594934023751184336332845824811763594963561199189413088144447828985884611507816281472365035371107039655044344477957681971573509626723153289201570272369616087170053842773571123732195148399e+122), SC_(2.82813557444376584828434965542575667785580707101066679231071503820665911776936151156471394971750487716282814977361877634271653128160695426275036808696002806135071055891547537428728895767109593217204318330470768065883592419876896552206699595320213856775213385864681977009237639675750081260230142974936055389669776620023794558780124186887105662746744143136387863932791251282696227816499996110649743686550043725473956807326664285881088122662448072069170162126507907097586775108499996228535395664775430721e+02) },
+ { SC_(8.35494689941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.38087594810824007172317526482395395315515281973323750835943287918036441101522146181320950280907005936536644869459515895630947568893861360978438970984364099029399610364983195697978184477779906525913175411730400106972861856794282812899887472785589696827140820546454454254452546653559671707908916494776611762380091135585066103947092509652659548063168677267386196413563849419530138316458816291678031326659324148655637781459343823674365831836666507888399565257748869028221680258772558892324258985830216952e+123), SC_(2.84900817614821787311354013125196922305347499212422605892549254341126665527540833720877092440986522108374379472367009353725288890020954841214326197685621378601816567939788801160808539787411925765444721012192661714680396001381835054468656070642240272057212425534769467099305112437120256925562311398588675210896965199313735364857636659712200395328346833022585102465227465597221999247665850846990320554146744067996563763776745474329124355234423352968479337161445353341784178484608139997913928508370571956e+02) },
+ { SC_(8.44881896972656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.42666833057029522002844137163176487295236913142915957746565021804551354855453463093087070413348894685610837082261892298754492817349750668766296094888752650865034632398047114223732322099618094063966849276886337772747081947435890554455490878510521949227307238529178533803221256978213585297126604921130732879198880933145677343705812949585481044421555113226040199998463630234148442473768452479439746175913886297512229427251823762336285728638121354786435192375488215264066783455853500502632517317397191379e+125), SC_(2.89054725081189490845947420649741511146685538739793217547650555624606175297303059819056692884372884078386830075996318731414936158025276846982001943699867169461703458538011827884171588294993801700915253891568635380810721968776398838118775237059164552862557622592417261801286604016100245025050781126892995385023634381604544996542145189076944911500566104957354877363628943389158576238909259399367640949833599148363947749091718337785962555954463897388654227267906460510958277041230544448075498023250718775e+02) },
+ { SC_(8.48019714355468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.37692934320932297620981374050517322995928364822370056283231561336179289500921370929456719470695055723488408828524737123108775932839056147022184960787602221185341428119369781671947613160459178511396173156859877483907121901485026718017763578420717931798182513542147552062432522848865118538541035507673594516917038643758164417956892842566318015890871496409662436465557092347656329424195954333344196368227152968549834610314913943949187093924403634495721405296173700996916826333049876082586793987975639900e+126), SC_(2.90445577623558718471247339061488213888242311002481185557085466364156718241788153628570698399972521875326124272416540356360973483982924299495472732527445855579350412985885474284574788179173000292494530174623026334523333562459396879146333235990015088570248419292901518441428883606347370774550166714396697556794729204594146604214365196382675843836228991246510493222815148738810134784398272967005152613250351795609342442400866153886535045246197053653739010937545045557089427320285807941370008488299231342e+02) },
+ { SC_(8.57517089843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.33832909826857639512345469794224629431863744746205019570713593413174355413681840734251323662261286343037475743371405368380106210626282544364717088243965802133669782776732738382008496885261218884763219382809969095376871715586408966585332510293058737930813384640468837357162158315784553713430950671671887901645968817163396711406670251520106298690149906371213473021604786054149922929270903602716062423311090876450852576785572572036859023487557696205357013047761812845708272800521434743464252230061623459e+127), SC_(2.94662434149078852864533044683430890751857634692011865421239447493723034471975719502158478358928569225693134671590721633683310220971342015064124134366039686660903743149425635581599837403308236420466274409421883921364526784964902879126070829463180730626981694996688156372167631098166484804873769772557801740883044257753022047460509209568607086637282554678558212689974540373894216164095727717722436815597302622187007814732051809764574347873019922123648322650228948344186602466898431539586997877758835265e+02) },
+ { SC_(8.63414916992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.28780442416473245220993417125843211443922827947715176026304195790252522756485988254317574050560830931766655835187600384518616359693792782766315376195334660370712947697015509483345560675594842551719958111070071113346033949776784099516445593701873985922858303738123261934902146229686136604642874942111538415537933528926963380513072791644764824044448102957590604260889847887609094258686316384912242648224998422816568196552377009590433850216097442453499745344913667602947562258887692660118963302873576680e+129), SC_(2.97286415767791898783137273348885728560402374821784965819753791581931702220185036139846739534002423747332846154884200311239613175043647820938132227917299223856302828493526636466913336383317225296782608199960652994652737854245932777169314282737031524304643218872099503414611159163700671360099767073557121674554179784953493763081417956047400998059429146915818627056653259309380153196074968434469066936204442302320347293458731802718060055214439848310727105052057577070572283537251105403348908202350818273e+02) },
+ { SC_(8.88962402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.16497091538634954176808558126734139383737220151002586863764390216608325311354224623945807833387024682881726665479459285049470005141090454361104648074463928899349832949354678335633489379248100907353042144547088922659153696935259491401491453935889921332339646024077803179260980585115144981597236105432685913954327379590905087313647429348781575292997793558631588353170474662811666116917800187536083681419094153230087707754630865253287717124464223227710268458962380191485579036954798227359751349462251363e+134), SC_(3.08699098582574540874901131606444829079827093151742779994254570119225093746828470772591943962894899861194077510256353570911176148460678141159128649251499460366252572667406638613671771548486374251674647935746903854762624451710412919721911034042884515928480795510065676168065676205440554995458081789247569791487484423535353436040389054764355826862135210266509691969507902762609484577337926933364517673031481416783636479784014250799567230708999670147781779276540235164766801425268672586312525495522925408e+02) },
+ { SC_(8.90027465820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.87780606828579839682486297865207414473915059257037797744519875719664626455476718573609744117214029167978785142314872357628234581222424935700531114713879884267432418261610741511776815059877815129756317302341224239276034805977343452323347378456909427278334973253635538590224095981120699481587755946030574521394259861658122318014234956945530178081130491793013572104343521414300728519011590257888824694899803503988988012904865970868166408394593025635261987537708676505790837434031472486324842830042702493e+134), SC_(3.09176506571632456661296387169922633668592672051072655211196652994040766909440003566891242532352089213045883882170560833941457377382708950526763313018699118120380453698053681452767025054914992997126231495133852442181265968658060914464272207315249192819183080634684126063465876851228795083042228478530126646865482437930517430804028064010426712428251729707819686528889880916047040445248119995350317206960036438745949753331377517382844268845949439741976689581628956251067901790913220675968694083673487767e+02) },
+ { SC_(8.91088256835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.02141237770653771296145159020408881160989590419650870839398196043333840252005325735288677966280345378465299219993301159178503922963933204046292361573954097969187224839371905345548563192140105220315764875768864854417184036541687412890821354212141753891135605827639941760913661912426915299535839242021655832752433343294076763148034591512931393116354813721135709720774782626096642546416987266526920210682051827938993518486923365371794879517158653786326361967520012063105962048816773936536423552751777116e+134), SC_(3.09652126858000418732466228930005261043074491779209335334289775565968084841448943907137967412878070307660884256018325421477534987598584720609289107279261354419541514929763582754168792144055368288970235585293488977201112044387382737255177692549721807160464339051691282827080114501542353004889999789051718622994246873560334278221827736435746212582206773547578069546225067846456243190088267218770093127288806348372196341589640382469134243923012237046136953985881262427736754212363159539850461019015212532e+02) },
+ { SC_(8.99494934082031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.31558655781768041503471804823072857551660987893193771300923694866722085437810174718689818184686160543355659918836573435131789037101312727466050676295123393694959558094041971618998566373464656975432193808552085084233941827245486553707076687396813195185672678723677125523966734627106140802401897221851259098606091358250676198000082721515457318154554511901375574094053788420170179929670798848962491431604495643329405322390907180789283893100597844735061218202734895598115127593661000761748877366559387127e+136), SC_(3.13425855264940891377739322679679701437736153823573638382405842870462047253093505527290921595414702562601048150543646554826489940007848079633436803489842171709369467138537164298268952136979863927342727600551602860705692198456751414362549778693316384937321572839532158459656954184100209595837489019219748987079473338463489774192604391414722484649705407731580135667950294425840948003237663213903701146822180319710147233578390478895236810346201770445751100986412992634424999142036287829615247919394118871e+02) },
+ { SC_(9.03739013671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.86792769846398073158588185409127746786518317702712458255738775476500152684870175695995359303076769136193610241864674205406202900267195798945109864942852055462148552705513394540607224575512328698207619061607005694145838607754787666580012469862576573548961202438961423960092870203630962408071476306928156592084871044853220452396635064991834653131047835418341620932617272679036446479227435435487997430981426228453395058498001575602632012466601760224395255128828602403730169970645524832506460262769922979e+136), SC_(3.15334013785828495349532035339943156665607307939960487381337115090498107824790216760180318686253963749203757541456225918165272299768010575932572807072640852990782052206587049806078170264820194544725219973399085424751859003502907821494476427727808358908168867699978266761176417875691596682525237264639469902785748762642384210586356867116426877838848316248603954248921190243183633654720939266664415838936601913936386430973862064257478465914198609972828748670649934640702939726267333018813626726609454334e+02) },
+ { SC_(9.05481872558593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.94261458224695981141369098133253703867790026761588476125416975351640813358316898519254837574567249935885699486051633712064078624593548009810348066141179943221841646706583752101191904588544454608775434416781644692544877023766579040440447322187741464563615930635828169727556640003402245628046314192028796512950830086356489427205097330722518479146042424090370497276188164843129478617752147158051725479824441211533437609225251604421732365835604215593256934779460210667503156419375982154179739862634423949e+137), SC_(3.16118192528703981418400552726276675687759179303740395416722020128790101184582971472358963500259877654665311620677333946329822781359101955682422429096092123907256975382594705860667116490690402904172004096156672614298752088275735696742123448129137473162400015036946095606068303962089583623495361335018595347294184045421628733381025142172965399120167601720209789608587228023512855514598980256349740228973876344585607589419418869879867146874889122744202917627670004193351717048152115460737505822893451488e+02) },
+ { SC_(9.05739135742187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.18107069766063532419245836536254822108034581886312685487124135068440298730035208900320969514016652201174178281679735598938523996065020947571579893563292108033119930166754761376804960651592977130363219599641365682045191400497026766381310222652009526402992027295622685573221910910908248077633982927941624925049581407580258434709382788105487147587609374487313222064190424559820002903700012636149088840939067057770871300337937992979322966291480522183800733167189183718550962254058813914237328281314202052e+137), SC_(3.16233973642128564520032932606887103522789825214982046617415401063507803185459982755439000054699836581126390400649617259579813321911330312947020882712562563725983604870138861006695865498089759121565000116233173255402040196144186341206231273407839332614281226634929116514836134924973870494418933399410938288447188299481752862253218523748103363577520034339390698612761924972864249573829620361774154178407493269703532971305225768634929351668515230243975361330413576077265666511139203265571070996965851636e+02) },
+ { SC_(9.10841674804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.17089665501277517595551491907229733926969412013051104729239208322727072951318423453332457345488055048181460539263686198330703061316372319516650492049625291376040683681859758067121828379387721946617331150152729752363611541139910838851623342515366957959364633894875643012137605026777313017475728823654503490417214077721204466781411604783313610050551137130977111588650236412541939649005511178465633299085498656850775152481958684817849474595139738505147201917724867003003701827781673310025120058637152956e+138), SC_(3.18531883120459976548615729866147634441190179578312525476830885292496876482788328492878473418831237059363988430585051185057339592951272144907044357413502988207447267137688625110010071322221525949923071671571521613355840749305089157474748077261678948397440128206643598140207611964328691008191083631508868839672114731744050729909748981781227060098849159297799612737529871671234603519914901020813641140606586765729072334713248648594326501502908462297493397490043102876133795816567896205915324748575115571e+02) },
+ { SC_(9.19048461914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.79755081545306548897379109253071423186894482112400872086145886986301975112745218201844640998153519427596175551962716792273867553295516510225315832502296282361571218587929498644543442644312445406818903988138895185284535095750031741193379456797538008865996889750152568147035918802977319367400899386928293301143849614536172256980163098556365135714921713860881948901793786823981460641176103634977234216076900415820825203690705726681647558421218713699918815274959798235428109180875994004078087916625467814e+139), SC_(3.22233801292493518788961789947859975913990456514312793909579443126199933711446105694104239875773517016004540630259354820993243091605328124329481861339187196332689083458888308284212260237240115982648701006355037449090598696837120879199932468347397459713028503969084184990055184508401341459156444093429071507557479441617462602833480285640053902106974820979175129222432824161961256287329517440511054485890040359613179100497094890900276364013150370494988665992020244449985109624724713529242120122364979802e+02) },
+ { SC_(9.24501037597656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.03347783390537019995503033019530819608166604007801391222097581199482642919778844366630918624668009424402059764475017580151422700726983486117050232924614200359384516915589062855863077559206548341192274226656219242158437998625118666163882645225084170519891503827371743578722940996092006964596609494457061444809309058646513250847902584632763211007670082396148129094454199599918632675755285930859883816437928751984279199981070882010422759307631303773361004562273046166390504043129282537152418344467557623e+141), SC_(3.24697427764470095450376166774512991703359589712997497306649401762049000374460787679508683049679146954502998877961987740384542077388737473823517305509985484988988852971606345314782540584923480056377654521924933162777881870819776897530496276653082358832746433247021011492518676539713762283368975340564191433339902907305832447160388983172881179649272177993224057664902289075282221446020049342897769048937232289163945154508432948331388358608171238071308423485980105911638638134646435087810345033453672797e+02) },
+ { SC_(9.33306884765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.56163559742893659226156677177183415615362557335830459955572471558565744177992107156024207554426985471898717302110186717801009469009715785804467574873947614452021794699034537593022205783199218855623144954785172443541352762371963971841409175045103636744911478347262427818178642822885762821949102692844133467130594140191577058768672274241329692844448087302575749946551810836961763514438264081274705944074764712006006301467656628284155582794853442402993274559736949774514879090393937800669939634849563033e+142), SC_(3.28682975442356269450804361546353446775558843254411478792369728401699860762124529510889631897131000122723366460873209759442298321848552145472750755150492428806841202335903281774836748820357949322186462461903375376525398853696038655720302809519345764715214843086320812760448812504197113066581913369118760097607632595456891768624200303523556873732191738474213257464469403988760431942133234318675610849865273495733187891293036714164585971922539509751717274889473990366351481095742329281810895159417339621e+02) },
+ { SC_(9.33645019531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.48245884324047592693378940012945333450224979745418856720209654706125635837956144126715083688340791473619470518428425773625931818233663964590750262499718984011983220430791664799946794905019853484988855659840230414428119993282971449533827793399231610564785213519537138530461802152418285400472181357386639996800791299432222438897290106414967230361477963008007447474679993155355815915254632893949176310973043069033669159455455810718563262746816084461206604787296239673163384054824455148275830637858147254e+142), SC_(3.28836183094662658961822295032749628419239719474009490883816527053315609621861146311931264278595978531924168646428032586966673735242679386468446652243211829021720037890551818831158077264285655764818403466140136311676288139949369930226820606538721191579868075992233332789006736850437132990866630322260318207551070260162047052662890955378320735557477345776481703702937383899591318961756477131142376888760267646781910870095650790562725677733989920486927428741658028463119639185097971191832795958571835833e+02) },
+ { SC_(9.37523803710937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.76164954038386323004848445587140326469032220373101116257601133416814412241253225685672163730416426100328136156082409851178292149201362700314445578373394967833719655580153780818803583756322339540564203378453973785823049257208158246228542536868014844546805189024288766267804088495153116155120682173974014496007569213229677178097339807860316609301434481972104823908833512243616107207006116063922983558546779879018687190610539761069583007847793120863839934735950847161274713532225092934253594486397581064e+143), SC_(3.30594525866895214951026132241238206166748567400482469598494155136335192618897080105839026840244107305051632317221620706098034393801456511907262008379417555151588665957193894179579989115568231372256173550497100205568070991730712080877788193212107298668456562017219680363644744047830649103890523566400212254885609965053492863377463403703847255492463017184836005150386313379289484470683059285387441033310602739164348747481112900047334917463926166413763627950805183493664296256643963074213528516986813658e+02) },
+ { SC_(9.49651184082031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.27838376219628673891092217649851988126764531199798807890290146361590940654850007618702649147926834058003362655285112540263448950656129542206938036094550768131763615084015207813115690276604016966803189068013411593812003921954580658407034547403901581019210265845993202918334650153701246384864371215385225953893283458438032316950625126312477346200390326216764345368804641891671497909447055837014162347249478963586084879790434747521877671493340004289609780578035454590620777455870595392157389612690513392e+145), SC_(3.36102525852210065380668443735774423728976193524082620377015936174646576647285438027205142148854452790085614071836922050574459959922606454296862287333058234054022167631344911718426942450703981307806411492642746516468347897430961194466789112389689739809369673466374040976263657414475658834995507613956104273735496371594417968621857137691549510981454555469005437225190699728493247476272421470502012162453174746447750828983776995565113221375302876169954112170144356666613733946218896083396998695009273101e+02) },
+ { SC_(9.51298217773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.96276747437628698491352460237248259496626684260033707005763227822013370019653342953784232077884190935825645989227161077245116122136934263916315950449044355587721816388549231723743236650269459273141865777655737253552006965141733896779654501922543258025003406101463741888081684328231116460814692958214955556748851267533974424385873830973452925516089784761619003744572571487984030102240163421508616303159507022185205473070031936156375531911971248839059294360815564326009475981758577654219196924254459399e+146), SC_(3.36851779031193908419600146248383629080902012445957782412992132294243572482871977674538504582245516373175991422237922615903665006378579427226267142371150432986512873651136296108959675192147003010518105457487118640943905414430400970973972730175748276752276987821445691530315604382805329868168412943160512162305508314942942981982918029853896405837983025487559033043459552983592659151823279071396895171736819580860744170522245106128382142935325997632157072613927808553020391071460615875612817120823542627e+02) },
+ { SC_(9.56334838867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.94402294466322492664780789471509891684669808277558270060303082798925971886343113857358108473247312587626779535494118409642777698272855883690084352721186322850448584677396485622430792251796208253402039064690946506099908493726120068544064569965928247691033795776280422468396739129221727700957244652587298495565648741262404576582140864092814679846534962677104260968516280525640566429169570052768898388858777011908253884236193338240045360249963351810888908708660609692865672036587639611587752153131410988e+147), SC_(3.39144768178903611154576513932259822435828878296128644191483079168254033693838887927979397184673718377716882172257342546153685018920203286505133111508789747654771949404501595246222035849289436795912582662676925730885507190721625399973610161674490068558375641100068386604660001870298150423765325113018499943138123861909290369909868670216978062261723067381806756231309995941704325749243483157767001239482771598354837777258928962431942028548237854445433411661741077061012420226965779145908688609131798861e+02) },
+ { SC_(9.67532043457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.21169744956312399498639455549630793101638510523115256212991432826587137896748185274765824853263981717541314120462560959899030988978065056350270590964980759984318293166529560431663444907668943073203792179359574376805708445722562619888783394502001954316085106412385599888730885960997473921812491801513821448661862450289562198377543474727080955599661344303695664443585113003190765509666260094630216552777786839743320069847183523581786382266370119362625483879039637503342853952338493384883177979748473711e+149), SC_(3.44251978453975978374745800747879774189361811030869185021040420288142023108381585370203061162295491199587721359027345899087313215634137179026773935575206302599871850716081255115454383423425373728218234804045062121974725293497216937165192678316620041794496639914341221603981972746523105510386899410906294184355454380397370980325094540245905990712376814296156381253545591980294873930514771992888761841851391888241814358528503926333370744886324217933385419830722831133674613612592027573978330001465871304e+02) },
+ { SC_(9.74890441894531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(9.27748828991886412538309707599773754507919038322041847048360331703677164554558750140118371249999112923047856520365587882478092326144398321711017275204417078380790006163788219386093013952074269642134046771675198595738077908437389738569523335022286226393241408867469862637418254358817746652142034322749303696419920176808712593265277216991150957940883348509764711360229737460318908377251092199416863576246462746293745214357831877521522520574163902601228419374989812201640714432568431255668739712278198143e+150), SC_(3.47615354800856447336156742602043631636784276935754163017637226242831700077490633569878084429133081451727469860693462347186772127059315985769843439214265602676092826128277472706807516025993082209419921249964774447215026046195821260324775297102302720656604146624172947236747126720144586144965303896599606841641640538342158145882231977847454315344618666911069649256883623971626487922850619963697283794124504861737713804771202256891702804129038385908043657200508229850073636759622636008148176425703091210e+02) },
+ { SC_(9.97344665527343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.75212611306447520909858927406858433023122496707177809190073316231201213909552285836588252577681463819793907197633576012254029018017530475940549270670747327875547708149734921788106151648036158235955207982183955863767458078644890985072784784003157657078939847654041154970247192315236124080561972996956826056919766749997692638018042864132793894798768475224229161182646426868561046255948721393550598468635922750973777737790810626367539267239500147871398512741844024844405941448683844846584113373116616584e+155), SC_(3.57913063159066396581073316038608646148770679653962124306743233835262807077597545920350868347013000566526176914739081425845196396586525066488617318862480150671221153881448121348388247107816625173070919595245102453823775236161743405636490832617367473872170698471952246214374847309993080482365037909434794981854043072050647922694348353117006595085077595746987066212532387246587367424722559377450911273762645754169610858342062275803386085396070359095336458652978786511669257538622997396529328362712159203e+02) },
+ { SC_(1.01136779785156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.75347730083020939485038162912066221581429168828442196039463827459526861430475699995482981019212730791574136303794770558637632653539966787313265805232908285329023762299185014861422418481465071375177624076746341202484154198136575647412930445794774509044561075216290472866615013219185046317886077929047200074616789305725185556966392977981343942503814374008958810840813123055662448373018471435385626941585862611395432770072626644156391905251833391251776044318450848049340149430633834651573099126602231921e+158), SC_(3.64370045538509487768445421235423359724165918482902493162567594435641438527780707450531003969050124751986459088661597995706808788951592146239311177685403275556816691605701950098832189999694016858167797087116289453374157732684624480988017079231000288334505158201945226692599276945487043383856946148759913833496062922481619161243219041334799839274405494278270804667465556754366581890426570645342309897086504847897108276501084043877611362249341645546845389118917835053899026722978063924256857388180755486e+02) },
+ { SC_(1.01315826416015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.00457510991281502769226727004997679262304075469381924599171977187228770022537420994772365328581224262995097856713877243737738916378690255197406841438367198157367222028885739188819221893998874723494511253133823389573653928815922129563859445580146007786792038790844726836014513597109949268484909314677825366551459118028717639223624781670474311535217218824243945045099528383265311230189072692780987851223423192500364210661988512605277297349004271541908259006339755059345435938135279521158674365292894604e+158), SC_(3.65195882178042198649931968011149621283488971146238633105553740987173403757008718100277733785490878156625277039060382059688590867535166931940037968795818220856593816974768959327664263543693451366193941953177034784288904784400121716218959936061685743343972096090999742020173760420863474502571598091487483375402518801564373621465430088239127603159201322793775638351939991008845336720733856574548730516780561727018106577182606384397065860093671233778487263769017285490842275884249314101743662659144772808e+02) },
+ { SC_(1.02065887451171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.27801326900345153343880810058385458377628466548919310319356208295001391627711028108964043747715058688010148167891282897721251134516392211229815633735336900159682119149211036994496057477385364371651032335430129210391891032699021075886871436986468388270303685964233997952971494238945883816291938728495688468471763874111752586770041106497240128592171108689645129535717198560117944070009013995125562286608487870236034608620214564008241724858089991811270552418742087333377223955627801273083063706835931394e+160), SC_(3.68658921617580562067411514817835144132866629706014763116035557045564965652500986674593929360163570308689443456931582700224614304705183015314634933020226691177371648521879014819766803156565604404215993318093870166021879012194525067597162546457359170668710956917518936585625659425567139073681368857775138517401175534361146257935927911617665535974359591758903503434806360013917203029465393008200496054786387251147733354953504701878799021807780313234619151600219448162688809231005073094405010463658717590e+02) },
+ { SC_(1.02115722656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.60896816319517148534428232121099224472906570928174955627205730308593272095810179245609783698681170668816372103853112217011230591695869860419178941850553612575073503675334345279935542462445816555476534631191068558913617382873813056138931058171084616630332337766283314087190503645051068942875378149790513113094622500955980787327266672560687639557162522929706635433286775216561301409145003020847665542949100467257193220016339170437994903646874584701565461530200931941961289559836505330729535444901834160e+160), SC_(3.68889207960158981723583667551616655516830734599087849468445758096998943085919557111615958075388853500061364091220347702900711300471342607601759599003918524084136225550138478001032313242708109422326492734155678074073630480118105464454933040136288641575391783537716074249697494130114919412515825448403613643656748307302754155472693436900441158560131937501670474182282174058574205247092188856406444219190689086275769410408827865199254939649958746821341426770306076300437929253259079804248817293057357612e+02) },
+ { SC_(1.03151855468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.94228835083308640822499028852065613673755865463851531438327058166669144767579740506836323365776221468064491933954523159827868739172089087439476571447114427920831324461169567100875893875784444712930291417219026660402685651505369912395579027564548381277290431987355918726720732918689421442193807912778226301137893083370436981941699729302604799060234688459784051256944786362508416192857240452539630544116665633911680458559146828307310632090438458941753853672353518092049434148009251404963278657426193131e+162), SC_(3.73682651905258726016324716387992183499818534851084298433410462119434560214759364867102585112961493700822216081248742887146719492455762826533973189295420418841342987957444088003076054261871688210676983131129943218370437493592743430770371244025240198136170570468525556710224653368582018246366989546767129729722257332667137633309476018669688145592375344762651638361779174376851220119649663435444291450998820250943389730137090903748676104493980087117773829641533480707556994175120002401746782494457490678e+02) },
+ { SC_(1.03178924560546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.20171537110984503746428094029808236968900471595454569801962284884588253557196632314064311459204453401037547137721252899300675605221605850701531766220848178426107307853997571883397237019502185275899323162662253929989135552592369277960721465557378037302534013923856069596458354461160387042584077252216864036273505791483850043082366786730546213958546404008342532072130559596289868522883170995937443132537680477434575640864461406937897986942411334230967925180998172232605542618057362893140400140445826896e+162), SC_(3.73808021835721356724446264394902282290701854468791430816957474104121357346476343358635806510697201871317753385561836211023660949327877603013631398345339633717493827744828981219248357257956092252882039677272319317527100441867500400037527723671076722449747821677450262639970845980491755826511803767753250916930554390222742906323165035718151118786667333899860809495013023183520764835815549229361219355867174863504630209806067234900896411194527257618519084429726183193460574424568568946898172759856223065e+02) },
+ { SC_(1.03298370361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.82872819288012606122385963898328361524996417570678799694588697839190735174600170106720351533370631952004594424240260318156779543743334978103622384814628870820163074161490974171932900138828578654353210801510104125408235246750846394710609418092475390627709768228356388946400329979573725826559253114278336778834777284568651859102449899273147358506438973775986112756427925176585046638494816652143034181522337019700644796616551060074006656209089713982818770293251665711950859025929851173563713461219206884e+162), SC_(3.74361317748560163420326195479254375911567393555110750073620747146220483395013793807665984626248280853130047026174123840945129104152085488651750620885774044742807786443568160709678805304668243081991382409243452732728488756014968718551977463681027566731857857313817370028589856267110564911929005514836552959724444301628121435649598322899197331618582218338230007463827482009711821766574469772696231132570472922552328948998512472526034965401802610875788479029246956411298168633713329249088115783146293828e+02) },
+ { SC_(1.03869995117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.41808227279543671333479039434046626158530188922152731293342661306573119318405563092633134973716965074833789372968028834168586671063089271054131771945825757582712628501547074057648793172598767906983963530048248045469128383694252974808161180554768191225424352766335755702327435659330161865775483738766096509778836487654811038642151241098269833579763630984293257933323924801773786235314368186353578754883559503875701698799907224370192903533452100452108739079966989498051874352278825688032663449334565667e+163), SC_(3.77011112086662963245675580860653273445838266375268938166882906410114995628208781265159991648954543286824698469454566104293241788084417271750687731183944221956896689140884801402020542550881252898680087044980595246072708009401646582838771785004679721221825826352639947747005451212279129556801460350965125343184149109540974126900025713968760305721500405913148311708196503510152872862100655916816216486302262077083994494966967519637823805835378877890290286168019857511375509827417374620490655688713244690e+02) },
+ { SC_(1.04995117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.00678523887863281704315445004350037860113537505562283492519854184776749854976501039747505498206401986883371851847764028733559550284466617856098938842238483952037050298291535951048537185026105154426436130154396602767164120565673550208366259366381260022023273091633469615283569334286640071657511517754084778826488799083437892306566642932709776272954596072694419598606462123813205893259756109628659535751983281630078565414508016709349672242918983953337604798489765842178411006944951758872882478372023226e+166), SC_(3.82235887759759441458200974176916588835183231553065060110938275665761681247044148976503853974040867874294045938826589445275112659911927287757189056270707637343453819762906900535146711866787538123092016166555831579927012757456022795948174490211311393179055868077067837678849001862692893473813415204752098333075191785274078510424264923538488387176952815122989962722692588617583471346613585349912068428187382230147398757659645529871296093351036151672007480156877831337995025225476574745527346807158512968e+02) },
+ { SC_(1.05218109130859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.83976634226548322572919174800895706904078782065799096443773537981885185694587486811320986028190855120878999289642598311337692901073887957309137449901201645735680657243697681617222494949638844130220749832373225763896507711466261063162058760477938214785464118394399129254067717894129969752496013723160483839247141974257398086747003573635548210067354653795490286183627182332662761041292473910667668859123430004827439901075874987993414093280641989070969395337540471734658869020146669349679577353694738477e+166), SC_(3.83272847211949837396147225745140765469959845295613313699908764628230030150463473596541716965378611569009511597916333970267521155513934265321685315234895891969446621245232567943644593070652475667579171884451144515803354855337891804564947800457461153269074076789377868905007126549465728836749088552564963936223398281798497975704081603691785971120903388881817641414000874590895163255227705961236388698142750934201258204390506092394191759642714932949354378711173864295679661862382593386315557987799072805e+02) },
+ { SC_(1.05285705566406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.88900467122852977430860808679378603739475246531678043835303735217279471293400470130370648772140034717690092903165160234871744765682784827549731664070069315567174235375782928260650442113456405116882860216573420614391827950702876286870267067814697164882316796311045310813235466126083138233688957753026489715271094509332593818528703642543607758021186386446874667512334846224158518227540773901225191259373031925996619779278140509075065215271119230249696085858895953181416251932353757464942105324166755880e+166), SC_(3.83587278693323204678890258871277514297122579999980052845382376239620941482865363779403085682074841362888123392166265551639163741824554153804356554969593568545217636228911896958403439549653223554962021643289594844423916874562457761621160982899462863735444243455143610572630923426116761775450603225902128263476482113946133239847073900427016395029587377166423819829557669486815120023155228912681560989377874894297548582630710711089740997403499152876589237622444767284857349769977956865106013347728272228e+02) },
+ { SC_(1.05497833251953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.04350370816229367100337942994885015279526453304169331541405449930047964503121921902865055650340720039463167689349929845708781929475609818050890432868358093439084801254450413723989850649265525551466442998101968299189171128236309030393012630061038516261354168877970899971437602497714061636143465994990186202477380118969487154531802906088826512149158175433112047766910317896476878380545357357485271295125700882753012863548011070030701648140146862221625454249948037342300094075825716659580134996181284283e+167), SC_(3.84574294531115932149375237677159420320457195540146825957123495914414920297717536466610017007678437690910405675946752707021447129327942411269020836249064404337748747238670706269799881082342729228159556123744710580924770007457392898199441780776607607891806663764705100979849989516424656253155864858901648204573820569648064373007896785842420760427289138945103659594745663220485538043333864464089137493410979015162544737932793386917842752543631253260035596795692444801975621684522304127220533656281498487e+02) },
+ { SC_(1.05828704833984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.86935956323451034432291565799477420264574942460752629257797287105180125557334515457334508984544079071767666796613033989403748997881217445422941519799379563116273641327023162631941708376299025410868259586929229394778423337476191581551414019662216362920147345185750316039793792632623575204684065564644397428240912491954400102870524046480730628911687821733279947204985165713648677583149023921958316124707430853691606160653731533104584128854331165869722998686041425859590119586352716477202105857590710998e+167), SC_(3.86114672951929698920136727392816843089699454656769141911396678839135235848727229316681941069390642024780171542748255637922022854918760033993710968586074720223630214088649211602114032519767723479347094792538717501386586907984344495988912231703044551071876758677854971788450576635886599900775564701771153163462777589135590249132185730805789045598754662767748313567978567438568723900971984460828591161471563030548874218738918047647263078674169570979611202710872458752522074463742432423744595354217919401e+02) },
+ { SC_(1.05947570800781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.47057964967248252231166620098113781658646191158671537217794950476766464376688211905662156578593513863165040297072873806429364722113126115761718841905680936283098926911470053640195196526527218515368034033163783510136466037445569865348067661306367025365777355260366857280020526593626915940767362350851006614893489309153646581809145049958378384776781900879014799258412902197094178712661179516840945378026341080851015949108183637856891790502608454874633154649210421029466798941800508041123592391193864637e+167), SC_(3.86668309471944568173873408861675785956750190916661831558743523099932149098629806523288989756114953035470141336019959684812949218557337267651631665600615158996271397540668902113775476540860392860108853985273419143830770029749580455603334250552677535524171319220534100409209112510024597889087808166032884868903601521170566559402919312007576674322088668600236012402348072933729370125454847239009825296717738299684165498340245352212710242840034371086411457472259617137813000304057537478445399704488498025e+02) },
+ { SC_(1.06391418457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.70253372553870180616568632006838011262008111599288624112221679342026079198720173779667163682688609926140105963022610965054503934880419416222545629271723490635890185015871309235096787227762240948662532331680510789028326905466753803859471535573334773242801683198889129216185936382265840225801389333989729342025191831962960520494997526165478262494935157207218685085223581167474005602834693600612719550255711040569227673243779565592510107034690926824984016810418471339323297415087891987884553051309611794e+168), SC_(3.88736781245899953940754871507990416578546629339707501918767067261604547151163191578885524717075630505524762529790143874069633507144400490235978616476528866086388209735046595453000867923254174967190450967424770807319302177358552810149630796131430929481175954855450418810197954997556927536545749752054152149864042626530175822752029241825831049068593701734017476681900559812610050851961920439652843025993713411192941779830288417577447789660892810097778074201713425542379357723870000890961920731359472053e+02) },
+ { SC_(1.06903533935546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.30700351289897181314450905054985266289488684324535147146260597763649242079004782619877273438168913943532692353615377684351171321122204064108098010571285355518105232404665880447750758276681478809795964634527929015238334015730735095567847214499189485328582323313544185916079967142912088067287634443222907647626161604553446017786277114953090957290426735983431097623085091413872247113446278833527752761880188686692149421721682834608764942022244622605891794717380016765264738644678048674901409072234496451e+169), SC_(3.91125713989560722178790040938057497009401657262916760720576971411333581458641421159616178119162799252382773272694065770554737953272582538120034885447494838801178651348895761514685750468178877403399909978049083194307117902445860237917261352975524424512326526863242969477672410140371776053823367033985438504290530202855527840453592025869406782714598946028221372940777740084055176888077809785889087862118392485817728132743130196943661570923772169747816074472003406570793358969889066679820010617888748059e+02) },
+ { SC_(1.08258209228515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.10523563441723981064740219999453918816472405151221426356738600808716133838715299960033690433569133368942619954844287346727777597592291878071099672434078725513928247006865786031356532332235255184614908387965921688554218876519102528055922157730794825502839908312954978533646964247076489581491815711525461012511293783018451464364852741864093985255611963826276485550701285130944198688453437874846595608362202016624464734534199679119447477006060881888640500092737148440161100690107330035937814410794147491e+172), SC_(3.97456899138039707890948570315290488733498513976209565411692258313056522298592145152695582227072825212326333836893020714945122334276123578576097726330488199540062511818312036859542350990047879679407265550936027302443124803145964590805418469726951144986485765622541837619352076240042792150729067920562663214944327090703228239250882201092755142143865892685870733871461597901111448285596377102268529974376493399715131821123420954432137736314556416335446707375069549279793457317288290656669586179599985465e+02) },
+ { SC_(1.08388183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.54290724282979442706558253940482783650481422003372689166299736333701778003516903631467085844425812079793077081450861842771132198977186551743197361861180089877315441155964532837705687391125274154281502265531452429262571876612425191346931039764014171118854205326273022646394270962898584542088492672505493836667204179076535355815522565984938355503985049327598724861244714407243291752160672007328264253782126273656374903425598076114290525946342701022162520689281713164230473921106508024601591456486075128e+172), SC_(3.98065243678652530679562583928563238573445755920325670751636005098772936721865031618083662090873238650434876181387977561300938564143022242628818771049949796031981885843715917621039814722880110180807880353179423547796765769140998851644554792404933677158601794730016844202445021848938402455820099640791660545892630771071666346567473238325811546810791935690126547720493246166910421170649183272861254531655751957034164881374278460334601212695923927365849230430783670359610897776977879741246916172808908689e+02) },
+ { SC_(1.08955932617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.07747256194243113885203040297313895556085428852551611711155419564211506922915030780145423949066335564339806351942173279152603844639865708626284369435509418827818163537081641943682876532495274132971730425754987902942973588471091890601320158071135248015690233223958478940459097987698223131485083572666562847234820616407156581422320897862447915301600030652492731470663247160784592141722318665558938527718107662325117911276078258478060384268244801900818744085850967208922319561309747184331498607713479135e+174), SC_(4.00724424259080899275397538109311439592402143854607985548286901285704407355766243132836246175216995560277650826839672358848994227274861071350129887754145398272622904557852220180298232269336737495643739367146692042439940186771597207990128550589751087652655770640311810676854992879707004269436480161814129573600232710135673526371133699418992323131557549743959446123917203316544463415157076253667623706481841406329700061355408235433086573766983539322418292770466535069398951154474788177787251236088223928e+02) },
+ { SC_(1.10545379638671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.87227475922430528066683457501038039731800377829531631191370060541332189739848568983843566292085906872349548097902062736081335470494263317964978823818253886434354651733415974452242957678323044509043223743842732808498552011499352567002948776936717861071895124245454655823104494275748133952764029853040365521072682198808090947230180891885567723886848126500833318953689991957684640565104686277919805635130003428277463962279583900452292688059066883767252042026961752799826211807342433272535661902642560658e+177), SC_(4.08184715600321276911551202135028705535668959246517460085918517033156794276522217495392415983556663961596454834073539466163115140660260910712924882902401214455183282921081456551903227551122184800224747913430902261405850063460406647718031222060424957718291264904187247019707313522536337186251505805557580890102312193468916919434782659948124963980924145472808365004066553751261152367416034561610490221397823106262088537142605217756024887372578075565606914445109442556506858864414839122870155204990670827e+02) },
+ { SC_(1.10774017333984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.48596810472108103911498482391077005591672177348146888585874100412414421115200144529572266177869171188289566660493506751163640303725297195005979828119098281650113045979402683887585427807796758162170390373911804746944804512415197933992017332855632322767000863485395892727404856192927711848105515693614975236127664710992118123612438391254504708081904160476013474011504675576221146011859598408566925427571553285299222843745987831201133272612582580336727182010520178742275653301815798644341813060791736667e+177), SC_(4.09259755038503853019497982483630256442577198063393189935621077915044822542092739433619777570961450797852365979698027171593423652063447497296485180127984842816878295603632760179314273261885697476586961945221346066790028349431090187246646455302684385509854393456940868355146420343571892169692424003914360371046893432692541229106214882216832135180069655684513279847700562743318321610726288825126718897540236765739792248697775458869192865519762083790491292602694372954887693326625339263643490793482334838e+02) },
+ { SC_(1.13550109863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.65706287284339161473648536938631519339023293105137524829337353668507406650913397434694757238066470452515915675294173592661278967776176659404173138943660488565080044984558460065204526764432108876123996922254835104918583047762860904504550802483953629975101092462727722680540253547476697448410123852667247592575723025426680351302180453534360531204814389542188073742591558289987640506810985842081705354090994604111008304801715084677651387804733695975753476363715879237420498346497275997672732022426979799e+183), SC_(4.22350293347503061210907857753154404089749090555816284618619171028808816639726486694741967621468798003637222773846765986683614652789613176635150938480786422268711789477790093734455461853171295566915024047236178166712259914036169441023401526636005529498366231446006034880000983078476456327322188613649370307361386685150088028871847824392752437056572000056026544203619158103091287763011383227379982322109552391220661259085733791648669952943467336955158379629773254647666577176298639938526736802907171602e+02) },
+ { SC_(1.13582794189453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.10108526735402953791039146631435277595565662206551241331004276219808208674052659823341551812315094746011518898803597116792210237596426904965313808443513323768162824362993801684712484027959351356509874879083866861136481802056936998618606631917122909886339065825277170238383930682523381383542053429086426528577100238598061074664662171719324239918734496557442508152697613910295792508574304578410047341432410026951738013138207559657356237954009512689081382449079729326306382957245187425063896671331602268e+183), SC_(4.22504824154378805700554761248741137838612335403095564061866846562696448056142283164164983876372066707475090838512513042361061186540149163640088285999423330857650196761700235637105528736165436074717351229838854355019215378585282287195880464623705938056537008553307479838911633227348452874234683972669697126776155473743188764771056778452220553998838745031739070609800144584036111481713682570624111635142010984207622020111453377938775838882778749478995856927714203245407058323183124080698207200648819316e+02) },
+ { SC_(1.13825653076171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.77941378671180544420926592611394626126082262254572657339771165686948156653641087051493862138255655066000194932072471732158822591803529196848180119329554177268058395376004128960034067499293883118165545257578247062452100968908253253069115952104286596372195806398690862044722282190648245323573975671379228971127013146056881758136620862355912587346738573824034837965312980444762664158326628623341312238448856715435758390079449381673078998750173842552298414729424709689176654902363831333948257583776768019e+183), SC_(4.23653351560151594165888093993712385438773385054935590225652486221893018742900257540062431658397239750958498597461905765829277977173095756335813401723164039140324101052486525141934884704209020119202305835310841513791818420575739308387773213279373033142532298781187226935729515764776913232525906952787293461313689140288721739721215627507636968964154501462538163813352622766607370225330666396825244981311233504032950971781450249876692755944410545529918334138056528165439059929433074876958616761868591807e+02) },
+ { SC_(1.14133728027343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.20128381223634428197091796398616789003843668299989968556949803261896552701605793178360827741974132313709592972887977386657200538762362643339462317815450734570324415802145047648636478704502346354858408114959842149426042695952544633641388774410223061144535611307529312409957126324762778447558442694304245141103506536627024036565717349803769829164443717149587697156631623215844566617148944231569472472860518187160228166666085439611668440288444443630473655937604179957821087283117161427593928897439949940e+184), SC_(4.25111047259066382143620883930275143995665817329529583698980639042108318083301195918813635238683737679007533880814153961402440296555518428398412220088457992794842540545463712953962607656534582828634465858064962620323309600444499568740650656969574855812201762613515614554999691514297179351160299447307374831534802407922184726217246974594531601638887680998261763534891751530229867605259341683914260163228180884603624927038384491395112235360091306834514813430604092216292868418303964625689842660750630515e+02) },
+ { SC_(1.14467529296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.04045082832484686610645760220558090416853250826100285492917004659321185791955491919148964014082437989339595003320299344424165419532555701269755569711002137473800445460515985649568538806719901582877620115261947593301192361548423788519072382988981098216887475132191969300597969151487232928775921578843526790468838231802411859180281195261897938414466058376191590065405009015970193360098989276683404067535917028291129928177148037226873370662861577529471516670224930408261557313103931378299928193788821886e+185), SC_(4.26691412981615824154288105659592803753603572241553878232442275497263040983289963012587733051992735262478420570088481183617461288634642827025789213176219751425369327811985669649799788291195032622044705405128386661000384383715807966929792962573104177224099979920925833037813171378376567888039096474303458191177510972411629783089166199836509767373378740300063250542452144019623476599341805708964688793180639261025343058339134833364219384862813076064485266340747011439506311366043277995857458464370333769e+02) },
+ { SC_(1.14699859619140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.13312555620426978634469842284764916491461832147785714289728903927768857400726157351397438264381982921791859017488027582094078927099048614316743515338014768397045642974722610101439401184170387881494895224693135612934290294439442620044185530024023926782297514189930195290392788122595942308993536110809354520657934235626290498025774148381048574489862472577143836610812926369902808004984385317721744724116864647034723795723574168746366964082097816142051361582792718537689331756674228416478210220813709206e+185), SC_(4.27791946702565627650213115782565286494068066394598357922664668007996492330186613179530827924578785321849504014052092659264394626596036315010545631234732239172956993367997604611240447365849650230167388400446872225976725574862271485612317063690461006283602043150682205419102299886717033451711911162645749086699338979195203863080649811292617625210381547383845646694925084119850569015047764391372783657471277002804567950638827133054286849646825252237510900353964516376040460413449749625321777536043875243e+02) },
+ { SC_(1.15713134765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.49223116856003146494697381966033823617207296668392641196499793635493336241838893278190357907475413974452678593112619317179726987242261251024962055627141948167075285577628052293851440779664356192572239188393328849786147102590598944098334624116694850876149361211327243825982040457541826200103077881736562910307365829556270400698212192314806280184857209497735011566583055678636826459949372776959286993959413843814198080986168109602960227129669955426350558104792812079619980678343714684681596203796329333e+187), SC_(4.32597279029379451078593933581128081511490431848712683743604931167044650674212475464960395190983992861152310130833947982104077931178608746757099659858416768185195633591587544829826035892370886814261968182096544111610546330820347226310635375866709550410797345342869123549502439902598672800258888282098935849422214095877433979441481096147465685950904792537563677141752949715927180120768645869713001649854730393722803695610051421698543411564805843980646099151893890496122211987074355412172028306410679216e+02) },
+ { SC_(1.16188751220703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.17004446608904025608956496086628977574244437313516084332425830381370268660733327551254204098763877744436828404040989229648115760372924431294981835591858573086018437745897551811066877142630871603591270037393643754192024624167794865248821435170928199818097473864571292929817439695850567055069753969199615466994134323867646253188303816298694473024975589996825827415809368625547649267047562109751883464453193750244562028761335603498989727176472516538335043961991364219607176094902622059113221775947762645e+188), SC_(4.34855909339158945823349820733929950349328535737884791689763526651127982915961536377556436811553900147283434122632407015715400745873104541398318617580807610012827585359041446025329306346198773919100509217093170344803198183212312808836417504407367313913817722317035668240152089356999677230898067003666913737488729407587241125069849570821175848493118175186198790443922799441668708084943400954084029984215579320457691442750697630580198755156881925172240404256078771322469263426142721875010754671459082354e+02) },
+ { SC_(1.16570922851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.40887255208281035867750704559793784417499244704236090639115076261045008800969724107997683190847832743574617913246655753127914879904681990364453437162517979351644232747042081332441545262276057551371652404822199613409214559588045052276658580789357800876677593311210082294744849883444811087820486713553890949146749950847472728950517582710277426803043850390694699556629263302186403234708773874470798206961167419791224303617417666633141661501408526909305725836200847602479234229829328153080627125679195420e+189), SC_(4.36672201575523456041454596536294131188781932784084844042490408168204295888706924551771855866027585571339765005757839351190007070373266373376453004038782783894056422405388094024617846764363113495298765208398700982742864644266800600495773664100844143018356916958859846627298641697934002785308101760897033046115657677245398833181741131950133050595525604769040194154654873993658232600817690590371948758209490277164629486699672127013118904784662123805952903357336299953693596564697121878093990337272043475e+02) },
+ { SC_(1.16584533691406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.70360160259213753789180100158348972704576720287992989634964787772507443062665327685295219962719775184838085418515144183797538993901223193292151724442713503977617739966945381610589216277095340002048061956346000071155984056559048363069690595122453397441014241313190961619336226478558166739503213597425238986149437410678144516877244390390160916975560304961426108112721780487702273801885677095315908468066058764174620472097535602050048249653091958874775509693099506609607290296447933460161394019457708573e+189), SC_(4.36736911089557776411891347841248347848031265364008572962199032596341167038791183474041518273656653293252565066243195097684826414796556738199006582195423116005275947247616796730413120016738573458918854386521477809350946718964091994654562515406880132659358724778258614488447743477560823172627059605516420932550179863787488699611866406676684342910878712865491152162891033389556607746611613386104264195045516611245935760714254172618778132968104526301772141480125426973789401263825536609971087974024055326e+02) },
+ { SC_(1.16921630859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.33707650511407420339720591544677139847583440499240761893390249300527092433935854581275726205669397537372839551295128273819720900014513423017186178051013750954933650355001940598950197368286391976327871972028969333823756465998975685045529505945773065177909421471456427624857355092428334731555249208809965064364094132158226594839371436170466320839391535741577282604860593672817098980913333012234317236890260810093725541689875452569603975430322374926968660245673621708220632501898593222023384564992994520e+190), SC_(4.38340068460352593041853128398360105928372614479246929107888855049925797094356741419067330097691630494725972056058175798328681520652011827206495283369060314023599806310999055941203768025962206745834689469648285266927418537837329482230448961762068277050481488489872845214734927589532384371671272081923742143052477808992121614798966259211745609582920211818864135428827433532143665942603072688628741001149116323277140268100088017582305707744386004256033001097704730732492079105323552143344930440012918125e+02) },
+ { SC_(1.17668090820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.16436490634367457798969750472507392026424479360050514672956925393468088356944227288957960978624833220223536496686540033669491596675368077478252374205070592825601621229386491389781842787218977092839609091242493520304764440464559175242982447426045947268234486064089094903055739181013759335711336667434681266881642385184919113676589299554818928170408258560947548717143223754667038751663902597826194264360479949396124241244939250801810083578549044842207396351436607599688535139268430369966864075179747252e+191), SC_(4.41893531702815812414965384203168023987889398681538063026154693658271608682322807825704700384373771517078125781871648317118079847815449248479221733727535587299881523499896203391756400949355697898659418300868115497212917024361805466777459363263913264631478385706799847221495805691577217940431080121283815839824037273676766871422598696398181609697869212484758219752582625354087099818585762706630822257714667416871662058108819315572299699116966753535175777375871105007396235517510639819261601654532267931e+02) },
+ { SC_(1.17696136474609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.33136148515454582979959568081011908772158617918503111930515858506240629365724820844351135672655371911589620910537818155070307809613339141634247479553220025060180143004127204702599976207613436673974531694360420654656839588132297301151502412839329575987910322087029926071019568592116744571082898431333111905504762084466446729849239392561227292913268011656748018852284681386054172970251316146137013559811816033850454465838166204220706130920291379754492894047646055538723838670387033963929895319035115083e+191), SC_(4.42027133691601559056083311696047274623212981995072618213510081027379340363123911787208441948003265779667819818453619654305566790631607024096745298815674034457696160266076574499804523469503682609205909627495942993957741006720611657299173214061894030777223202304802478730149557775485539259387825988630334751560348958237245258765937982026877868576643953417750759966107069542572413459274494064352879445589426784193075431206977621803993989249432778034910997867087755985377589884143012594270881083251472660e+02) },
+ { SC_(1.18076934814453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.72865474108149486484131649933421697986107036109869076163957638649793323878283439520907274083593174882530213286554649766086599610548564958475393561154825029636000151810254069838545891177328002608218784675734636331668011385894464531261362321953282270567111851450467493715732844456036654916421903856878879596740523118102004191095518649315568660103864258453270962561375460773293491438638621875417070817219590779057730549958820326485137468696496514038436058982596721528464669693294395717162069725745256981e+192), SC_(4.43841818583339162581867662762709454336726121788332931173651704203372650398720454664477171716866578710861655263311707449625197001412820107802142184875241487388864265356864941579950973863709754182349497752592252541543611466717426169510561909866882015459625465272976349771465429528794301223781309923510600041286382573027526385233354314543935944721705292254115046964467068330460745455746895154715970809904280589133315315700065704348554639443125939821687680355150467743612821134970987973815543512530140762e+02) },
+ { SC_(1.18472442626953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.77720291504524648648881731322484100687059774555915739315100656823540818898172993635675263351822116719421666243243708127934606690606424157278441104487199775021190355621642350448908747577517834644993210263718823837841735738428835524425698944664829244100612022121795559088758820964331645610795652278410378739312620371379919873738790286343108171703595146089246289228262428437231030391173269829258204101128620174289969565250721188744138165202298567490410461827663163938071487238394441807977777778037365596e+193), SC_(4.45727906714004952352019411516634447921678793175611636458452338500978153784859963484579886393028747524684591865433631006500528549166522805307435775403368427194508889710146046546106944074915606019670019379280979583046743574889070267555995876312413317157042661588567223578199596081826413419005406805024470244494357125294679650565414524294146189417694990115182198251896822853217018815824485438357711253540724070445305826662354765827560513537279465672718974157490136183898221571737838170582599554417024990e+02) },
+ { SC_(1.19621551513671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.12632460072056672164032175554520318162299060799277652876498432740921295061160079105822462145376124849624622687411579760341465101610303982515304207522762552125894404274918264525264226523957336093426490379004219435451621638943531367592280530906177517166803463541441327839626022737421962372018075207024290175482520455052120192929597813052527550002794190174032632544486930740302340939910993070423587926847233015549678110022226517582237033975197392785613541526775321490051921098223435729241747842941146171e+195), SC_(4.51215256184495322034814640378124737829492800625663972702036194627848702086990975750810503559665459574774331742546372774793559664565158405991032727270850460201746748913582497642099176940338919061791599771394490679379745693031400660666285823647673695113946938961762603198282312107140906011957587528723875098555862871256384168973249715201946941321805116062884989338421373287110592051963072961564395544603178229984614661967869363859781597128577214062280228875210736253758397009188202259833643195489272202e+02) },
+ { SC_(1.19934783935546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.08077348980552577467799856966874129806077745306757314546694920490194417856677901819475736634867301166901909988147939263955015936935919689267169485903374114723707602998921735669019042728677656713603314725372369403398031451220547520453211776719880376414851795162038306066463287623754670799683004884689855851174370671885606372875464804741979836903994178603002102875553806789997926978261345994295842010408219213896213470634337673891969902678967548285517286858628971297495352901951936750153893953774431428e+196), SC_(4.52712964778115536560754230408068032338466506146945161545262620554748300192994689428291848554819378930240314411464583012351151574447207844853748411074539615824089046068257277315706417665043410755314311935647798326027262205234438658823080124151394620129420221605103927312207324257226542937647783463442091974016434870437350688774760834942488741634052639202981129175045466436484437708603756264783500957174797169707894265058735598260079793491508863643870518850769205134085196507405869611056518147486924823e+02) },
+ { SC_(1.20542388916015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.47288637649498397463490584839808929107344610045413957416509965616411662620754492287607910583742178882187088654423261931555880460286694447856866599001736048574131286667946604879506648193686097930960676885340696724883366021956564581528420088383402239724521544830822239308580263633238006859445926301426174510863419037725437725663074973111646011479308820277940927132756596393019987806633529537031946064664529736664092175542734795279360535507481102660263101293210183698325646931639087593132760324077862969e+197), SC_(4.55620544640122560656843437269303075065759606287940202607715986535112373369180268980626533887882325748641574439448944963285240352650449345780550030808331175114982871029059334326943641303732970341254153584628471235170271685421005202709751123245502599148992948726707856226830562659670530825796817830667445375018048671910669419687719660351835068592841089533938210488017554586164286630187441895469010537995053529500125516163125122374632192161521107600865323226487233071977031380091577382690495107251966404e+02) },
+ { SC_(1.21173614501953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.53722657705535336598910755611543251746691532306825212306289845173739595441601211505710512047825341157800665236161940268385049544882426969081454686616468509957211832092624454413299258050304111197225197187190443664627667758746226770246015105661635002229798824365375648042846663413319429415266328578827921576207322954591201540697120246016313190834142152905222425638964983155626433835883759265384755132546340074094818770542401996198591013257396485062740168333429750953823469547333066243677389492493564457e+199), SC_(4.58644413374637360842882413286627596832863499457353684912868817120391985305599507283869864214260994818660446133329828451013576840529769639307245397303177103244908030089963629886178768398852530136778090115640663528597306450749472779155402465819224142729387316405886579895055387969162139785526616166638097094888746274359020949306019745431091550215816611639987551751369387900872058510354599922736312447511389768639756548163994906156467435694696045453497864949553337399079562660304412087378134212260733110e+02) },
+ { SC_(1.21262542724609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.35432441180218176343831923076856165265118395756366996204625441201239105669269576993661638941379506498174378656574543373382874611165839232650776306884000449853450112297696341788173355032152416931453842827461866840313347597528545828849858021425852678245417948565635534689873746932678010124026651642422953325786760306787737135800797652845269173930743598559869678781520051577027626603211898475806568110368381614142944404399209403983444673817376291361933450954383403082070187806048284861547035093744280182e+199), SC_(4.59070687318157914191312289256104113790017591983647077164852830259422503738220207879411420627809186579434510388947909828016836133662026089031636238529376889590764666508860479892805941188721868324869811209095998124206334784202957565351762618774082417373409488506035230556806557357970542736507765728847754662852921332166714356275159535855081888919895777077090469671053802195518901849564176126196545818556570653046607691804133337133318601405139224802870785218317538354423428299518547257123410617425099304e+02) },
+ { SC_(1.21494415283203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.15659045645647046879789461950797822357842938573838016664309396293843841980604659172259177724374568231319470748072942100536548136368379171440824838855290513648641361050758454333621494309287273243466778051219672076014031640791247407147219190830952819786954646670566105638659341678686213549597165653636848258020869286818297989326907522574233040943848183902377673509100971107310809753002152971066326373338686451106204131448714521581310850297966338441125873250344288579039624357160299342265673072370548297e+199), SC_(4.60182467180139304860122635340092579968601032403558915020927721877159459605903133537738872391954445998320391991440475148229728954027615453810184757157614020122160516902468729438231341075928619332967049460803204971161325803593284141007002713078428540395863524949658701471206176396484172048956382179728957238338848880618925905859877186803479300174390555670148154246499522320673034317988917032459941542102622995467992685376716310001361008388125079128656241028950167243444796002107206758405710818162522365e+02) },
+ { SC_(1.22615936279296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.55891707343890861333107528872000125384992069081107343075692250198695335778763764722972116930389768118040284757291345971617866950096348397346497109951267659169682475577409416433777889634622639310763376013335877788979692380859256537584667212808804495473460224553344188816668072382698675833299101831022384552940146020714691250632002644132024347461830447762479310238845499976285814306157714957904442780284713773917878711077207101929047255990870835943667110358440294137462882092311108193751971218457562285e+202), SC_(4.65566180181308601687197214883110710267518162901612389209308337182049787592884988508778265520804774316739377836913985521338311488791870394377733839940584935402195196179079671746821601997600647827253159015330050423400109910092244261447079111113935734112772405809246653266606532893097333263689076071768554831343218620103768759172409660450990819328350346129788218404401533419506904914328984508874434198465948905945973422531515198617482429364905131139829112167523142136913416600664190619507696242221207844e+02) },
+ { SC_(1.22619323730468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.58449866440180470070191255291350578276430677120008207396604062633952008424517277064268593796831554301512058536322739058255100951061978536288233652914992687980604849466144619188110648281137162102693237773617084748273740092723387623184680690864908739570319524168152761116810062579619604455411809368453388103958420528285875094359460227675579527718338309980408778644406238202194855287733337804770744976939840357419181751496785514223664953084095349641874496362779033280232517588654095915909796647334946538e+202), SC_(4.65582456842031103982765657592733768436482389802303278459170748014779783413746382141872146073444244659037135875051706529023323727096233443454744148765273214127870255401474510571009246531321472548515566713289733557524897722853217818640869277820642987578998266188799347645977999776519628085762656691335248444257233855005328228172874274722463851122172075368501924792150509246112576538951884713556830171505250189733995837713742274803980588397937960976209690666059177038355125038075881849154482068166278949e+02) },
+ { SC_(1.23799957275390625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.63544640277139549137310217513566911082050773760629450920347694631060367127408233147593401766455841201118446415408325154981230715715455491324204261136261388172357523685001500794964663415016270284775184993907652766125760462281193288661163961171640181277213188681876991560803305358808116180156366567258747830621553185324244095962080075838713097874670376549945099108644580190029004807825399023241743390345060602994050322667462629590994560048444053441040307609763036694175761903442048956889503549495771475e+204), SC_(4.71261091476443044174009031550121164087922587248538936531553670128723998271795627945494627931712563525489483471271490199751464148211247080290612401958890319692956635892067105806772287886971447093677261959379313382459502418691195246517599651939336449072101970360321393345997029507482162837462872933987224296207970512090035167652338412089600998866394410347174794312023591105235384454850107047396137050711372465161615320162198503385589320814580402754630303852772582439987536871840249997710619967447849769e+02) },
+ { SC_(1.25180114746093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.59164584120759822433729640121908362404382528667366168016211012136262493573796416468934454080722442819592729366199883974592653373814997482285151144183211503181149877896916490249979823147443770241205010083434953609838501059082637860084473488684268662196558549799390015357307833087293487106176398922367044193563778471532663491949066257470709103655086794550502277091853533121528333512273743787909493277348483131594566628676120177624493344214015792039239212666312752007868221875289142232496944883926770983e+207), SC_(4.77913724798800681955430578838170972776147677957335440613483895134458910977979271071998858025956271863451521004480877448444705502394603193543304233173262957178632707280054290322433982514447252840302799604750092243542587286126008195237116029804390008945422461841858714922171644469713848101479824758205483289065080762811556114339695355323157367827915066956513303499241227723078831912676134488999078147639237638181261071999491859319941691836054037447435054688905309468026211939592743544705891962656359890e+02) },
+ { SC_(1.26056976318359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.47944530448670733794842725159133200821775724242209804922675101264218937133297706754867035444908415693516495267595479792500076322036290057140288518643332783148976313998913201844454266658989159411866622584736805756712772527559512449155625283947557356273137882027305711821105315135660313249431474176183751563787419519341798335634374293968251313382364567201428796735363138379588083817115727239764608230881909271719091638818665238673924844519813045932365983949672602461525090884892917696449113427473432611e+209), SC_(4.82148319303369440301086271858092673802618004483239323480692149410434318394191573757344985828781863681651431261736606862501484815698253191362354120841363869041301488984529555616556948242927585724138368323892636782807303984172331318566293299177190965274838781586071345777819043224174873310548927132848686539982081541439382896169634019565835649734472184794447451074315439663907936970503807173589207462375241228602526217220948754246787406212838192192080655949898449917589909210977252841445312992054564017e+02) },
+ { SC_(1.26528381347656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.42182663319913496237126334093835825748694886131424002980650014347744295664965549494446481361598225682990330744946648677685520636990135864919476466055236702155334977475359346896462063239402055686737503877208584652625271796936117224137072133094323273608436610195282253939569361186031744098676026263896910237380735503288821386135118854355488827227941496303649637517454456250708426963234851364505960880285882115055099626845148663492195515897643185551754721052128339042608975235122678944659017286496904648e+210), SC_(4.84427391591301650052381022200108849023216628100423803087799853789983959173696199457369094464401636461657272106469921042963581927578733185196179968915269871290038406151649057065311629432268779618446872958199782490908653105319829512103019653489005006190674262042213969375938486355012220489341342510995564500736624365326611243292379195043284007699636871863629074439671812757434360843610488818401522375571442927353714337151485631022366803160047666556979339491290026656136306875038147348360050502176202422e+02) },
+ { SC_(1.26626281738281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.88862751617505851662619430168993877955565535588536451326356637770034582102421377462236676184908641703483865628055534914138322841803124912110919782553953667775847732352875682462046577536819224779680333308106095240747838269420296233544831460693531183439436736036087423110649963930611949368753098090117161978908560789271073011777487156058298740462440037996088447500657381730154283922695105844777388900104753928353262900550298794492094099799678328596848951263361298417073922920854984503396179548222543585e+210), SC_(4.84900925800517672664483042191143848726171016934065470589319654686496076573905490053994333767886359716240323248830372926283174229250940872975446642437440897096206643110454391026039459587744414572034553130902512860727364002056544507182565004256836206869711152601033474950214308009016121030357246527302131401609263486366587179672052658852113611361502754374513090629260124033425429279447872908660946050193375032680068311406152851252925764663112571081859290354963944257147508729494158019907160352804666125e+02) },
+ { SC_(1.26949523925781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.85799885745998920983430388775490153127925068873532729669169390918617254746915773463320302282739929494601768464003339167247200641328771725088224797614495744050986505072566022621054416322390914801017366050732480683872837438676396055645169732638593856886846981379591598656894739776614514376900990647800507136987971616732989428416199491647911369262925451227656600583757885470261069111532104994288570336088843258755614269718676778177306165450320965497187597215455165997680296244645872016039685454310101952e+211), SC_(4.86464954647205058932700040335704058990587792445438024904196931470213636195389835233501319979826785327943021837296462912390219851476240131715149969896721901709510374365704507847553672845446422867959018705672481025755092005636269531960624664652432950455618523240891670464839373917635419942739122271834834924041749709718190210192003788420149690752796304096785976223784765116091025926398315502702005847182470739762772788908019519409517116141829756065254842122228844599700547916445634875394905531678596620e+02) },
+ { SC_(1.27250030517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.95867387692108285179759791034988666848597887114044088866820859997283869387295514402198804184526431310068686660892500949388956183563166078615891548045187842895926680712128022081015852290913773464495476378852524420987500146395106345745045475155014107754152994521610288846662130574437281981938171901343100109693670867998703435000886741585872179739002921326486635158897103002665484547764176300773045064483556955889408865935686707701790080584648015276776444261866776987067679190914221646479689390537878078e+211), SC_(4.87919717009344131514631289579241154775821488134363277172297134078336073472950412943474019517221019752833987994775391483035469035515957773608825266476207689928976238170180329913439429207552604863895925712737510217595966475355941728504981837187112347523484432981760617659246407461153791516262864269255521106517629930470586062091530539793980986796861848687684093248450187925495436801626253667290891726247757586551327927898827284033405955483379928728052724066771109747194932351277083766072025197131496533e+02) },
+ { SC_(1.29062194824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.21590360545550004800273328037111759735823539832501501238942066897011899542988253023772482607570048592073969960105247521194785283035579854537779773548296379315267988533237821307089515058672624892673123328290349821346743603749158035761635826782970509488437368459451106153525850871416146912122735487361690533036361909315075565397530552385016488129812930051233200858550863716538886393933272639841709630461564028484065373426802698523392243504736548141458108188126865314438400525162559955957719668783144295e+215), SC_(4.96707507337624230835834582593585099424292829056671491295715545791576712585483386980998849050758102873179382833261429221300624185796786643099268596081224644718649242360750271883099760637988191962094328437016890001127425992362342595015239645206408019289479399322533043610452336515295295372963558098454188185248371949296115543044058358763000583734120104467379609850823760791330220841372016697126011472003915244721536043248287088048686085570184152114208170082711831868667736655604873979138846244857555504e+02) },
+ { SC_(1.29424133300781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.02635767918607903950666819307682499880944197343260958935080874290175957238114807519205991749378714397245455234462488828189263998761591993374250731656398850403654998342002293021283861294300231498797581907209374665981666986913633321341249973849869957542618774974494400113058322106941110881813291254335466566510306827542788588927974700711757307682138211208910182197058437214618351934024970425963238905879640101814733814925404186995847697463910867546097073029931711592903529105940185039158291317208553695e+216), SC_(4.98465739897072943691074716844816005455804262525363218872826392795772484833822830748945444630946018097946539821268771767792779770797404573656853521184140322276370394751712473314374988767734720967763623587742850797176065743114329696060255957832009138469998584629988890137927939070061921054478030517395210480900363472040704944129357146227657528620536829990523249863698565753597657087229610766086571583276695990881406923809046105229072143139278550641783755595716827060026398988355154407299754484782186800e+02) },
+ { SC_(1.30573669433593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.11047037112930704613427017755396345874582320279600548545911791156721430660763403861749777389079710057296525391370371745105912549823698755130456815162941916362515793313915165615809709989181259005687120825883272205574689531515756961468600954601723111884113118157764587818186921702290723851808779851977542885044517298186399535323045511040607831764522190868433521573940090638053610732273845854119620294238719238345314171753103940175114885965667184883405140793980515608522435245655397470874175799832355807e+218), SC_(5.04056706138053612227836930773511019745903578081769948489042969445572696905529437229195116592588294463340493654733509712278887972981390782991171166170630641712428688205252527708212949364619634081469924129701596201684932939230739957616882108608304370977642911193102652520219566934599078289847473327558502484550272204555309698138067742627419911106375792189070578053438859727418663988163096021313840652515690583408085348753420825363568538804095479531437589259166639111370167223851459391164324546850328466e+02) },
+ { SC_(1.30709594726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.57198657473474022361078506195683658976042521298148785406897748857331396634152320328053708095932878868850533117608441519872697482457770382738686874629509079054132087268861517725301960152147300248185854688387424228680961066115514445921170527683726157520838569878477926984709891047082110734796837300766043108427983705112962391598568733135510506107054537900306279418705793740509183901597123501585659962324908263296924279890499500285778556771339753879450690940168946993548531857563915771234202837847081901e+219), SC_(5.04718475519421475308021587903598678827185913061229094073537460481591284692845558765667474673048643744759631465391904335287247101873423929736288890690196047120156062961523815762863551801694694310952078650695378167643471825358756323245862588723828845543910649902448106580483748881080017768254156526727494087330413974462259669018702862098649925680097892943790873992309997891961337675649350233071867566329550971552983101718088589057110957989487091892082611974507156291049908237359197522900089005839019441e+02) },
+ { SC_(1.30757568359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.98563686705140334136632420794426063419420819635804629691052815342827217474339676322757056107207821055631757016119174791433473323461048935533766001308854797203996184185053061166415162970932624000354196417460847036009606078854375413399147819888558836693415442600056842328952139079661870627878851376683543858361948322311963261616184567635027401932771810155778205621899995613606606027668494150616534496416237206153201761761040527591641945154832290213681862915035222586103839425746298119088508843620302502e+219), SC_(5.04952075068201452877049402384085667382039712175851309712054733696966375348883144866797666228028441956440415208433075850847372002223974621757009454129945034879526159871514410915165309930581213628753781515588339209486892809780812242425478944786501421965168807767801454281400629080690695002606343716236172309756290935605128043867730565378035993871825892925356453618194750102168085639208980352844768548493214808494473737323824092555994291894318005736307117437416184900158723053880736848642925975684657313e+02) },
+ { SC_(1.30835266113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.89884779338659572340667722627856777950879031841712716039944733865740080403723127724238455822688446890092898714808084039052086275943289859165528633865210355151827064006313537544100159003115195159988934635051028734240337971394218034429756626314745504466543096666716942769105496284698929192456748358076397742633138863541903000820511146383060249820242564286483301649786212731196689928975791326633683177093822391303994311405487828595741176720301420042264863778307503705534200433933511243281215414252329809e+219), SC_(5.05330448711113547740084085728643393088729057540142359716861526592153900166623616172771839263187289188475213653963382206206780656792607292391915440634805523140306540791995474412903174717913885487108082640648389957957627267579671929059416203047208781406829815504908537090233510445576281627930667285757767870170733774400733629969662813491740398249812314185189751521967234574281785209394751043973315949093403987343092713999935938686179092919598408170887392212493275912766983779341242209651461394332425019e+02) },
+ { SC_(1.31600036621093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.20430297073324444437220821750693753464613246950635491860869524757996034204318778211038386463755184564532939798221167016228509891432529361310635867471398173227367796445371474893031468325983962612610083622234476617695393089714843405448851735353769152837451722948166372435965195916922392652779024473274058020281308553443569989036574389784227263322141079701444013212972193344569946443291355397983426399775757361741547454542158519531653967093517404865222607047227338674158623715647518511691498640412293904e+221), SC_(5.09057206503737122364979164051658316850633623031344072914243731310808350391269043112269701381715236707083042095898779601737200121748253088388122013559603714273813355308810812702883502878053310086795630782520444428271130378445215951339280458638002178123797543483134850833815286322251157103777905455496112357784075324808828808840502260423427623967588990828312971943416360309107231070254504658347786028595677275135150700040966302169892714539505413325343491586338857506633444582388135424475614550206040523e+02) },
+ { SC_(1.31623291015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.34890153554071906149529006475856843643751489002724557180732809872453487567537580013324845735182681364623819603263290560087424642868366952110053204940750673788040254626990523613160924817804239450455915579901953536902789993286423849735969007117782833444492048897066029577542365441137392306949851570478561227799976033254349445806030147073802728868463768528161767069029113992137784684805014331876027002586606955320060364032209948400145502171437322646568432969224281296125331077633162606235130134587377001e+221), SC_(5.09170596135542071635485907939507005816072655383249004647616859331032889824319132710022885781603007135074720366638005731562930984297217884937926718300870954121095461479959619581243107681841414976524250071299102867834392463171886408570759649746718487447920429310226437182653719834942024506857917378738160034880710110849878165330711698800626112257295745469776597348834001244276042481582814210467327983299164470090152686293651312160064867436343391488754391020479490075778582314493149770434063452256141068e+02) },
+ { SC_(1.31660949707031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.62080843680019919873850576732273949718248132887610477835752418351373087232255107303429222446767091920867247462884237784576167702378756866685787235723582082194312231685225050220076259431742496269643395666931926989161361245494650469473168200197681613501338828792960004222484214787748680532017999512808760847668203053412185342595402398335751175395526956679304124366562325500718958908066131857708220793387119393581003308929833214831141006329804253792611565281261549823997147097470972678670570753197264921e+221), SC_(5.09354230611513654152529095312610350686660505355384267208484258596926205528732725328825476978975925986320768895807545158809407801219620739849964863592926642717506315967375728028495669860452401275586479241959878160888708620723000916642297309981107745103582534014810105303665195808031508715399216703921652668968868711979325649694202907967900674700074630676585663286896449600740805134040374062365773045491320099146046085609996671401887335881930277977646522083923031915640684425327783098948145569090266835e+02) },
+ { SC_(1.32367004394531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.07974731828554602243598676167524954829604432333249686199200513337750808529123357340982668996969696862888447969719988108175036091908061220618035384938734121256991082466576516387811186986231912523022170688565161099100085850104388725471729075526067491977465916622057303317019411406913265546871133783089297807452484318205531517424877673760203009558823102427187524205890103762796000616913276792686635297763247418931989301460494127323302450925275282375748876100888627116605943075436310393738440647082870976e+222), SC_(5.12799152164536461677625508098828962831750569823734125016345352967428738820658510933926540604886371746216477089640439301522969304604479689124091633260606915614563143949634893714138251907868602359172153932413248182308174356343968882434211883450893172968119039149877442419849286186341796732351571516582537288352338118048183842085010326204779953835882065024477537412670008102631597632482607256740792941129696039209781548558122538256573827278333046224430889866265352039675318823746384170099150914814896127e+02) },
+ { SC_(1.32803466796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.28070823491571021525239010673229927401137947201366072881652104355715653758563674368037423427825943179632334768820206990671067682112131868828127813760869517245688619623730353791106389098468093493314257541923738404710042820138015545902708203321078405936598569492447767787524108995822184403855483715577641469263403120941922738628425789926464726143448815667666101785768205827774691372221061087963997751796163326855898297808570953176902345206734136236011898491952894937956307253754479421600833336085761764e+223), SC_(5.14930594209023937095252118022912016782660949860856616535319047187025547160832057314457620561305811068004437607306774351795320211730551561202646716443789266629935182231469766334508684080596627066111062924159810854422801600568899593348352290940161554513014104643039559656004795089721242595064414092021121612389698714881600790477067081696100422845333141984137261163653252618760353608323659593957387383454525558195514189040087115895303172455491261027290336633915147987831744448660710264647965445876368458e+02) },
+ { SC_(1.33675842285156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.04487592056823951749370118133346032782665582332320336770393703280563240947568243037471203707679509318737959335708187651456879316231500557939253820253928459853161274686018563956401269481831555723011013866139819838885243914185192310402785776841977135186839219448331005504911009488722399614370734935701947013822011755227568394117465381976156353147368926632238096446199449983178419653533485890194760272906098477670188283919492256089163777064921090111092199141029427173806536853519859936160629847302923680e+225), SC_(5.19195106075410034290860984504733637153218280246717993248425635237416403493495318589567907863597845130750552805426305743614661189702147283741813335142860258509308269781662847293834728595455208727081878775197451813729921978144441269605318592415485793856003553608714984355030531049414976690328771919030328500222259845443398300762464777894624528249791401507146478046353231433105665917182756627015352926874667121048774520118948393190128289917395422974633167351915837084164576054561860970867812507528309584e+02) },
+ { SC_(1.34035095214843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.76598204812591379793876223679444078853262430851184176754539163761576104963595030733709073046314624652632727924691401224493533106391708005900869581172982911504735447581738915772003080675668641109785459887130595297204140319103083013549864159762889924606591210223813780057786834462548165187477631205841284653024565678833477403213080316183580107319508037372389034956734737668256753103880241932563617233055230365176675939449771718150718882027105331966170334767838958844427133106900834468556463786935275971e+226), SC_(5.20952937953510311612700996652581835187129670670525219305843861214251304631520267187932335943317776423702990089389840495886950810255579571748485262032805903168965775875734411670750100550222166133984562540778446631872610909260428625472595414222131722611295118606849796262580383861869373865597195159398022742273526431038380628536123929447576022776638903828231378868581144585096060415344645824863351043374712194542900191117931870136066149529632894584675792095636941183422988361538418622753330375645025189e+02) },
+ { SC_(1.34275268554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.72257672426884828691799342524423336714621224328121292332405965713113755032186113138530826219867084086181998285740109655389231920400434217980485240762630362516318515206518608895731337543107667246119736500229194697367417769844278581944659860231356492841519374601754707893016975392475518372240771501381577105305041110485323518528774133871865878090055354523988957242238120540653181509338618549137646650793927327789520566641048772697724056450200705092957427006372334621884940334830557330923184989481075378e+226), SC_(5.22128650196882834780259459282760755407083189900754238934391243922566314403107319212937612503047297572240803299424682178101658988970210123124514168813678117747463815253795630968329750494814497716950751389773842284204492352152745197845477388159371449629926682349918291639471700629500236026075236784401238525544228303087377826813849169893932846792228697576558732868556129223397927663038113673265617059961650735929834996007973766584756833331457422233891977712090671035632865121644430763840525098300531833e+02) },
+ { SC_(1.34866821289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.03758299144100638981185218421401545048858039481957536450374612380269573236280572413492140072301886580231441585024300960761900033108759439986269361149796275039952562150755856406175298652045027556273869273220383518259909901841567808793911274758689689579058306553540568423349241996463204841712225101660223073490905528769727834336511067903286578939532730136204162010869784842499894531704016034480810009720858585593094766121276753436879212423686669486395049415023005120719348180697872547142370502198539619e+228), SC_(5.25026295164316330412148519325657366368341934191738216538835689753718118244637948844029887933590653824478536507726517366715517280707475985040666990300124488759842843675068931885421203762075092808398239500818732566913870839631327080470586159287657640540603782621329907430937887513962909954497139740333551395157204757935707524326186810806941798522726686104974995691572341090784797510421803675247476639268699340282910305104132171213490831314692011881124391726077917804990741090076632485651333706549098088e+02) },
+ { SC_(1.35162475585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.41980376428646991328403638285001046532541402055318879407523787526196609548782003540736420797312273330747025453433773859568195648080910544797809650823656307940556997217802095934416528012621274676805389838875861717386566374813306011804631755376966636171961046158493908287295098146052007262454837398730973136787757242605461232162225787818324467484620214344455285701914485871832461801535652548797585119173068598820943528138136172443348282911091890227275919280750941144920643114850046197721529498834275680e+228), SC_(5.26475496500526181283223415222931159541474564997542783891234224056488099012061586465358246437404585773392755455671466230019611455028822473946472827901176638302255322883082468946520452433719767478326435979014169829059166262878725946001872060728634606060222396400999645731037033449384300160210919895137357153527340054334814098905421275806946610206047604319348201515764380435364861087257454422699435684669676461222307408958852208149679997649800199413405241735896662373831864075082814473750897919380010591e+02) },
+ { SC_(1.35277099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.75330901893496143614480518805021597187220753373090306683623319348243653926755583883821809078252803526660189342177950736963693693418130116521832649223825838146312095865813036730649544678390516412698226308770476471718791195617123322190470103338445472465117667875244772983987288984220754698497563195323971592519002190858693387971198535601156597113239528895027697549041116230589151999239027691989777808200402329520469187931248454991509338333394196096004148435650634439170607672125930211460818875344878619e+228), SC_(5.27037520925066996144123543728795736277209313561233520628514718710667129879712146192231770243356551669952438664771719040493082214047541521130988719545217800317264354623413167385592555762706322082258567717316963570751158300472206989689724105850881671486491348521277463794950583844259767119222102026760477265962584199147543111581892773291923102470529963899022859734152285804769121827324961441111535590535592189163462395036379792298521953571645039332350187185266596748506639369174410682033255965417378528e+02) },
+ { SC_(1.36809814453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.43665838167351047881636027667694075448999427774273904740299820753970460953894100809479985551588964957306960928805136469924980953880819810833590058279407962197780122638840505416894074609086563129092943564808390488159277136949221096029113036812220956185572407900765503236591662061061916852854842477810045932391848299911950430896675257899862204466940846948382906025354509618691220425907982492301908575380438135427647444247259871750976886865939605259140731189234797205329218519883224564238500581024595703e+232), SC_(5.34562061423232935236510877152296042596078022530607434214664258529691271359977729440850302313542229637342234080210374018623104298122316086647596436295244701395423805145032376676811315322200754593884339580356984239803557355854450272173588624647335756403674507959004051793289238402811538245865888546753458609705052143578748768671177989989096831031565535509057569105543849401773063950233686232012830592153145958757653871091668532173992683886080217342604942002650012032334072330469444777330514617803964186e+02) },
+ { SC_(1.37396728515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.57445931970806583250984507048609472939434344132943111073255083654200899492261863816284964557987973186677399599108698857436440141682472324790876275332614073610885728701014285680660939997127797911824164931280689027600115789770298691618495447837633152318797839464470979545365963361974475998077738567098254810060480017073333408534359527573993333096615594630471279868218917060537792368347184506660224588475026107066059758346687104911799550344066179802636485276455238679107330199981626929311674463083068206e+233), SC_(5.37447966206752035642162949220887667913494247099321037099782266542594292623021717676050787529532715116178887368049118780665173468283257864146805822002244854592284046168039802892090231212639806654404359978154257147248849470858213112883265001894460743735137952859232620515109968476658295957583503989037489853223771096565961197376699581731125653687887089436425254682248503815299994549638506042855321848386908912955900927145521952700624216313900629597683786355911331563926812426498370453980352772244091287e+02) },
+ { SC_(1.37549072265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.44739806870853855798698202490950606864695117593043550715097510559295232548813664988316665395531619594176287444749444108798452533131857204642671369527004246152238118820312371656837122966212882675668465946859327741171545570202801585675147673421402231485756658720064030527113574783158036247842455280672211892472301354629451152297962450562231788102097454624845758954245145508782659373286589906093172497711014545585098517359319508684005342264391315711745957599603265739304655736626747812329821100113006264e+233), SC_(5.38197464743701669466920822675248386254972181676740047863698971663268651974554470534078078447169258855611630804254247428232364918849597567871875964441111795503383831166191423768561559012434898026793764689292504509729337326575781027128117943992819289247698978928126382933073763904592714881014934910219688679028640141885433509627429372941863297642735889821423251401065908010409591241126459309471086907469438253362943015748884249078474441075907869239597940269825794172317057667757399080180481679248899443e+02) },
+ { SC_(1.37654602050781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.15610850324474368845825869389237559430406874889279829247883587116534495511797873234893805057999315374032893893325802128264373371567625275567338160151235408720587666700266970202844234236259658223533617213882520561768822825151625138229456384983799105486798915709188654367736214901018871450295995512195617083052005584391228662521793810570017633499857746817609313185426721124641493532532740745789683793723837348322202913340405861516351346814135006965059436198684684966069535318213110411909594630632509634e+233), SC_(5.38716747920140037545182738110377392481973607055341550468766460051014501227627619520670697473888082164744968378691388295036889329356043727813740600303617277934445692121712859838392338379682839092199608515884007571902595422688150659151926573365190816934832987925104354270846739169599050068020636673931660890078580947461574828742683524190435130009285480503000814762955133740311881081153877562610742025345655822398732234042548089087632632537478252641951318926836481942421041203574565831352909552782796367e+02) },
+ { SC_(1.38742248535156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.94137449285935962923897980881150109167214923436042568057576296930025026633674343917193272859437621196571434178851106361353872539709513063363868747070231790985400509048821056978318710066219644155909699640440830454779830661654766985217725952369183140008441143482827248282311253610020569721896629147790967524890801433810696756626692060910581735656031175688825814405709168176964891456674090351340369813384160376834612425220281506935093571689423172270508239929846781879339155506616628136292925588862609393e+236), SC_(5.44073478170275232544960623750237247802973930421719133513177896493502205239891881569953226928075093059226104060234550276544509721821864387663106084487147418544635302635683849165411433837537721948876332331637692495343785248459016956878988671785418434318670591872540493208251638789808096916956075163558173926897176055610905089961134607376039552934917930006620734130726038566598550633358290330365783195782213973448681712438587824991594267676148213376734117184065384402562995236742493686501297157101274039e+02) },
+ { SC_(1.40817138671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.45047783862578016771187352316626250639104856503213692940797510094367811683719859371837611948876052889226978388589671660277053201379812838972368868385689068845270488840863386270822552954623006676716684460977619901273200826351757795518310791697371917769666310875915754336145843903156930139978073188934850126108047782541958567841244346147682484158518251765192667106466135047505965766946639676562432318269581456593507844356926543037322049512536555538390905621026319426551197602354083076580019817187774130e+240), SC_(5.54316125600214799588419962417945394332523267556118090767620331268725402488585878663785109565964379443484283988603046143449079496173647142856427776395165218911751915669336253101281121875785693175978516640099613017768900115795539500296330299124520856269777844541770601480926945988230544167248478263819595774845641516075781269952172308738133777384625547194894635615323561692637434420220048823156913290124747030955807793670736745671154828320011088152941136766376276172566953679137781943222876723814726228e+02) },
+ { SC_(1.41276977539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.29769358197437978289305486828405415593744927224137533421831744096268714482072595019488151878713466297195803067325683594867278144259117267669216271022979525455634885071497709052317371327844232599879493249027819117690288351866923957864254062116454398782338873217268971517767278611167863097447738261861974672168330424639605623446447709583953653269238481720372824627698880292174467910038590456941626401333325664483155084954331720654078806281686076427405275619986065880807363339124300916663793340207234637e+241), SC_(5.56590278964195363055269190813350557132353108454816850370504212598847703736686463269019180345382347527146231458086393692201520736331668808189290877706107323025923572215186361662566575032119908704324689096914199614735075665671862846093075373454056027879605986530987528638208952705784056489726487166045924339232284200052452678800617599413718428834646504150666420322421857852133816613033713612096579105911460653813008349255145140537231944689083118545750975574875846546891821496575472134896542283953354856e+02) },
+ { SC_(1.41587036132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.45700475084273847824800128949600201193728211676650893383703940376296196707616775460963979387665332250851408505353543405797770371522415314044559061860640290889595020145800442452717688191084580220776684619492249010351273719817504537899153816768661850312452730900022703765789368194538916913263249469249440220255347495396821077127844614725067890479740494432586424591673258511434380055449528918178700376492848806540555098630848479504780748525545422396164312336546370069797912169798077768305656038801516115e+242), SC_(5.58124535531691156358956295727901729015506539956060851209731442013027776110960844689352660619743478047064893828864590892880111411039248744313506509692547593260858956437839183313439859676036277217218579692338253620069842885145918557087647449565059328129795916431330764520212869086559988310558135602601545039694988694691631307700471319706533106459300011127849105994462310176911769253362342042988699831723659352410467715100722497117014805512706273364667515126632483543862981978943369630354581749601486703e+02) },
+ { SC_(1.41904479980468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.18277659724864023573058199938725005016703241663239935115555242418220171212135112646305947850063102485913655275051836486796200773434429814327002908164764694313054284416932532967316622256652252154918013084591713511558403037848638293814933171582343066678380244082149243054022052803338986675813327622484944489910631057012470427768696858123413430849751475434908731434292467868829860069291608743431929459951034297456950375548090246519738247005570808538267041289349701357231648624558698147475570190605941087e+243), SC_(5.59696042320462978439568756111200475663886377134996576357804457203011096684033312838694859863093553024713705778263178569957006593076761661734563525640132532452211577248177154109646786029086660157725508435204792532722710493791132947690964846647255357603782995381910697774475267480990322814922974293568357886774487856811576818597888244529153401179186252672809621345169721605047079863312166353473034902596376985804904442412811868887448608869454025892661586972785767049716839190669050496289708916166669722e+02) },
+ { SC_(1.41986633300781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.77656396584746773810737763234272186871275885715203351598530417029865248456108801632671238261817957872613456664507949730737630096134874716558337873020333155609917315392199618322278544157455920095366877241879319536413766792151195033497448838611154021880038869795134840079316970040445597134438351706274525046579007549954716008807737920162573001114168187522750910778425694618872313532377610727503249367402529561172729262904340554323137798863284651190187993266313683732031181549860389058468449515394336613e+243), SC_(5.60102858740052815335507252670728605456101064276882282423270628984738677282705266640353715153201846731931501529985375769984154197255945559179553921682570616652499539841726163456472036272006298078657865914422591324537250171736845540199057243018923351822710363405301840808518096772177326287216662701012976439963333566171534662702503881528405544410730999299958281750588785448427750777596333548634424573673251670956704985134981663192922835689964182975431954866582558727959277487365673323689895389978372552e+02) },
+ { SC_(1.42427612304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.57870043752239386839726679404420067362103046088107575850638678988832376786939927292949624462590888949034872897552392220471385047650198209385052357152717232361402013151131838254506042599922557021522203836604724366828171398195496260361039842947797321531848898456595509460711058701689033764906979506725961522004603520277924536319487480724263618108020449629489335578962994168936435425940559140677298813409365233961281566701722666960021003137255319724257654134449567368560764349753299806583694895082629591e+244), SC_(5.62287364691243587470418516824702690291803865057369160930517009096543310613885900814270521761820188040079087463496297314973424544697940898240000952686179694874232131262568909826911809714242604935869115516738410465045064829606438287978265035705635104011092898510011508515128175847321762480377743984218712844183082888685354633353033343702368814462795225840254844117082976217461960252923189139447784927849067102167408838543749435085358111309984233582312292772333532391378218839869756553026707212646753024e+02) },
+ { SC_(1.42991394042968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.58274727945389219384319561854077301522517933430308853974913721288742414638038643710961668011192950919073982455017959454314982046716644999867729476203086917034953232635323996803108863433145158622027740562634056691346529093065748054619201394049768310190120219008587950787612591530405299265360972075564144649730028390439634124490453657094040064774134115734099148027010660153989223513543358084719105524162221506603189279159826755642066698395026788491560522275176546664549031330030827489366792944209215865e+245), SC_(5.65082201452935579386055464673827161043102786912112989828216405327102864980935234010101817675401404810570397749095343902510171623073877304308522566803776644624933433708936493772646755866787686022780705666226923753962424323139011124440467120038633133573520308696615076067682770635159098067002111585312510570323114742145171374950209137328806719638500202143174441193691577014288589245547536497236184245555194037361207570833946398919633703684652413081144011374359706061953325163751597166544102049853137294e+02) },
+ { SC_(1.45612670898437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.16995178190660470435013968675654057356100423526443047915030442290477885930184525474088450947700707439590535065674535106824773220009688537124707117771163514576605288123717067178670320340096436709623760290967152973913655611581905741163004105168615813991373436869440699128068453152449208988794551675140202420862219385425129905917305100554048419060569258957398702547464611372151334417605606083406430554977895372524524122522697297127705608486291636342174641790417051207283201854369808936799623920129087652e+251), SC_(5.78105820877420254749018375118334573088180310531321871850936637497417432028678014727547139459642045723422376250837241723845231522704894837309175381694580815979227625387064870197782835254715872148088476346944444050912188945000544307533987758164909942296309047775799958061128283376784026199068715674052158710042201798342707251799089380226965044256880845033520435804086815865400254156724737804125780474293752006393862736836350364888814107081013595530656940208743443043610026304270263460379054106949356957e+02) },
+ { SC_(1.46037475585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.69930605328247784982117215220054678491661056184636042881894505549034812297590622214457938484959346899003559534563845448573036077005798131699075726666607922394799460051240397075879646761566384034086433198905900908454792647076810658122571127376004507690505928563489776258892148234324694693825237765781497223919271315876177476972843059879606582513749639326798714947885640953493053562372224253994285795790891703503002691869858697528467125048354756867826942396363160571134501900605040701724274511833528359e+251), SC_(5.80220912683556918050796809047612356322971511901138834716315060163991718224752307714005300946768648550179251688727047278024879768584854435765331125546818016132028274118768640446647255958617632633138022820716514764039994897626842474300875086256234584506012124722044989463928198934591444333537172423799209759309634771723494530188279308103341596078070178667937026021872013012533565450344166010882477577545424971058180456400883811447349766507230520901879827691207081331498132925503598987639691357581146707e+02) },
+ { SC_(1.46270629882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.09833808080703326931235501974647441569671295832319519721588610852023346320413283437815113835289088084247445634520575187616176896703878358661268752066563599963112313631480845256454474450059557755162136325216130487396730150025349485159675820857574008820608122842424588512371268744459507483184221425045236998101418458008989238675188688553825206667848231017380725458251129105716305262281243625562854947207889982588869175940821849472906561997424713044310639275973918442426991990997306461733717003965262853e+252), SC_(5.81382309299270564535579676081707966611171658653017094092827483720791290619450931796376715039417461277943213990951541654251641058256672068929863887283386083842584878856037804814013991835121051738643778162387509305336396760941969684817842822617959407571849173442944169183361178744288803625942429124646726715663777722709259287537311638339801749383933175269192971203149450954268678743393795292020521587007890073088982866139201967618214305073267348845300522207706333936760908257989610506416548415479263219e+02) },
+ { SC_(1.46582702636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.46722428839224364933445153534390252870263560016896366027344595127107415532077675312494028252559444975998945508299618570275996537740007563206032175948500220545257858159362956203884753169958377204702816406872361704080431388666118330226598178503070729088243026366043324511078631406641581821378158693607891036049881762736746429770021390242379020806818043213303084346055539373066210176590687746829845279335842016544380454427052545373244239247460904888110059941673582368553717476735230928940752296368902006e+253), SC_(5.82937400904124313771857658654680903536693350856720197044360510436432724146625327236137374195694638060678005070192195002354093373883939348211806470283647138646535187855898367405801269966834927264039465692194765127396019752349703798238500865615926967160799080598816049076671359038340777318838719564116898836145851137469267927590924905339243038208041402245255562471503050204505849726751154277069216880956460420704787838223766273541296860502599440174180577510684058169114331727826317860586971525577739562e+02) },
+ { SC_(1.46585266113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.48609104746852988166550018522647705856260853455374177301715633164282439984896637588038055978596733176310255097343028002745264678816222429336552569748307950057640909586383033935322202461828617942970802476309786698868245576379962838221351509934868694248666667209792725178334132469780164580670388246822408692357015442925701820016667520587984594281813978332857223100226068316157674927623979100994076151380045439611853040289281376795624912904587499703727958806542560624448511327027452622815149022017351978e+253), SC_(5.82950177742079433013113852323287507065521795992990305147571429997518635673349074209971445273450120058169771043190822032926913616385411425235494315265651701047313263489198809839157152895827724195170973899369041631236139905928083503722369681635022517818485372405300692090518030025984650759238211391642117051685100914401060570656246564140506770730511271375283962498582542827223224016319990947595147866915442402996202075580324422047466793044978422841282277400294430549734597411656134369181408603858038016e+02) },
+ { SC_(1.46775756835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.84093479350024209522349037525735200399151710938375792906436280512937352939991230271288779253868690916905180678243427634710216405473907465133213407395299253827011040732436337617031279249861273085543655590262979001746203284896151880852861121105932693354047959815589964574229358103147332960402886162926110737312691716589804750601943575394762647689223408215611376937519384208658146497082212655168476929852303078626676465133482117480364036078901106615139450414686138643561506637150677815761043536708533998e+253), SC_(5.83899744300274859978282451379423423153003139903429419682115526211067217784284204454321960341075305819280505490827110967586029431640699849696412280626068153034782384549707731168609841584742927512660419959069710682265957906615876532549326784199518688629872661985905703316211784089687469299852473035006646465667083047482697426908069123094829154322918776593162934167429171673112572972724119745301364963181498560877517181896682558936500142160350330340530900637773058574094384879091290912117821682712579185e+02) },
+ { SC_(1.46929321289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.25972461618572822230055612922428436288638626870356858399380923603218491353622285046487399928626304488542635010922555058640113039324095555488374606558086963020613198643118314604331095454798679768015009728613046497261954367491947693198652406641730873262582065619232993261055006523338213587231626658028083596400829750002285407860157932492891573013039634907981705410947701442659940919578843369126428422701136963127819556383495292877414459417857088537806034143536743700907393123798126975927264248730099929e+253), SC_(5.84665419775025846018454293347905981660681838116551024833634429221581591042649057686760451311760299022592227952902681244072633816656804158285635847122214924526185861123447212451694330096630740199026114209195974537979150411418232602107009531811786352415832054571303482321770889913203039756668385306087847467191198252379462097592058609771755564381517376889222807439984693933255798084736221051686366665615876620611297807799660411550316488115159185423785886898249882701387614515550055663747246864638134563e+02) },
+ { SC_(1.47090454101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.84483670615936102545753884539513053089700151357430321642648476001264799093797281289636104314979677643557260173226794005817099190456625884360973075235766052040644854663723293806762541728047652177148540154587574909357024795826527797265908403825181199585840091075653718260363939384873215253003436210696043894522919132023328399494539233266095876892342791400063712975033300088402085800545553728014319097104373943091383410109118523472799782073410829681595966515062699967298908460066524617615004730672071434e+254), SC_(5.85469004387916506343071426061154024843026943789425756614569107533609910419658917987674983489943873270431728270039707319467479857211834219922771970924193128292570478900929839859892101432983513223218658821830267297956573492472671082998962549618398660634609274923794451229705644482477414966655953057803119768913288192987981056495152214520800757780427010345884322676779043442601525338199010340209291245316113308826806834747533443924746788689222023532853101215021580220317169713595096984875178176143035440e+02) },
+ { SC_(1.47176696777343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.83648028920450890375408717088234753371966435344750941529277703353771836887905043538823309770995894520968992077022784333505695588252812429540902403587143536426134461715372906996871253875377214202591536594401482259295743122139714002423954239526949389062163645976004215458497879102089074861778164766792510764716390746000695895639804042560511762900633439965557987547831252708309216963101367661361822428355393332980931173739539517321653508992083271558006366113171918271212852138989409090798747755632333352e+254), SC_(5.85899177569263106924767300699652497374739484436933183652120993096146245964603836676044792829372195414144408742853762436816780122889934711794856382587847949014684449384104305880256816982826103832996051439169986296760107274839845592361068806859924003412818815560219927854027159903967001985449057858529989742691061079330366875160748795349546962058672577849208549697245675650365061906972821447097300473888185772933805901670502032961608288634525713334961574899167164424470798708606253617869331779988255928e+02) },
+ { SC_(1.47259216308593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.28111626837909252696263042706334570150067940548590417532139391797060305604428969091763573841265804254986576605459362666003642615635496092928969207031582498947220761351876404828104238250240183696488891108739699178678661133265321146586192732484736568488518426285664739142989554684468068813905182262127822740297658144899430935476957862868393662440683042929944474700452348297411520682676797379670218760318387140915310464761907001237314828093058310203895564049986922084727721696443734094289785852901837901e+254), SC_(5.86310827406445144203688054657583993102936363273189424952297552413631834722609985053314254378278748310207446818136151242606164682797345826916657255286853012983395893940851250119441549767974392299134505592331689925270770248301527806477518951483009433467007589642002331966035283593134642187675253059005749579849962487556870376008835813981269424316584261707516350709895172640167464935090292269861639386496913842514786877503500565750491455561370311951036303949218184789146422152885424080349997235152416889e+02) },
+ { SC_(1.47732543945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.54362793639373123432094416265996736888137468491714292282000789985508589396613607985844566402319270097276582972640593182541918284330852399871568702239357404001295099544529148712577772268395519116654494859574221748217352009970650792176486975023125084944274086603763835720220573953967212860935235158236595599580448416721335805424740350194045481697092227809938398723229137494469229561947255112949746257768707256033411199390241498757010185223502807698431815195483610943471760938529764541351535351628752948e+255), SC_(5.88672924511353091942424433079318880885850012922573636584339464289461983154784129551304969242447020741717937992853458631872358037604165601546405430052077416475250849039308527554171290877673103039816934590433186563138907391706230487722781725212669046495371394510107989850450062718078475129645196592697849849558006321114398441259570514103139218002749080521484967283524450411138666894772736176590731277705470348047425587848444981223329516677526477565567100330220816196599270891263816986664580503212239250e+02) },
+ { SC_(1.47998046875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.71048098317977644828980598766163604643834804239003638424293920757546639295646122133400981437794828004393024873252894735372338383856622283917216982604252196343866010073253702845147668210012421852718140009968737478458712445553945785503910790073763359204541504731421482547056897334089793377437382016230893848793849694894733075162819824653467864393679870843748989771965964001927642393796131406601881107629179058475352634430970295605674474879810203113920036858186773620088307400428187435712823616818004342e+256), SC_(5.89998558414152704736089419182709588911661208437658892788029485564231230229447063180990628408020804967845164120562530985690899501561086625860220709996115117311442547000691258000214603082660863682885157950925951668935955590567805007370689102413570560556998536631933543728540270010027691291985758124452380146865650347613841274699137150345741773432893447513552177489297142928738268132428790181860863691779546263051445114611355655308330760203085861954291276326322150834747000547962230731341289744144121286e+02) },
+ { SC_(1.49509216308593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.26492766549459710744176949193928115117754321598438310343119320191045676580968675189420007617661156542939261296099745987225078755863354110839563667043668744425058948609358004260906709325970889925907191088707121105772663315151788575333069973868685525293754663116530280872156297326431128346159111632746661903260947638287785995405943950455077043693360360235781568782919589997589170741415278870763019465302312066371383782843748428496349541592089056506114570093010525938495130879301433987324535394322494613e+259), SC_(5.97552776693421545740946098710740735472253138139586244451967343752698326895427880070452104872348601377630873548506825434017012088315458226888182590589273685874947344783897343493109440960064711914582372948120075689766311683082827805920017997842008105384156337896001006126813987542435527100292777885619211900623305492684919034378077403988460983157846543110456968849529636108500344054712109904309426907680190926820852901530481096908997041327826895250599440998178099699489686559738666854038290723255069067e+02) },
+ { SC_(1.49563232421875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.27825223602630873274361627512830742117155119548498076574990571416917010288512787206125597410409756978883789230768419318012509861271900829027701746401255448106722258669292365176045672517781050265877854309300887480494790128083952755995096165863147573750945040358984614668698916603078624780083846786685949787832362901918896495720073819827354752981616406742282512858964235949967185400623626066466309414320198521209778351514414293262092985938911616350371409856216374730191336998574627954737343814605551048e+259), SC_(5.97823083655582873358225236747089728209331301767346327980642759114170987728554227959484379910569262522155546406143337827085106164940148816611368559836978070546163779096071370339702997310635998561710009171394831454594971516618815771915423257751073718119204758567560848974206520953216765524007162624929072219930637334585097265282923974218034213725651988607691916695425401188165449733198195495325916506347537327347259960853512807953803189877500918923040039203799914776737179504234110160844454948611311997e+02) },
+ { SC_(1.50956970214843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.60465525387296632302040777223412285801137295434966242566431979827406216982641703452419152730310909466362257007704104578258735024185415723485793634651083057206453115389252734230743196440101353311080955820476991721044635409467613984281813863312752404936168510516706567409395543910887825386860203988192333310270304479242040849459860040455928228289441423289304062534703914943786026693435470652039505916803278936706403318022599675311646917352702002915537372277716830784963948437641693482957378711754304593e+262), SC_(6.04804362167907908711799449340682862988324735174584269347440552490720685120262642282465320593464142378877566183750451189995239367828992100557831861543740978181245519543965960414384418920503509398655384927989321398348345705816946834639388569317096449126775178535667070318627470350588227410035497599175803467870984602299283550620747335692058648613113799898670237715876790665741667924219493347770901735216997962048414104963137010150191689056808625594784062571160348584000324026469279724942240423445596914e+02) },
+ { SC_(1.51098815917968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.37740868121943940923782966908598434861040805444391890361217606732282151467151446344178152129278528183562818398181501048547796861513091424510841917186568323060760599248596196444102768202383178532413151920793092429048100592006871124050220353521690572233254000779945066500163887121310572985767468815429794287680121952312212232567484123100591117469133902082335529064838689479643788241744787774835520116617653216737177703142547519614025479197713530663062364763432246838953596196896849927773262321378540392e+262), SC_(6.05515597829293352250331869186282967095714038368933810258159517348952534823903383028761690496742448749008246009604915295982979901952191675913429840684261303208307611147658168871516319712755190354141413776098136283649715917903242377946844124137661530355179451968619270840785385998232315036789060810897170470150717324222695890259368201594254359167673473851511202537080684624719039039211405219131785663636942283787085263364073738714983189926673210950351174624381231376099486883642661372961738191999517403e+02) },
+ { SC_(1.51431274414062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.96909890697008352319430956223990533679861037540042697056820743986520614063546931349696576202887450564769554191015324160534353149996433631544761317481796241673928503733185483615855767778468106036648607386465626856497358048410854987136835271215789259183483181758893383060851109239266534980418966242269666667772381167764251891237110061043017446372101096137511855637503933634050738365048474775324107026991113823639696161002109910171882129548037904534819703529117468554973299827624882767407008303963501858e+263), SC_(6.07183117974659900709568910481377550761006130471519431174407355549442313397923882408151812299512903349365057172585295502250869306093719448749660506424057269810461561619496775458900178194330070164902164762869615110209864945536562021956095180200360328476917786617389143147295087680965222311692896643950690064231493658954033605908713183432166313466005434165582816796013619020790117077884427468306833560323003805738127953268606785061048548712152520436001935021736733585844867115048942065844805917752167905e+02) },
+ { SC_(1.51649536132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.48556076450714618889441679609748084144405569440503215178135349125970286770304809843729836999236512770499832597161673194436210068911618357323646580301942325618608990512739004747019452361174409273540593191772376414524691766077405980583485713014177944994079155367629078092705631817252765451282041176276121405723187910609243399049495476854825753451412909772939398878113990705289459633430454709733094808340334753356598332546814162504030232058504815703563879778069164666853090310189833985669715581872100078e+264), SC_(6.08278256870599270038041620369942254699806564093373580791795496340915306374908983692560682611826092144539663817736052814832053871268208746537378782233857817097861595993313056246652627918137454239817226737292814972347886316235759350833107679901316473975688396316436046269089394425659980912459504832990337516083013704658381989092161407062008229358948103943028387939668832661718616320092501121653635945650399409457526705352966657410287510301508815880034346346171918512479908455755733184367026447996356354e+02) },
+ { SC_(1.51787109375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.96309635149365794201904327560940983178987087583292973957995881805226670134047631066819192679174720736103724585079710826659233358341405683959075767980803597841250764852343519505110306739935884141856358268994355018856132590407433282779506907499609815935973453065289949682627784935518270512041597188346000227681704664812833455020100966056286928541715678725563883620821938615925204483255330142950792854481108517723976599264054524460354301622825426424009562840774759159300971426192646744565111253398303584e+264), SC_(6.08968699336713414602526015493090477822944607018035856632649717622712005718232333523088611967562313890308819921605674758028341423787568807020809895292643673026824314590681840826672040269147920944436937137475957216745232637583959533622246674618661252534585552142236096776224943793077598893061629070168295342149607222918918272486103929209622360145244381839243373138808990053179312362223124980585442928686745384707048208073046291700591208584498431108108438120399799676750797266700331902208849034288672329e+02) },
+ { SC_(1.52357482910156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.19414319035371951885126681686728391507451976968617993457141946940047800099128053749741557987649775281529052911964163825284549824613537166467982486762647847691573300589671154870290879078628488146255288491454783153962109865269686037976255517235160004697024222671093489248877838100129107627588525527786912406671937133019820183507090421098718390553280199887567572350927461330085896179514058076806855938641750002120721101671084908269028010397276819524071562016009384006807211584183829835936522443924798817e+265), SC_(6.11832581324698856682421476020089255570418947412117703448713332472659550294230401330014763279275097287369300936961095275127975050900609048980848590046807184669360614810278941664125030147527024332413885084869661385057787713510170325339927027310394996173519769181485618755980901512378172808603838145598528189249493737257041140004336271437647952287962615066747611054118016097751091386761184191614218061761690813813876646244242841601070728057283766120787953214860112185678778531877322640463934025825634788e+02) },
+ { SC_(1.52552612304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.38430190827876640272358129386243549342419577805544025076548664607816215859365935416703033772674947799272924727020208412219941454166360694242322301526792588993439354979417192188181881604254728582603471519386495445748060233862793838449088037480017760808293352577454866767305210099818191944871452375690792334726853720842010883848686251995478650482626671938741027088755450219295682032933689561841963371523787489791494559579399853350576714070987553523124588199318436032814962595067254515521870708217762459e+266), SC_(6.12812830711642080483306068086943581324695462016662545022159548353368465932470530397946721931705532853802522864002472247876438347984915242167601518014132995894553106883534759325478952738694474766162640219431835417473541585696375188263222650844035630297593100308284969344189619112951105308300577443461349738245559597737616942289400130428166392524405072755611863262861985827710939861281199744917406663013620531741598218403642819299337286300776430864037591565750179760736128689392750435282252531095629809e+02) },
+ { SC_(1.53231445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.19853650398934345238028262905078467589108413424774000359429266994114735048972543152523759196618219340188040492200313220670718607029602632313753942930122771860148516588697009269795200837958159172129921622913878329429323674793743656179283312503881154092360537038386000665064492339734469086279633540202386117547255283141000345760429844724208865010156888864760631932877276361440687954906983844598023952813414773416352160908689406230851377324978247223823998801818990247016420506271514097280795818558705053e+267), SC_(6.16224955842545105140340908015399544611842948249828336947582842101639995439450096535987873927514663479526950512107911632363178655953524781839782003918719458071690292893812991124023992862607904019678625256428677671844369414300083882332378596310039727338448033959114839571493820725718822281429023129120373115369157231627915138208944956018402374758114969161466317459211510295207658618300820365890643525465589063915499078001156874785150137986933790151122015076819042295672778054912565546410600807491382772e+02) },
+ { SC_(1.53974853515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.76780074278093093179077751335003435299029855178154083369947188164903929246860377264245506360661701657191220269765609535133568415534508134809320214874411403245076830726314201689354251430796124512543715793671377500289487591725581197517660102362475269117585055117123468761910117441835612034268246746861427135528337884161240518527546902805713379560668415803421749472588193462392156091540352231555796947096218139708491284640607822699077133680872781774923628508886866937304851093814678777890183600355108500e+269), SC_(6.19965126271215403017510712021366614272196133950748215890193496664440720084702912033342923514042553767072934253741271169857558694435403318461257385656674984037109604838701731443587754931043252848126979346023148766693118380007816446645182060087366433357282876286234748218416545079696738538163778645857508124687377048261860514371396221853975483588314737170836353557877957131440613188955160388281733742758419553655249317836927304648300182213388615657260441211534084095859069539566978134697773348009073455e+02) },
+ { SC_(1.58211425781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.41905086239896348381282491839379771897185719615484748594399376183631294638725793604106194253392473963987848511821170227108501056982306001885793439691444747776620790093339471878535894119479886511798977131649565302591757659652732718075522018006511933923056893034884443351517773534686087063318473844268744914880670107786649859044270623361983326455279551639443059834666747119874461905331152767490796684625738973667049066717572444323161163466159373049621887863357343606637860774828438139983364369474308638e+278), SC_(6.41348018839287515937528663300690217292169242641269273833535545067959983954082570279855214455116116521014307599950184244100234451522569719924376426131519773100596582411190833648767363905541836393355641947259296306765202933306100681947532268188660788264960200351945176267693339049070057820630930984255581143861232286985687219013462071288832683929305494241097571465187039070351078821721665679418617191464418051588057890340747874473215810395852331978691212652389338128410666105002877252132258199411921353e+02) },
+ { SC_(1.58559936523437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.99550052059179001905047618087052158891167074036043208522944751192304423223317564193409652456384486853823068783196416096497490641765403805103177864034980205448591171368896548590422638014920850095508016829749990514583165564873581430083570845216090897761737464607629650013645123138233009088048981115428639511411446334857499823450886187025825513057708813051174298250771572337371902723390612871397812631222171792840435674388031119227665927029667744947143437810347410590573397998671863822748682487437226558e+279), SC_(6.43112135851728244832151577518868890874261871591736840900492813711272937260981853791854267260487112116153602354115614618177820318012964315081967085814740463618269219806778391839396672709343216729614874555583713388497084529668766755692269511757058637068451834450619935666616296063028337326224338283557634589604213877281681283499206040168565212750958710844300902845564997134647200181353483243386262288881272800910481220148345340443659493078541769922539860141451255636421617534360150002145383974905581059e+02) },
+ { SC_(1.58952575683593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.45749575002857957853555787247251392344932317489868128687704808171647281998876655587490414514382493597060521184361960347107322606089761774257236647563624666199800824212854535329921053474971619491015387328608072940992432732659778216706465868820044886565854423311214163048368659265533926012298617795158206008005959480156325280037270250123559326354406112623351079523325882522236465202639425756154464864576555528569692468808578522512373987609323921567870993940411638682280384943829099732932051391051454310e+280), SC_(6.45100545761638686651800600372215700223526769838982972815445926320419354356395772765176500127870343150970450508890173727516863713430148482471146105437101662553982361557321366759916823118467896413909233359221941030341364546143707211261095608443891005474153786364695433194551440267278927778599398365606439848130583071753387964492124722897618375787120211175956720096719351004084319602720898097426811313625564854872572439650792561562152858313184163762448809162845682305559359181219245225506066190024003561e+02) },
+ { SC_(1.59239257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.22862065490396080936595815783721179304422380301723085078529149681564159998066536811074176656788041870497415171879636693215637170087232824230913196548481002247250416413833938409097947116817442129958633244085713487581379189469683330843071796813122560109445757783420558842487562850150352850820965894333597164729877669323266316642445991846445640305103122490315232280140496211168456781321311765115803248241210485010289340270608270479866661132306183063761907880487447838637688815206893677218520782314045730e+280), SC_(6.46552980942911504800358062860590613286828173202450526117877301633603133797016237664034141859633874249237800739784856001401838471480771995026068677889749152033164762682886208156490455299502874925871198127518811445455722526925798015726126131025721652376901377288348790808693416614341874054194319827811647488678295318940120687767685429087744751506794713078897973544728373725890665712804665479535385978369197352567104191410144990476859996576576975677999846498855954439571368927415377103155769710073481309e+02) },
+ { SC_(1.59847656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.36078944795212988200837470943450994016744453623275544443952897986894113512338855075770653765588750083936490104513875299565557929898252596341468098881314145442925401665451028653178226026711657341497432935049664621139930599258285308976156506104667658582913014176035682466296325760112333493454219552259425977330780937756030115613998234824822612223971951156678176021163621951279219004764638397132790089457569105681911042575888913818078518962156191651319859940442019856553481232338709766250006814850549716e+282), SC_(6.49637061232092956498094258221476058136375735813875796293253122026914399571916825402878245685099062194308016451724296739317750408361825573713492039502650320495090499699573467389971156860397607748480740460909967892945967884691582095514669067593087819574760057630689967307758453437070155743108310781606333974237530844672790978266133749954683735095152760209721746051853324766997990798684274708342492240879835423221641049015071457235319166863363025758837391903390263313703309326762439109485222439510164453e+02) },
+ { SC_(1.60179931640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.34051939269127885656477276097440383519388042650301111400421307720922606174575032834880357676050213234880125021132471925699879026749982784166155083040564160341800664469719663532357364972922530068220654841904559280350193190760108037990900882897009293078983125865530233915775652251212611613763667450275632645902936919941385606456437646174560452904210036627499809119353944628418602265835586645641908515967631966676157509020418200087925591888423839551077928819901741882787555415029316122386662072468139756e+282), SC_(6.51322405826390839349123876351238751766856783930439539782166157927694856847057771789976515358693150393969093881533992861423028668898500172547555116858488892029306605005922566958026522157427892059969300794963134964300440083707075819173564273950660311025537130138865443821373383678588207628553435071896342684482316735742566498131117896247752334725725160609412421588523776887312295345570651580958974981502125859835842053615865627433950799866759652948414760457191192686201761190235018085076236355296877332e+02) },
+ { SC_(1.61502685546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.05980347773323497966120277435004273533423308079724584522499949080037599291941784781378390073550540703631520064318120215243806319691436044917269744837511018194829029707470698219024598988707530554945944461571913270597475449810503261880436144734033510855408574435143972914069315928745574782371689215435224753909753976275872171923320365627701881969359270678598908805690230926245374608157469157377493190427514721842167469661578919066456394542789553635029465456133348501808026896959330234679777355716680788e+285), SC_(6.58038428873441440193931191862428216288248906600451558141839616570483487278596656975092619866222303991604977685095006184955845976669547406922887747723085530669980175407352018983133671014450245458973452154534382329053184761772521858348418079931174301771324627842954897259689514754184085458264470736429903283075388737742864048154140515120136760098909899478564725087157161612725198337716047182139456979976986375080187458770365736474855101470712634985240763744439241165083516980258983097472801187544951936e+02) },
+ { SC_(1.62041381835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.36834079790980282523482269789946012466399090175211485155509917681301771846876137270223862469794148354483021088443602730043485733574312669879939440611745966410063757925437229257718542088128665961243085892707960382398945712906224722521842659401623620350300411825868695076229603803212794272973022859369284750788212315287669911015570703445947931936028560393726038783441305945780191617492485884835651992436881293276681367233750887441626129756693547858477311003338312077200087346626663886240806706983987267e+286), SC_(6.60776672600870771749744775111491723636612850537520033516244586834127031644815658701981414824969516596500895806967961734639291800153470375608125767931920499576924027878384102792529629481525682088113565249702486069125339299927492794554035702928515849261917603289938204036684558636117583655482600565310139502287766754079925683880759839919115309399985454693563036020640024057977545792986085818468509375837845882801549997097616830430626053559953152747759867418786956796408250852846007511093255443619788782e+02) },
+ { SC_(1.63141601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.52862428955550827752854992517641264392307871605868947265519462906275422452853393831195266384771813181749165350184760305534007614175903309510037753423776568709476290716463359311238086626354285761866628705921676383159136074699676469925111833376379739262439856075778774143589364470758852330463332873897494704144625449032285292643254350828001082953176783076531870473141873476305543425977576317669168674332043063041114597546973154040959069857913374610539528380325549846638485824509291951457660702571485979e+289), SC_(6.66374767271059086286696926224725433955320203362325215410435606298042639796472525625629099373686355721812910912633484495198948284779127821989811453968043144827050126116420787803804183178917670779625165370574692094428908481816849939840836378526708581937082642684093884245707991713995884292407223471234934910321992410222257014924372253793365789509842587565048684820887290055695108769548208128275132470150646917840697775504123028786850642045170147400435774695291126069443445938915924595775689217662402254e+02) },
+ { SC_(1.63216796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.70822569800788098348172757651658947438132073835720205680174939719911270003501514460188981098310450300399675570161306415174646499748066146337796717130110062919430219708067477673949754613097782785094224071299867038026962330900922400248575469514462338547286298341402675112630742573072294540024127343807374910025590180171659227190137240380361901439551720008541010189371779629187129269914627029268140541879747266785160307840750581143335032571903286643423248807690093105847599560886807001954009607634948511e+289), SC_(6.66757645388985854239812538608925293971332840436628781049775363156648150720472166849068522873418642176034390588814857419703888524756192213349130234629051116553611107678393420522077947982106951875678566404475344283829734270819377227588950380957849783430909540957429632251259470023007240746813227264809333230599246903600772849635885716026888489271054253985828330029536580579052156835392800233520521248159434806163977183901465784571731805963448375547604779912192496115965581380608839983923364473599781301e+02) },
+ { SC_(1.63977539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.78758913570498564436279168274018686505837050427343392283416394388411301663013405873399862331324774594699765776009412231789913405766278147725397313031763537161188054839339216339765472642393648094808975364514371048487920921067518965784053440747021206232341393311070785302346886583845763884137658774141669712692101642945919456052837284888672689105617262480240322054477275178721350876895687595541212753496456486601474224561729308222190835450289469551807087954983239060274280233445290978271300542860286856e+291), SC_(6.70633129921738708952032432126261159523795896373852976026399420289623831411908768280015239148652988330339328617251715315233114505905091947642040817368285846376708671892154966412170314850240206636063239270910362601895697461765861374192280695653878563780008644024544202790907675087103262136203979283389928813051494850137530649564495735509933395054430965306936221399465918252233725823177071957759551702723304774572766065580217416787574262188850851559386017484659135512976397318691947267292750474557991531e+02) },
+ { SC_(1.64064453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.78393077860631738846677656531516746557404574688511710538639189286598140966377286942487689253321148783268898209861467131921127832837792364246363497136839470045320345471588890426652320234862484118934181794911440494994603795416436451164910031983966953719007512882068339060719850850740923910293723878151701597392475602805315235694858203655117707608412328529529363192518546910631340580510122153809424869553192555638904409657095667663923949171964870557560094438042791726423992809368105377088993234436638825e+291), SC_(6.71076125939424001220264440822656344510651821955384936028197330360096844979584227373130837182819258405516050411643439977727431007402675913432547592863192725800513717693603434710025088487238404862822027628260824633523646687014451276935543928664469750314910592934513092521007970672453768839007818102281136043321502456159581064101704481833005653393348412872436694008814452921649502779006451343808306822085986219803548863474233478432163495662888009131618941563834350825861759762277674624942475956604093242e+02) },
+ { SC_(1.64102661132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.38252519421794678176651620442885198233073188134278302676162690020862476484310056002097750646818235832206012913571856820156184276399424324173864527736358728002033987882192640522024223476121848611401561584657748261838416135330798241957607458064467384146743894504949859477823342196450885326002466084022303172518264776649974750321805975137260446309708652197159275291889730155945862040762858422473009715337720705248086449142078753194758385277685013635073526286148734539756421197148231198289875305068009348e+291), SC_(6.71270884590703823360455528965723416044818889594032147476534185266961291226390638308950292604715886655999523873105777675869434976596775656396124505168253131518189474895853927158203661307930296743032662098934478110684706396833369064515239649393505224957843638623758306164462852953469616055357546704379612002408359336722604911197021252511455224662550728350015216998769528996043251498133911120102812311125469740697737732709152597974989518076461765853904817134723884881242504611196656335370661782971780388e+02) },
+ { SC_(1.64164611816406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.63865423673740705997561628278349267384804474286286980915849617283014735406238447141754882435079675732191492867545542551811400246294020759845708148469609580672777397637311443824912861810016311260316860302299544297531657905691694340623642822034087504346832084748014222640613143563402265323922716182076094229662683868104383207214074588444990637044412017108023206354582642762516640671475867295273547320012214869591135305139927403735693161211251790079274589604993790245081351630304207382739053219688833560e+291), SC_(6.71586686350251215368470159030971259431928388514471415506227141631086287093152366877807325802155178189885073231658431160062162054256821720919934462387511036812980890553248234184926945353265444932648435191873951891140930160436331073750977287253483219098916730453918772956178667516990712890317169005974837192436295006958385113712326807982398649559554440941581711468700165822685825881145562652724539360894605301925826774453000678783511546112806694747051230301761302129206360576027367159792900750377151284e+02) },
+ { SC_(1.64166137695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.67487747286202967561025535321478821581781018004457129440001698095047325439846717418223057685814856266625671211813801558279298999781112900475455476147131053613031994610549092773772509500091540711815343121528476215945182841973189881647992574210028212166263008910465645328006105030815103011817648744131542259230806915229182845844038332487186467395637692860704632290986210696202215960176890745996807927307012399814246929369315485821553804684539355008568659255565351748445656754365747112709024057267500426e+291), SC_(6.71594465014651012587848619416903939921656751397255713201701958970145777927575287092175502946780463517844846341644105994095149277332289004988636693179161505214866323304810399216194296797565465327796355908846527376690773080583226173695488553659072899492619898504247676092332124208381660956585544737401721175316248648994379758494139280888180046130120978627377202933718813194987793949349820708093735427291989705533144865651985816265759036235786480724600937355567070504364612658417148584349192729857358800e+02) },
+ { SC_(1.64917053222656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.15285010329225273373430968083662700292106583636121539745852851956407560390437995242539753790547083830624966812118494373591849670859303409387073845105152598708676882840168805775303220764230926923181665486518553108602859451643507244964981969309237059250560781661622002944369967564967798771529062062212271498313583419728807712037275086342636226337825943145613271067451969491944136093227265664656865253877999607886855125478454456201233392914550682629606614735653765413337884052492846842204330380998673022e+293), SC_(6.75424224840962245567910427632098623323646817736188367285890347805443142240396198667560510058234890622638528769905486842972412696676063282492455396179345924248846254647755032148269705095495749014362020599175684250067999439514980120399341306255478876812371361884313661149916151109251706651270602016268724150379378374662072820935481714626932717282925050007358516463027917025075530589174688238697106746211002191708140689392703826637858170538421241325393001353062077998637540907702322499660406933012947752e+02) },
+ { SC_(1.64958007812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.65319536179021890358145049382333830435281976288649716387402807460911116161586947193853408251417236732130649501058184538569567087572565343585706530061843151631008818521354604177536228228131631186793258042933760521081487824203182099906085838307012160654795643509433247392008736741103683927153949100832527823977536185153566278599956693204467645766479809201183815996794101234487805280525848181675655261652411269999797719541166046409442978933408601331341980404519866985562490886037982822078786991834887048e+293), SC_(6.75633196957766261204140164173751202661584030677354174567117193819483440707992236952688539610680617493971098967063610563040828071597417156462348510297346599505597363949635572561375227908713846424647047797680003440943565428730555362884464165983512671446894159736590841896962392420191655220300739643615605790124507690580350235950269888625712308198526545351195383485124912638716197578010187665756702428963564939171234619164715965311187207701242818058180821587008706756117296665807261242835332044513863129e+02) },
+ { SC_(1.65046875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.17555580170993216069659701240356378912992532283629508571845705913462522717362476459342299823434647526608301627805222996829392989715278050548254337304191860835447150420890118299352225976520783494090484848994603407906071676197261917423463501919038473176361295741885015206021892279547608481624187132206041509044769921515746997107326694827636397817212916169808494572754962681715428029394912965808485013585570069104453759787805002258078921724715812914407284935740375752682359885419657276365053780793198045e+293), SC_(6.76086679722855771191708397439999450306821281894551407120704622814581498053592540153563322170071612682059242756078717779408763800653590684793866922368478277900521342210603896985247723482522500271075804056980596972990853713823330794276024880372537388022776895901503271856687399446739635714947052425961934459067380033976522538294558903908048066439155733093834269411373011006012463147213117608325370710502108859381836834763324284688603389368790509444037839695744988180958720272205568985303816724234833213e+02) },
+ { SC_(1.65864318847656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.71198654144943184750018843290107155214748642382624698949739902161872942842656754449525265374194494942558191960503477935791008918425609285567416055164883442286490159629859851244912527342074022729892870584678810858772377474182282937759818649218059797976025754182392121189373588905783311623583280748873649649772391965738994489851866657747360514652992812136877725128061333112911509271001742187189078497267560018445876104975711941469367516313266602946564650830477759919167347473008896241605905507271841849e+295), SC_(6.80260283840716919832502509042538151574490775130290451318846515468402515885297990587064657182045182259858724602178000810750653645985283235507099795232915061507680911458399022596471009051249905789834764907162074610277620252248807341853026743596597019902474364403109961759022642955574015970537755433250292071638713455231231078444202330696670032761551849112267614292579432405333779451742984097732914316326299139979684964531501377727276350151667009075269493993892737931655189987717172432491652881950659820e+02) },
+ { SC_(1.67480590820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.05272068178205386511784986867129565139431700690883193324843979529127531088991345108621911159549101328405406249868744301171011129891859122816720129988015228742897318195774544753749719887368243690243616438207315103188176672826610305213981133436222369187297684898644446118811311953543109443245571289996684640969823226363692523159158762020317655979723103842784261035470621088900158659557289114888682171989055914834864709928482927363441001218072378755817968930356627770406788571021804899915337196183298026e+299), SC_(6.88524320743717747426305946412873491451063761422306837995230657476633136866429224850195311828901777644305608670799914868630448746408655944250193876646372123836377201358901298141627572502387176123829655220874065932883243511477052497221164013721785179052408696679151905908764966509642956239815070664817904762485357661319686401674204783082355154262851059053657303874634407634102879215830394878250445572973555622012106734928502672355568968367103567336799974156548895007883861218112682583272304941907334137e+02) },
+ { SC_(1.68467224121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.64639293101046850796155190551873968064250642422162086996302297566751525534935637498576953882605384394945355150898760255553686070724462813083449658836608447672312629550769492658813411336918827722880742829195220989227541165777803189015869094762976475431410543264694116917358850066414650639613572124286999278137083928761194725710089214898655908457434767312539797120634831768909275608671729329854748085293822761833755914253907341099835860459403336593325345842938801172650403260798397393915738007403785150e+301), SC_(6.93576699783692238613770969440881236385681388413122458295420580102163065013242721571083893264446621557594646851097320112750340347888497191193974162969015202492180953017035137007382532650311075824141311254133390547666485589060885283776488172835452843645016054403208785610700756800640586885428558743047322527749804102433864061198206054185432548249702189281545304988184833522937021613637662730411102892827307924710395545750912437323629462542751089608291253872668471968622443703701007458124745765608997827e+02) },
+ { SC_(1.70346435546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.52784573256719937321087196763126998252072022120717557272934497281653463772182608866741088252761218243919316918934845290049778878130529352011261655117117770126505283054327931050824660018669742968318249435708174504249227255777895369510505125282191626146172621286457835514587036198593990107853152119034404854582337049809970684933897633515835761966471120703639677377344913658188343704863131252767277401285075868948106086062138326274092810458674313633081223773758111431804894112779900549499751299094055769e+305), SC_(7.03215820814096724114069045602758245594300463422780966977131011709797183048832264772841230684748006067721086087305547038329481770580207353734505197134907516427119328044185386106244173057426796725412716922473911942671037043039757994282938137189934979953865989306335438653929026449665946594258891769914798334902696927115545763798472099134253411550343625180228910757618121990170674216143948118762906244758278930708910592816579480588855499343168856249164683179881256711388088797350060516436755525074844177e+02) },
+ { SC_(1.70647094726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.18400407261817092623884721342493221669030070786214468462085156313123368684933696469695484834842677094969164083913320600436134061620158350377100572558717214935445523158591072218749200636722110926232595341196907255920103693913239831409859755751782690079908432490441755790719823383056565482777324898909969365124549273036012932725687040910925680375737952362124935280715981498805113496697333262784068140614880812539257766889387983165080074949006868879802684509211284508721523019151738739990486548840238993e+306), SC_(7.04759940432345170467607826719026371278508013997656560352655901550812712249956154426475589591818200510430864620641235235867404251478898493629948633771209940231688644243185858092179384863637695304876799723407271698619566142850592169787231666644091055427081657096909420277650971912072836361286951502398523428051627869768780125194127805912443580614191229900341326732559470621566301279171497794531779991574584099214900576211623804711965970155568719864215969415616550239480836476751932721276314438194114851e+02) },
+ { SC_(1.72126403808593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.37803314419839203240547220202452497324318685752445985744153244189181780588321249805994317106878976746464991206446274587332772511888798973884799787270993655280859324912859408930734386451537107950981522708526430546166612505914533051504045252840419620176064196551239542237091119514195228463974579086346730002255689256052216087401329591747545732037855402711115744828993596545261030009557407696516292870874930812667638001611310499103745573666779723659028715256180754084263341535399397273234441367908635424e+309), SC_(7.12365067471177829581982502006907282449347940834206791393174900515531695591196607951693856418499691375041812455696772456761832442277130647193673176168685995062348895229045453456170865372048384226660132506863193303983837014166504982979843412660035570463010815555299936005108434039809850136863402658886559227940074287120459930170488424961077039754807088218901317099005040834828388878316535125980831265702917270736186224338561052269356846448744982083463217734038565569791005511160484138571955928144989741e+02) },
+ { SC_(1.72562561035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.24434005665501469146063990275366040691376852763485433476755278826771360634376495809113495885460294860969620139707799020480328136110372363492141486170814672321253197311977354830033585389340203947785876084891931920959751933276093253110687801836757841171238391469250293438701855014660553145819665089536234199774469520388576040016986671996012196516238924123396926765810885462955790434567214623380897770998870500397860458299147997363127880247609464925501356994006541031300339671229318561724353094947709842e+310), SC_(7.14609790344732373472585165097640858209938953680687459805489878704805990316871532408159997314855863458036139006808306883831108350343721093713845845456692985998026225811659640952842897637632847856292549393020977277961828723808656771371587444335735312713589233789352533489498635629806694197944810456127341501347459698787839346725697268692972100305594682016405357986406882768029397614420878620259410944119346394656246734844139687628304332313024703285038356887603236561495296673953221275340416542469003548e+02) },
+ { SC_(1.73557495117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.77308608567355328977497699062279330067417006934286566791473444637180181976628698496832366290433601556434148275973100898450042146306548933658693829407186181216957259654132290756272977351760427619004554996908540193503079020143313436481742869840489457361191204700986527868858118553812000630716360879297829473971914949440538823393416619408529018915007406730442012630139532311098929616710390873105012637639396901671634915991122696550159731700263144227267235368489345815215154310688082177656433305713806675e+312), SC_(7.19734442271104149199189679382584649129661430050143828014867277788106105456574602593389513247616177764270211053900531751289321611213155464235296929691651945428137990944613932504984458576247916927054706126006157714935290341068498008849478302619970275768710207139076710908360544176864247408346268273175470379732636083073488820403801649872911608162203355845200743684021599833489528031246103873396572125980999508326120552136096446840493379683767532681765622085329644646664825619866496324800124154624129893e+02) },
+ { SC_(1.73911376953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.33834663322541729732460545356563441889702196866445659629610481261341009190051957058185310112938975334274567066281071207273244691099958327012341796228793559927971962894578058019612739339935896563181046611995729282412934590809093830084408660988304452683148287437677057677619678681355822149412240240586192258405121999563816809594370622029015669890172512854078592891592989177106248016991009786947215904050276514787509073721049675876042840556462077444246058719039341377896859268060477924367985177569622342e+313), SC_(7.21558578219772119344406462546913599023928412489596302090248584098180083140318421114901339104413526765098732066810143507588252444904808600120912201364826589033647336043323616033452022844533631833758297857294555995275178423275934288103749817343091739261366027185264217687141103098127571939768410334051675141506424225988901225154593260788199587646523255694625627768886038221898450421313010782393550029171639711908221299552745353624881607115604207179645387191798678501370657158374089025175136140182881233e+02) },
+ { SC_(1.74286987304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.62220738429536002180169416581458972793679296351576131551209553305146783313610502973203090358709851626002251792730151277210317616253799170105066796960799752836966561862432469718954968368335099347442305875349124967381601142627346806266405065913379615823527252886538759773577855729101880237968922250178896395374512784000769166702618523501106502843665144019841866146984798065498419781768522334287478244278636695425444401001449360282120309090856243389133618524733529808448678449620925885549382277348447418e+314), SC_(7.23495507004799341315262083422579594864912756717973527304991312009739567920612938602136380197664443476572621035995814823490684903304522944282616517507447476994502599741217950170965925652340366824250234374281866241176857989808513281134223867910780649780894754405821647582396309833041428154881311881889801957076083515438466027614881309944630758936098570679479155819410387366751715386155263245845290096204970711091496386104274350544268068839007744255564610396060912302929241251871411531331548143699697409e+02) },
+ { SC_(1.75314636230468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.26118375609591224169644622260908248994130744925188982010935189519141771048865789231306446145004375062845340278176602069604493180714835104593826922550988963160326626444544019543134682470074922554983879335657568887579557071574476596602514451756562820265533209236483009386699958977364619107819918575959277263195400388060472968909222360178614223597393609076055566046019185613884387367635442154313801477288660598148250685760655854132329034923362783181472244853350033538937940785952474931874361193981415854e+316), SC_(7.28798979630953466762414521172177621176319746533840701154529949578329104525307183513096524066142937413444387224004744433803667584227546078226621568585369770242212642750827575830560736200453654961573779894041075670468264838735283062966263446614974344114945115331234976125399010861314776853121816865243326706607856301199496434007401149484742006721367828250235151345225243713379780185678075939543812799099558712163937880425393391114415284291920440092562234216236149766540365131326992925715347884128715692e+02) },
+ { SC_(1.75579223632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.27885166818328819447113025922545292562588253621020047775785137521449003003384446694715659457957427895119184602163391052724622215840509661374986020443738941575689800720566088137246340643942397919895120473851967269956242843670785582944836886449400140834406152797917048535992307766360746608539877091664922151992326825879497504057276199238394045694849640293625504191245096488532903891986434217570856921700781509648676231901214586152015523696528650059453165284699657041468165917311577636114077555778439371e+317), SC_(7.30165437020146438420948435914349685173252682421556550250564960189502722430464022726274889643949603075628710058633379021597881289785543650412469304081764517703544941153949826833420597716940984564633434640647099434033344397839793774998088352969448090577569793738439677171615761384407164015458625538854635690099910038692182418590926060153991285355658017711508592444459297609220521740929341652104655958540657621838237819362822235782306337730281045169155800187222790482835941898961864344146276849696035926e+02) },
+ { SC_(1.75580322265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.28612940478838613285764710463332317119735977784659402556761765305430124022177847440250963310023783363133733518828871957259941522215671907594138285827899196204118971275960833656968130954879296527594283865196361879217344823543857451976810988633774724185794298875513154826264757434667813298807070594929198830022813725317353376466784326649142999159210350947287487223704445335185738875464598150823052675125268345804486079378477701147592320733258232747006080795302712867920514679667141363562615026018644175e+317), SC_(7.30171111725672926745064343325264521590210602159859072193006656823616585715544235079377133437855586517544623055807696715806056670018049327605401298326837784463566022252056905261917390209465196066309971658905506915382570007098459142912458591209956677955624923819834340592297187370114788270371017444058623742502981616642771211666668765579073509703225731176287597546153169187832926034425152850606162884758531236471896786252353792126653691108896668138262959904720889349343875287758845619452400548080550394e+02) },
+ { SC_(1.76113403320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.02052582059954444145797302575402828775472549858638258652337449838485400922264880102001814521844455168114683708960371667726418703832112346144276637968562598124383686841479497143128873664735985988820590124724286261077096817377876672490213916481451475344891177267327245111630781949950497885823371189324614090262174265890658492814142677633036388723002037813465512552328967495610585969562560071474504756484845549709521032926948580723130242602998492858040486469858058142960971542246944064913466882596468084e+318), SC_(7.32925417356873090126766966505072849653571561691207197830677583053540573453273156018521283364964897580074052206023593753088714514798211305800197017101968057977416334579947937295480183826788590173899986400332774900517429114007492485133074194706917987032098429864860936179566013841800062932162660034495594333770774589039627760147506692102845847611955819886641733597180566790679444038865854563752182451404067133604953777976266362936802468041363729385216814190500918698133834576267922051073229052550925821e+02) },
+ { SC_(1.77847106933593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.58696581122280508600807387850237005743376257074412179943433937319007263344403598141115230539884802073681689462575305149087758412391475064495604301808348263271223884315354908696107642637077560202125740242269289984224673549616101557807088463070767797249318699493449990226377560110663908217775503481937102990324949931349055009352204913283444841909374525132390908430445632639993282928324028038125224387486559126265018738936164874835645598242054617954170411069835138779160265076149252382995279152163846018e+322), SC_(7.41894223842372120896971695467778464434331313578387272627690128660440449215113889047238223702217225270557947090642985451098640801240380307959045891016227018945670443378394918589719822433946156998371580853515191912147426719160292211000671895613613862803445071155106185976875019446446785610218985155512414067916832429521477750334205663594205036698758567202054604939201673150111781575427264391874305657184104751242830811012784344407925842826341950378798440166465260713298533266995068427063255465227026153e+02) },
+ { SC_(1.78351074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.15879959525624809082679521792815306888765184498698273782867804692369318651517881541192702071407855740250348027264727398432619543412091687405921105322147580569054408017841028812920951265678160001310970036202890501551977301103372311586946159880311889620316687427939259448349496566621688871543022174739664098462692687350640613201082085141267837524716787298081319950411594071268312373048165182370619115166290887445465788311960551902411784530322509886325707847543266050487191556108734271485692381261483488e+323), SC_(7.44504537361353563790256866979696561169274292979987135806329745308388622247038615109771750895615435667199178051978312738544686478079611372342783320959891416761667479320362463464749942986322801267031097886473061716886669401182112346121285586340493980406953975487653745158766969158510242023482210490058435092738749610751548647277202591688320385157186225546323039226324054576538352749998390355107047106866506799368109060505372381047569115871095389803469845630883890576681472303492255871355434543074666565e+02) },
+ { SC_(1.78468811035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.97323090129015304829948670056950672988566620103360069132626705998662293835536886711038452025071627651801563771763546588030112847819556992749418163913209210497610564952666599516069127677852955185029576549295904060045236020947632616677386416176415724245484203451652003913968552102042443192357359181004360958300812496142078474620578952876031709400267524666591864228361642023123714935719318385228306189781016753079919543343577240226564942131538410979287582829807064989009011837262610114084216769765835356e+323), SC_(7.45114564629836903883142880025817532599406578138872604337592075410549354944472192132212648441404449070057481451608836384904734743979541319558484888772177498462069801799490721472281407471300213885149399515249974303546581956898483539540584041550633939581704471730839975216140632264213746582613956062471259638907198389238199065012906441044381052856481738411339494778087328650384450877294643292092137039394922472016400135373405269235588937963012119958064213918352154220651572397570405879668699117408907969e+02) },
+ { SC_(1.80594543457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.44492573802958081383009778440555292032058510782094707151923019543580063401821464124716334785896731053179360123458331378606583993775964000098336401815208295522974825046288945690021705062653504091293275971452833975396618367960024478069309509212413127761425725702401547503489770787474529254219066383550355113096780860939609783039900115962564637139830430287098957985576757675455555982636793820156920269250858351207376085243542485776765040343621160839693800231230472521909769762667442008620515985598284510e+328), SC_(7.56141925251518514505478689688640485796447031730493178069645349326447710013483810686811609186513204997637549237254227850383700627762478810404841601771875597634294163342387192816297942266390129779089956880080490305981215418622694389695990734843318143646996759429284015850651094450456909447407380010252315728731423895937408514482692709030861097258095824752689896174135887774473314084010169013475172927926134853497572921939904600357153526321244028669506193752266382070436803817234272935880029844151591958e+02) },
+ { SC_(1.80852905273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.35581191326195651703952631159009131166202209288184110644773817191871658084956909290526151772354562604893182774372066044894019026774162958496575146840786777221554589041308954974103286676024912475152284802713150403242992111453453965532852125999394869800429637241418660255150089818049606049236213833319573166142416880389589096192682582629845272414315172668935758251844897671074953640839529325025692840860945874824728631174619790619252734467377328565212870241811237982353501373680269895720107402908973993e+328), SC_(7.57483908247238706013191041332363564601908643116613794125755092964353166716497824310092103499993135103169507095149901801628319599303236584682978495826304804330608482550238350627808636334580088728426340266618467763937821057688921688867862910931405787908397495646924450623319568412793396037825337388790320632153923066106474780539753764469398887499551564384021577232927092899143543747409049815891732077908467663209515334893771215585650942228198967976932490033024820881898044076565536017246010995364408584e+02) },
+ { SC_(1.81269409179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.14656489701661666551426150826993742703922081274410062796127543291436741416644043285839056742503182205938143690550766734443196880076092121376940315826438357347225130609638172448389183666605587308926876761496114462796405389916326188916588429464036827906859598543234720421919794910927205272842738201313988559974125729824648074887940641287945470208109479143068884035443262208528622313597969142116946718196958664771847077763157230425357917362298919274465163066462902239081800604016270260980376823982142021e+329), SC_(7.59648091948415383929563715588284797443881076288302786520024431092713365745004664930550660436146448769928908595472831809952371363595290224670598516160488069055990529667027998377177998334784035362027942891905043625791394478679556663143484761342901957151016985586819836736568694434730341614326758350488828166801956142997723502122900228582567347108280898606605440082085072970396016102333986899570083167820363063830295677529090001156223115171747029172473818854569212171572792179196994366136215652618916823e+02) },
+ { SC_(1.84813415527343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.41843670877955808033711872827583329780399673915389894157355923034275743375969872064760946768395710760692162722563875075469710924197941789203294602594587774825793719222440584479490308163057779223031655837089151369234174058028491687359332918700985100795602659545238860363893105370455875892468056366421278624267111370458213026852824427061957136527226963814492761464341676200095205112479999345378820006266530346736884330680379147863141692485839654227013136972359266657753669089433872427207379533214800380e+337), SC_(7.78101600485969496738907472044805207525845873494964135362477949625407026491453906826628363589151657958255875736182538790127842629471238109386492432595799361811851512335943586219934808061471996676226650373516302737451767234665411655782440426010602537171013317283442130255563851745571845004194270181154095416823876765996074472789789444039190622178292345613883620337241208649102987263300954055289765962798067581253424838965150554183549653035650696686335579449451123006534321368874144073115836490911334493e+02) },
+ { SC_(1.86107971191406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.24588645855805258012942897324879359693551025583791148397292950102701617281686766503814328086357305875341025350135793052815205254026968929994762764327722507205986125049463465663080368068442225184024979846859779497746475247773819492819638571751788423232524988966985285143728729130330078587242791573411171000071289717978997020517689715808903351460826237012874920523845813327702077005195050813047381259174324216957154073715416491177024185354353075454757007413595044508278174657544345970582127120593395902e+340), SC_(7.84859365540791845126304726360573204383626822141157419885521181927814146148987783802258702151711612074539571709289812117715066864769651085625127711673559831522980738557964350467149519101662228352632669493854289808713484634507521558649057190673127264047506073184500896324426534111398334149971277991497487392753689121494358836984096649384282949073706022769719250547696523433025878899487131973471513734072806237716816347280826527526741380896550902533437911597818220723636306622155516315400521166248311628e+02) },
+ { SC_(1.86616516113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.03294541201222121164508235571066373185584783264026365544285628384716465880562626719738736266726777828141495974426409739234588935765141361467433423550667015484917877499377883544804718996516925708468346852692904938784521280325456051636101059721615055421494040481026399205200245425246179018984234929101419835846972996798447542294431461489105063581113226507236521567974054749433549150406332582230737081264009306236517071894593832412593632891448685791692110925076392446969911578962300476703897336493029577e+342), SC_(7.87516516148573383895913008437117610513828966119832440703410801419729919905995203130569560312667200209607419566953988839371249474128781296049846211080506555869688783852307005545043774008109290672119990141932485170760708215195471032725809083717874599366950043078590014101716420380906669405324646737674351386160400988120948057811371921198810450718411266755972013252978417746692239750259384976799876215523190205405078321354150384574306425868958987548166631464855831724406198401639410810595751844254740347e+02) },
+ { SC_(1.86742492675781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.99542610617632270083829336594010133748126478527397353695318364326957590586862931371831347138003505744920298624845026059650548698988042330484539186721232265403150046257528675530435325490841419324373755652405896622859988688336193852997036697395398853034296732749465274555614248914342259771848251941031375144479628794105835391662479355925916761305983404615050624475473265364374847969778079357129647184824207889431920748767321883118227971829526615738983739289995284802134298758725660193990717884773544424e+342), SC_(7.88174959418554783749336757544591894036110709774223224824271344579064868592003828026157621498484293875752814384204082165481351097818052748183336645296027303005209209061594852798759520425403411485530519386155931744924285526953828255995900195550163262460071815540048668676259113309591309366995130837147227376210850285979642759356236865812895138347213488570411672545274468806756163328735520628333095309808687054148465878813916308947887628896300352054261806340245645428791616647768003659528869190971855045e+02) },
+ { SC_(1.87030639648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.00013208607038784543835466338998761967010060994582435872245800142579849364899223406398425097394985031400661098740065090318866868822430323441202388005446005608006873623476463388499773064032386800278206464129590252790805569332743452949382936785569119293685857945597715052293722655888762017111811753247728204663184932267529632095037738006541235846891204292490822273127166641168390072085570404761325852826928444859462432633259332523118777273482195055560452197092159658295678083252646033008268848210231458e+342), SC_(7.89681341057422191600443509329763089553014955229013084567685248103703964971131505289867916711312319142589541701440748657916415512501891816981039764710739274708136202310894049973715085007799699497369060904560679424531354387361417798792468365505471179015299281792334433454449717667296646280060976616732761157290503242591829563524923135786799501122866943534438663317498936752830952239842824149481773130008874716222086772414842575181297383717442736189388023221494878471500110380734964401070678112067262623e+02) },
+ { SC_(1.87685546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.76616858008137000876699990128362899264750099077808394561524649985692676037977937790592025450514239974054131412512572691660341256409303095675680120482124234080094878326312900487048692083153338257185131707529228934850663620949790977014187946923664796688831909317799395684080913152026808435329557396447446787999313388110221894455392197928559696795374444133560908745392255035333820654489877927948373476790359653354159066270090908817479957743490674951339486235331068871132731338150805519376049202711418414e+344), SC_(7.93106735168582688465169890579339874633837425696831651151136001688467161621416533173038983338184935821627170059467628295716713846320010996273868218302439350332561849478557474482210296891544334948306362007816158321211010014344462659514888708752522589624332235750728579414986288165829749717073581022485744194322481455837006627579646589897632563246039454243989959497997025639911389053284993839308204536905832851427462848870120129599852959160797785476300547461620901300626983784121544915143656949964583236e+02) },
+ { SC_(1.88215270996093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.42467714153889694379953380561564379431131421450816428693657626870690330823073434015685793654606026646868840725237891149239958998363729095730382305090229348661731733800887853031821278864445868727022694745206687061552658290371598943415470559861714972611034224402957861143266783742329199970555774575972006229341596017093248611306198067771492985679813925847529192174064672914675848858507171475009161384807053302657245394135850548068431010977818799585654853739013357822104473286990116965721350254660700988e+345), SC_(7.95879054396379679973378482359178964806729550808083202102172398711994144813660203436993954323360923769805304648731981286484173671316822747486687213741902959720838697080277644445253650041162710488291300014115594925829430019586557027606925856616083597487344500082836897264808351757451335070114522039549110269709821986159748855085382156833130765768155867203606377950946038383392551541105485904271194223359993252672237127929923238790959033497968914710044389256683014681708221426327506101622672148085636506e+02) },
+ { SC_(1.89707763671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.10061098729146171845103394060763999173039111869217414996316018397184463923997465979877646241802478343165477206965204865000557671637745488443470810084932904929448960248627613329155428358751235612132452149828463378992857879043312157900406444836530275609942120776649576482912290726026289531385806874581786395583285742571765640725099859979760080824985930717122365163222836550887134466056635668889597323406217518903031265688225953725497191634302109076082771855000561686934307076025887960535271896230147427e+349), SC_(8.03698062923517145096601407356238933655052109507208661450767545474757083651126074300735883840980260933649776465218591362090082739406607617830823299294038457394581883065971684983480422665660829314790121754187906870584232700277230872294257937362261857567942645979635322015903634095957576764535650715493948932219173429955955558467876965951375093951186025684359116435210580219133944771499275409227130247273611229423879358118948772126612588646371176596311828580197827889472666708946315117484033375688997705e+02) },
+ { SC_(1.89919067382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.33281206150205146643355244324005183806916710600770049002539606130797266598648508887101464202604273500355664218606794200329997311934044022454918190419379348450843074990032218486726420914860915118079544767976077745142582899761071914741698271203297668481012082730542168912088331717987125035740327757158225679345006449049705029718293267966482166453666335604897523454714256529913015501735844676072631736531130208967443017927115114371729015366934002373254016623559400985672240038275307656801619652676325910e+349), SC_(8.04806013865469625731226447611000679262167245496904460769652369715905835763695986703351601251701757988570727443524524195737627994659580060597599021573044077777978351733520508556802089302268146543969567284533316343869097830310592017030899691608604050193595923658145675861439071686382522253131366884370301553887036168423845773140886619988282982704852197954508298827301251022649079410818467255031031955273197356096071555658682204442003474528731494644459565895341153942754125192947353015610842313374489907e+02) },
+ { SC_(1.91928955078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.27289443453508087332796313496350003682738987247877702104682167531747985776646817177272941355078798302379866337957633139770515724303137232998996065182019972394147390069021355552622655095550061870827136112999189820158297332123301324005137397021001172414485737522270735603972771739612699090178898122468083951398022515171566920316105159101455125487218519301407450437969176328571576165371562627156385126243702713932115976518400610198315644844874991108140646220089109776050146978223928857875353227915229230e+354), SC_(8.15356416309504951703632605332678821036309251950450806744706264953384295749461971762150742627117821781297591356770773034392144630581794397928939363698659120370639099547683959467363822618083228006061483256645067665154706984754979849976268926741454130725463009144956133345132908516372092826696894902228013387927192035071552009986450795885671353053126809139694384541973300327185242511459235969711308606184671751123423347069659907005661315426399022362349158424073363246554129112770787466603651137216967255e+02) },
+ { SC_(1.93188293457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.55889878026328766094254545156130405588317042176810492128458172796468478155842356815117505801707088037047728670423711838583162029118369087264171555276251957441043881320191705079482711288472361395027619329630747426689264957636149302235512356863434311160841952861854804538431864303161165529811626406063806693598450258353735003961302814786852326493110745345260159275838103326746732398298170655254923273382405156979074520081560874755475486268353634381812705834403598984084406506678245260553334473684573814e+356), SC_(8.21977765635959627162277398500133267593301883486685264727756479333262135968695319644233559348715251791924592091370385790355807059872793029080405819671585715805688457536727535203139767056986040905271994053868315155429608568913546474209396572356396955393177416138270423827458478089140014488962991931627499145418490058701846811152489764472359962840683277194310750268803254408016566449876018742044930973743436003375612625493736894351927923702238160859898822663084723609117701120883789753847500845214248469e+02) },
+ { SC_(1.93295410156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.67944971215571230381385402915306563585512555925341189618433360925317643914586339063849824950878127104307013236717528606369305013002830865269395228459287083455488726152695484019042634677797564752625403187358632023115166262329291480761126588425506918775135337653840598704951140885230214908854073322452700218815702551486812145166297182418754255982369386423356005578336376840292343516441822924916960935383497081543119473153333071555039616888811122705286740253504233542914725625248259935386522584340786914e+357), SC_(8.22541344386344242196010914041186665024114069648439392079686386509374236995093782195927762500525996080278244596859642782539204903609411934536775255486958210094173365894420274131302499190778323370310139129238118341874739848464194746295318700707267840903671542235639039646093486808559346979742746946680311647738121918480673164670952151788931901931170626500969058896357777838597047895957396247904756825358032505977306778637196016952959821390142664626683015925603705522917454154540020938849190246465753991e+02) },
+ { SC_(1.93365173339843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.42430992320999325679716901761938854023772539091622332595739009683583185296453026937618641790078542650510588136420582429206450065309533803404632815354443071354025676672070200124004665167411328304125532406917049457219842210795124059486692276275153480732203812336386422600148261114654394541561078007497308145487109598255499478982975895852651552441528862916255192694217792819101846844204013626833784038081286658695326076316349462736548903860361050866008078993081226997701163281219500204762767794892596876e+357), SC_(8.22908425115018214635612063581608839753092869727377752641769171700126271682157010634919061911194401641974846321342532995136621381223597874473762028259546616779927290488052272662791510845205852053685385181896515373004491784350371134410954170691566805760797284311991129687911851084775531929154515389120642223313112973162938576707970239300848871447062783020049556813912890056887529173933993178266777507443289090428976682711236479015637787419477603505854356179920892139035413965955415729946498477866915695e+02) },
+ { SC_(1.93893859863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.91819189255231346972453640919376279998307983396719139738029327074684903718406648892071035406912232184402454246781460374777342947874726566689788273519347374059981337799673386415870380166268204005087081995314356223242279916619304107820077355589734939140641355991069365137331766135349173014631523417771950432494431741121327321514656936780355001014804014071667361178290389171919523673427736200333219628377521586863539820047681662524056914049746933391647730196298338486438719580698910549416527666870550197e+358), SC_(8.25691093587361426148596146015464335448516746162863480735588908784004458410412322215732597244935302406218793360603341363260365762366967561002732715375638004415248735947845958581888757491890066170880837027901650846382494247398569674556139294199420669658231316358184016068129271475099041211669462789964405981626050981066329500071449503538835947208406338108358608890423336962917529958281023406696516876798696125117237126383133829669122189184734418978403466158942567146769067320497613552863389512499524647e+02) },
+ { SC_(1.94323791503906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.76970488962810376929712442822506799150972175518577683878116032296958443013462979383862783705723933319451732313782128964350816582257723045805256908813585734565498933674642438356874957335664076760773465543393587233211955793690629039976559980811635887444090574644228158847603512451821027583991739047996027426376497589047264545707567250497900075677616374072397216443320073160717286311822549091324020863363267285990699612953867495706685176641173823310806130013816684950638847862639432820761867083234102375e+359), SC_(8.27955045104645154343667339772396766012398852624728938891426269247314828825916535991338091709610871917127552152618059111078959418678739813654847782324433429039010860986016354572906951448201401982849779257620256300672083673458788522336148882360032490933140917654256375790405976486227621750097451654002502861015346050197833419724873461666069884066971182335821194088070054899330445318502006040779689281654357901187198743041689050179676003693402625636799037068007429865185453536037619592363781121849239393e+02) },
+ { SC_(1.94734619140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.28266491078693236079930505889482845547125001491009809232235625402138987517690582351855054785836060448042403278267915222376926897805477347534963264638197149165940664729313044058079686689562595216239200519439941356636095173846923293128637285688502209436555778780171356993813701298580954984907760437068876535565538630395134017900953276133789505432994858229051305087303614204483595430308393252393687826330879551006222003039667295919054187640462437726280375942789451161245271063078390907316847565839314824e+360), SC_(8.30119289043176032023145415575540825157882404848793759377305457075144300957586366989763766266144808590250488888413557123220202285772294434598407380388732435129545873894291516349267450447185594102826122725546904840257534379265522468101343388191836339735197247640477753997635545264763668117916622255187527053416864645189422056659465731314880919345577920810130440083391940211741342285111847682575427162628827689463093464718063411815127219312548858707951950419445994409706811518582019288596522154579663365e+02) },
+ { SC_(1.95590576171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.99057106460726837335254951265469949180685916576201366518330799354603068060628399838542489064097378510079085281408037072910045883121492358198076636459015027497276779671608984401557195042204653074735005161488340297886584764785008674332110456414360320943571473989193828182211205085275930074217211380798304194907541431222367151522162493561287748060709536148037198505832631889595578535060602057144165742122933005877093759125801257905145570971678982661859718663150438418717880358751568903502008356204896542e+362), SC_(8.34631268024518024312544346689613320382750591087057053387033282390229282637137735596168071781685011981870157938686929605629865882581454307581180428574441174752453674660172239991452826982296362269651040153776886234755045958881356017477727650927044861068069375267920642929221008639880607020677782236494414997226184139937170443921952401765508153216046501835997059859183922145529568741476210480409142222925674751756811511184363017080292446209479500016727710625667896500980445948942011818349721058860643504e+02) },
+ { SC_(1.96223693847656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.43702195216244192317676186541952916707280677164984247367539335125897646733564643371688025088467054700538084552068298454029647207243130902537417130476881844646448023777021200128825481774554759366020149296557917257391619382631257126596026694580951641418147336801589028646196536138781855540542155286213166573776679373512962877583322900601066141087719663449951754061391451900849479403767415140909921303521326888597157461091024327408642723617425659345878278777631423831868081457536374025602236321680929720e+363), SC_(8.37971018153910645146849876302671100355878564904416318951717625787199549501672396705587516552761922802410218356442207156678453770361108141405713396857271262666830357861273360399171376453263631906584441274908671489520394913910453124951042230924524915186708987401902202237482590481943808082252089807169702360579064304487475062819045711685267280266165519622716900432024136393172012504561691993731410474635522887745994712603442970545006793254302480947110314655556003246095545965534442886579511856764131891e+02) },
+ { SC_(1.96529357910156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.23414726746625907416715829443063285923135397751375214247196786835977150147805051398333094509425767588802720603448824250661771073712028894382573028418813647924962558838820236674482914084626131388748080596027314470518145581837598000195509481236116156941383504916079794599291452252308226347555343874962002885311922176274513700554050956675698577966072493017611013450719805180838204308037770887975898160752634753380170589067976564495571187685622124978166758375691766853963371464468158002902770407780660821e+364), SC_(8.39584155804053375527342314852548592073567608519557016287106642711230165566655687717053998009042938360547719401225882983535419584528005800048601958350448310573668435377730089434909243345687233337830049139176062035296650344707700088006827018390690145555342736794903069214927600901587954409530290166291148031911459504898052418814831646552378457779230074298452593752843325946141864017478714236662705888608533264283668477574529443984242441013448105934470619631097589148562165995926859727144858382331478220e+02) },
+ { SC_(1.96643371582031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.72923224783066528023999470490508731323871066602976622785745508540096202365386551203784303321602051695271454525393798393663702021330452189152643525364348428491179832354605979734097307438551875553759245401819634420173345118102522332650577040285051755723434219540758402866110654077683693779161776736404709612287605758539823190928772425476186798455690025685939558676812715159791629245093650208032886520127257083232612658307556470384463828890541787560681418149248831066612808778348525971443490467099021645e+364), SC_(8.40185983386390710192076135704248168925348509816019461214950716437392930063583844921188200852070907125874754160452731394430631464143909381175484393050377049143994089896516302461374658193216554660465413071660423551678695680241168931568491899089984666013477801897927803428918057237287299416570116019014163278726638182750233744164815802505579539237403913772926615589113727011366468082795847664443929239086651854547840693271426594036197020338831595646751390203112117358305985921089855500190951968437725493e+02) },
+ { SC_(1.96722167968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.17162811815712510039905579380378750968977013363477307164574089945672686217834916896285190643746512384683705292466337425311341098378687575708976991373959046030667770632001217204619539714664370165651664707180686595098102100955000938827975399238685075288710103150084193213363161272046776904672378326819300464241633964472613430867162089247658631038267675808163966731109939642559650197083658534120852141303242102398391010418538136227874086480458366638310586572862462329891594946307476509088866206418732113e+365), SC_(8.40601953278302823715914437001434897326585851451377782359354514510143709016686243390171646070512716911527352890685562128158003076844244060987762076720409802934135114817072570698252972683730666344841130172039600120289262881269496545768851707723811877974915916545908409772521055981201276329797761080478859369338699323312709915881850535299304145924078421899668930260168792437487425790942434771190356780186462366325884970480894071308412938743777497960710040394397614691713396494275690128630923143299145268e+02) },
+ { SC_(1.96733947753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.24680353412302939200987044186417286850293617589893350518753259695986642865759373421287222175982632299577154795441851862631143002139876901717084858364499770158486495252092227254919565386732785327109256215044780609106529634459613462687775593813516048326312320737385426270219126203420114241326337895492874001558548526979886090777954237816043152378834201550716350580646477653398287071852116296228427415539474823987711273104208640332096163005959723672683387762960233431767587584060874792860272003416914396e+365), SC_(8.40664142046288586307098578012950982940920247449411400277826481575501321801418111704348374661856526660437304397102157549566140121053024750062211864903938840218438648122369834739503064495501358892588074060772910518224333146793538667621921225711706091391031039758460516782054917885054942929024053977778388080690944908154284224192422437339038235483093925120598697680748923392729193556534361289598031674492625039905995129099332457813491812192053113409382582404365282925969718342484043766758647802760115956e+02) },
+ { SC_(1.98035827636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.20944618702144819435296995467187386930468724356684581700886145002110052068179595371516095682909198536856567991112384692173130332074878964517612238485811376411574177290248523456198427051263118200164102678815406661467567656506974977501654206587685000986975051917619746085652602655774636443931793431285264833970762057314941793143001674101295340029715164760835449162881448034837306270367044729073839212227407984125064269561365343725931323628942684858873575347992677851552112437064971878939927095370338474e+368), SC_(8.47541476779965877146967331261162470205184650811639496892098953020372961149309349015855337368315515057751894701730812276876556836189845145602599367791449996023449498638627317430955950228073319226682424243409234031059111912399674726336202132089429275328048532277028206481590305886445426026704578735467335483762409481391451847804144090930348202740587590332496209837551411334440093728917031128888721007482363710839178563338178649459997005270530084383360495944436069819269225546530178214790217098076960726e+02) },
+ { SC_(1.99081604003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.05154196611778131368052401382199557096766465926000728428835404154643680644942997276429557481010925489222942138215117809515648254051601495317154853568251230860379869353011771511330847204161161617505553720745004109075949967059004326850925165650178777793787019317352912344759841467942308320150943031895570624614242670943972923281959878003072390706001341200047441157686391221897443065320844906532339478561195763020866424086276245241727980766550667862958920713461433837413986527397831351664226713597241965e+370), SC_(8.53072131433324045135738664115288434528725110990049135093018145682437475672853017129248153128449935545576341010629882140485762370819485469336716214145271708650949434239195726432153512718403315628017431744827403922372218014961101023728565208273255565761476282562651185175632833997020942688452832742021973579044699786396296838444391108919498160726021420370993213463365965357523436031775621817497533473760274140845623774172583660331569796023531177010010402871966199969403496490153557357968971053015210535e+02) },
+ { SC_(2.00785522460937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.53038471159972860186924111793349715756121085385852614145376481107328339255980485259779959405018101696655360418689191755947524674657017388250476329778595966331400951317829495575257624387472491518924953792738723609469981049070180796177369199968029593643882570199329343672361584991491269031346325150022217340466726132508732198838832625511102240690996448510956638381866618246882695118686304361068731015207118010591091682776168392299129402985452021724002211070453057481572603019315056376226319100980238753e+374), SC_(8.62095196130873418125016483284525045912485154509044477830735224874607852988001338205640871319027331228596303029271135316155897092769288603729373918059977700494666837436131872233304113502656742361280668423481510626679892941153874337670788441279855253772338766091147270671930907305990963779495199803536426812659375897973408139926629683755551732852800906654397071001114113811621571665099139260312325320803616377742262239469791393991518027606184447445663606181436475760468080061389174559057160775011156343e+02) },
+ { SC_(2.03620544433593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.65143321926177336947232467996576791774863489571035733142117938518314228443063319609695068414610027830548060080434930101604835199188658799113650928723242301814025419554451927694078109662141249893930843786460464504069541546299010614406284401816717867690561952611836105745932468701940915338669364306561713413455966982778774144387067156781082643925925011086395730031615235115064861012250293912515164198226271080460239215486604284946181939385689141466805797635994968497078929588417846687389792691577730734e+380), SC_(8.77140060335044127577055494658049070138166721729748863702656782677174727127369991092952837475183854737464978173384893960446682000728272207111125387872039608527919906883536583919943191418013126874991816322836075294538833451487444105140477827412747685262087345488602089706624637013863537722237351280931337789386490284036989902558931239406263531199796638196208724851070764277876570713546076655407206602946148987824269335638195963813210790234661646648909037936970322820094144140138232254395372433963069311e+02) },
+ { SC_(2.03855895996093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.02190516077568225352925006625769365538523628156840603558487097060162209263854748755473281975434014844142353875128620627939326967887306014306593567841975974305794673393775625034015256222466339006271631437321916753648305403185715320005442147613108678785138342429363929838778398420532140590256036175166922463382586028314332781200961173923197495568775773587585961994108508539932951639399400263237162689586963349530872504448211520049356871710673258018824927017862546623151939747966842795727006527563387175e+381), SC_(8.78390807911156236890062008968273733740360663293623174807251675415458216401922658468586780495662960342131423688505153117969523401386784563568666607008655615879836550811861510100311871505084981492493286612002043747994798669566839497908664979634082652877580447007256859659711088969505950647552135137503953004816160974936508379329642382457680848803055546205261387408940928932559777105436555542613618571730409097929484613134216940807704668132154778258567706423872979441199450915680868704496734353373289086e+02) },
+ { SC_(2.03910766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.04519550061459736737696825558626211223691665250321811232308723146433174599050921285969976391716404523777360036570137965100255328108197885749942363104295245545942330621004157488142377888835256713130658130164571550472724669622986351319273702053031825769243786972865591589485416694117143340366299880923018010637468713737647538773350785374916591192931922511230751706952006046325080510157215169536762010623586769684803443313468266042356424821469695707609410385516618238684812406808168846511558277107504019e+381), SC_(8.78682450311499051705542102592143118531464615073289156275066153608370358980222641854492981697674528230101291949307734557180060219454820905694456625689724158172140191643995631874525516525964315497694017087967969027105037882250779700520278683484866631872791334506197300413024318593614287224835750497851676302698486912204695007325920451209278716499735030880447806516573294488944828862942226613073642614916490317760996816663830852551421666590960790381387398019264063659239790743222793037962387391917471807e+02) },
+ { SC_(2.03945922851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.87634721420954868320679653396114437042797966640215747114814071292289514679853882420646854333855197669992927145949226440228009068993307726183454975241035328495990463229458605531815349338574874766725546349252526987364072603433578464644703708086973292823936348527413486888173464373298370552283873612506673258171504812993846323225727635777480955133000542387209144433299517186846646032597009982879026954143521098194295817794343273803342274669737273522964476315749430970397810057312143838352903550803963141e+381), SC_(8.78869316848635865143705643570197031402749418119277577772373571777805369195793831867246853876788118380995747830273464810506001333081217540381068885832190844262238438283495357151351813640671486210362169134855621015167660782116400314538798219104763178489465671624454099440552345100590695406473366022421278064064777579668657428993389295582732632068184617079283710640876524667533433223814282991264379338658963728389786465106889424249508756823593288506817598320716914455174905100482212261967621947480780031e+02) },
+ { SC_(2.04086120605468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.02743657195879596579356190191020540408517748360270772233350187132670368236338558148167947525604182688475307188027154317033127421930022710052512496367214724389204196539529278449587030030071334484516910605002720685471497496454225026002000088826887804231343927284827136523745689320502914776168715156276916400103517192211219702918695741499683669398591603530163539160629662306406208651611461245313107509259596231005682295955767659457243885582231566582253548170137735315226168787241756908838842743163884014e+382), SC_(8.79614572458754574487438084636445918791782946842598909064854843208039568073600862520039360823565124413533980668580492765234600905746526338468204183418828691587116410169624716899406947165866336582654910638119433469897081100329916618234408915291410360063773879765417623721979377686242861657844602397296898607881848910938512269919531855497922480486653311811248022415772798189471108662611248217274101824539210415244984642003166779616904774288957798423352212268246728380419647160759388686249794821839653989e+02) },
+ { SC_(2.04121948242187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.24300648889160775733156586874062402559880556987666128229130787172756384784591504451441176261124778809418081011389957060502911823758697326486324714485420170234982599627159886305816768959504352423650548150553867255926100740917589751743614355742742796617781398611941865255290481457719969272244034198714901317545133168652235430290963725159487045543230285846840648066637514719963010582145585871619341209078028214449667054492759133440212044242066816817432964032357664607423807704341673445484291179983839334e+382), SC_(8.79805038556587630088052582151663919186057969932038946354936203032542340040647864004571291189699384354853888743320567469513593659764584967248393176840575903449023484713535440893208588715116801335911625550485476748157992061702657729396726975122868327645712946965506515046914095427151197705491743892127434492500407518742269514547233097954118003716030823344006660649172687005451703658129727846843123665183503658207565304927556441448742317093787870842638508179717650449751055242144586848607768594191187785e+02) },
+ { SC_(2.04407836914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.68365143880375845489319696652162824419026790969168725995329854655816619705820353945636910161396447037807847037756979314462525154016702465684852901928273210651067121172463361882515619106014927366661810456400762814084404469237973116680959859782414407726318096421007506245996957000966110130380693389724470385756009610930429325363910814020733925930697199275272434532716117892373776833014261671955960474795544134737715622412344108541340921131232780280256722975350906058098810706636246354999685034963041210e+382), SC_(8.81325099408857538719794037035613437585330054911093644104793245532145037979386327754393840465268689839637222786988346357245198697929909954219639641082423160327772397840576132377955217119504442031191931892682663926226123518747306212014000292170698456264499561629303488314450881147875974120370442892524806700056609702761641793604570902194608296577922136353429253927677170144185836055583240855022684942918042987756630226015309720119954418802506551096807114871722371865431716271845514419922818181405815712e+02) },
+ { SC_(2.06032592773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.23368879335110617450934014357551697493657637474750402501378696069424612949874139215426421109377131362806210449292180891107227994521619424226713921190507536619922840775083365490639223115181808038134372928082158899059483109948141228058173117784469588559176802113041862627892225932364914852130808947901721381017612761142108749416421802877905190165205282158232272203222263626744097879711745143341899642657615393256170649098208261844829863453807824232217972322816131557985205787917544846401804813255278063e+386), SC_(8.89971469422588303597539528396622584243324889172625081448644041395296435706027612236208502571830144856012771670106672337663679837867361312253255450766285701723474070953793205635315484023113670266674530208759732278650290931173916353216486938355910583143339377937586940163939654903232983739892854298177296720683838065873111881527094988924866455176404496696390392291939407913753835567327579675847802887023575896004603081072015135418794160903940531376215756221420891521350465939446212626450156221583224751e+02) },
+ { SC_(2.06764343261718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.59483281653793315561944849491802753020517966058457834599780385791671309293006610807112421309007905050950708789029138545321974655614863962614239181289168476368664535037569185913694830534730728853128435738757853396683057364465292937222014085357698132392172515202262764185474647295951255624356377355691744757242649686269646903714536328284782282648025847981449792419786729583440047926271659335029157708036514607118390950018053776103450511487946355391507820701395254860917250728802107678105122194718873445e+388), SC_(8.93869784995215228079262806213738653881194522856027295897307425852239282637371470148992469867322294921829416199244009443917810535291845239126405513404505664264493747643656415802763765640860015275765519501138818763052060049394196697019463988785845282941765893749713246179491764073184207605917045290155137796640590841319138893337388811668060775160471777135759511154718236748314424006758454477250378392325844747846932379992953121602403336808218538896786533378978074484136844477003890524066532376562323754e+02) },
+ { SC_(2.08448547363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.26956997938305885861270864992569317634696139234148998025052858279502266314939306211788246505386860720649744516018360473714556008139121829799827022035868102039512241534804171999884878913117696687586248399361631767844908110955487436936381731764811563311551284602425568721570345459759673678971708239163298380331804714768570771197967809270274107792567445801651493571921093538794581945762275991206448239582552434644965640465065190533877901669057295857711633075061271687035424879272346906130060539747433414e+392), SC_(9.02852034697887876184918228950307567210157592557628151025878255337311450794208100108693081194904407586026536627544727891728278559040733771924029921633852777257177574015107284060027121116620982034943842773463671886324211820337774514949846112830989530858641312660736060185766468954284247723301832207041135655922293339773387672759884091687157381626403232630411978395212902188251538779356595094788517395195404838946369098118091514912829187878056761189665514528987389683561188583781930796488958328412937449e+02) },
+ { SC_(2.08569824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.42541719631346857740870277123179694855803129369299265326895905117967064807970012871120517886376749763782710626876870377672885481093313635938710880192105923620214145310044069994382837658433882697811138471623758415092742862226258875051288635177471107853802211075144303628595023516284959320296001584682085142450298713660175675155635096967704984503105572988443502595645997778786490670016943194988355931481999406719595726362875431386156523099995500516289629399041523024905061365248583663524451744477756744e+392), SC_(9.03499360002975113924127787536975190922985805978380321920413767449345974971555113483633012467505182901649928641087356563730045483247025979178309582017111611644841654759797798030326903242899411834831296715164979209026986975291691071332970132134487130379536819919131162781313226791607387767232186193852256361885239373630809541065907197501412901447388849582877366354207566569900259450804692461959120325998443885169459378332602861106681620963700297035545476682004214466892696013597953569975032135397171122e+02) },
+ { SC_(2.09722961425781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.14652962119388337892013198073640426716305639367752450241471157249056697505893988153810906568815287379831847592053103240079064792147382117734220104623639114546077700130343551655313649169898489163601042726543497312643959127651877930806732890695009786746063931039887597666210573903294917932796306597253333085308243638049175288306507188385750785364337778307356251935315465638257026383080982013309191395360760465390522476476099715466350718635666319205450199842162724646763547637750632154397143992784357779e+395), SC_(9.09657851391821905248288764942882685538513662571951847769716820430912247756470790243746847239095124383815835596479449815020582004140189922425425031283620580448587760886237528677796437754229866945169284624748190052228864075627322818027343673920476666737417622900906394272502941687757361119603036594805014745950910910766067489773955786771882150998423994134709516232251226515884926278851453839221094787787299099979419856861589551046877849171884303782275573517477294988870970492657537365745908068261007786e+02) },
+ { SC_(2.11732238769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.32488995415917438816245506428540358528324936567957143982831760674606946553953675306132781410037004231238081814752827196659137560785635734654175140548044178318241202722028415001529397684081678940287843275647485327417144964558775590245040343274449146902150499177838113830792660215510801705128411775966433381848395099119531574166093829984257362521690140511511932481075474797419275766050042684668062221317275299543262897442477780881557903915077596028239618806682006388663897431306500641386797547090183402e+399), SC_(9.20403844150120573323313707815163443305546205415320067571623368824100327033250751194469692254021552989334996367488215687821238397209667497882194615770114336746522799261295558491608201716982716372159403627607969448999723588810214131748191646851044970099179978571661008211099865472127499633991481335788001559856818151278413515253321351692025407909474976822663022532537882785669403146380015988041682400534853239853536212974739476804510190882624962978418547837129921262021934860580164989519390697310987195e+02) },
+ { SC_(2.11813781738281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.23920584189995024108264108441382174581265804453062813967748668597256409290502974917476137156027471780465593434860013512747119492613173661960754556516160997019902325555815105747419678983913395074928383644967234257838183275035853032575137406106812515112775604805291988413086204754420780480482944199551206347499915580094617570264013697766220815619765354642349849162021960389633159121121537405157741736547422517058981713142157673633132258072330362954492601218997356894597490305064009353895881811467528561e+399), SC_(9.20840356065490710629576533428590541960450394297627230852765543314970889049841936678028766187208171546118935983075741374781610923342056839795507928070462593379515984217461275459087034547009064859148045673345196450051882002584567424351090318723867657323371007389165943407650641784608783008011565278189110651932558434081396504135177794283020561431248025981650863165353138893231401452644608333762367635388942206349013882190654054847660235612322249540146064263351496142260634350041205519501124636723775814e+02) },
+ { SC_(2.12196411132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.39177662229322494124400957157877266131759608311298891642771411182793190826802351307904756477752153520542052784335006734247061055811432642361807977517652673301861483775140119806808771082039441626362631376343659659259724670152753868639146792172739645425843863887789097252286610659867762024588898509234394082610149512719267651794857006628731896773297856599527322125493409497626506094744204938092978787264219579269340061828050172923677638031779966934938174431159781840598119005880074140411916588471617699e+400), SC_(9.22889049459021859963844572074804274810255113529432769562876841607210895116188455115957990182798402004805192186945959965271951508181947270887520970853459793601922584925181225502649594599989457877321892851918600713516779891126827964426645459261970900590176714052451499186326997576594703757359296902179990814537930932453088854601105941403417430440813446008398651849554675102641358597989457375238027473273539076645380290336618043735613466626624312870277349273591291273756709478496959113455072539143305755e+02) },
+ { SC_(2.12809448242187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.70512269115220480595268166531904352330325624791948180356089462647029563967816377152402283553934239754650685522277228585644625963178763461985634087453147507811114399074328277274871421586591394470785652958672442638959834135704467870560725728677870824130990742889477006591329988329388252117288312122037798898578732201281267232366839955064613395628426573109236844150466518272035619875710123316478993314102668129146726093936227472690943052588213409821894956523229315194926353771521764680619545709887817943e+402), SC_(9.26172844451372937297926641784026202226359104984280333952452698885319219565673961992023323224824423511104995712127009602644669134107563593608952662089744340116726101916009626869561136587812837161535913728799259903703727068947653269625719104535040738855813391398842607276573678116770071684704510986375303525438747263213742506177441195801004222400449169302691102086787469350020060636281148117220895253291232844645330875483628172902837608000610315770524202905690307051891801412619078193501905572034002345e+02) },
+ { SC_(2.13211120605468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.46757388372185984470723464446322922520183834526808381421853345527729862197466784520531881476984910825668844631053249610923109221356654860758105186026559709364720075771750848026506049938609344217127328450666317508274299208718967512572523857314530499456913380346599284157285384253800783853573460804014106723636223147893218665477293263747636187504707811864236779539466966344221910542064312863330245248401392068608381940688389800794655272596581525021764637668020427619801544130878801457932266803401126351e+403), SC_(9.28325403094712022905598205400455323055353530786950080627140655188919001736244506717145898286392584993526261227225187308817678445652981064028338940693732605499844328250378404504032801390611492495535948165817111599938819106674036675419413622056749577970342306044846614268964535244852796128757731498526010730421997711673126579581404924185429868241464395745125993928809118163995543079031650433152888784038925239661975011510989611970619998749887105771762365404895381271943917487402653324189249409463846641e+02) },
+ { SC_(2.13364746093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.34373636673456515296919127535191349632336915520195642625772798041190709635888287621532647756849280277825279470057062295411472781513494370848467106435282040187692494937120102034139142619940710853591531853439352790300953682922617662188819031965947625065863054332620699152572706061943024843245116280442577774550493173481350989515591331175723347933472804804944111576288065111769983720113685823120396444568406922629079525399967352647863168336447128021465823501879806831619694844779171382781822922998053554e+403), SC_(9.29148881331016017438125891638080018212014292291882679200529590547832304567407184326223596084425686214714986231588578418364950582497062496719725055467621486059207426245249948470330830748203915880625660889547495905324917365284070816415130302032930680680252804195125764041781628393891986449221487360280303514405425381004316480855668602480555837000785595641306828033161731966902155019310529405380690397905678939260016915664078410971970917323430108482202101652422307680513973343390934691531297189839502532e+02) },
+ { SC_(2.14830200195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.67256447103681992846665737465294479491140557774185558872013991039590161112369580714072727841283114508955245900514838567232530868287689391415360537590686186225366934252607935247607692237346114245242774424129283338340912041906662429742425125240009819454762156263777660340458616775163645203995076874546913465866349507299464269295035492256383237480660937794824870054357393117651593429044017691555159483432555695143676377015861696977994120698081180348729405390282086626734066030673935465537077598305453239e+406), SC_(9.37009712289378842213245428465041698856992514328464053226043507751660011378242955958537701246499474225157792429164668281669766339089933519712342433044104352438802390003954164786043052732709712887759343850099543229121919148743349015236565174499458768840714570982081983359924063622231967320469161737290134596059170102423626835685274301055229984712904852868506882233227515878771133801217376494008126432210768898874172265567661444147476568067640099341375806348321302084885963327830251527427616849254350135e+02) },
+ { SC_(2.15540954589843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.93991463103998582508864641373133455993632200375224943316978153990730700500580676570675580332397708737392566106200582630296676076963410931095795527671663270455401657747794956074481851286974281894455637980542990782893623962858174859461455913030832156689089788975914341450201015860706012141198241713678732571053326601754180580960420864052353806627676310639654186640023411135528917463407588301019747092967850951436456169284007412270791270032275595170510385886649947458883486800967500632080903173844770573e+408), SC_(9.40825876997397008740718169214925643060875275548222289998742615738079297965310296955213902079748169062362180776611609854642597913581075536671101595288562142531062838748454788405429106350414603053873057156949021832956250130658872272459660462427620450295305163412757457868538197514318433979409599826544160519202163256722145459662877575886036629112345562998069314389977867119630192926097630038593688114768725813003158582062941123230020345569797063986524813578534555280438704685674231877543576332403270414e+02) },
+ { SC_(2.16148010253906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.02761164835737043084807688662982235295777402691450027760392125197765084121360363895533987597347665898329212674880045433838292058354372919265719061656496013942233619026372895194066349296316449636901727288893036841080969920325396632762110173782177020121048106259133814286713353927137592191667824123460144201495829975242846828791563849339438304174284054860162700849003726441589259832270740699580715686148930618642761973796145981388202692077394044849938524291558363091884290919708442513674511550926076281e+410), SC_(9.44087125449245711324964718946725681457002336914752574180784239638434433261740800047457412285421527739426007490956073668290440888907971364923388038040450732089944005676999616837820395081350030038496820411175501226325416439012012639956746285359687856473985067886496244826541064809091026376980560986751749414294696656832283119146443798309622104504720249141829018011514452990348444644465660497127844197454738129306900700398593715891507484937243549709163813988358176635278586847951067591864723111535477351e+02) },
+ { SC_(2.17751647949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.71340431902980835164335762423796436589350350994112072792214738778171203445804164385827969148741478094345925443517347585398501485275407615052525430631963625272970012243841764505731807160622434242814926609466029554521200878574772064056066191281139040442996313225215610751861014869425131528374201938817253066289322132814870942103612911565436241843076514450662026381379893050798719891485183818071811866241701550929831958739365446580273602092936503287791306216378458193675383838809219151103509123255372719e+413), SC_(9.52710458455532851639835038314274498315501215972186403352633860676830029596511878259042607143610127654269615956561600687026648259713548317015317491308191242589764804560361554674638220491591125291771773450012254396706789934186147695605406351507279987276034693925307478989988590092811812125547153934467943528044658158593754520696564958600221972799287132297833915406135313395274815580885467254946870813493050228383823536128439205576179147313077810206988166108614044790010236487489930124166546064473549957e+02) },
+ { SC_(2.17996276855468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.13129500255707554886187229224041029570439843428214949849750749289110808805580745649778011757392626156241212375807672383606350701411093419389329072918916690387617121971808387005444726650118614438177892597923777144475441198065916783025549180707754824947115518137804797505530079865767199027459482498132114402357141514190576112432658808706859356016385344296231307583552925520220825752250868253480428489603000088048811727519686862608174999989841133390163636881843124682131906236849947330360998589351275932e+414), SC_(9.54026958276930974866786096141207963510282075001695469937993340186571568033819367507207164283465612989883214252153840271538745727411741340941936973021138044583077867913221099816951460103304251072253130282104096476901804295595445398612503617233278249893386418928541879740516087726527713391095610568463469714881207313741822503837317080715513456908612015665137670050918852863930126689754402414644453087641534274015853384313199006755428261671268771821369799195329141474499040909625923167287288193032767468e+02) },
+ { SC_(2.18086364746093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.46120886422198941176094565575390812993189258240032436842291399903280612691688652521870878527411710319300698338694421827954188059292239416312662344872700594786171809674906839067133898297628838922466623645844692894938719602118558356459692453197914358007351504121151247775914823469065212526339572116621919216307184829717978344011587528068285933875015100214000034281094016309023687824022775549044837455472135657518561532701164785646073041437250541734988572021839186113899968419781789080825966314766700177e+414), SC_(9.54511846410307733251478184151031185470650344379357342194903088885043748304808102474721353322145851967969909882852629598772106818143242169713973570162748400391527590736783952516021674346424346695243891102949590560370125670826511627581419464773259152047995920975025631442461827775898809830765756159112646326941479379822520206359643932720929005125311846665376636941324258967860355646167667192500862151802186073700285051544222028803022755686276279585674275472612395003821390017772949708340236625234425802e+02) },
+ { SC_(2.19099243164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.09071930058065094245496319664562079255113717209322093772282679444434716466956464796164355537437727770395916936090089222269857365904491254434491886613216692899763966723796954897077521599069572976393753967872106853704538521707960767461481109695537844833766405175885863084650797321337117740541494754684924323503689333664902370956616686323068718959819891317808053871021590598898886639150602749066550286528769125273871409829351057665814458916856560858710544725729239093678663812676906572427729021491622629e+416), SC_(9.59966116324950043746301709963886971173831924283030056135285332150318203910375393754829005925237839246362956635937850997084452898728509824631662233781434620254166767701503446197158574058973097735744336770318186188140114226228467845615371087013275863580849872474235589291638866795385179012628162745789967452025085267379843525230250236013744901475887783526155418739875702778215599395528922818903720738270928962981417436322007321679355490548225012657646778859092051749324834977768226582942177799276045298e+02) },
+ { SC_(2.19516723632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.67216493641861127200347874593268548852871630014439491996415942153041279169939215226786289608201574099535056715694493811607068238231977670634179134346828638451975784269428952823639868956518158969899741178173624038340036622210995694040562605609640541379819676667055398583577325757720629491760060193629917614248605708364923842454874386649419671196031172536225218287227111727331444795912064143719455965084302879758776249864782510178230962921527551419863483412763214285412435238701301451587284214422959027e+417), SC_(9.62215582614357532310365557514395430405854343037631613350602404229592578489000436551166861196041340959495358591462809081116701912519772088841336574357932955630083399041573213058463639369361474426677033552083021945300370663512156930050060513380077707234067794031787103666219708483240598363402453795766043089918862235084819248988939566391713717315237704138262667981769953433014526496440651921710535828221477319464253494644824502787848819415584580250951534583483743174553704596403923369793145884604935673e+02) },
+ { SC_(2.19839599609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.37225262707653599653711820353653368292680290042107795549543404450780137995523706257804503588565958265869776422803632286865381333971621580552331042799330399101696279128476684207611968345079835995478386717231086868243199147991189871036918425963831786775382615471035894407844699339741980446582699428550700582217520064182861690291820982938724766185631708141908124286316108280281877499048113512908636162667218747555743344743604076941394277313545374002161667560157713395176545044218642696366437819531115511e+418), SC_(9.63955847223110394389235188267594151754178263699692568317118224904285492248096519957597228717653697302640838284224914466477592933601842476833335001277142296514298191054813024974274015115796967229697533859387415349662239171113229864194230362265528950878253332746404383153621089118565361402590964161957454757890195465653219164433010495228501515210512455114814368619339456463159405016390172376212479239322861777452059833092527450275756275707164090803503172966635432501972444647459835011754132543899603307e+02) },
+ { SC_(2.22194152832031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.44032262608550903495313976799133886799784197233300486553579224143139553556903624847272076638683768869182459088497481696864297358176383077206958717371353195626849363634979562388962900196036505994767657151750053872585306731106654031487654476647650490389914137506090547371635054136426031331557935145186181680785227757429381582799637850482743930250676439331282867061521315230528320974946749702544505202089729180048458611922316602433935948057076340296214322219855529445898709037420674549154600925080195186e+424), SC_(9.76660946563861461010555925889706895360385538452085228187365134459129072316048007335210857837073714751949133642119138372463788350876624727611896669144379940278862508740728225845604447214346311748388259690873822504933818638163147527164300015506928962779800561757700302703442709568409699620760279637023257711205079507638886106134958413968769285382076583440779626281186698103523780565709021574174683410071972089151302751651383839417241632895323701238879559639015569483986970278258480871461589314159669816e+02) },
+ { SC_(2.22939697265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.08849830973041339619849880512102258659074015280580181393991109576992015581662038243987459065078898344272399234338807738087565779427641206083387416195456743446844871142780652716783168821917540569775408453731306985285441321115385277438949024832826976239397688820496083049738921276781967448246722442890080168118915151920065301832844367889918254972881511288400418949545608225939548707327204644504068161350836494885138311797731928010526811385937592008345913431320343569291455112217156672641566365009515952e+425), SC_(9.80689107613285059372449543550941420674648369472249828292039754905949142785885007770608892965223885788218745303191118820562691049784660812981229074467947219978885790974253085975473979245632650898788050611589900236206312674843146926926150180087286686402864383874423569723340689835577614487709179170935290493976265256414011971563116125012799652588343350374269900762013290925378701590996729109220525818658456551614163163684491861419634548913453936895204775165372577278837736236627731759811990947945526936e+02) },
+ { SC_(2.23407836914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.01602641534508128258400950214145374273797050846114242001541284534710542653468207980277399224254098852725750690198614880760636523422915547928831404849495996000800662060445653094965254896675145872932515875338797873448295793020068388660061422362203221153377753128756862647837950009432931683964156189410099104121422217337910185538855320473202311427440306769046317038713811978861575226628070299860658425341993205144141972983264782324488774088125826150530755860120210612244114406558912323853971223086644010e+427), SC_(9.83219734056631214805740645496463436211234524505475410535688867450764188677391013597688715887121794422458254521169369713888832262737552174083801113013767124185581343793696319245352755705382851443269006016905678997236882801656715922216129337829606757125264740764759978132666643390537700039675539669842383538569378954333738842591219063945023136668912312923376846665554737447746308715250063238132804164257172352296735140656470915973499582649443599854482390659748267654064813035319225549619002213427784655e+02) },
+ { SC_(2.24445434570312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.78203048568578072314975630454129358346597694541867298893268295779312349054115177672961752672090492075729789657087236710851458584409026307715710927531034401281441924823997316505754573561665960838553695186511836116480885300334679016038360405175553662098718417729786579266610185124858219903683024216696158482042037421212370278799528122475509331400384923037092383967020328871785652646339928895909225242591274145726260123768031085217523259780112767159003400904397427387971098997527816604561062545863704335e+429), SC_(9.88832185946077240684590517478819780451128112923953742197222968510336607120384493918723015029894932108493866736441041810700846073361088322303145991164121421652517067040902640800035159265763957018969027518089773608899386328021870308066455195615844063301159614500153922927325923223988512665683867898919540046161912743964469037869808287195463032769869290415963361601589546267939286944320876254302657257848836043740477654481942655172138948629613157341147387125279557708891527067521340447109438205641733816e+02) },
+ { SC_(2.24982299804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.08570283125744064071408282635378045401241969592156449443996702190835211221986071541294572366818302356541415307755599912973777296065104685126082161106964718360429925262611433859308223046970504685711082907721101589244124275919321272422197307590333345019716462006909782814102785758541341122309780507203078354967106364356788841452814123987602419979869619346935389886649067301781214220457407095330324474516181076545625866257383290602306079211952881872730447864137788597132669824574184100276125868082219937e+430), SC_(9.91738023223958938884009881065376131555309354725573064026172975476434338082532225486389254099218688500604631715941744807852624165530818749931061431911641159805284509729542885397058261027663314979484823063801479848319523581382232395800774141541503586885701947271915541461771489709321299408954375923542489570905202242397918325319450667664823098951604276868695957185084867227098618625300782013524000820771445825352767851760490231492154993825757921566047222920601727369887072890583913275870276765300881030e+02) },
+ { SC_(2.25380126953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.38397630910989982662319897199822355262622941453933148710342334376170037992638646776455752933851589205088581764884554455093887374427845996862764155987352260193822834547176833268670139068679454516574156176879380637561952215681621594852800964810550559095376156580039180603265458146069909847122696205550963305048559966181875267238018292624066290913132691198433801575590704690978934726613364622856743753227525638991659655514117533570607962282000337241256209304615437910334310799421201705149490460361728658e+431), SC_(9.93892131226120893153528265293455417907692711084056105978330316980314148928761315406931894573674925248184025226781657554740201804246189163054722625736294660437392216588384258232617470370960400836719517748314210351406062703736702358115503393330157503550095174818446533875843065828393830314607111282496509861162829462009002548666854888549395427924117314763624845814073318211354521205215981882366525078448830967768959248245541473022064203770291966690333874553467437510022252495283474042268962476720672426e+02) },
+ { SC_(2.26118713378906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.39614876650223645360231263473938174402863061383726780064920286322497017588994204480739132264037264067830696295448505052236002652817040227065685829006607407498600502402755802165890384784931203281144550189885342738249756625413223643747714766123370215076755139577913640129626581145595398520375687222484506015632658050093276378770995676010787061717176679192524772406173203270747997823823211655490660005386706548628900207447034920309691242233987394832471599241410916931507071430774418976862458606819343979e+433), SC_(9.97893208034272649735921917255308552717947660761572427906739477910025590562822234904801165366667272410617176406496096031979017585449995098746666193751751704798263175479551023650896948478300341855305364337500163511693100633296716081183263040654911725476599269115441947739032989735343050527770531009113636674631594133928375474154120689814396987658381155565472240695156861646528035166405447476890042313942613111801777675893964149206639663651050740370795921499376283922886501627029955337875033089310146943e+02) },
+ { SC_(2.26405944824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.13646636560202198632099891680664160012426117926474512793298011866742557967962503462851801678601440639983785150487411359283183879485770055012521243949999488042088058632091504968760071183881899500499054311870097656885020207776773626582838277407992323550059821879498980927970797870285566527105997224181161537398731430198676368582299493467653124665022798275826974277968868235120389957641081271455676439859708153575229872144232451572457106486921328919966629955489765456656814600779054117312431766562222639e+434), SC_(9.99449854128569500985805506445224310036677709286609573497683142955997164920503198575362404784244157536065579835245612214355555848464975016855355135639594467073790826784810797346580125716082966056623799334363918073005591302070871916300341151412762306056300680129128167620210199680205983088439519866540199283793059342411449554638506634701866889380956798891517235822626677959487715208563502387089202510551655001223006521405112790658935808977694335832575278466549610236022748058733733330424726585197232068e+02) },
+ { SC_(2.26736938476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.83592163442986797248261489827130287085214191461912713722871756512942719246912971920116111414598328800132195109536860912151859983913755051117782302428690879733698225536153593512948050079777922978491605603344718815607149738566040626516318819520326219556183342036942846830134480193107978612564899303586610863384541017906185443789857663780749213169459547627352946245307698991614237316373854125626280241550114161410589975426301226433861910160177253027795524092422080333128793772423986098232596794075720037e+434), SC_(1.00124412166094487150595607398578415184286075429840017750669615166514802670126613942281835373480712693905021482183819887959841186834703214515453967087624374969833838207138357757837601033364944274819528877945665683525023273696360579781024258580591977130803459724731797835879337586908909375561106910629402837014768640173780750180259831466071739462689187458769415107681151656878301679976405020325744495319201309535234547402820679715200331411569575355353298139875377051054506410704721362118338961805382021e+03) },
+ { SC_(2.27160034179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.77914060211452242008899666386083052076020460649670826869818173953950212848789384309231914463302618136703805838586907800270236441286674518912496507264566775291438162369972641724026905411157420461870414122134915381812750034680648205729906304181318950476533785406078983075377792445976966054236115099984421563591803655093310255335344650795645446758018267005460249434136721239530111153839530584353444102391832796692819618881695984016557439167054304360445240739814704554363517548086200274977304840926256782e+435), SC_(1.00353836579147773636635420989355151208877209533358027678391798050842251076882091526102297723237485323576782054389490788244017367562953521735552232493327071868269081949601477850110684984476768380792623135825977210171083924553780077721841064428303318039606573944924108276012682456299563494701219941692589092680383521323267997227110599698236865458718055683583909203116080409976568849041895018154553004514259189900384004033906605321463098090087570613086042469005894541726984587197472413799479116601460397e+03) },
+ { SC_(2.27251037597656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.11052867640829454453052291025757960658413543076952380042287916481944028497762444930919833577206505780772868134575482029270280362186487431352723467266851681046659447223730372445397889620596241932010006197386489151164784203310997758817817055876031118766037758710082090563667423346596804851090856128402325164481953294532643117595074818777042264904054121835977363273899344512211175338061641165997292239896036240484605727372545714312692538576299824378621263658983340845164815186123901327436453302450869458e+436), SC_(1.00403193673239295480477602366256121497447077097801182886245727507501880605751496118687196108313777798222668608408777849907357167617461301895673631721072702260667937113872649674371034709014227852308008223979686762780850903215454691388012863664666009490326014487795233371894668135247672648098633958365917296030831908135942177892329974801305128955359313699712818720289855093981017725188789621063984596937521427893485891583226885884185091476361258699871312799317001155755187769395027893412340304105745269e+03) },
+ { SC_(2.27322021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.63207709849931145871225054785721944060815270545810286089969977505335444573747764291754041567166168909984072499145929255553424803538289854369237713214437709292943536625316190051590509936147341227297889304702762825425433706691825011136068978815653313674255578440420644981144821240708594519845304995263875525581279668909987253339379751496898564952924913409885321685682484389724063805788629863604220917361441950073224320500683681966042090169252647631221869593021473584674311386142486001635907899170124315e+436), SC_(1.00441695404255749750833880843462991068907929587087287878830426780880302332327714066072448615165393695871343789747137099406763660160104408198664809359011139454093806868551932276540681709449766166108503346103751510689832411644488747795814493189289661475279548402061482242873616752441433094303098293394131241740743619715423845997549566048204364866262963318775358123150746620392638753760626010116854941994154786213978711089846362617537172516298750146205786559079059329703118874760423940968396267966798642e+03) },
+ { SC_(2.28519348144531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.08301840514189880876105210433783730639445773641182813223476146240835132021036070768294989734279876868032148176204430975964088580242578610006274265663450361300155589203181147268538497466525568540177608315212855086785138118570465995366767699292934688282954532312338409594488220264594071958730820220669923128699007881170366835399803417557837301229914738094613784511607844164593733785050701172328912361185164073841579818636273938874589893074550582456915009413640915720313394235265549792227627841020848477e+439), SC_(1.01091460778685136004594973927358453027859253753186731137911366590667427721315216232368931551505274753105674204239182489324570562749892472525571235183751396474083708267602945752573711840268943129444049648503759340713860061917873014164073083341241519446029558416362438957682096199098251924631292725493699838897788658879378577003254305027825024933576706871276335595370704597547489230084515007724277840276175819764288903099904535675324716935973817635743016407309828330516258501329064021982787683819888812e+03) },
+ { SC_(2.28726379394531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.33311688436756978135668900335799951782243083616744817272925412955790668828317289227333073159665410631743395710535180479105886706961342153682055846567446435932423241258460541837360220120837128133247256439424960526881892320363971573205921128491823460172368940613044457808104439560822060067943968490555424906442156565842835604649144097998443821698985872242788369101897121425359453111909831864464469144725496144503959245794020497640252299205666690229453072788621622430551750598503005751988610263971997854e+439), SC_(1.01203876369191391397537008272298388839527230538744183935448891596555756547106702370936403620577459612149080321626505005366386360474333663515629660404711227146888706650007392058871800825243571188452543934339499169951444698418581119928502493208009552933987567068494616176046415894456738453361351153810609329242330485851335454872873720161453739661096346027323557368554037728986429472462030061075682473358814842217702848228898236042470500021601695060248893896909101571407451236019000869189944883935762699e+03) },
+ { SC_(2.28879394531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.65135831041580457776340074210651301162320945447995180897277995994680734216778722114489069796347279351480307803271876171024271448087524642981828536415645430827293276149505557939771406156152035527595413645846904431772492351262479410618119850502260548624885759325692799584044895196359964192470904833213445823262693397368765103870015980883032125896055872150860625736736260444796414464113416970335338021601052071391183889674329406648074533875855540014866492877314882973740174337174058595492036012717678505e+439), SC_(1.01286973901338023465149992260320944767495589451801280341721538674674441760940754891147866157152411375926525316233491535111651170380037233859621103603550695028573602272014224950651686839677320052003641472720756972039317929410042788153661183364726698710636237441430816782807753757609306725639743186114505078794658557227065759866527822826913600964425065939668093305689092805427641579077236082387589576411551620192019239049409819646908724890732828334201726317266119543502185385568991048651259506849007710e+03) },
+ { SC_(2.29125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.90465795226708556790017669054239224462354429269807487381265966667017548765980723649772797382681027572603162976838938370170818237436251860652000037925826387023967525363791818075226631289162523946339656863465465820726410948453526025835878642915007697195245134620901070936241116545725978462566856005447431730237110518337994080935190293503851444586655133879016012999954639820851270960695432912124491366367196157476373186099072824237976487832801731815070844012065376523608002168148316258296433811753560174e+440), SC_(1.01420375655626517600958716349442133696717847574624546733629537985043871004732049302197607467630694092273058397712207234971393351833901802132958468701652523758663869773292490943710352570936196911816199608025632640693494045837106848016856502024921906420277735092593879433821241801222686972382213994884914975264111441264758851183858195504386844166071843621593620204626779873388818501911290288524863961605511499951632415876373557694746845507515525976867337733345722471269029243915715912551704102811046404e+03) },
+ { SC_(2.29655029296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.17328599445677156474744540820672325827503902812352631148115214513265962946517542218220056919226266740807495223944787036752065838381374165589386700202040486455853880580142280010396819876123508311556392119531308643280503500980721984340724405123823704600058529878829235661139836755072061244752119337251084892224874879871419347360822727614012404366318296169076312194398681835033319653763984038215775766958241930120997208201748781040464994071186937000864444561568396233212623345228013137366118153649313251e+441), SC_(1.01708353408586320663465879346567561866010735047926971925795156991006351710901470860348123425169599299760458061388919004414254993007807681385496615676672852523516793999597100430287717602574910173941843661595774649577160012203239954479676817977334225778909099418980035309822175188813783777412355264521912530281017758596993478482210024846748055051573736813430251129741166161559839975886738148624765554334431976307623445065727959659503883665121342481570996531822289700354917381018516576773110305371468487e+03) },
+ { SC_(2.32175109863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.65028582385747551520996069756490353867743417593138571380490769388198987629714626296717715502866244782857681499028028475966556243813924992217605596798478864360143613600787394349911423257211984469664092217739322955802659803209876171687228289703460196056997651405936184394307129898685842057522879290243672155415398832788162325527224706012592857285492726653693130611300664114986254955950091041390482149622138175561231786819467645864963718337261068245278972211328859600961728760606130535906275048832376807e+447), SC_(1.03079246525354486785673682028102788701570905025091920733312422678260569871283511540662885611428562553382152173385583541472628763740119308880655804360319412568333270266189931465893739996002495397527674848101768381622086371938982695825882518212690735322634868055443393525803981229436585770457381365370767557747687842528234581064046150197526489643411458761621755269420572575103889832653490580441691448344796702085985589530834547695229366221918548114968201850198772489098827165857762773352153090225566242e+03) },
+ { SC_(2.32473083496093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.35632196482493355248130028476518084667696749878269651171129987099594161236188668987303893295652773972100940879650315989615357005753818087230776696435556405376646870974208936505050108433686460126934829629832266043277453245618620153658714594999035580638727376349710271139659258631431162309088695421077519683884996781795612158187985021119102710380411466638652939872592904181488713684921194827217543223340998110582417974894678896740301600117909599159858363961332219051654706587914484217666688850895098639e+448), SC_(1.03241522357518101737393444391104667102143933628627242178063950059276131574433741373715815692875410742508921901250325766774810623614541705119801498495850448015805077412141164707534647750526939066262688702273524609882263513152715082933872606914620239186161457724986127994417630566256744226848866841314795309971119412070383482707935638126112511003037623452910434306386212485147768519672214373803566820343635071623058580807115864223399827223937207577555928000842687046934803211548105541783448023956266920e+03) },
+ { SC_(2.32713806152343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.74386328860427139708480522709140156717097295238476263352838905519290853840258687894960348430780392594627170267325386390740490356736554197674894265704099376693689575412504395343274323240660516375703433770729029172958494455848327317377274733684576258763684332319067909261279776488142490370393200561272767820315367346887415877595167559105371975031179734689134061166583608754876775899393186872700984916001642565912685865206349436098463417611566800620904270839696975574154553405606752106422399839471109019e+448), SC_(1.03372647377720390505312461302837813352314109798958416942286520193263268408295070236735892983497373290409609004357017411946557572785522222817843942888562928412052126206322203596191617395362584494214019632663234183527699317139696442854387213730216677280623624507835715064537863198524758711783705028814304816908466887716821972886975156198102878057331998713435430259154109378891515830322267984193884445950766698658585746179858080102463878140826893562429018204866535312097414306336382208063617202539585253e+03) },
+ { SC_(2.33669311523437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.59652230251173342436961689893479071619890832051987682509430642695276639519037742307108764387197561352113017685797688723166487965840386571091728724735963038772103347150810040789916987763976893849742303987555945731072512633613678628685805045698461098106633571091993892970939086933041705624680677838363464668332065912230077706640741447662546088952351730357285599551928479725877541554519897435934938643911703341693287057929274991084144152156871690324637742054897371502532209347255792736638275100784415339e+451), SC_(1.03893370464301812430270273797465443931621589838138001868725539378103245226106211699547624384358779493645877870879950332808476711355159714356127393403248642378213421767795909018688531166529087150824647243498932574293297756523173218892933728579129063958816615693509083598387560219923842940734042656483848413017749736555970446860201572396326629555598835608823615041170198622695968531218784313159597703450018676131370651500498024234738652202512810860093984188364583869338612575330092237235704879515985780e+03) },
+ { SC_(2.33750122070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.48035542212848748580951456739669118165445155466209970167021107325238198610828827210753611656639746672855622622667573120453801965123116766927533289960343425914807596098189017999233446379611107483123125002084704957184911538582340318168891322148345728809670306031039007532257405968346271664750720477702330999158462667072184270366540303796364834639970791998331915172645614748307729400559386201499163395160431824570064384505391923680439672678391435111828269975380391543551347248276222927047295055329529459e+451), SC_(1.03937427880559721723875271010291664425000712272482747010822303195021385976486936800202960953254150118444336648337138094881785710635932423121552387592325915868032769800362005114311906889861521595924019898210225487486479112793560138223985653696658590301672094662632204539014073516959870013264928770396089685081806702343716357072165714374724696550546140945549149812149654680894376153939404835299018702833912826918021395290784058715404305726774458550537666719274443149307309115195305385504288343493217405e+03) },
+ { SC_(2.33906799316406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.82801456973999587757205068171942105132180207403568346005866809810735339470733094874377357719203049772673579622321393451563161678435517446669340532686518850474088637061106219503285743890806502286639271864279715100124758920673787054001880755387713460017747265822416656434785819729290755654738067799648133741584907451376231156918405325219771194528968390017849768174019273636367620581094554885412491341496431636058342972195907296418628288471085357048655824569086171978507955092816797735495096425887045867e+451), SC_(1.04022855332859982408415144993024946041011174818687099670272097532904899371291592732450041149667552397760967946814300639448342297729566374160248868428177893306089505241287932322584962371867294002552574092352499399398200413445291454849585896947462797919655765101601678062637862099177449092271828482862475406588574579284971566927994676631802988559874214856462747454011848999818038586875775249135149599695650058521244907805686249923896277154594123193736501988709962120662283636690634118624488957543817233e+03) },
+ { SC_(2.34068176269531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.40508904242176682116449042514135192129185300516161322566680256906472959720494286731283494975892497776007252984366508092626976683330922807310355867436972081605252190723925418279096272760501795732507173163164226107284022502985421438594469900518824723328937339071511396435506323052491106349230840389684572851957126303924608861311893978012477014999461407617992098219307561041406770984279722844805194001040505486287039050952359443948230834932944819759102109332164838256559450378885359575054433390911366005e+452), SC_(1.04110856270947538101194381180739614501940831547553767910940055080764751365700737334039050520215368295438790839219465634568043357435916437266102639570485279489511205375723738730632840611542004733804093586005982880832704926103737948659000585902591150081724989400373774302479939421280720081357450134541122020935778145630254133929893066156597291486410214481515034569493052557427604557399163276974463797716814061123342134677116493289934436571462786251114054111021383881194629007725260193971237581972192174e+03) },
+ { SC_(2.34075561523437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.46283464171658205673359342187410672824004419696515224137643249493846938374856642233113123504627716101170415495851268629054747411466819072270070335549797785600841880439114525219359795424265817003049954995965790925720619329988435174252153574355193851582031598361707197363444624391173683034448011338759118721330089135315122899534041971055957544421727740563680746798981962962211569590141183476376982177149866375324652933807007761242518507116163066356104492152803643962684824082870010205524536918328580171e+452), SC_(1.04114883812210734373940955716284135535623863254266114994072198399097755575973112137291926747756853106433221244035373782860063705460590431606919373103448643022775888364716485397546859370263675645459152133303174900268442665963271610916778572102610236059216548063098273915034356448502824687565506462661829466649709679761032614191470441920400028363524714808970146412806337881027809064218517206502148220953690841519561424003781360750298388718689647519476416924274628377934089876068772673154382308558782929e+03) },
+ { SC_(2.34572753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.20287125067750718079139615179556149905970705737477202140352950933804030796805778020319006806841535937503813753291900950161423130809793829384216797437008137559874967689299880219915847099302300568176588815959888493888204101039844802309440835065942104357220354489196452767916876269412368577518051395695112924365267720945507718005081347987857139692854851937255638787567714405483457942262895187880023159499253905348472908693377988626310754506957615323282981674782173709961832035743109581366596396000766294e+453), SC_(1.04386080874969036801593481122975719273903962696565461185917306643059214852434892615191390663512848662213942068030645143498132360982781771748445235081671909769892554624777006591416892897140518753063119446522392570255162598160952720607925871933199089741106434900914023889219286870930878075220379877321240091849202182599462305189382108479682374213663824792934325082794309818350885816900788616869147146420656414455017195270502741847894234589091567320551824439360401139416133453177107485446208463479050486e+03) },
+ { SC_(2.37662170410156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.69588476604507350672186752288406627352400913055078408716981871368266246503967469530145974326225125508563872740428116310193834547520347257459038069974561536565731880187322224898653241935568316418632480975662809938034805555067221097564206199023693639788694315721481233294887573640242872312656226893068072414074658464079012129365543673872125822028793450086559970478442297078731733678192698753342197922850083792015244154406863318827061756727188665453791424919024617357701152260593008876378756394918182591e+460), SC_(1.06073582932073893986121819132589284880939121012423411497232498336652819995603546229215616017202919646806970309001181138023501723142882120433469844760382028981120858943613690873484190846929999212626727030228784547105807868110135666964008269575152557091851566554910308685442302810215072724949067920772200007993045157033316185171310625916442647714396076525031888938766630589031942049654503222125110862347322527744114218543156807945012208393754490691843363809339185569868911466295843368629487487889402498e+03) },
+ { SC_(2.38079223632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.59618044933309459771629537051242306454762477378097715480746577819101505814658760309888699851098124052209552820566129110212081322845191298552461829550023703174727923743890160470567654429821301562819348623836912643125949963952210046866434314885865951794015597027784975902536269974801800646224158739856412737924320313251888837608711617918676184826892515703635752955459512440883646941733927187229956342309875581212455839337808308072959797715711242383447998902505463971959849866808546389345361739978148640e+461), SC_(1.06301695349172781050151628847925561848956764577879967408325982564471939300851272454355600376827087190085627857129662149802055163055954305615719876834754528451285422367660868078171385746539282909272333651366917086823990743687477160421950231251969903877847305883867076189241054568971406032066273149639388192117482419647664014896025094675648822702834273747775461229178334364634670554889108199859490580553973780787630501279613967857482286537056883544715806462908099785746924126543990393689028100842174351e+03) },
+ { SC_(2.38192504882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.54168175499587073092180520329596804386627391353583263303094023552062376906891760719594234021057259873797695304492667084786828702680774484454771280201969339152006349027913918717203732359785155603647121841894949902238491358184724862469635770671456804740751709698752857245792952692958167870994067809785211732890734268168709749038686040288695548119573734834741760173346998233828155997415833994468018251961981546305932305862226556095018502477012950304314448062794909916360185543437247645207888756894409452e+461), SC_(1.06363668578548250370401252795936678658214146587153696818905389730130100860689831859941425445709214080634074200123610199460512146443301473506822773406672518644428697261299923967031368142897366971037645480512136567654306928245502642527004354203279461009930460943985372427662669531902550869079353228012359246056102213119930261765576845040554072006843098564543925310860540263267292346640960068014576001822334179811230372937424239438270029449033270833514558013170547162234276094554904595124327979610941509e+03) },
+ { SC_(2.38285339355468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.41947397118963617314788755637586490746572454896226633465996020682987607134116483944555498871433225886651689753038477214838858830924218287124058678338088845707104523190503118871654384066197536681461587863450246542829770363263752298596106123095264963271487497185615800319192434155689153810124072113606953587678619118880329327789427979226603186706909941800117908967798427102472909347910366348048511801362295937601258427254711672197893257522736007583671610268498109326859949487563742610128940397491404627e+462), SC_(1.06414459932340718276254844964333733628424778769854642604502015112233072895843496897918274954904315525586616858168575274984910607132443555116623755233506606519200681838174906410790930968684240895745920089002586394197780631346567289638285171542182710036292522114470875839929401810311049350175156819473410738085571871318604415503971285224403504307872198848550092379662069161420116644278008128925165473851538013617353485002911131744330044949423016346344021720680788560292311324809522043915399725265728324e+03) },
+ { SC_(2.38449401855468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.48333243944963938460038807628141680728652734242529983503196330107541018884896450269605270390685584045655111474349716665525756455157228888420764079214622095351932293058358702487712129858146589484049191998982061154465391651183192758265896560986975716447245342173644905863227919374482325681486395452150979168995874742224678343035536509001689835933775231898125270451120359615025467375314240659842248179191424322340144486882212653879874824857998197970605647601340495582227310086890254878271533695497507739e+462), SC_(1.06504230239637445500298548527712035599468363901053595843355694420491932752355611922392711324983151830694953190991236781942290030167076003666068983448224125112026026878175583966767564651513079392543162633558750079682061004604189175557534332986159799336667203377326498544563418228880869684058092464801983814894605687842967973700886156083327625053249107724146269370745876324992302075515562943166197597611951013752623883206038944955327246574301159911619035590717538790504354839278215090028669496218534029e+03) },
+ { SC_(2.38559936523437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.37808122622815690500382267097878998873202671046685442784653396143337081057678608592570706493795126392154927007242948720112233181282793401430241937762280269319616797793204397897342957969475363038861577365168816366186542910958418588343939458983916773058239394873634780101047648471639661133358367997072954234292874405452406442527742981415599511950363089879771273194175468368996547944675734246440049985436493390523580066715602232978855450894692366833322734647102955879936879358004621519562816859069515295e+462), SC_(1.06564718026713188221300788798449318822386679631115909377592931542906431858443887400466029853170073638998929438697252698045097914305821507053489106299600238825989467141308357331920923828067422437132050446933445112950337443966605895270715896592560696475023878200116408756694204603869619127754904399915317031123993372253026740340221408263993749904164694045691921290237886562504789443179794622354363137328640326923815192768951334256414041600152528128088087812324405144604755280874532774575173403318420753e+03) },
+ { SC_(2.39183959960937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.94157018887591895950029163728542793408946464139919208038107596863950722829441714083687636831777205813943883550816030552801676734236213942895231828469129488622190497512267498271372734241655353912289454638756834374374740631824662038440983160832828030547695516846994352199521056353737210131359309268596607489388660329143892165771782457572052944971170530662041681201911170697773201968537217365556169086636229957736037640824751108191430402054974991617792017930927543457126672995400808153693341383139898148e+464), SC_(1.06906298017065378187624790057379699574796094882022841748096997547654221159280120433080931509570527773265455753615325241837047249118641673960630966615848418340752374143544479778090743970295675195405833906591135259210501834917009914510024819940224593740504234476226622913641163692720187046117873687162625839022250044219018455743460108004115584706068872740730671027285122112651489320726745685030709857806650888240277344461191044900007279644812364318130783611173853977564915916670449232336680399309889414e+03) },
+ { SC_(2.39209228515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.22965588149176883677863436479347098063601506501294581637058486148016429580333788360596199882034574406089046769560689512266958213931179921606214321680718550951158855557957094326401752253776584557021167933373387712139887740399608783535560620660096719919824306142998877127015458350195419957755176242812438880991357564055101611623996309791634738184143468611268765004238420546231730459736500027048766350921461164883247715400680111387616331134653839260533648842805141528698080347847425781597398144335571563e+464), SC_(1.06920133040956932226651899178831678378140063433170676105014975945535835531405946008301947191931154283279937892805815878840500827407033937362784027376567479936168124084428424328261317700025320702773878722368275520967951607263987933289394925217533657502754403110018320534942256277449623683686242687413845378907563655096714280883155894121127292810659928737508254622349637428782210263617211919915908614228230382968923053572998522118132816608706708627636419368172498179970755512087436811012149223971377463e+03) },
+ { SC_(2.39378540039062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.63461988291952864225994067623663602191421327597184383451593828942053451036098732081069702342147329484498920045745203495636876406301906416282879041998359071240498847876047529634489148845103143353711308005345854350554588069697178872742298481923486516611580575893701853113756883215781067314459664603185439939406635958863126359602153526548719951600913660229816848135080377548870406128893804528813003597117460481870901522422075896578188379937723866873740431915974855618157536225920117943597334847302564141e+464), SC_(1.07012841283800635992785085347866970292486590032130157366223234903895565008124948668497341853672145239612551790060801697773393448723730849842221849579781107959912327731829701690060569384960762377536715585087054264030414008181119739550864608854224105461145376575130378766987896347272444288202711970819139827870250265726164033985118120510088470517424190734753160523791757655570320711553538529532632710323455541625836267351628637177586702164245514362606014356078092189507993727668374723826453086374155996e+03) },
+ { SC_(2.39431701660156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.53867396055322384129488232914025466188733497440373309517782486252619714850055327886426163035942208648761914295268988414701140621233303500790934211370387150788422923163636573186379979212363616183424959345205487229424384610002076834560948561388655982398490920750422073502897509440493515594482913466768255709119088614235011109277824002899721078891354881570180887656136781796818978947996209377914569460272454332454285370991748870572228060060041931960790276358333034863606274148834677200061164484295656059e+464), SC_(1.07041952944848996153966139952161324243402102800025817767865351094156118687619512914777365124438179958233790277907704609382961053311705648107838598705922738898163544660259876911789437818363539705971834315028801352529692294264318469332665195632021693961971710539840417816448269562414199398721368148461849281061565916133828035768483888489411615317067220311570705191413775042769486971819422724652702511400307292805331026316524511907073492287921935165853618049207613131972229451073764106459363046787272503e+03) },
+ { SC_(2.39895935058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.58440069574079716863433060415505614425792248695001054992436506568573113361125617741080505710931160666409722196210637188289065615828244553129407501359478447712041394737835258206432064680815129181252982191388623689880594520289907379084328244975909228808102020617705819715028591028118727415404627093200583505632221692729880520334396644629277404801609762698874425982020764961452953719532853730335255304997584681802933253940534795961862116737078259312797829485848148571463243429545578162327677104015515565e+465), SC_(1.07296220509155140696716639581772093443397169965248974483583558174561895960246006152036011174855607317424444646458479054017625998172108308784726950437696587884083420633054006725507519193234049878235365252890579007317444947764342402651632392374748434493152421235557911829580866197001662654431022160815169996960631290372264226239871320023503509919344917855854505406637219896990913152625013444888676907600213797217131259342505913976105952930314479063896644806082096327414637850854373415228519407865099881e+03) },
+ { SC_(2.40020507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.89649718823757400947167077951524460612069569170739924724478610986732054323059049262923936813149857907497991855749115111878553506221462619402833669969186745939146292893351855560996206348889234697487247736688065215920183119411587096419492463789431413669866205678827121112834670698528339566703335928736010958579198829210799654271653874426161996240008947274247261840057377563969157907695123562519093760418451461130854445770752457104931476613410969555068176588469297715515682723988571301019697022594755022e+466), SC_(1.07364466193476492876048551186409738209718738939823728933265735592193249748264877423649331159224627769568207469326271675026368568981774365739915670977530786589394179892817758554208471773608660303919743206731677900514557860817700174377917327700708102074241147868175251517696915049733738343976041728213374667557859050052690033795640638198300864515996594190759430675768272167972727147768409289191063817268205945021688787296404871571373323909155379268103635818844505904906792747070913714314112647577333736e+03) },
+ { SC_(2.40084106445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.68706908771978335145497419201912653536187825194632165097535475236043557963394839721753084536758345053166882212041647215258832448890646214678813646720700127049153399120304804010492928609325462753341521395961276075108926892547430670637418756699791756760154525651030946861164426897455385903178144514861564395708716016677570811111393049951411930208514784749684637435303949385791283747922569494190899010361625748543158605603674370587879035558450407372816503889721792634688945585092930934850557005438807571e+466), SC_(1.07399310437637022175109953153717158598200508200904978208154121260195712977818631630399426900935494427055182178831447866580572567666402697210381738873289388801029502443567662530529953826539856260050700863085564336238016716473024729408356315992034242075238725117312587052039295391048223523442893809549368471091203199129016405567321764782914135350134185126956493237959734804979980145189650215070941282217344679667446108200314884374982363709898760314475456934985597330611568458113984623669918181477657987e+03) },
+ { SC_(2.40304382324218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.98379988506134624584554293334006336606012627483173202720669294973690522713177572304694168707406459949265446296998524208404118368290574191567674982097225782245774472717772301332839290622449213487957133087081371198820760622009175357226333728469053391393594151723725413393165786757688131591819097892066077471548298873438325286259403547733777757557043157082065170520140890862301741934782938334333655220921264911228452327010059985166234876779995082414050249291987696141757234529516760139908801481820438505e+466), SC_(1.07520007627782088915699782436285610523850329573383010502659256504687146794475230751227924325397645047272966798126089063310217233507974534484903004997977998846583427673313053049155047015927396972049401157366091216975271099104410337759717590406992188545244291039380522665894882052910674838461833212054822745374761053352047785361998416755664325629469623911698927841249593338616032755404386053212921119186176417863756983455435697681313949377015100023267612639725960334287334440649672025282453011894560158e+03) },
+ { SC_(2.40633422851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.45290092042270445706517858930954637018954861402108015335284684055533927622287154200369961358224881777399919496725636111525501793489963554569357513118841555869298121393870373678648941324687066893744420374340782981187062658105519368480418752139670355836763277753264552537051454640625911426204994028440408335864444968153088577987893525530695952106855218936088906142519508504535683925692481951242397994049231261957594013192808172290903678160977523000903153149699180047354975260330636608241188832667886421e+467), SC_(1.07700338617426092420360655683716370212100133442920853289554025092105866912032736305524287446942059072340620021122365533451797645705244497213533406333520330179422087477559452722248664993453801786833333880483084927178665861563694223691008298833686527978073987250036184318995019552859242072556251140856415592470963477089808590333932257259883227893181351600907893750933195213601957847584706772825115751509214042479687855350206986519218828193282538913435834812781923710324558728724992140653135621151349700e+03) },
+ { SC_(2.42259277343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.06707965192344925371397162677896126512940865619524129198376053988071802950580636283161794425288502687836199115252604893527108859386980457600123251661302638968303028713365990799614128517496070368248188936690962021477710113555433623851096004137323921602196764658884601624485472038476539713360000969691552206945021805180549572063814803795836062197874173167505741970459775467999898703289143705817813987926303613057191482659889247680992631658979651851183933690304882341055519698514924982134819974861166383e+471), SC_(1.08592050401186205305252227049854467788866453779727410303235344162755799044942609850759917574063726343195369264571026200029028628699209231711416326192355880978026178354859205411431114281881443861063554264800970587426003157325191648520032701335226655222568148716679403189124880924430337315763108072787361940805568429792360106874877423673351221648739934357265010905545355759831504459830408833514863990027273655666672328214627403178141279175713758688160126348434179960959539992578045180669891977474097155e+03) },
+ { SC_(2.42452636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.17534614298037142345039474072794647497696754990376840434889758566740309615393859325760700422185944264975187274276221678251846445901506717347325794617383677193930292635564569314924664137782285504547373926526116494078927577102932296955833885396703315241135402451011484656540839764812005017172176813565178956625429875575085260669148326865639709897615495636453077647582700380316251931590038135524676132572718248271200457090571287293949181387998377665436576329144820250885118600935732031232959452642149807e+472), SC_(1.08698172658717316748670683364759355410957402401936662659520228734125636852140668222612737642782068014805017062077305317831951391560113553721854022432860726259611359359906292713160794218426547014373901499615992684721735679759014068037451034041907856685281054083012362210838300218511138876799438302361544441253724297397128578290636884486825921128550097578187812899573717515082635587161840171367822041407730059414135674469645603756294155347743226731560119296989616471054451874695933662905379767299991278e+03) },
+ { SC_(2.42741149902343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.72767261793890033713582342879738701579788077112133450788635402422551267989595542378170119233843767010110473995671833847169382830427385783099874616214043296727968211231578343013439643264137629921650700894044930573728760946872993793594612026302259154677736019700059131669277019225919605809562944681673683582463411714732539335784484883983966721360030448186386720572509467495206966930519809289988603766588768081042987081659937591175153609021009554169878820680715511157952582546047874695525454598657805603e+472), SC_(1.08856547316652507805741328133311108459071413379849228249592173654082545295697648962569966487142171527958950589368489233562193669286348468590263117513686095496315254550373721483327536824243475567704466296992104689471024583820828327453734111665196157826358004691008560351210986980416020349429176617197355798571002516082466312932251349387198659008274783174241418059580857383921848453662545165049756919518456266016867927855881199852957480701581932966977791110600298286554966460647605864227651410324291959e+03) },
+ { SC_(2.42920349121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.53201276888197629808862504497772743113466279857008013211366135982551142754132320426024318488783339179230789763582074283483318893320108455863809781825085033351985687373160142766923789148043804328952119961818216374505385632857959777416808269685640550515878131380792531866838773936470948896622365931502897281576409866141191016577447398976611054378520552816163939047214583399324698369172847280593442589174607157816208779995991618341181033390903049574647052471516421384328750846316829073404497883327774745e+473), SC_(1.08954933139224663191373624402730733457145944547090419866603838467045367751592532574797932835457944954526422011372262948587042044041625211829540148410268875546702876076022960618710917472852631492543810552679545678543697576455903935445619223796616816185312040389352576031358782454105047585102933376404231777600244040789873790304251070769599630294575082652813327430711877253661725951109015906181412435940635688141912670529932073988741035400213624650942964235476048057467785727734292766796878737300553607e+03) },
+ { SC_(2.43474121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.20659830082822807550684162621671242484689725367685698806309531527220651935181788117161449233997312759317999565320419640596565536945722521496265448362031883634996313151572116563625858362959374389422990740551982247108018012316042005491930016052043925455610861097208936363520112103483249651288286282499482846899592608826865439396733597603664674785931212802368771076717041953340816161106811566842209883603837612528826939105638551716536328649996820936321523928280412457356933558946478842255705512594206349e+474), SC_(1.09259054473505185020260148898181799101890053492770093644589558879888631894672765864710016553989091048817273205961860093624982180583460607332174254522806445252745812588451071909896670381103709010753039758448685284652639047827964352787746758304973256731952935723039219875410996554252348640480250159757935783095789835288052595599475246885171573720083904554005862824935045527890974059646530836129165941978331255890016960458670035030354438036004674061852454936042952391002794873772984891769512979230723742e+03) },
+ { SC_(2.43562194824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.20183637105217623172923797464848997174086992491947364813682740457671115761321245990293640391813511085508785054493124146310014499293839817916212886450320040492723585301112824160387170478701680097002704841078425560263552545088813641594542084519290981979693925736114911356847346902189717268209609703306987517691791491389768925204678100663192557651531973987910224878895144347901448931406404192515698957792272620740819719519296494929217582125057338968893888145174107909888842732982393375296080500940605328e+474), SC_(1.09307434579070212390463170535805904113810048378818863213467969045901282272927061149715379325038509499348521298215151652230004887326191872947747837819133020453913140305285129398782057136293135870673974261164857986017688226208069949771184004151260690362139381005028254664081367364022975748746162913157884385625883666077028737790496723786895885118549491248573315557692107378802923376848648798762400722087762024766463029425455803333519381078371644951888278291836624923756053447624827650934011312835071622e+03) },
+ { SC_(2.44285400390625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.76686405604412539339661343845758616441052925577958567526210911644354130053974294580554965622254763116679371518596901954851046089478839379935019856089757769537416215481074054367557668496038377323308896774712971360400694072692746824145004924761619270508183207114488008375707213119066484252962447630071449173630135456169285964363547617799892564592692898649897884476943097707995388078440279900796228163496936639058915110372202849596817927782734640853621558576352705315952866622510099846454353115925368207e+476), SC_(1.09704821883431333246878034800913131133004617774237652456133392274541645471697996576787786184156131724914426920347374572715413381334698122293227644961269964509579499308034760939130016407824775142467786384185216359267097020505399225215662449753456672568558196598431193619923958396225496259316083275472599012725017480435935609675108737672060703764757880228784522494341609845875563884048952690812875136063236280669030065004284959365248993460175946184940489450837789168513215809156712485244298278588386575e+03) },
+ { SC_(2.44417053222656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.70505217151482707560344872388756399027138308394805187822334736401973955947762854604747319589564276506854793958692441633750729878525989640412125275224671557499322634054306329238710314080299049317858080370092529168411441763450207649492644098019508466278100464924576949969538927841268251040178790097128683008741184533864036465320373454339882500767549299083224233514343147298165748260952699007680765162615835008295312794850052062321144867841211153653444320522488018187419379631158239331564040471524068293e+476), SC_(1.09777185639331348788918272466238590013318629710342735299246723455466040107924845548807198614251893421005737503837907341519497482068397078004361309531020459166273788772568115672919382430358447900648111878161378494300520159444389092845636989094866949686312413357276884174317970774180284693716986800797096187980163127206924591208446213909727230018309417417997329102689857694901644134212533436020983025724887211800814292347427750051419458836234795705936034258217168328031894474730984822253622198423502573e+03) },
+ { SC_(2.44730712890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.19984430794265702185337311741762098081523028079108473148841394181362312227039458196269034918418425270305130877828991235012942340226308355484361800330517854066656481866508614344435151072974063018004352014047903208039592586919540128879448470195191999247855617285204775739238125821232198480472902585944688075608244654414646203243425374981469244192904780712957862108658666171283285380215239244939363534306582969371750000102267330090898441948646706236770972993322153769431130219630190085216838091544767813e+477), SC_(1.09949619151301391950029701805631769611008807262855470222873742389446963187665702698407346027355925707914163363109324845611832638616458910980834281618506832812715189198095906839378587140839475637930705703955932485740864458309356449738226172131360115617487952377927040196173956330961390453788793597922985941602844919957688997866773378935234047882188695886955486341638798418823900473631510128893834881091238844721984521137662584436674499452763698770810319339301618683012370304286131089151905283442836986e+03) },
+ { SC_(2.45190979003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.02106204698474147038524820492550560078017069549293199948065488925151707195680948651883913102800854671181343239118174750115029170987603798349714984004066433280571146164092224677075143391659389593248105031166450906641965645213949744932246348972143365514093614017110204729888998336406629195032134871831856832592925300558920741295636930261794033998450777264441410893875342827318104090915362249664871589326517510791794741813396559204382660378398493018342872803238742888583802615317030001087509362337208003e+478), SC_(1.10202722050968474888880064215995593379112109407763184142677318641969202105631586870170592026305055821546854216260429646876317242972483104894554438605384123147001152414780082340959228810453386924503798742739771505721596804005351916626174551267059789912776142677129102063642815606482970969242657415622402526470898920184601146762751524687985318360061448522235006610740159558828868956004162656297868411448324293072130029498482599821069779766066458967680123115400643566381137300460459884762483914031653984e+03) },
+ { SC_(2.45288269042968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.86653972915027720831787156509427502049588713807384140548206034807149055936277513971258726919403475684407026393134105167378727161111256777975926724685784518025558166259097476230351493395673203244939587670021095530405190452611223025617176982378679880717237637319138380855507728364040144584988270825256109859848235931553190263839131489469785119426402499617474922825535381967416304770040184215059668129595048783815231193843315255965980079578631833120339582659051224165256533729464272186344318413587839934e+478), SC_(1.10256233475206431747509830229744348695825520012578348058249577746544275781725989146562524861019186333580363409545874290323216038640277848404846874061351978415170688460061548111738549584200843452963581366737107690051299883448085067024437425360734305824650301990444836621071396666619868718666665828969825040566711951717617737436198630357402086159143736789467227946807362597888350826960054811961623436978477402871717153759169160201862720636297145771214052962801838309044130684014737836400822914960181481e+03) },
+ { SC_(2.46252197265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.38096943011736509674673011615919808305961932222319258262583119150669566635487276119860709537195546109799159260431275366100571960498146151994729158182304715370819386303096544903502167517457143859367746226625589241588192512253088199098406829707922453296559754998993121494837876796098473959825022556586909344217868664107878544491461745953331538248314157762611033122329751460588143233529408443774607278731112300662480527316225147489103489133744145868506360022751144635157054197315407725299651124462141661e+481), SC_(1.10786621546826987195007506859825647393814182756004267548660323693123339380447008683339135892488131035784723524332747607481952880840029537587194838745950790700568168513918113699566352208858736370252015625402012289581640775846041470738832537494956502369165928251944421967357231818445502243514277188796986759102814465065806239893983839597046751711777777819172965628841918141498876226822417819086400455329187621480204938433761045454329664806456391712777136426361834019662320047971206703407317271604877759e+03) },
+ { SC_(2.46358215332031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.47531195803984385220259373991263863196139132625622584299388720809526944892459644453006399766745346235189577025111791754660811631605881920043368066137720828690018922395679670557747658688812047710101645315314819931114191824798204539054372323646241621100310942748292925974634391273939159223197506546419024299847343820654771498225336589397096171249530724564793746800703862271358630714796681716614284193641124976194678606406255638866888945926440402096879609886186076055300076244980803447673608525623397129e+481), SC_(1.10844979616186625605833253029253504015354946627663325330087282303836015492416428466451053439709913876946656729047064169497269145569680465765151932617704548890478528912275948615890301795787137218810857821013582435672395986815325923089505139732970299202162852732695774336957942305955163689398891030050257603090237299994409039112842935969574919839046736826971210441138256942972125553484752167871577517930334722750911052303381730436460281525338356651909390383677443569763189492497929048212227813458208889e+03) },
+ { SC_(2.46373779296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.69673760643584795276021206033535705223188815953273337896454021419631624166583326358966695270250351240035095834418733952817233134677435390604883766984615596611153867054331300437666122626576728397613515354609007712590443749018397601736521690787612358361609603933170074569754443370321961921498137015536480827140800383313532364248611978096086918924314732461789690200115750146814028898033907131724174489068752759467532121110823537148058260538559224656288439428085910830357467392914320088956994609843205720e+481), SC_(1.10853547247865795945628761710077542996121084859000822241768800032208316424503499329143097620992637820232916313097465163950046816998617614602600947085082300024342125823536532903767219924547058423693995923387912473785132428588271542205368801417249704427330743918984619743715945474183650239682783085079081635618694570940600187682735878379496672966389987579537482512660617251110669757738736715933839032694700641225763706175937168613678705451518379268682418215819230946475394437553896147500383286003238504e+03) },
+ { SC_(2.46570983886718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.98605890905816935902664972585063135495938774365664149844387132247697634154164084544876510822169487261118083307249496397959782219237737663978689185292457683736699829480956647708042231758148347412189687615573222835051653383871701374844130497177648872832349317575163711161378226127585659032059321239230546660838458364462678372266734827883623887605489685635124875492596874688553130430612623073790244658384024270838282508246832433600607913815684472595276763955986441699443427370557865793836367915242181413e+481), SC_(1.10962112711529101534912562943260228361635607185175722798937658771556845854992072759911213958964564672180452090515445311343017214200478219345671347775174508165692998334247601604093914919662291958003446775403802380630023277225515086469228897386064408468042667754801894314178142102755176878099440170737636064691436824061807192711396651740278591754488382561336256458723458462518947726920208751663599691758024144297984912059552460721498628443010295179950458476177309783144390632287281095548875858926172324e+03) },
+ { SC_(2.46781433105468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.54430070676716862693115810390421948931976002394717224886339767037564534120309176521299537203526080523871864027112261973583827525813579609223639673790081115730358923167691062682991145793513240237999993277579696520091961498898991973113384987345827550340957419508605602232295325172334063050970551689327625632593117746477019819405241059003402966379289957151082999690333889975219062338317455943787360949748695609477496225447970228307114621591908511761768499820035158216292752818940308425133880084975943981e+482), SC_(1.11077987066396813375983550556030116010095363730145009449803074825445312063852390560358313774196456800446660470281817384146147551203766155388059311142626331195591887681033823226527201669049461265320781724032422500740720322636163258283977400327908488324013381231482606703243324327173688936022945632266147475242665538452012298788518949061362244248876185646839216950748382604759541499840961090177329034155811895493525769858346071395373195400748894670107987565252515729906142353996963335676634080810431393e+03) },
+ { SC_(2.47036621093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.03726697216641365963643583377070861255725839226857137819608236373490116361468665030870506304335667714499350230042144733017895773636837793884654577915209858152075326187319766110671398780490787841461126421773164837214653680613584236558855664435166119999244887247239679329522074528427909659616232716848001691501296415474881129262182123670414079385945766434402522650012935379021133348931497416878234103813435959680042902504145705768202920197061973972115932276009952768960925282718091705337795896965255542e+483), SC_(1.11218518925887846338577082099684373100440129084014869852239046502528659782246144304383897748541818498450034973183658276415327123506136236388676382022743876296087524549286381211212091732033877831656470980749405452135779011348568055155217297691431058355209486124090220868290623085677691510535998882567196745139667930807300190933197510995156237553526751751936307514732732771119749185564433964762101676004967561538612010023100787577408658698862992015520652788974442813172880760711590770657479194250915532e+03) },
+ { SC_(2.47037353515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.04145957374018197650720966898854598266645480451376292061458143860151860354411403755636933814860351114878878604647625132507089018959340577083703677850415720131715935951684193280715383746394175701726398236160685348482653456024497916524555662841451913967034278766272625454323977888733836104527269030509781760497656144111087052351278517319942230391791063297690705734767980324491585907080640233385252248891696160751017539301773798881331818655389881137477082721948079694145413563849490352756883317903761505e+483), SC_(1.11218922308166972462283664410940559721964372378649599043806838210135440491265701008417555955702028563810322066423784753339768372134107642268262990062196285127625232125084927509829519803552076366252618657266369187932804353684920293503975836689939181678148657953074208352449137766423886929331657848806495657713901893538231832657027288801610772432412359417530231417257373775771556636617375093290326686619839302577808543897564582461527064584060447481565888679542849865718705937486881679827437348009135866e+03) },
+ { SC_(2.47745056152343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.13836625005141097527253563997570355234879426531556936255847022486054354534643507146654064396771235268200006803985544171202521037242927643948038319469811631366458092220310430382029347066068690253478346102410083374014349226688222946344408939757744674854282342139396887819575150466957497794246765592859150840676197246266078542509982472444650071199261973585796033628678323722649878686652006282394597479785982307348210808314881347762951890629364045844344910191388709963828800633534756374339153845771442027e+484), SC_(1.11608792018787555794761597871425769161833702399109093560266737996699317097999466450275890175088587935348969088992516129577325697871066578394780684085582830095056893431071354092821747992470958415688973268603137839171781365825674962296093015271490570819305200074854091868367524921073343049325325162922582577027829620892489911052952976735639113683060019067439306097985139206284658362904900432923869227530515152449676170301181029318868926577271501564963346393087004648815023217791597906770733748643258720e+03) },
+ { SC_(2.49248535156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.04561495566920723432260209647631957080999413333797576122207122407499118956399800493049967635372700083459190565775757174038814625946249478359709253575152976557372421788731686697476884579845655840194850232833250041677174205350669758073274529425618616827942406097888052562691387710599994442476905738335356868617474710844779565059857489926659940697801249642493782347425094960895785985883920719175152615025656490821075158608044948449728856201783915133469947560405109683736486457689961041139316807131113309e+488), SC_(1.12437722383720300533732703144576976650220747473127190173801296796953352929238884076703173317343950446261701920731245420014488329122609439902756180874402258206002590923101051526120698243035688178965767382003821300768780606209404145600000183333189285444841853018465689940637292084087799242953540547057571604423804871533766418971394980463330314850661300990984756273857870937193835080327404085295774758740435120394689317047938653705048993815660481680093002460907520326808806036967057815482535649482364239e+03) },
+ { SC_(2.49364257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.87328438615297744465096194646450231246635572941758649458903195214719841901359184702894285761560019123207949256398052042913900644331280456780967348058826841252429315899772532036801576151043477370241624504866680241705786040256854518280908183896382246797701544528348989231856539034662912089209800566609362450311834076414694488283454493481236958096637055222419819277630965593544354332424539295114451772100540679463612553653245221330337072322537887865352516598157006733971225477202153835823147250412839946e+488), SC_(1.12501562820680443368216702171006240543689597069180001812424410061058920018269439059791412119786982151024384145579756090696325922505051249226306174817059675028531145382112635697429404352105807226042425228062259832608249125279629131902237297461226049849486125890806692627269902627646157070460566893863621199099721657347446944107907958726306400580055247316143057433474694133203623188659133980123159234495668259271505321535182973001369810709246450843405036159665030460788754244976426626617648081851801744e+03) },
+ { SC_(2.50502563476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.07274708710426480479976309691628020779430124487097720485888334697293065565366058444675559426207689696334219159426908734795423285631204165236249707662088279983336826645930883131590681720259861108637124842224516484063887352372785250144522750132913825577411016201176890878958174595058056045351871163786080741791541971254518293224681558173729276871735946638215653784714368978926486545553845820066592686411503101208530284703276767673195220201625106490763553130345207200320480207536680212451754824233731891e+491), SC_(1.13129815548276061007242799350971956663282969471706439003558893479906950414403629362369362015331119636757232935969902969812126415497430260592802030743862844125148209465495399062169787530128423414073761821003582808807744970238313600717225956185744259518248347831246573614589339623395053881927846409262838468848241417664521706158853425434773273857759955532921647084842627513319137951256056561417527328524705102832473263527516608726622488376179433990348944635143366274694655291646510873085100378581996611e+03) },
+ { SC_(2.52215148925781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.66546695735448296343500891436923477885275286729668679318641830878176448747444861821913906606784896435601619283389185833995373629552167510816262130864697199232414556580841338932991414809810824963494478598652928206014135759671267276317584552278374538567811744834928749382434036721942532739577951189104244174983415016109197082136721296547613936068538033809115053815273570413891051598222967349815428435950301666838223301085664138390694335058926239694936196625961314619346643082753169947554871576514959612e+495), SC_(1.14076000029284095538812492213530286143000345941738461623639884345622829192804268698288927367755044061416345935302357382599504512596198391076818435077958094843435332039943092077503179319101603900176049018156176118465935531552091150220922336592025582739697402883872841338787398987528411269235431622671778589411799156577821838627054815627778310059804161448592078457382328473104979925464630069007178939435491847656260258311068361335597487518114941132145122236915830686125812822602795267174683116300530176e+03) },
+ { SC_(2.53292602539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.03191071320884033511504800929100209521357788049753836988719007816657743269363153829861284603676755017468540712580287489877338188655492428703214723938332869709046984508497992544082262210436204249654450943888293408668136211905190942561540445707590771665105850280062222928052516783335865449357107558503225321102670597604561532618065868917428757799536044202654413342139803149624340335917343546095880030999511730206185653398500549506702060248496227902462735664113586870211450859828788244444589828221348896e+498), SC_(1.14671878845614271749617955031050864728541082277909688253507208878920627341593726898326342194956549838258753601773814934347563807364987686960388930510753918021704021087094196133032315743201042841699745017727353076753904550315141209388010549755621073497811466145433233388397790421917741924559531569862030665642872200058098773366381238450010361988239879991136194310305490507300629587338498638630308205817672300083055514329767011529814315092086223350656551068120940251592683878547959366124588107167105734e+03) },
+ { SC_(2.54540283203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.03005428558617524389642890285878844718736494312802631482911046128287444469152925203052711854349077933234680608713163711599825083984398163850650115758647278817901873859522949426292118538781511678906635435281968738581011364228313768246077506770271284259942560877286339894717728365071225996165010140284660261508044427454324266917571414242254927125283384760348186411316044173719870677247187469764624829288846306396406325633057145838206687944738792492559477168547196965542361335319378649243834807638613038e+501), SC_(1.15362474309532219855629179325020760915467644291640360588973618407166761132890681342534355802445951253763377987714485380753622963278794590499140846663436405925979926677543648596024842185554719244634327980758885810890403708753567653855226133547431436501937187099166102812595018346975443625229718497891574689669961467796276639910612456949263481368164816247410114206146488773291362640159982137381102399444103022912843266112217179576887961610680037352713171485921893461528599472834088357664738039337882088e+03) },
+ { SC_(2.54738769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.09196180075864530403188183906333091789166563611957397910504118246808674331554103527064172204440255171927959820823856955926732873907899670793820545439159871136458429083040240796590738193503022406711184443444455164915163441143906928799720693284624987892375846891864720725260850423696454131044695480079645082675944262785934839249844685013504382353140264532876676092143431742011579382829524667596451509076288207577022596179958822840908509565631544300384045892449153150046947886464330334138576799443146597e+501), SC_(1.15472393736644797605691250517848268958895310901566935031880346653798199129377083604491862984872508104418000594364925274905660197481151373463523091415460504131469158117407436661270060158254970173747921064652488091181944661775296286005636410325474973905696523224831626056740792161187380762818725182223011180535503959532958509533623242700659610284710155511636044859497322728750861022725217217099532755195977800296327347802414024637639540041460242060325238074278773467372899379908985162705580152090682949e+03) },
+ { SC_(2.55909301757812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.02682344686683115607830107282795017666472482431979544614282577772499390761907606813616967762882182180541291523079780858381807103407228385883600131657889196817613245431154057591493045054519416721363462642405710982162249458143285907554731764142705744357489416606981695227914674579929086640030479579922939328776905232036531073026566520246648477736090367808919883388883963769810409171869273129526220123913816591012546473914835288435435456636717001304801970284224777873829887682898692231377394789277618400e+504), SC_(1.16120935663196836147684456052183632471162028503248157526172629450345258906449374768531348114470501427511139957706536967247272184666850539727909509085503115172037279703610155102680080757402088905922399501819992944193388283446387129353348109573343329650403005055995515754783631679191959563782070371163606011272135677568359568291367021150032988135908201750228275259118847650568520783802953630180077282788045798258503733397522539037655333302220464231548669210468078260282082167966080994777712544158413172e+03) },
+ { SC_(2.56335205078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.14892015447846929597320001936383408871375214147460215135246929794255440819993932451177495898957213852828701448765401875627627864497167830577666347436548261744159439146951924013834893635312812132835378623507524565086891484337108765292763791143863051292421436908810607938397016851938224530508922661841878561751356032455589686265729078942318992554715118910378115497136038560986632600371159329183179668739362697001112776460345397004975523207123313873706497511301901771552502809081894487897496242505292535e+505), SC_(1.16357043742423004366388876547397517934923017185696223207230140991950892999681751404777434890527995257306131176871918963498172815283610776154685935213203956920687779270742505157212334566057325315338334595808792743411169275890229071317805069527940036269400858158483627979973809885604651271180430322303210761759282508867472056296337605917830930505848881064672377534806190527764002703313807338123711562799144947895599392700429560372378816923604882635503928104343040556904440453194208759288283461661678358e+03) },
+ { SC_(2.56762451171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.29703113090415751643660620425745683904714997582351362061363614062666028044674767711616356746446217976093770417467039358862913584638766769747695246010563287270157495880149188378531039015594425891868323113223472370391197166721096153390523109677750651642580513929840575175477224632012638454912162099534083289200692098320612804122242131898938144374717644476449820085207071224035304839571045148864303450412843950585089734935862000922063944874797130648510362103713734504374686478548618437820442343263142025e+506), SC_(1.16593967453145559369544306100308585693201309282869412003228573749046092235465930976818641582095088784604661496590710556872066977581973505247169754578112925822200494857907731722913134974342725157402655749031345094317040512927226925849278843090529115873222689906177777543269101502573110708297252929287992580647243261790339799263792811001485470689828881958611103286102386435502284827728263259952820841941344530544922616127315771484936616092104044789819215274079370627435537585210189816230603452191395811e+03) },
+ { SC_(2.58803344726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.90790709724804479132556083453909868917919738689504821860823016074637943633666621120172921379923309482747636586327882413175365540729917559878353042643344484745858486573404853536834763233153552760730647864795734072084176699704638875987400879276867531759597191063885876445027943961321753545873221424781519141817001618896421072011195454953414266410455503643937983624981072158134066139721859128817828290084296521427611983218004822564765033604241751045878532798891518548457905811754983202471030014391422152e+511), SC_(1.17726698940062819798313661811942273520790845873333503419335168714286890290988366395454701452158869664784530075683996153711726018285966212794499193689511813836362434409180619002109251930923391128086670327123293742916004443609254051691424405252610542495444742645853335098700474100504548610912679222583691545386259223880631531393531042318494328318467680999402275909159386120548137389295099242482162431108878453172849462368950341510813941902821388175878611540790484083594295642922726698604751529847481327e+03) },
+ { SC_(2.60608398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.33825116486473479768311080579709605596750081119766588078681795108679798073057384558285689635528924722848305590938936286764686322742759286427064890971927056168742244927723155969145580676203640960182842243162812427718549964513366846846155924458163079609730575483891732217625285801636814884310386634592137582231215997479804017305271357401826752101775394739167376194978234876333182127895644748667859796437622142682912901457659370959850969264192820236006454708303991040714929129509871441566541862106493400e+515), SC_(1.18729879420143225026019891855763274986276008788435922588678058013626980061941098074702278661920966764622549536129161431143638765731491034572885689329888972316596903831943562979837896309698499422058702514637450249006751928367223603724456070076394501026520297668761126961002643331092437595389009216572847039947433534367160704429006850102633148790210588206000533799911108269777867051802815023235050725180268628628008402515679296445445617608893371992794240210063369876282338438543866275160426758974865461e+03) },
+ { SC_(2.60787597656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.17526369190385711375304023169973528952681457745278357467586004990653921246350085959593509566646565515855934245568024267569767730866850414429559403636636142096970381490652509683543441178751988175989097126015236829094400415707757572003016463654688400294625964188415762942178687066094628160610589258475252111010894981388592209574630069110857205932207628474017828634823399061935483012288393403221248111707188708521846772297762193570515425479358668538827940869783101069606653706771102563806214210048015532e+516), SC_(1.18829540052598717930086868885398749054663698391162067149758431338646843225922411111839066036090981497653653175753375631033750886810077529129171960253170845444390238408261517093583360560676169081386896153240785347947848454192365350123747912935997785681096115251754421457485042201523193260279547620173630972777209581283260011802180279234037764261452055171209905441223407231997070779709687426714853913953891214226688132330622126572736391491813324291715183343651028409055416019073866265182543431335729123e+03) },
+ { SC_(2.61056030273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.23096701917213007735128490668804108982852620840302517375571160994590717852525433034255803455639403957994821422533703004085223148448947302264931845271539637468047169680426351588913396038585496549648709315371377734334547947721815213286416144598174129316831911185263342182081381904180030408480287754859494879931399449055861035314310746662904304773412957434207864949666180505634362575103041986921608601604685363792453360999683461381031992698553062661646058636504681248030570964239290373753061685500691394e+516), SC_(1.18978850414441605835641788515064534349157471586560323215420751870551845588663247409989979345468061473783507752771630419525579802778371574837448607945213037506305818374563067103941101943606088989160780878860090200756158928978337902738499647832788024326301735304468846618229301631350380585225887106766241661496714167204262680844550670300327413571162964909823939719263953078681346292667663328204195105725394903890764955284397055869083551779690350933791012925788640904230617682818533265231741941197168028e+03) },
+ { SC_(2.61728637695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.20755685213513123131241483961704942557537414940240899921040535417224148492274154424899960711257276179866709020480788225128645062429183519465818068166331152127388662388293257910161006929863059053166040134708795497441974634831146539096604925223692244286866447289335860848479484227011974567539496451187799314589064082127051792986711551633422015764695240328986957802725727294655147752764794138790643631139600445863319069133107857638025290543106871325915138276665578809600598483931769750171287888945943640e+518), SC_(1.19353096457816161133411987794594608162693115619361136194494148947306339995266854909465498062837771575938309532050716024555980376790223076205498807557015679408775518249589343652402449881580605638038942252728089899063030118227919844039989422762116500169196736977734786819335131866567127722964468221086750612272468969926292040935581739035203779300877278911048436754425883751223852023253065643311364664876272329620642717673556084034031846105193992575066434852221254635758069444868044499540336216532591283e+03) },
+ { SC_(2.62782836914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.81368971298539218622754882690340024127781012854681913479661657043400871539334700181257351078143869368666062426621153036862005628707117825809053525337859314997426023187576524458117836543204578848739293156516084609444268198664758675609729046892648412253417849050454404115848517921855416430233811724219896833121110946854168257957585963134629913604611610429254726170641528004512415121076113200634054796976650790064349665711002239298146939745533986707327330589355724939440325767952214168877930441350648029e+520), SC_(1.19940012564363448683774716986330278724667629299805381391233636337363142355027380756923740218700471601707583795493916768702777394674480118291332599791718113690770689526674774327312928415401158361325594164065808191037934794167752227027441204037173542748578455421834369136845147376715495868141430148937984847282693667193491679268725516489510562006978596638005009600431829789832720728550309055569247564910478746664766685211824572156591091851566915825774524898965243789824189903845573625624669035752757601e+03) },
+ { SC_(2.63027221679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.04800843499851140387677209071811733838013921230400090885249481664942895250825989279301907035422376925523767672930810379834293330671252220720319092734675210352815868984391411886622349742272138932310498147521876538701459900552904318727096899607890979878422723979576385190315143792142477981641948305709271570186263763115408315482797905534515470527141372095187840186692877168775705042624008395573226636498690518234552015335274645968146213142028089460352928075599629701051761701294166654531835765279408807e+521), SC_(1.20076132185510633506202420964568193747923257883452445648684096867229218365914648682745485640143436440696003466503416498043039747165853372804246381902852300360413056909530717259915561254894365404651443251195825014343521667727462778167587500962075039619501089461021070567149317862039430779210689521093267908137185534509955078202251428496238784656027547829570303155182984192531246836959154436680983045330533747445032675289906832902909205602824553390685164239876553638543524241869542303323067877296711456e+03) },
+ { SC_(2.63209106445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.39565391406320319649030161233468532492027713515932979738761833734190181801672681401669883181324346751914329920354898589154316739915656175126100059545915776572596780845396958968753013969165881960535384728928279885381999301278748190437409964482275790074056443847264011827538578023430656845799472891571718649651639547309811478155077032326365280627126192480478587104949209485361827003006391116351394502117244859613944074948672203975925892455389181085239001965440542252845359884796393316132651313936075490e+521), SC_(1.20177454763067111384128165687893621854038991777844547399642133707531286081103375763461947980283552905480044499390184195739946567747136179706624426440048971066117013666075999056758797116993955075891828164495685984595226226878877342316331779254566043461736832916971759389417951463366536064020117326785333215991783392947309741932033640187764726469578114048648028132170443961215652682913569014057793000823666456090351086478815271689877100088608353011369804790412753944908195700790346265903341636076397696e+03) },
+ { SC_(2.63529174804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.99501375620045768407985427785584880049111114684917813609328440874357575509719619952479883379277988204757363121820805582858322458072129685643019955082411774920734848489421459178439313006637644456655180338530783030565105775464673787065917169690274704331057106971780787245732784668983226650881474207581878144048749544605119816169141719158567436497024127150067907743980703325568729612763499361957136867363556232153063129447736283782776434639929740368240334724427988886402451256933686729856341630226991497e+522), SC_(1.20355785870898265728618126972507572750309420791619278556132868747777929259659904448332621382340490609970695839471168233644516875213300716945199617771312060831469096357827235850659525480515363001842830363024365782648964378332580517470644747269421651366108409740279049311958916117727361200485980527867894181048287305710334764272100052331929591357976325513836676359873207094141599204244498770619307565533703543909651921453667138272310919600843232196337888565849885740029257340224692905767570297929487581e+03) },
+ { SC_(2.65799438476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.57335640474801863058467507788035451075034407359081765462103544193680340997391017343041456025846730123681646527929926444787439014594054513116510073384815602677876440749717057760627159523500990481032179409497590701389941883572618275839418829581367800358826659762827093331419946151300134899096429378041648813617549020265355659696042662297857888288242201079689075888689323393939145692883899153674284266044340562112633868228621986767215520985950810277151201582973655629895731234593753893164743583115695914e+528), SC_(1.21621814027571271717851177961927638993644428343431650529497232306580352123159508789408501386031561472668406881319931960439899523133409380272912554986645499274407497474326268475308272758373223022978270227431022326186829496838886451020515792101309313416416982131188162038524826560663040813242535090021538471375711761776327113805905931028196711072226863720049579377469898667314245307518301201796644159803528739125596390875010768712587584490508727871235282947313066554020121519702097823154753882996342003e+03) },
+ { SC_(2.66317749023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.83984797487643691068513869936898285931777336511752862178600811210578100824970088474237568051763114366144226190805369945388778572789683401356529667017684871896630462216089564820545001243366075890410999845683353922649330403586403177792538614976250770602217930704271748587600983585270449955872538579748076770326179077409318906434897372504637212331130315438922644544227549059234619551176521491256025481559743509819899498165871557249430713586534071970451632983405894631409063129611218359530136723319590728e+529), SC_(1.21911126471461741578219431496167109388392112833326721224759910458684698797107414402087762267432276077377381057086558399508218969326418629024709471586086882939874670995370205850298487213523104255872295463836040004543595648504071615083142936876323925152810138819901982039436964280705757748818036165307554228571820779858749719013844666647616118250446690417140867808024505670726443385250598760897064339124536053086450637095118930901907746339345709733202569777460971030581913503097885811904945153154872801e+03) },
+ { SC_(2.67270874023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.82060549092804969241038241291472432152182720210680778148011471481742600539140214960007785918417041322069087423648646870943820845954433460849425687639132972291304898048664271550680485785489052653646247346968623305371527205606107277707200095034031122138076268983543546921036921777071728974916375806410481752040461615659403036925635746170015523246140185413298043827569650526614608165403410616799189274503348662548500927991207913732399410867422663584384661798652120160244883562616577140960066303964557212e+531), SC_(1.22443408867241214310503388314995678574010017953485632676462698285766620544932815015658927880921937589036547233310773294748673128681895553087879466619537047265753972190665328366162827933508759187173348808576004582394699499076332892311647104131839352336560128208499219306100374439498407387650168791036309018736586533191248438017882077949866090654282862908910137744103000873539824313465914703707606563642695104916209853178567974610574381433362094339259311117818087093158494589749197216468131248295482045e+03) },
+ { SC_(2.70016113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.70030482760169582852764870022482388345931265938595212715212288396119629498607619124269850869402618720344327479062538146639431117980887854493736685580240369676464490734089346972528469817523862041950269311699569012080038994224660388803374958490654173476496139787936857987348001882149785882254844611306648729763960342116308717814273259706008628044554069619421800362132190958113879693843571921760932962084385011750578818357797168582051706440303849493520560811700024259194948521654134104589906902329600687e+538), SC_(1.23978414469654597550980991436367375336940629385384245684209050855589983968663915762437852682596190419234980492127156530998615233340670285900612772614100306643047367673575209142853728399963555517010885623210954139688194910734637025524375237622991935716892554218818181748183049020420753119709384549350941727520837319781237710722035260144797775415077718520339650547946423009813313395761158987895898048784966748443558920083430155549000720020356669725719031975860430084363466544682498951350310861567970704e+03) },
+ { SC_(2.70054931640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.35556246881482088435201938745499735443422343721422726909167575701155804660269501753454025198385357942729216148058402888082936843037666756431723805620323501277924485095434283087636017157459559447607435958149522997180906655658405804224417556539760418307105120420897787012071320679768264313898846099066487299460291915971555831387616161510990979847666849751425038488602735610815668024003494135422709726200010471222325314888601185136956402932314776075495450512865503095953107580343076836662674857976996835e+538), SC_(1.24000139943808188769161189044102576790632176716846006826446890343815080424906090643968375906580499735003771916399771255513505839517707999638970608315201287275408889481947817805780237318193232931843071926285335241756192960318030948453057411208503566309936023402088802685291522962991586205852685156815682522626395654750456420780222127098948439918385041424681783818036504325145085819717130531476908848760384059860257475127397343293568253686086778784668084783515883463323506080693263777217731790238160702e+03) },
+ { SC_(2.70814819335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.36183310341320543649184780325173400163540526173769930780114378475634825477296160168316685403609175589559337491008470655972669702098565121946848573593679324431338475127598316587277136892238372268878441452108433072226956224262370191120904806707643888230324098418888623515864956316042850045865090772817807884853522763923538749356853158927325167076685014314318358981405561956876505456633511175483460920190474812733643490967704064321411488330540453583230477188118896160424873718909273800833108743049568808e+540), SC_(1.24425538827305118357592555393761738435990654574901945987313499664147937484154335765520736983014932993836606434101338832333202125369819770211206899300939246458561612376864158863582216172454087617727999668806234801260065706293556001994731273026786461243331447544042521470067403051408517657026462539105394122382445318834324458333755525518390132339900600741167200682161289164765341401704110242872841171210872232051130938488229750671788141248978582726200946277705990056945784325034403397562184992838413143e+03) },
+ { SC_(2.71464233398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.97177482381998940535354909763097323015999944458834301573634975511788019780753090619037896503663692109125581228026401826726818967757253432336799304081901564050591039194602193394534389828735752267035638002929194920584088977922524584412143704141726450871318504326228275878221271435821993094593444529758484592683017933971800340296647773611822911322312265445284681378911451787364766178190823150762739346875673293520095107122726261267812965975002330900269774841133314105941446621237561711735416402814685200e+541), SC_(1.24789261882846456869502381133977889113414512802207041950089427681383499351232412630338845192778918152075982048766029158535334182965970101634497444052542503115667587137532245018686132862895470546848612193529361885030004189367863227583075489553950719849565150520983603037596930114194142772543721578803871022143584721472898289816785584334656428166648515113893572441494761575643807538769943605109408829150822345245502393328452815133294840511092409318411992974089640536665579439664513165349645290316517418e+03) },
+ { SC_(2.71737548828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.14849582174126618819556370085380685971394031476430255285356308348322838222805038231590554165174435445253263818561078257865072811420323484216906397051422469604635799018120057442739318600168625181392538122816490258986286647662007201053207570472532819744886135938220547403721968372689107265180708525405955593270350737123666159626384148303312234568491252099307034291475333683386640404039180958845964662589332759767661498648462420142116439652221832021431731899541207169664755851128939481934288943082737996e+542), SC_(1.24942386621872108445411809148685186710218223946095655864592316047665435324333580594825149922369026798820806926292138544612217677339128634961934549707779417285869400518925174314104626146663237608694626441567102506117330741905588733785952324648414576379697701672627581513544973743360261829174199656081910839370335210342632938562960078584213036546913616421838849368772280104016555355278170458069625306893803869641377223442156007242421924692561278917431342975628669679420993564635808170942119050909852690e+03) },
+ { SC_(2.72209350585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.83616543804308945749835435795913226502554811146489035840851026110599412031809233110908083307404755354851132729804363092206423094086100827893576757305263865221271616680493559302178070398876441918566907148919215225474476263330711681222803949476337785631250279029633618728878685886868019285858169329173166473976805440113718307604565691274979851551595670394240965439002608645521600181884867075878561717091454741569575957557991402309016328145595971094122976985531978478182977689408685374542462190414504967e+543), SC_(1.25206777947387392334047792966095971046990541157061039545606552540281699888764576542101216130339216501442542058299952976430503295496405143255957217815700010182399825555071244914636174252786355273419079689003429314765336989610049478376974756694621686420631145086612314401117741894118317768781797183241130188707293806751235290450454953552453874701113919448338517270956763590035939804048058942584965507573299803942623314089629820510289969331451117658084963492930492519286455783229518332396323717750308226e+03) },
+ { SC_(2.72530029296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.52188641624817172519121946336514543937098639604573351000695978434404811271218972027152169632418814649084671956957305177285269165126298136037093796721736816145973874733519665294885734270659972619512158146726367202155509165381708414271370400178799222931569384616697238621630578914016701587720661336428620271875288056871770134636609055680298776682379852464978840310937452501621391689252368351766832176706688029267299842500900389890602682673209217767507311771136235156143268587002398986897813192012150398e+544), SC_(1.25386528734852725901069658762502773426737514481429207405636483380893921373393252239120298232623383010203579618337070690160761642497085916791054643525558365336940892354811946207188293965083441661205108154746585849411307243125915449917690096150525184755415511414133733433796674745989078156357226142701424440176408849796497866360823872280735765729140889211950268280975563281120256482234459507085426314710247864337327040418562992242067841678191977765567235135607789591085902683637872058029702168410328781e+03) },
+ { SC_(2.73169433593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.27000688056228001165783744708351382443004106267194261654166377111492987297588126340652284657909362589817284734278480220250923687921724658273741222845040725490242716458052595113911397005964358858051409683934082011594080977082227687575765076982261994676358112722561574445593150243454497268640517487219164254590582174732284975023029633682602916383288744284002202685210679793098213814585407447355987570778788517531399935437979893812063549826926918605307432580691076351535093127118694372428667057767677808e+546), SC_(1.25745048309297034215225952220531445391459889261578785962191191269973986900052411717492818974317691759879613764778230129833460704635426001696278239407798187096840776148508738997027824655152850188253412776244667299762684147592733104557697527362405034837859459024028019729857743321602202279638700589971887663830716917136021200477399244700449589835931366044758692844727668608247287709612877989811295228794250549929176633402252250131673226698067627069386143132606288117556752691166133840849164424515936798e+03) },
+ { SC_(2.73194213867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.45935955605812735495156839693638296198462243581441076048340331635409389260547980405158868074685030372197363686625129804156700369258690205283782313345562255012561206270872506981551312256482533584517674261237204317217652082804172442272303237230430304341018311835011345068681913715420708866207782523431052323184802668955974067735417178283154279812075468130686165925458631934147176186790438845925303667238833076783478575591907165841304527615610353531427214472831817011248671438883122006900507491572977160e+546), SC_(1.25758945845399548334513761484836747762009869404428617210550785484947799916825821741590245776157576456556053200179339128015458381688912635377340082871757228362478131294864511122304924465270742894183506533992717423371247861749808083018612364553857081508199836340857536635789070253936265701803394410400202049374679259690925798433922554703148583113097085061173682816006329799063331159232094483431159854380058634539195720053477928210931223877869495278223645264806353214206465283453045735435319231073321061e+03) },
+ { SC_(2.73773193359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.75522187142962618723039696060283752240693051970372647998007177632405178888524559501414961401629390159506570353614341028836747312245870179290809531496336371134149970765075268921209985372664141480034627191088756448867177971946255439924512702480221805741310237363955123795638009160537673520402848726868729811823176646009990142770392882939786392934163723877702015180712562167718085438044482343529946738073746232943024022726669789191486301217254547597742218548037111408823649458949471585947496320465505674e+547), SC_(1.26083719323814551421353305262485405862434567729166180424538391532489349156584827995704606388649105068260046169004592235501004892498165529197035397319477296539811575470165982182262980020109104745816462676795854970280500117694084978970615425104440872789238137786456965583924353661391147605745635855906505631769673033633773005799418253412998114829604828082736983221812590844986007810128205855445726749686113893055406600235659582224834902501547253721021711295799503264764508618467137830159598413887211818e+03) },
+ { SC_(2.74001098632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.34893254008320787144503178120105964194671728299186278281524075300030643207009284068281491580609030408330028307245646169064395328620482827568697063409622255518209761886362109978750063736434634921902131878454124877169053179613895650746834104007447102889153041215532618303989475384161133417389744739612471830051596084327291679923709578735731078510109277219904797142262489006652172664731523563061732982125611513689412785297049223685029009482745198123672726358745250759938159030791625989357769183602468043e+548), SC_(1.26211594452936102710342719135741272183036870602148479587535687512613529652826661637708664494180694865774559333682369819417258657159198774272548187565674868209826350019453898525251480790780933930824013303090286706516081828010609826063540686568568119085564812220058109502952578868894711666038722852673588566039044525927966900765516238991449583986479631623707519364320534242607890649674712816366631757236086264806057425343794131185222098672619086794594983124250351863814742288554823438823348613167218421e+03) },
+ { SC_(2.74012695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.43963028638349185823005280656218444541170618455375214591813645015022494840216673267261777309484543728861395860015282180490061252159267693052079844011428719248324910430761055431452144980398539874508822626412639310007284896023095914132808753804800384459425625307349534297866351625124866187487286856240545768466410732030757465412220265572977615469607782289154725215331118055969767718716183569923394970560002393108713505658833644827225479316761909755761220073178896919379329480562059487506612444237184452e+548), SC_(1.26218101729579313896351093736544395956614599758855448252141163466602321052519724057974963603297529568189189743164046821940258618202732549574797548959196440866094521888416631817545554967595337237657232619165997336024184824146112247816592263648606263430262853260752530802996686824782343772861987135845423376006182505877145608575758494725345062753542772879577310956393664431500273455031938384785590340004353170588269930105532612586482416935155504762300763321054220808155610614810265234230191497175059165e+03) },
+ { SC_(2.74720581054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.65156472722469161165253933894090520098810289671675615091603748405246815054424400225681472308631048704885846439700554808282557082572651900194653813339995607802722127367016233953909033386697444709182325963314037904487222310267772208067495020527763476872748958066457362106555635006304594301988301486259335696781593645542338160305910287225269102824966135856190458436438227462369256310585009936974568464708844611153337702463274908801164875432485128519121891089308898451128798468011211076533715663181462280e+549), SC_(1.26615412622016066773428586665042142297687281952025822418360199718251338686504565890728292129670255358725857075704996774875428594281553644585036862953669430162370387022200689480168340965400531245839730373397928642613620048603589983979482163112632265385395129307195649694658168475457632834752337574468191474285680990314398361924863703422165383396417512371003635628367787122049205444527226773279576799466324058411508462096392731146044990369360612521478594051236345101080594003737662281097247638298149229e+03) },
+ { SC_(2.75135375976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.85593806820452363164033497909416525410349365378407834053194707156878784482888985284063098506415033126802337375451300530273567829908216031777484484345257277817928431903186922600706855492799863354279156419896432234629304075872029839818850926918324906928556777501938151525932562856853438482049865798716373739475110622805349816433702247525385831304462678211094333631090366642525356501865624237006769045716607232954971200546442334576110487586979983133867900463532789292652102356842946922082896814804851549e+550), SC_(1.26848307083437102907999300630746202141491375019357280142433722571632992921958110237580061165890254122257814664244660109015268506150881344154195180348306364082240264197721355149004586222817319938014766159818766842054285164014463945573466663365960921671622869517395815648257837208506059370861424041073773595664128482231766478073321582233064529270793394547797093421786613200069804270872196374529966606599064500072225677737363056111122640437455166363606493268714953802554209835604854149801655308732401940e+03) },
+ { SC_(2.75158081054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.92422724331120030091206558783828122322889913743417543863135575352674051781582028060856017751032512454913123474696893197513479270502480065338354159771191825527114847980153319575829430540574611725311374198794312905212772030839926655801367881703644064001378770660612691685990522083544157705774493692998115912535772640090538581050505578661984623264263577654537774685867416714114799874816403581310789053598224498041664209642276002614000770248071309725054153966027376042807889943129905053709009374016349420e+550), SC_(1.26861057088725977297887270608413783036524110042507724286694634172319723337793494068752711463209778522643851097559881831407933989806742419040490165023285089006527652146391939734152036605065127611568500822504775282856867457022089892129838642648727941868099021407850497958930844113526694145037095666718766753002804201408746528281364248933906972919793405338218704872022831728671320263555919292074175071318565586882687602491394505574175325991584934111938186652155947501552771879316088365894413243452978556e+03) },
+ { SC_(2.76262329101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.41128745891919913333173469559771430617891316932726350154899361342963834845484411618462054383990933686083568118326415668440495835330668250110857069332783495242862852089754746059424485421177116293066099426764437299558939787096761118533412760785394166939194624865808283325759243348864254390535973469496856180313093344002743251007822626509752456548095400352126385448621295685627957001297983781743208629694289618628515105096171723496388846434487530078418013897078921392381136291828003628826369189184518512e+553), SC_(1.27481372301335759962280128701923710464323547362928271835697753329563571852836360293641352576422993316593777842989390319238998458994981793740197328538306304016924879242980464210052394470406649460208861986411057813506728447943607011648849192739213642203579410570061338434172386516675591334831637736498514241193016645215647908723422536411191440119054111530341765344073007861534895322762388720683077245798310456478017139675939926160174316233784478261517826049585379846680939308035557512728753523381995712e+03) },
+ { SC_(2.77013793945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.01290896229530449521621768675207501364779280918185316775655308987570806286315225277375344519364841705475074465492326838322861243541879906453840374270600015557657011703896554262881478667590422454630665634559633267929136834368326148172157153505353291490498352388922861012241917132058797918833367022291788698707243910384166447049173045639947013651574887713049004787810201178929601969346786170503464994395032836151091671866117179729944576214672082490539411215308186320465152067446018745562656878232748089e+555), SC_(1.27903763265641700903228790677911034642609737185380154224047441085341591488848375731981035533713741085039154592503440976192533622118213039058299858619741271669206905489616661399074477263742876818175027887944208747055293265004400262102837492446446400077053116741555686094952969892836091321600631269947120249700030062489250818823458072233799039132131740684394207504525313072453087965512842744697375015762177614115711307649424178836198850918745056670006468481172616878881623786208328488422033921675641592e+03) },
+ { SC_(2.78247802734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.11372576680750988547931149744006701147047626548900511875343348603356138432798078013648782842377076915546206567185681379774664670413467308733119154763860001605808493578205664080588677634047893591056355879815839278919819427551503369690690693464575945787680549498511845824325791283575449900360326923507589185432897012634350416981921309510087333711604041548114009751580562537766121821126739197363438782145171986640728083962216142031911909647689042696631860667020280503026674691632805578697562722707687072e+558), SC_(1.28597830189560236232596100264571308001432634859744704654093460164480593619800351324976302138560192498860034721676285443559027762467412405622071202836417322702840444276551062467603282750658297968966928815571465811807563183703885782497444963373969400856601488572012516539463327171825467695083911007494104206323441603680320922073784324790846964852222836364282949072314362478880819335231310253197963038528278322852878650705530302794124677011156151843788803423090793399290547472451521864776844706603504264e+03) },
+ { SC_(2.78656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.10108193135062361753848626951425722037686523239094630443926419520775419009801671924355050899694021282316527306610045849144473702369959930155759229901990015159828353371104157605555650181662047799796842396198529006374887457315064575023378915718643389022463700245801642852379285927654474914813355651444514363683371107890508148097421612899767633648096586793473262544856626505043057234014390261502171534294053615794865329318965865832255241498165538229353598470272709762551189698794179607083662503529692288e+559), SC_(1.28827681804438587983604204404553949143391861980385851148894532571195865098391316190317521228760034687642324313316744596696307856988996099698773627711598995262586769565659933496711496520308734939026815123343054056230094955826448902369232140185013660051068797000829712235164513490915798374114903233948426214504751604916043424765819069158894164661370188055245852497901675556544360020865969471483685069018315596316656491582826469864947673643631058118068198489945817722079505112919909572781993097801473867e+03) },
+ { SC_(2.78779052734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.18999632833259078663491625225121877399613251497095113697647489780359517672959874286285177147380539269570725265951213206375880012508189269900898886535101989569251378955531766296709632828656530805111626750285084747431528024581336396507344513873204254029475490259851922447055953936399755325606190147403553898922378086529575149613287240351302290518356618207746260462803503240496944233178351998410680200062423037902532211429371476022221653413108321269568410122183737633623184073690247625859035515302537459e+559), SC_(1.28896800147720673383546822262528346769636553839353684610721532223090112957274541836283894940664628274990027915523514654088019311707840702147527836808693983396778150929158380817965589432002343569401233667360975966396309727041537312288649704460780731942527205336568947004821242375529186206058214698370942630628996199623816250437763387073725051032878816586047168250489811932418947227748195602026915334221286845272945176812591274535240935168715644310169712531290897326517437075968625234494261947413073489e+03) },
+ { SC_(2.78815795898437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.61218618539857076365228227555848748051548775663911736458867566536972264200430088827081530026800447549009017823690041813989472165750258472924046663465130104961109500027169649759148804907355462669329551150071063555206233138310121687352492623754014357614039637684542946892953707868312934514012053163127922723121407814421102679619476350325129089628037204623806894978392340793216185483568288494490052357869289145560450820695828630811931019961170030451724063865118797393882276587768360241935447047810743844e+559), SC_(1.28917481739226487432712060517899736485539445263458769806945903572778299803414922473942450002164197030935581722799464022243117962933502835317194275047322321114589665812824785250110887283661422173405456055784672665901305620932169351555034320183340580645149203649577995105792587544645904290169532332425290368530000946086713419193488832913694353552675816208620800560358936362701010721800423975604266667096261086212576497263363027929807316390043384320778753525829463815714854502847405049958828444961706873e+03) },
+ { SC_(2.80197875976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.82618455077565126915297668370507696463078476429570315823328753531129756626065975130154624060217793215890339836013811263446588219118078599875589163035301520577628694080057695616275453415389787714158135594663642925777779987128063423556624463619768271630105579456056052411747360560267081334957288034432376147087760751976209577848208396914886679629116296335928876162518673743325181336549339826131138825867214201618669219598102312045114606292406531380544658744867412551837602775082984507873207349095157212e+563), SC_(1.29695763620104621424279442424402218353593178257474260149686803148316201209617238436179477956399814120863265567481557661076422924970313811531689045931819691622838417380884939395885518320561327251774634742690919786007564345786486591470887220729225634754606907191382347441021443725097897625200090078281192025584011261014378384158433599194392317180107812475591599783698794327793533852628389947789538392283722124357725724608644217449589690508056697238201842824741728681909373063043298217590577432868805623e+03) },
+ { SC_(2.80203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.88099402405625379582485677844450210763455415897255722481574686227363417937117409053301995625098819927112442980128036027629389920429562396936275555092694840939063887879871001616224205900146030091968873372297432644395229673104244472844448436514482940201158513886134935726727954179547387079295489295060441557356044456351366962160279617987350829832855489038745874756871304707715141091736720928177916850437030194033083088297702808983255474300262335482820131321796542651657027226622402405377089959318882934e+563), SC_(1.29698720772895798025158943453829156875400869238953335731285171195655117119014031237313561614022115651397706270203757272172284305522522291681152323315077036158713625671837608213276560467385934213660215188794313332985721385135925392061228608163276968285986313765936369660118739710069076233587060124527614220741608394530526370275941320513289509119357977474420574587040823322704012094059038801017919801127746545051276411798845783723542508444869281179260133612992430179540201257821284844033899164658744600e+03) },
+ { SC_(2.81700439453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.70162686504736644394390314878436412089963433995104255785939808157776005189305281547847855039113714530850217935564178984216281003601743718197016816169596235507155818977497371764608100727303917704199147465495512737408170198318133117869467747225801301013904150159205381726312672339250627334347473452437445406465862685042204597562520187645401450002221687823130946215956037400680556226799109918666091282373855626857838274358350770576572423894583544986294717276393544223628749919441547837435263449631473201e+566), SC_(1.30542667263879128166272571486432274109829921084109963241842140798609567942422795534093608065831934245392551434390802285547078558805235547320977883107357688613652621017240002991702770452930659864097773326764670362972631745729788725791748302786937944287950017696309987680444508345312453436760156098748574994085832913812082521915982159427627033388672758548745388137805516192190063926389048561475177927472836060670052943508834302998743570767395510580792095160540671750885885226698777234960909972299574714e+03) },
+ { SC_(2.82022216796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.34217753589702069131306616868506038282257373319827172738780667091969307019646455312864308287397615481329774411266281815295724298091606000843881239554327824467526967025611195553100876426864392970831586122127527464967794739560542541424380886521415834485763759535376733057777254133300530759799729180849166148511616821677442495386544882899049748630493985276357435635414308064546925525056792785334807959685947586005611678117025070074499538938613069288065541397227003871483385417164303143636840159791545980e+567), SC_(1.30724138107573491685896827426364373193013658810550701865300152069361886797607237073725640963698540156673632914074120538569203831593200254334967198069062658222220928631811532368809115887198775397367646369245050193405872721101875368391409676931422544090278751709465519337511128282304626425681229326796045686837842397962198998872549152568288697097833105075232259049135618885873624935536107557563758482206196742361662407453146976402072407598559998606004884247159407724782121531572299014982848673182507712e+03) },
+ { SC_(2.82615112304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.51458783732163405894555521526962015309779922272530158189730224502876518040091381958401083482804747000702592948434706804842575154899981326078750200305557500966537078476491118588033506305516977483227658456244975957908956924900434450285394570457726527047826725906908332988029576094913767554799624182848382751898396668003177281808107969973456878731577451854873807837523480385706974198126441663840712353670090818197900813731896857559274006723614631495235860083811707071938086170961930605687110286319940295e+569), SC_(1.31058606126098658914749980669137752907814114406047377298698542170705452834351382235468034443572103204615156934431482554766795634082238056041497089565811929568504698404362760057939449831205382779380270533452082343098480659616998197083592604072645417645808177718993404212036256514556392706659292762029813225276453075138185574525199272064713417524708281945875429963950917292224048107864710135263220521510477694608226875434250357557277942987261068956401331239003920845690693249365289936462707227721073667e+03) },
+ { SC_(2.83436157226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.55855859415787155083193470210208378361711657010190825266924882127039806081246540316261254469271603852584839833838028915158442164495300298783451422146595109318475173272973235469773243802012118822659568214028455183174646202796115468262518061320628514051619197518613409430128088536388791599960076258092606901879483565868506669185323324927623993840509986953358046598865455601887437743198058974432714936498285279532955043098363830459974567138161539289144424599267729320981318641980183843888366658188879471e+571), SC_(1.31521984951562670782482835206262378008436020285378420546285379263101732820883608949122051631170757207569969358861769005014041362682435194384497463593895032565565074995089647542811142604972111024814957346244370350314824155345964557299689889789136275620641643192836622166752974612956077882034622789825992918310802758209936544891276819168401215829983378362532395170242599025399543486556205575659473596478459784209982144728139189700651481154419757471969688703886902791262574000950576874190220782214559688e+03) },
+ { SC_(2.84677490234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.72689566466928903369179960330682897548652669399393276051386014744186970417602111688859365137119806591088859832663321322407729010227398222215695102957666650134627135155914461176494093254946845109947797743409068713921582654393922007566627403236138483370758934553341824625899253149387175773174177362605215903747870064505117188137039287465190801492415063762775140078423307957143249016089879815130805538651333771471677541967892826094914960669119630992746822126589833180603476895486306392232601025646825215e+574), SC_(1.32223016876171751930127690260362228451276043259080142776611117447635298976971660676277739244247747333941430777895438910603903364415089362478788277431690184319422663659469678578578848717168461859668307713007709293400300773144834887828835740531915123068180321347100496145412025098700180155572567571693915443983163713525244308076842256668577625794774923216939872890130913395498266933038221955137351683909322710506162758145957963091245936593419942473687050256372597219165699935425159945089177350622914096e+03) },
+ { SC_(2.85066528320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.55568482360742948178753116447520884506333782707306236545302483382325926362166084203731171797423588082049753343360341823584604001171834314603381134468045601439167627038340683184109907021569287545728777442875651246709845779774709664705864947825953633312531316846756314737720236116818811210815571964220628751566305374162580922891567901030838489391041424097996446585903280298110043217953454271541003270009577929585042697537856830277490571046556295670110615936761205150685944850347747034901156930884704441e+575), SC_(1.32442834432129311020270401230040348757600194967804417411227993297073014371790990846367592283835149736497235335186397373158162058317510538606749879791206757657932690826284904297131052423557484805453670552512398295173126339157782769777536005702817283667830229401111439636352865461538809823298496358462581458296535197586798441690867505747540931768033354539435076941034258127236042998395398619386143844516720567482048995549927600273781698769845551334916514431162430514635136061657393692622426744518401753e+03) },
+ { SC_(2.86482910156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.67209451393488423647199154835085093626261421778388491758395920651729703075118017085136759283009860995120438245740674900924586133972958469888946144913857894080608167262957035021157949891129883305679378840897014842254727111679019908897771315819131280807540919616131402473292648623536641470203487859280265291071455955908845350748609006177134130302155504053800467229706750960138377058701943393860456198675362051432045232708887993066598492254285598962798227823381877440404684498937240963164738139003676775e+578), SC_(1.33243579122574590984926319328585741226431992976092303142686174774654086734221912050969042358695985194274150239716049202901885309852989554520340477404074130428600506536236702077688238199655525742941193655594162114387542290714158400945853608839737264475177181943991627056464409798943099464512348669426468245342830019675941783095082205207562407358049161151187902485056973380397931585693852275309556091706992133402058673687359431588861810125438604344423923096226075975166061175731874132590146104371235081e+03) },
+ { SC_(2.86505249023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.30131802710867055802416285405627004944443605305986263864220016184017472240645872115140983470407904672852212946917148540078482946500339207463265403567520374908135573477644464642099544185822754364662518871798355046306149602073380596685748727332010789651405550596757267402346736977673751744188152044313189403529609820760649887511875179928686549497942279718317761533128781879068042442032415413072418875923443795899631304581303173776883445512104657576502172490865494518739857115438253356870867490896677514e+578), SC_(1.33256213922455977812897109845813395173411322007265383882993796689050065344892046472775278678171245623266610779129718446610510847313619006451562400733456071361566843613133299723512877153567582901137929364068682109402160542808037795140991967432369933374079139541609225824607441961330926809954339086860823364451539236061251866540239253822841662056994139018484561055498469801015336435760075931649933637925944530123606696093702091641199180015507732503503040834718390412797954535075284822281239540293937836e+03) },
+ { SC_(2.86840332031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.52824176750358164076496059131959812500739113559202367289078195570160918639734830618115385785162075449318541138205767026948094148150925380637640534588880247019836297374103359293587348776792862744423037028443442341739444584376146685372640751241126724536643200202594566638152802905830655801709868901425768475610663616352513776004689802989586450583270754102902968325420768131021058225175702285650229687808615313082741556969466351500112049822288399570954833372013589953205376803853225516137432124569222452e+579), SC_(1.33445756850755300886310852366747116373314568156330265929319022765025679605091832760006042634427097972425123990224057714373558214332987821397493655971662158199108983919037889223963127098202330136136304633778191633740186013948492412508899341220977549020099785225073412219228723700367957957766855893202571654848753962304297077793543149474041199571899861685565751348528770358717632425747661550893912005896139963996406692414907483797187577784911543450435275554396157567812421677650523995011467755600814137e+03) },
+ { SC_(2.87150024414062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.03473996536835749844202230526429008906119041929085596339406306381317263063421363014078546769917249668117684990137811293444537056470273926075360164846312867358742270378020980764225417941673979648725203691862834444807280388402827217076217614875045095619032222224689284984869423339603735989032512003759542368506726476221451220878506625835480860209009536185383283299116072926866925042717482533885968333476709477077317932944663303337428332507026889453387064258608267285223334458864787880893263737675861374e+580), SC_(1.33620972196613057862545018474458683508774246429303078928896604644347843596054727019959159727639180583190207966863834316676279406887323600951026914176870661699641609986904094132247549023546751473416822857842431005653467518202034775579764333672215375560261672962691627243289534807356727849454769254909379982435085844253764478068377569207329781055236843240642891614812135450045500490647261251364538458703549087549771761205156461270664993004990880127287398073324604746729776681174734849962572923360447112e+03) },
+ { SC_(2.87251953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.62235931368603576744760805973395587210314168683271950713378720952911252196567865355147186057204710095440832034764605460312213725715497048431667726847778327039443061644587527224034248083714553060272185788579571402827986763936335282410900845534727294544319096050890981973359890483671963969083505166305907771042803709137302847083381936425260670606366311098392200245522774051318804059317275427643860440080916850991104769586189508338397170009462336793670429119848844618508684034406012112344661507533868289e+580), SC_(1.33678647949420338257381511183287844313320567831386055535257365475328554305496519960920771030293980187387578864013337221427261284579477331631327370836195986850986581429374989724715718586245126673988663046325581190105459603730601228769927714877805521773064648967141406570859841427717979239688554411762637240681521607016361187193242718598487509174044220184815718059584494651460108260902193436437318293997784314930666732730269053214473092504955520888121967389030757818751397977083873154631473164056671016e+03) },
+ { SC_(2.87787353515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(7.49822487376928593129496991619456807779571724900433890379016922727179188822817432232391038253946481782904202162602152838368852785921526947231533980514604816364664118194409700938666731824534215020170138929963996312545450362432993246182839764004297289618971955810426335741604446550929541921686956699211067433464486824974358064263080873961207543888113027514374829198159012636739801730156715023126639943081444416910170732607243982442087381161459051088358123684532334791232059683601332093922259371292884508e+581), SC_(1.33981660533857141926925380643566819272260171584725198634232654228134827180197337039287759863210818857870527822246113664420042673194167479981904995496726680432320132048846228792005515980585370574675380564601800250316443183159395144153371117985702044124796126435895171646113569474021227567642338387958328031624320043773312234684942560216098500310809828880827340935714150083392053952689331486262202315295456408573437125156466724639958071186200478992889785094972701513151571600988355148526641362547833068e+03) },
+ { SC_(2.87847656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.05488333142385484475172231086394675997513598555597927149880029602336592055157215686944121898079547454120473162403818969784561780587409829646247504392438937333878527081074729746707055807781106119400587389122460380472798540673783756469393597940336198328358765912391012719893796119938691127824492393390024337162695503763365189158346405308487182330286763732886461924685718989878827547742759749172444382918249208907202795905711165250423993743454148817205211384215410228405451755126541161105940267179417786e+582), SC_(1.34015795429701939942574215884873268171829288382888259321946097631111617705856662268630326933296580052321731566208579030576247439487978876214455592691116488996075798205203434081869502896527521310827175861845932374667585320301486324405673936118015718696526683793997302764133847612944974467146840256219323504629417706791770176592906004328833751304210817492355088454830780250303083097890307333413326840022932241452011360024877985974082037233006902679105689616851317419865646462378346046207873620661305058e+03) },
+ { SC_(2.87923095703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.61684979609188826557433785440773960148555792324374067678067834299861637368561450106307525352671585573317867164429408368840880522152937413462007909841896465904377450707318547717135578445169164662798065627783140430551912686608583002804571332263659013417669912496006462805471741068963217116556314786383894369387772034685007293610869961471282286948420396155589385700260825498201238850550110498224894271051040877266872421912258435469297969201321900601286747279169221597757038086685692437637136225209143506e+582), SC_(1.34058500380833376294160862615122068848333040278064690214068451080901959705990853634557062938270962751717159291653068462794816644510986319168200062866703705462037244373394257571865160181401419644160859261897972796948215330656254270416551336873357979648067859339304940383975005645243666175426992692972991225022622372254699271228283799777421629954043892261138987364435140375335941747556293997376921219156934051083559138278975404970391878774938430492037198178935947232494412932088773898615808568060875528e+03) },
+ { SC_(2.88569335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(6.27741314089775276511662713730952852885550809492562065175360622922536441326404367039128777413795090721022687150934638106628044085536081655315565411956276941995535311165878475675560210707191190941944139340354775975538872413921188374762500573473008692159211048416506508286650565395048219704920208731057283266429575656706558797306599764260726777060658654274541773537319106390479236547469858462458615781476042654947282967222646330746160526064130527966019089586365372152408709894353252495219303939603925911e+583), SC_(1.34424406719090708283852098449092651192912931837151030334253769170706457371212899336088630689782681161596126592790226138758892991724817294626866326137374819653365275485198027843272426021845574546974020258425671147145124463062447922403216960551913842768213917736156663567898484068184653980953644017738392003844971368045836990248784629112811882601436186180470639258326211954852039109234766639251154066833651535312785555213779024424415503778104636556624356299490075804415075445824369005752080160909590418e+03) },
+ { SC_(2.89466552734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.01178709497846633575165533850964793116822976500009300460736484473906170654242473212160750081881335619578631480862662045163056219988351387754652065630298571387779333809261319746397588721052457496790954620979653820354502309519248134279375683394749297528557515237334478119352835566833184270885227059153740462954718070282552097217238130663545041619512190536745623409307049755143899396219233654553047903976192302718046823190984233338148151019490057620084073666415333004114164650667291546000971693948968025e+586), SC_(1.34932658266278691125859195957356839411956915699838787964270475180585781337904192843463069811989682751105935175120186948864564892651741184747232183683168217893787273582731706152927840688445099541626365323387592592041451846704444548113336365976534758003932783295797338006880559885771565077791261519464921959795073918357492033133764272360975900011607333798512551165276702158609418085774985022998054688888774296419108809744097027098104006421214236914004741214732590966674674694137924684249925480058631236e+03) },
+ { SC_(2.89489868164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.15468963660064415115584928103612267588077614837764974596676794408194592122185565793366081442594962402231039476916282301481556320279102010770389758954453247008452073441989922664993547819970643883248670436781951311258914960269324244050041217630215108215185133895912128085457556094388818808134157121883961858147812512976161910464056272865818289179486083989079475337016803144989786737740357104787360356449862060721738771491736407919346112388326738341541162845086084757313997223473584824259279211478804411e+586), SC_(1.34945869608947487230347117231108718546669480068803317382610585033887701772499533330299929944260993663552522728552398357556711034867195034208278794084259708811695816233862643367643062820601016048591685465106412204058293624776401577561087203181177900125125258123672283921830786496097423338541135965015952382557422338835010198858944846902564944793337215652278621428765504515905791790356949439200150223236234190140334977483438030495696668322005718859526062624691051817763036420840472519347075855357492120e+03) },
+ { SC_(2.90308471679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.19524147385219244470132948164768645952387402659176644248232649451332495743225411640806568136577825821777152429787665981081834982965099165131101583405324558957832981364701487772474908186677859521942227871761177456864386077274238636801172587366265694365060499384529511627538568144917639423801710131654895866193991508864772356680744834944104931010934233992516879850234885949044906537343760076941305434841384706369864894114423618730043116321097945958350135127872220329620305258329256908546446817698251246e+588), SC_(1.35409838291563810816734756587973452552312498779625060316470814688864881373868034527316477758088674167091953141712021911254039190874338424718456903461041158566566995442766215323510346525251570992128655213783112880604963189741218176389237558401685191050423694189828428853338979384514574558920844441337526170157218977419725134868817733466328638260429425757730703990119756802378165954215271111925226146883389726423674228332542752122313142235886856916954004866568682712083092292621624945180865855907762336e+03) },
+ { SC_(2.90592041015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.96616348070008064874616373287210585056507562010636620999589287370494994638712981237978044380341428082759476234800084979754154002254920793570629961443320536090682866102046046605575909343417965965786863402052114762451003234336963160321553061028955902745093007093806222194156890643879106073816537034619581310858126533043798203665861839587148380330784779496490854756078878399132529809488407011884977108694900450342769614999426587923937468534874115245202200752981449160856047469289211964379361040937933363e+588), SC_(1.35570613876827768573077212979918905825378195719256462745557460203157514868421975740484674201729181654869722967493198246560872283580334178114340293621977943603602674782963512789971087589677970295984233970171523356396353278946306310362716981717481409595008106739028777907840661397201950135049887277277864573168266510836965789963844289183363238578955127422486638618731886638218793161544590084681455424256159437152248367727430465133782606865132096602171707784451542766396026631027325589191849782149383204e+03) },
+ { SC_(2.90660278320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.78487236270559134372523056104521703363019577190355948641112828564566288084234508187456635264973625453609105185408834058802436811939053506425603401091142444688274416257771964890378696256189219702739844815243612702841684872668060505942578914671744054920303915520554542317257099862559900332239128013567708139174454799160800799479359760388823074434936809008038301402078792504784232356560038883331003424937824700805016404899595550493738893677568049586982862458730300726426227556043240232968934551456121231e+588), SC_(1.35609306587302902812608982250575970013655426141478852856735216493382332135628059973769783658467619298850029115736641365842250969915119354961287889178459023534224929246747384311345963439486525054390823839661530981177867422381755670042005241994627896444983033866940424048264962218653661730132248367451464387574438560953281658326212605514731096599341987987954847800804242707347529099158826463446857630154506916573407975685526655366112977283388320309871700245022364864208623837308437148184117729373307138e+03) },
+ { SC_(2.91177734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.65288544172897875410770232714425601825349427018691148029711608937312937110686432284009751145904244201679369890051895293597053443763047327488339669082164625782135160805589639800451672460273927756145545818554587823518713303746905567633417949183694304856777883735871611818181366535964619214875574773302753339939177908635890491874410909484630978002726242333092288199064599231824493483133047779107704498836164868091080313847473536278000636310060789953287199874170218094292264929075176343559218201978952107e+590), SC_(1.35902772737967500290740961714306170488896006477572595442680354958201757864757179384628434523781484152603766693581406070106863469929795747305410914816479507021518947006516764660803698195357271682898832241808649413478488026150607720256908884879384931441726651471512468750875240490014666611569828987242597178730792611073319550629526091003900086837626632934430727458829037055800608764129229909092363132011276878495404850882563836435689845740109981738759761066122048318825494125511548330815838220808734178e+03) },
+ { SC_(2.93100585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.07348913872552172438060537336170695465982561385886208512743693117832018077732199717190905087803442769798857774104262030358670872208312136858881211410007479555674339961299252020339682381441400147609402774950129163689293445870814413514269880409238879689669427063972157678850536572019976833369618099902132209169949898022422684069830381857850223500047547437065129388742129657954201361385942970743137393521891326992141234907520915338245404861689565251029578475667289010283668986078095947652654070110147402e+594), SC_(1.36994090211866285156780417655232681730177445549993872158956285643436193188785726991369168977180113887308121341003284593858747631687052712775116809792901903101954218175854827123344938870960635945662719476714050496919288772019479564922849963750897435183204879948753862050909808470755427353099908579773139831785069425719334923580159855697436929336266308377470879117992764845234475018441789422522336437432447449357161002266355972425539397318564426604501700562220380876996017331818203139894455896402617874e+03) },
+ { SC_(2.93924438476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.77518107286160192975090619348685174723133376553628978514345946773524629460259957306538236431218247589719771312904897231994673364468832936192930648763261752675406554510421585015960517353170251556580035420434104455460987866698271669391429345869792903624251090234888718896512101057543668173614915937208335613310325271905764376677121123085953021174362707398232948259813861064687908746718001238533382117006339455793895982425669115368795569623477820919153916207594666818615923030608437427654845589323915978e+596), SC_(1.37462056205422900177131768888032652216284107554571360819616514988229042546200969659939005358764415303560171951617706762255367766104958031804213014382297422319688298813058708235551668193649903340288755189361107742227218535513218626025724511923454804888841699955879956560431857964054712383407202631291071279632670492761422872806694902505618351331177643874679503332041813298770798197598924991078718392181492357382522981006972272024242659399685114078336370345259455625989793711497515795188040163459176258e+03) },
+ { SC_(2.93977661132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.32267646091032057264117479996725962524063346984656353737999020878114540714569282911520863318541695168857271164281834054963142403874455537714944794610094817847454389534340638997220111815960372365297777509351400167068848566151722017140369087718396312056664653998858312885922892976462087886956556649717842241242014839711124245453776366990487019310493671290294468619045840033136895236436448767316750131915201026320220829933252188274405549187295208028245090252555079871847589810273006546970939284455610907e+597), SC_(1.37492295782309449109513125899561559012571158869805461774571128862623508327145154344308277303363560712007750147659962343399773292693388940576621127958504002159547486877127912389989264297400117647989214449419964322617476628970597202261690056630970927254789905580122873272954213658268918564331212372900137987854833084079076994612249515996791251235528274811463971874437483786205972286614118579382608006610450261782073705056773556763556901941104471584469923293484169254077441965363686099895150541876731096e+03) },
+ { SC_(2.94332885742187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(9.95612658759241235812465447721400579291058507058997368439216719564834536617474972374272572743444878958103051493850804833730870744379004716092343451340808448900651563697297156202048777752869166430548783815369375498220508152458737361758440629525376251935383827962247422168872441382301877187549916802482417911130921502426517266682801257699745449609311421877941760615746101613079091796208143355026398173271348541763163751403139719101046525115040043357542232174700518755249666544791105896825235042772545175e+597), SC_(1.37694148861657372633221996636644233713118716362968775446059082421308752990492542112655016520127497825665984296675173284223392313052342248632938493608819811335501981095114726508649312723116398159369267648990864758183952369369770445747903784567043640961953376098996368833449404655587344899951792926546929552656878941202317332213546833149925267669280727273985344675937684787347730438104026654247170240234408656098467412331224560588064323246340067066697094595718870646857370782631751254388800755295550947e+03) },
+ { SC_(2.94516845703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.83235121645327978963100817691926829574774836418387041252367869003738880090715463590796702022923992217196258528447889299651554001166831682305134686392526769799710803338014777454610533469989652589439509433566027978504843926482018342141188460069390234236110984820182938829956147486561100168203492916619577077303831865784265002705832286267366697360431897838814586852773697832092310576413056123995483314720897488786618951766492245980069150290100881986063379460507766715485056297792098067046256423617545148e+598), SC_(1.37798699279569051539268484261116926029249691596018107627105712272865541497115761053413890113564648869745670969157330919268443233145801337544812367387678593100800097721720770745161522650305518636162761571191979553292900507064486484516999930986293880641437193952931866232710654194575975952948419442840279178032436129355270244808305285140265522939295089250885428468721564173451421499662803310780563761890258732979833512086663368327034867928424960488053958458358767844025973365083982396983240716839739453e+03) },
+ { SC_(2.94708129882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(8.40107220401845648858321104921071972573843068904574581393733823764249546522923011085269873691590304481547442413231466634293352372853447729039818860387039885562468765763029502515714810352804578440883191056457307887255387835951907496031875719157728495199161142225637130071543332928278068351689075504017772418057823100405861764373978896467017120010559182064013052751961745831965825831898048413917283981900769888374650265549295777335765364301044297505547526992362172175418096483649733236850451843545679352e+598), SC_(1.37907424495147840011273728574087035423995148549659305757124254071347258874590468030259998751169547830863350597609563279895276081581854639206865023478141526629575485808136675655986575500400042238539109670504550946591340944369138810818152137953023879474665080231350201114946254983398873840455552474315302795866740788207662569448783820137343972988100297969962440394649585435235913624950263561619116962468992081029657152257586899630418991424608046084216708981450979535245502060097857018787637261038447371e+03) },
+ { SC_(2.96237792968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.03812531361052497663902185982298310308174947039421642629383054705158980857570000458751162587598999442550969501344877806292995852725250408981631253697860552855127163779760351868802023611365392677631530032588967742210532444954526900204915603366790139056994017643045361160119941439202100034220334699283274680423864899468223399998488863722189803540528163347927832513506417644347437949876996312168002483041770887790441736368040946838609461428279363030994693956970178860973336803161860812605096805474454889e+602), SC_(1.38777326003371869620392442881659394314184212654519691976144430327762778605149231100358508014213222334062848724474495456377030199975247208148834458623282063601232042599945536939628832663453797158288206962000090542124297705754102560953238816317304253227969932378536387535488664440792357469006990375734638029351740072641073613441843630319110670684134528780043708170928531783433707135360642324541558133958904574236578128175824492672273103186878977416365615410335993463758678593509405604377846659869155365e+03) },
+ { SC_(2.96513793945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.42268882268952074762792640032759328684967651571243577207098863132733263996320938386643715579579017435978989743411936374344068146932966097272344712291511398694978342948608590458791621485919292779350971700628179667679496540992018470687014109130452657520265421986902521354903018585115809735769773228190274125898973941140028523715291640760179162562465935017483316456021894276548188748672753964780236343206673327046312655684711562528109787810072079323133569680198034562869753881982512229652220972629440068e+603), SC_(1.38934368908253741931372532546702657934556843402551609189277573514421266149793760035791925112950510679579471877063730809126997864933380968782048493657543835986069494201763329457384890314492279549032110236711683011641117230487222872313803153286427155320725106717071421980538293897275039298230191800669234084056995408670362718824696655215389113392924262079402147150679681476538294228185954406608139408498867983511990563329762366594282942222249422166763420544819861986452074220220324342192498318092885746e+03) },
+ { SC_(2.96556396484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(3.08733061572599544893095738566467122339497124976043359311145114037421107382597535543204831452129395887668572437569163689906023244155552696896433330258453010207813264506542214005957636106390199106891767284964638774356885208041408420667674945789610791509007783885145825791117492078793459984449939239069745839444108063354220391076063653936902128053840086474638033185257395909515727788319705878477916754725675853953182813578309468305653020879049779288986773955413261955830503222456148390770119607850061279e+603), SC_(1.38958611791455538539140025024903036538031954018499820241928788807916920697641911243330441981244344101704951338126434370919427459996053120718181215471398554261097292911510258611322258727819892217553084395333462783927901967145172807897271893648569891446024935790847528674105478865069966576665239532737860234449110568683312347691756466158270802883819994063820227934716748200182565368696233038948342327904478924568114816183798706309654091991387545998978688522428533958731343703051205510768373092342362693e+03) },
+ { SC_(2.97032958984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.65065488914485337721074521730378317515528229628211789543577343397595391938174832606127820734515276226340187602714937163390715058743098859068633184935898641707783987761133325136500650196760517011958526604789366334946247482909510255060404724687386577726279625168337690865854633129433528501591646453749002858311142169683755867562660678042345855110053262989058121630574544176603053777318271589497620317692160998865399367406053254067650471361244321591961589295685879444782367679684369199464630864478489261e+604), SC_(1.39229840421446158414059401187132308465849144532326911036850400577521133278416325647276549435266209313251580715048230645844396792187212931762819805221020008127577424752135079336787156443980414454085239925046645933754290102904357952168852201296278316339038023098146632704584529640698621272640939910683838008414574922690407592662197907916145616287751826886906546495409842041562181368365116016838774036741578085349625325880779969917664787935921372614468570811677294061895714270986400486024846188318150488e+03) },
+ { SC_(2.97864379882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(5.28875127758585664775772369274874818401612555425274337362533582990582452925126420407366036043790662099943119495044383901218555398621115723235238928105653588409977146642363663511822358973533155725179276190312086270135178126404634590785344074034531234013198254897678155721810803017572426750846395839994134507626212773021647810222310111491792540190659531837723333160099836715085173957624813875616612821165865440901899376346278715166145438811148949341025193888325761385753016316823036695320702455814532570e+606), SC_(1.39703214851901049022730852986132689400344353670883777626738203137218619923608207548281549143051031906814767390400440706239659220631609341726070691070420176759632763659935375169277291735366323249824862378629001071349370181059513276997413810375233807216152871265647861415532162245231919110084386980394699462489980738391925491112096295812580701854781624576489660871399540669284901636240871074836671380946186021208235418266668230761474074744982036539036786575812798817601971755281530416514867655522337504e+03) },
+ { SC_(2.98060424804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.61531408834500580532772107043602867378318404792385225424543370217147879407674321500374911123927570357277562524697982438259637553584359745286933795118383404986552639498340920075760638753755502412453774497591004259173728022454736997493074277223895857096584808764955869835419159070254683890288630184887315794922759550515510816638669108715630198832675023654497491609554019113095252440785879594593167667228731692821379267364932925196667801205297985835969866854522482571646694590676945179339543887228204610e+607), SC_(1.39814868086709855977134600387840438343583009672475568261584953393775752729727738937123850138906948368004636032605291156804222574014398500926173351016908140186665959288084045641853830719487264577348797044673186837903257068882131154301224780038356563500545676816291258687767861560304780331302852986780045909398150637259749617748094043327095465488708977742593706777925410210923555828599996570675244242281042710938814482064622965171204431371102148950469779634005498541620629267498792772123502257932713979e+03) },
+ { SC_(2.98220458984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(4.01913203092977523280798922135732173498586921666201538424869820403397021600598336952297001121393103996753700542498707650326540611849768481692179717994242893806885476998794194069177402969333682804304077419313651329920582994303065174179218201467701455641283135646814953713752441619485507729197595816610567605231679569858816613945496013444813775087311062863524331036489035253800580130826760243342656894102452530853716104597137635561147441993697282252144814718162145119113329588056001316458991522462383674e+607), SC_(1.39906021741400012029338130541586138333662179441839083641847107911711505118695512786481488377805235221735334811404941246813329213578760870463419267543931597716815993356185010958460750220171890471303894087628503066112397751519332692654209127386583618306686241745141251761759667795464413846509226397693885965049803383803654466698341256620598200487751924572966951860386083834483840696255431542474166307319787972505783717380451523714267226550702752068744046987297754855271129593224919642276008709133005615e+03) },
+ { SC_(2.98840332031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(1.37359841993752752389528450284952588719032553998539093362923427163165276024392153451598136188470553429960467300945028533480912447612482726879636453056079900519350243066627735778877019724228054785376733281199049657751266188715082124548224606743572715963969774355758677695418580597446243619358673177073028020912302484099213566739309206579083967639513232216832100329448238402774060440556297715019456445133475901481261857483140680673267723791756112901783745647254025067495399407661967818140243125299861096e+609), SC_(1.40259175551366672281814595130199410206726729048793535427543493341189776121812450027289243449216527426177690440806453297479911126820442254294041871764078115750415836544057504032671813463168789593968411175040793172851484985271562547310812254585311571787144326593913276030237458872331063762566380120718695914932132664401415837970084609712825212122574426747001629920494310178881410323419257000590706416337038146645031003353012865121499434464278050773933392813060464002111764387049713996501739204866162870e+03) },
+ { SC_(2.98938354492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+02), SC_(2.40128745781682226203298236348882106711204113071066790067117306638783919196024362048227271234435781132783597852292146590334481038234871609134432585632142383860946595598143957411326129473992169530502153830116859068966251380887313781290116922728446436656897956438795664875165432901199002549538528328347418191193679032353167804422277652497487087572561212728720626116567371242871992837438704365399851502289431526275160228324414200994435018638728055777754033817606169040369089679889121782617702940071870648e+609), SC_(1.40315032666765182414481479399344070753898190684807352041095511052632440751219673443203450724260245162755643217096319709443495890300349565793981782778265089445631678243647078286176671824093508710391601904934585748839861643245004319166749889346213348676303548594053569453927749612822683747646552949406957321033730622162997905829908280484876755402806887983564631942961328692424552970134733664909306834103499207367683550933062248358174018199947934705320477995318133774631674009326510358690314737737744998e+03) }
+ }};
+//#undef SC_
+
+
diff --git a/libs/multiprecision/test/math/high_prec/gamma_0.ipp b/libs/multiprecision/test/math/high_prec/gamma_0.ipp
new file mode 100644
index 0000000000..0331b3e416
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/gamma_0.ipp
@@ -0,0 +1,106 @@
+ static const boost::array<boost::array<typename table_type<T>::type, 3>, 101> gamma_0 = {{
+ { SC_(1.43156441636360688183664865448643158739330056363229723426222506077465368434786796569824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(6.98536502143685108617882284090181520784225065279944459321343460310063824042105596746205061501871754388692206421700826292338586923926227628460021980992867287987375102820871203483062060697666614954318393354992686094982543110966849877446263308176165064356911280715433887048666237697473022869255273999217684089964991492221986910024913642477585922789463545534969256995761341961043378489622694491092689099559034124245255841747358458264103951568451574298386270253381902108950381976482928860300454676297330631e+29), SC_(6.87187849460716195307241085972306257332085866067179593404732520056618176287191986920381800623266452019036583359883694184875415202170061110761480957915606961682069515921066423464205321804055901215315467103669400564886703708251292818882278221076111306170866005908677608207802396451776607673326647945821489765973119269856654977100758235960633379767322574933089743488018675093572248899118887185116534963011794036363538903828089102456817460307090409752243309227015705466471210473582150215759294410478127318e+01) },
+ { SC_(1.79146693234808763489644628257161121326585477954787539722758538118796423077583312988281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(5.58201763003960861567789539135859580193439485454005702914698335930268444742331582630745213615777247085201364155083693868300803234678816291383457578463565723759685983298265642045770249117431149944641399014596592494299731209900651334858910291525879151363330828856538879949073338110312308363596227316892822743368020808448586000291704754174750156554217552056937856371791137981786534012294619836443861840926728414921766784846846305707429974243911452854519547303013841568504048941438592827646572038542434135e+29), SC_(6.84945179903097403861349744215875103992060757962123025404796608423978602225846553619170965077356955755357802672163974219562277828210284327971512344158362567867847738326049609853308815256769082679556958330239424646993080494046302980172303736275513780193302833410723002758066285468945113082751363817936859921002909109039191137803314698577973722031573009127625727285778678734025455705063199556191858178447008447936782744160858096688591534358039500459582424936993394926936663017800067374964851005923319757e+01) },
+ { SC_(6.01361845021915553684662812684153866129482788357822620195491936101461760699748992919921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(1.66289233059599382108622045278925250222879368299965805063800397354768670022530740489524286087023172081743657291575193949292317670513431375657893264047630789615214924106176337174346019293635258374337002078109120613262494521256415816444259140590129490551962102684902275473895987026116781659018530303429482685495372173326818893646289757008674753758860465244922365484215329043013694653249383965600156071526093224196543564395256619974579165365709216420397501003922915691506013990491427372931318956493080999e+29), SC_(6.72835261508627487441809388914618718039806766838076765738449388127304650638500226155393279449547157554874214601262165687120232963516589317117744273330309623400314525833549943284641956342219602925993192470847874648719472012633435814459477730435577468888682456785797630097073380249832077254791664762750315685378649126380990575187276250739357550980693771790622800409807477947479455730830600697505092486997466317766437101841783321172164072094610651193846740792964214770153922331926924938123871030133738925e+01) },
+ { SC_(1.15805324961653822428570241697281798757994191687720197947442102304194122552871704101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(8.63518150250108277194016891306233647484350850467664211488828521671098276856027646738832798460638738889745235576927151073499175108377545838358386482265787302310436375999567002230935819513356910576887220572360144418394608202135272298033654003052182297572299115574956232437725263892943148991293370552472446011183244210703600281122859489582978101451793967074375924992378742386032880290147673310487052110730167491270221379145909984226467052326276061760313245928809376103054222364829784917100855808316020815e+28), SC_(6.66282273346089416734535625179362666621182077643990467879063832625680227791050206585733185502957596233314540660483901760430911805270185678987126994680068402992221525616904588488441229909153800950377006070324398572799927651884646302955793101599665239041508783676953386426252223745918060631306977940834262621283653711331967519129060500243592868823804992668473953470906948420875648942763002156556099370463527314476558063517916220321125974741423139110495117826462394235672451732466307699999303905633370100e+01) },
+ { SC_(1.42245694944417038241730866879301796566459337427951181709318007051479071378707885742187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(7.03008973586689712434453706188967052189544377452251027190548933242786882782597583872281928283881475602762471967697312305884958111647827996819565671460034196076646349776435256364489761767965592316774008837231548263375054937427862888061428112304485964913506427137973546426799224557859735091281967123454997149655374130493654203587146086260828222294410435287918229997913562020320493066804583330730837073698808542435953750233088861767005232084367280435329039878489987209426255343649661690999646366391423086e+28), SC_(6.64225820742780683535257712261924121209227913749076443473890372060519527816598227736042607832909087984911015926106929130360483186660465408894557878927354666930836674850262877191875658008191764865453073508984311388701881734517396030408218265504769496117527926393550877643119833107884441914845938545843378909648403549025956978676004449802550052939417816321088510807702282974630203123683236264607529541476291560195226774671285268000217027114645279781317099602573341146438849056594216426188392209461223262e+01) },
+ { SC_(4.97012101832753915362870547787643979509599986062878818060539742873515933752059936523437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(2.01202344231147724230810353716656887566130414385907540860402251559475890073645391277780480020189554969458171902799377776861135178157011979373269790864340211440027520775401007836782123067346497601513358857239897301150526329963708751115670484000483500722297344616098324545158500747555859233886573924190763930230809498621227122379869747916191366861272145295954082819043984946331634617739137084318984472461083170724165845505521971897573240355846211686074477671195963638013441293957127903234462875211715646e+28), SC_(6.51715235072511457864378388754998157435356973715673258412791513444778374479836727125230109590192077325601920795178505423399615183618242933697838040985779154418085424257031245674733493517221878558879698506150447439006049190511649430013973295257187798595008470757450564951138158522942211934575884784926138442646487836912254893171857625559424638068958366192061382628054238930763500818744359069789679612002531155109612303921215254254747694195676813610575246106335880547522974750286496268913709809509252474e+01) },
+ { SC_(9.66007941505749759175817416441747844432341024711874410968448501080274581909179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(1.03518817706743243919823284998017787128647257621455912634163869070166059872671230538431901891097497439179354992612162157669426027906636292231895643723927703757223460655854516477901321769519052303126616273995428548985832279710011127934672239520409848031206199996350739655807535213912727774552045467776829721969059974045525292499046126524249705366001360881203124736372820107025125261106918354118101667092609216938740138156696613533257159162712186798710277184296626585528266265769960723307483161365376229e+28), SC_(6.45069658276162457259303572398885329683158361494024827181717336146058546986400295243949312741758251226140035714229464147482260893374857925924565517856610305565502975329832388352253205506611318819270307820107725007303695608214479732517695140757758354226761553744330994156337100540242975402121772398848516182993789845650062348186821501621405335217798478394612071716443631914367377297227176427909617300917373609884768866750477406306294818746619910517952227127526727803071073422415549147408253665298301300e+01) },
+ { SC_(1.23292931325318213137633109542739196875415141549381381480543495854362845420837402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(8.11076506374416877382537129208031545752074797419842750844528587451643362386982055323101915507674024859960406340146989444652626245160911354305121401560514918118286169465374662239310666900739378375958129364148653331105246827262534402832707407165597662287434176607244865340061287749891730809236349890319758864866554723496495254063628105477907236700688483571320960538771287714513893495299885765536699744850957588500735883090986629317497556750278199990341833620560130060637909786621313289257460639001650831e+27), SC_(6.42629897103672909988458723024910870404416821898215222127400022516539410704531383405982899412381871048426582739992646976069868034841151137810871632844074572909965313276374324555176087210170807432149288863515134794938111522097235775211996947623050218416749855639680453817148045797399149820883035794559402140834591578682886608367287283427546427869980860693429982414804171599334229599589490584031942607532254985111818673092821904070864890840147766974757375588542457697599486106018224639916097437571599819e+01) },
+ { SC_(3.29652280413527321597289728537034730709403803142198974285292933927848935127258300781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(3.03349941564355360012064150184228595706904820067783154892030109296391762822472881195726613182210189442955174212546738337284886561017336690039432370715941439412719089329892531356865265081975064636232370994677816511211572902921257370348330352994628809490300819077932611462301055106584074350770615111880273573943059035962668811432859854690471774370491309454815309809006764621402491823519351139477097886747251831199460054088808790491284984413259166462592982630156453579922162794986104508307975648736654540e+27), SC_(6.32795143866050323716760133418296904749863732946975200928947118578322607994583477068450164307701602413609648444048639207929029056223035086133893270694677420843751377393407833586002432242261752314708430347057295480453578837209532569699006883030625680960140262219134646858202581750831824382271631031980228590555215920432590868320228606184600039560993755754788437087523337075244902961115198620434131953515679906038170612236824559118585723278727600502113865815188191107710031491713156376132212151995325781e+01) },
+ { SC_(5.28364435768055252017009628713605422886039151425530135952612909022718667984008789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(1.89263306215217388065301450837422131624429762500909613738277870523089267798630746568964190871771157247405784615737404532079180608133788878517212154426651108760035114597438980870405792535468966738754609913368846304859794971254949645193988742238635877174034183157545953026521100953857513511469947369943288857923008731164449119832620087394383402735741445779931513137986706278546522549426676715586900797211295600476831080380451856593421444600033324608401914174483790915085395318359941917879811363209587464e+27), SC_(6.28077665249491897691049827940636540970398543994861233169099871356964217589347125478155697980887940866179062958974044155963995941441194575820156444577833257789890482265650964581797191647152323111036866463941206128044651251402305746085176458414290497006593109264627423072684766714099596688313036477988560744962758440194036696643717238708853234985639383334272562979038431089236482058749177876773587848544135873987589282606791220573117136189470910455726053001892397518963850274607542910338241721343457177e+01) },
+ { SC_(8.86586057273120049620324386849842094685003081322438589495504857040941715240478515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(1.12792209148394250283821637021946106530198113703610911095488337733749683357735288766824599638075655918840636782440721083365515523554739468482924768722301671735596891690745164252007005619188503105228533256226946150583868513360183143203542320141069898108879458118152610755855595193019270900648744728405474759634285607695917755572614881162868983190243597181686385780385043194947192656483297254721171554847487312358317557282161067168244426453811265351416570323053082026986937719013776178742039427104942286e+27), SC_(6.22901745936964236807423188366699491237395082581362863038475204196764335339422677682424533021060737567932462267191280241127353523262734638192900266136858588339878538342860483208191254394637373839754873788419222515574108790388057884237928241734260216993505146375338473328907938233508277422196718935311128911439714419720575361379606654030425058941565427488999592176540230675586731103811757799195001504320404652187910673241283381657595695105566385412255027821045966205549848464433924669316746507256885131e+01) },
+ { SC_(2.49966909705205994304740110602803937055616662066270805553358513861894607543945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(4.00052951480390792753792297612547756446636308354112378451456968304268692528633775519125653540337556139742594352743621941853552757231088824292247450739114201180697920406873694369842101729381223009665109087920683089903813373384379869972135737762953748899884850561862020898979033509177864717063968439364396918776475551700928193992691475593786044265808700917232151033008792097742668057139762411818451641133325103860432283894810997209741497147809418396090524305457199005071908197450896512609552069520382170e+26), SC_(6.12536391489047683456791920395172307654373024181199187144911145425432965478592302886538061658534635912284286031438597728058141651972777704999971671030797848009724431879789343164823041816910201631030249867326068929534579895965669649438343390853080251794078983618181753609923762928472591231131609267962196214873011951877052947425588001178855301901711271913497699503029013954248204210958479220752097373121722687614004482162043568710684966204871567240274381394573742635156718926230757319557118639628439420e+01) },
+ { SC_(4.13105039723262296431436267163873604088076066376267192481464007869362831115722656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(2.42069184309612078735610309396289531456075006005701452319232308780898469481899786562711660638975498443576891437412380505348319376012700732093473068914701828605341797891307189106243524744582901965865091960195620144901563293848963647400347796236403212162016330881728652090676262972985324378411000114398851717735569482703793791472186452067039116212437053446977932154280424530245898016181405959157039069608327504217006545118390787849039405560427420843900632344217146363244036322483055152244720350520312732e+26), SC_(6.07512658027331975479577088722915968953877892639195256368947344929252315379014575284754474798075879668931747060129256164633934573369599205358256458706635358062235593480105093770678843815652602539307431543115040519794608689731244425228894620530188188065811225372150482460249371284136442858221115772490874167846093958384149302455707825340823690871444826129737661538243254629158931922087992517687225059329004092487025701375624298827988692231490866885497114885255366053276979415146569639295467508175390497e+01) },
+ { SC_(7.67973655713747804159297628821628769124011532065665619484207127243280410766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(1.30212799952181823165140121882528410353551267300487990139386626525325211291024568030230970848519462523321250316113910391542233495172804953518059438162757195427412584355171613764849732449793589808648756002181462999052595392577807540209762006753250735181780410531193269824922742158457533297763018004418385433117806616100977526675610500618779766320207731845672476138902627160544984413741977497354820351022582824220122963569820651479542153114314134607530615386140027703759180101932525568349064975126058165e+26), SC_(6.01312122667240529166843994063021266541288260960290414568544325404195544575095829794041035120469854123574649673981547316854462290304396763545774453073567613797603142297644704020352034632426024680109753030361110840049738676836013357598960559784241302812865391854524389664056261621870677748278809719438623073587488273527342019260350532258454443364272867066135071843918273298351325211729169344200131324037636430369715829612165506521055551942816236666920875284797438923786575101586645401435561328322074817e+01) },
+ { SC_(1.99929709006070097053663358872093457378141950764316447930468712002038955688476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(5.00175789266836197992253524274830985249917406243586481928958356437141598411984138722862492208659648540426313645171261046500070366734305739654716860293908480183345282315525066342879659673808912526681216851816527758086674670902923821816912492981456459220446807092272059870287398917856957814911955087942529906020699544749520437288684229226072743323074045476154958594811061595567355441543116054826269870495160775013279838715048442052026193416237173077956430343800236803747119123474588037106300229115319493e+25), SC_(5.91744167540296642932633105438455466640616516641281944106250379983760813618537924832488310046560748278519239110324535565544143210026284763893696541922381258765648942880722642974790705056266372562023064784175361677559270801762988065916285030771581562373334272877335535222265668349615364410562602776765986836342337156864942547577113767363493593568061040388382331590689156231846893431183969526225066656037250767253219801811525307324434690649574834704255754342306560284967752740251238298561968659075731801e+01) },
+ { SC_(5.15147741524697845975412980082616359162571428864652034462778829038143157958984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(1.94119069034500808603652466533066021838567012298869439701340945032173827546064073709628358298435505063869761045803662384531648487567393382773594440075435175724183604412243156694194932492028878970941961283821446471330266254909674918925098980942551328647919533502012637100674140444753442826674029392350808309173674621706803567435055313380241398358750606063235436398329157810706396769069082270097287993911924029918948917243632827735362569726563281278358132173640383259378355790298494643627193841009125610e+25), SC_(5.82279288675638227521744581984472667501463857487542260681762460523386320409989607920181437766464159215936294441689087772286732842238926045596412700160862731390874584038617859265714534550615456175097106413483539149755980595702034247039218440752863612649821537138773308438672246983171497554091758620898857991717016801958594108321529888222047270727588727745793441847528628771717744394905353164071527110746942189167167910378796313989630478491619937958186173400443704421577577652506214296565647827659664193e+01) },
+ { SC_(1.01200722207604382263949018037021122481435020379336719997809268534183502197265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(9.88135240723468294587520823096149819619540476689712710623997817993083189475816383577084956312949922972156866572877356452911798009387999009526605954163888106149571728467821461881641485221579135727239840228161933168563012454259847186432292992881836215442485054048489450902048271065397568687760395141387333368815582691028472081451393202540812412060789893208592124641855931693833129410253652436457888009028232812205367434613971048802458771917161720241635834784826416484240215260071905616525517892376198493e+24), SC_(5.75526916175725540760017008791674277403750658183657019667573395043965482862223161211434510621020178646998074509782225975726388192488504530392658732934512207024506529591122416739406187792824292457201619483969139331538455509702323358241424076304580592500270106222576434714589313899240402996303681999603577990188285524562004708292069045649249373724332501528425003869718292101485821916461949819884935827385813682080426761085178755516591092075170285475651907581965934227857501471685138069598110050036387246e+01) },
+ { SC_(2.06429269589654098179854645662305491103302723665535722830099985003471374511718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(4.84427427364262875842177793582518195279767597643060376319794648994297827081054097195940382072797039218621065892526441246106534412586907979155363395093623504721783967370117346993663134634720015066493921311731770109109810916776708584865494093815063529130112517199074056968525199230121554514145114301260244921843558589363080736372954820248471209753932824991565235931747363147022272578757977659537120808256136053752131562400463651066011428784940346704179494919962842998228211078697496029314646389388898709e+24), SC_(5.68398396772585233454081243163015719457273127694317564671579909124104470082415630897415329078724340316758032857229084552171453692626527967609074784678664906070359314921191268418039853212010471717205985371362797477808024589535717680159846557085388955229865201914116328556336605417711822202289369410146331697923086998315821256230168984504108244541247998403612502502907727077479891826525225618196587293524636550350625327996139236466781075913080290453906357687119354962653760957324187035168960795482516167e+01) },
+ { SC_(4.06329433289633339525743443387977341628436445120087228133343160152435302734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(2.46105725569527169415983887680710324054112250788475703843400058327137510398066264739078011647200558087326350808351871985106152690049359086642413238317408836089468987877838079876187296081669103803784535166355608455966760897587389088115522647388304688901396509685347705021509288980827182717349153930357355160998461433103157942190593059970182220422601313102141445390082271181048288342624754879410555438595064913555566952651043246646544339420386855070326440604309211163343582298939299136028028873165480769e+24), SC_(5.61626332682108543103894914638265205739494039591792063561869770530274312850585567765343945280850219080051628164852842207643000297697060102013357499398606383713775784855806022728186354069091978795877261624547818135305576719244903321101517119309704129792662326041351319265014075608624116830962662681594177248456643562788865593950429324530694066762617857478074607527695679287002457200156179042326635089136412749258440888089649819236202364351423255552506804629320072380909487742338753291737755545443775797e+01) },
+ { SC_(8.13819478186073092670198892427626982497279595207828606362454593181610107421875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(1.22877373521325115162328151196138471976141512712124850581584744704992399909168261635541263516328487781554443968352277192925529436530024421006633112093621416957359244265549900396322231619231727354042398710426402533917291689560431212331314867942163998562472153269908152702292325979049258401011838074535270886141399120216251602299571716343713366066427282233107466768238863223341638688213559918551782217436488107168907078748350405159172588636795924752838173975951774548164437216663669472739716812900706291e+24), SC_(5.54680589407017581449312663260900718532236752643429778887916074462724851849598244854808478563726062042713449609513298516922138485589080042918533500047818941095475305997544950753739499731683843803755248795132093107433712169375661072287744142881205356719090133730530388524199409758849195774801927230016968519619337069603229936339950959945894614972178336489693903099001770377373594374895517334732896865347661491160409693023609464135192154062110190404782725103313309390020123729907971058891945976423107090e+01) },
+ { SC_(9.57554865497999074939999660325683650957673265224912029225379228591918945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(1.04432658224751051534314719319653764492076403254903353940705501087203904226108528788809371267534452777143739782207618775861320582874754248864333937039501094101917228222578478024350733644382871829557399595988827405718915208248754996663898673158999141554101618210328270114242596449908503778350906723150268970162028603276526593042556952793500072272667839653724623032562627561836490475514812167562140191244558846393493937542533932600626398969074932846968713462462457715092757436435680895751950017915638130e+24), SC_(5.53054144906448593874035705960252565327725371930035233374475045868754601997131177506417834643641068577542592682508927413603952599228162183490902725675527826513870330578615340807530339380960658869221743008220977723760935754238139593711178583463897078717435139016330627214829940443565604990205981580028836645095112579577358064065119684256270078779601982060604318757793537509382142428577689380707350625620009954407756292439931086645123086101261977511377525026818121340639711064353707057249378932596923274e+01) },
+ { SC_(2.85516056186804819386971813584199120922280101808610197622328996658325195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(3.50242999765214323664192679073178441988316976402121689738366828010343200142127297877801696998138244162201391895289627133288966388269820082791501666523174699265748272305684918310912716715770179390342333881476222257119067917382383828097056575473305941584001441668576626536239604665841289353700793779427804962841854234138298713674382597487122053790601814569968031027493158660860778248283756870286152743158063320918616278309751952166743130766591170707371648727380827196137739711391014068466505661904440217e+23), SC_(5.42129141514975251800903561369021896767530710266420752809382078867957345755941405132689457634465145272252196685234760413494992978952209599519173817340434015117011005940702842923245114745048817216891242529483752482359028631069418216006995563505772451582472582577624264823737226327430602918404820892619934026026679795159577460335018994519482732498954471793682959200041271002531143558773649050588603615579031798187421758140576055031223887773975801539821645805264411679468976240805660854787612427720085525e+01) },
+ { SC_(6.52014364093064091884456528840346284381368491267494391649961471557617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(1.53370854243521973586893102813914310939965427847284394727942326816923530158483359322277635535490460600254860546777471016072796682814782921636329959096588533379368302049694060279320304899005746782369004567388608876800597722684498185816580726353948738996684213751763514979183260672977613294821391044699592421424071378526056882956988747680636997296772179269782489944802968406726338812277631440999738435783684003696158536718815313665608295411332733865266716369836200650975268023336258804965762457776544875e+23), SC_(5.33871458253436267660312480785009601729216078741234807903756510475077269603543815841324029033223878574917502908041974473136581597194818255013348773687457538072821039582681999557815447099340143448346969967803777016864105080422428146552078395204345173179644042513512657540372581522428813903397886613502554964587865832987725841749146742934838411775381167966256392170311556144245615596487835602499722904753756187542702952227808014818824336277067590912165157720497569824343819810963150406333187486453320164e+01) },
+ { SC_(1.31098837463635003832097749177504342199540587898809462785720825195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(7.62783270505648920867640128917029682085014404223298750921210449188883287957637267346963792923947398577101641982313673140522903767065871959681776941420786346990663932279594126922699186822003592857543574397975415727821273939141093361267052683898474890607767272618049135227041257172444582130532397303361510817394714073504522661387391945133312715542154642780804313417668739292346961368873149467702801677937149054720393235576921825090293378239947540846276937347389762949029484045230989398597611258299015322e+22), SC_(5.26886758016750764532724250391453133579168931661122683861881724102784766335119510458343279795727755360417828961523650183250788076928558998266697318508102942356639306550934079657348019990471331356616671440992693851502497540967879695178087358316196135449214724222581033520195801247039827371115321875006799826166266808354064309683485881431194829649247848425203894402917390733452728328994293143443163498889486622254544214583416155521738672267888911298790423121376809223944061169250554139218709440516067540e+01) },
+ { SC_(2.59028852225433412082328801177410343425933092476043384522199630737304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(3.86057379866586319878799465520462508773374309731222147451540412289649626604311610271505156892543734630828629717871661915627739337921111016296975526068036546011996321933999439105025263806297456366301563262085095498328808608921907606929694250705204329001618943812913711507301443230672701441796481501946959406058733878796305518832400784536950370251240917339676666211604312502114193270809313318899693038913600801258981405147278842314317813074821654637246696524927484395930153180957204116226311041051575070e+22), SC_(5.20076878708021655204184517590029484781779325945365320134692951662097251746010442303228973955429295220624205734359293984540010475530401054700767967040031802383111862364495871155708008415805050150046955904324684920911708716591437325331213161883361059635649619622139582737775763756910681490313609300987084497727073273136118042184330561290773528921435330943144151579989347270239667075286213199707738173963359766442692057049676746685889195318181733518343155600767669257087994297941841427762786592820580199e+01) },
+ { SC_(2.93777859556056893705993279786690963728545966660021804273128509521484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(3.40393248664535973451643561545599015646480163251746595187335545294157661290070259654556490228897046833198768473283011025314766585326825660311638945820356275028504108010061473219261760927138383081243874282257741552861246265341571115130840175610661210996672096930564509064007280059700812172651108467231185451280522308365237196553586846212890788781209593678169565625983002898914954626594158457302304321444438490738130358193686145378731322940962556530139169746200404495578798523354146116661641285345779468e+22), SC_(5.18818034228480048495984841998696565418571058823007515216304504326186316117799223812592599800053866943330882932209733319774993987429860654967791070950192182720563465084761871021801510083705614519767136322047619989872914050805017533441004404032584098212597431832228764483076722028111823178273253323659440621758510792485130604460981055521765707306470062276856877280447173587180991702485468042648886026757392434693933943855302891392288442139215967429109453656283435937137806905507213701777697785708916602e+01) },
+ { SC_(7.86351191582705469613519475556052962250674909228109754621982574462890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(1.27169642610610039353264616927599175234779914344881805733869580633167446969597085449508303449649856295673996772851928970484478455725869106340434214033522429436281717957271664490947874357052247959982209769067209733807145329602247519581626721334004570445050566096313562487889013608558003318113736293222661115116237175842533338824845777635499715409458146778160438857783694339290802398515134559787128147139201279684177329341813791723791645732119236379285735920408460318017210905600269751682346961660174051e+22), SC_(5.08972238235817915756710145375177450823509597274772735688967008797016311927179066425401316234841495457645680749356303387011726052153995399350107102311415173522242349706194436150181002293398019846980279232678924816759224648575930356637357223960768881058525455547490594553426412812113145828448959563668690340567112115668860640488282014428626692311646693602244887490659454290033238900625854342402063608843879097706509412062070869795895634470749766615375813006168918399107358410251103233338070834608171218e+01) },
+ { SC_(1.90381848086964392834489130147419128080699124438979197293519973754882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(5.25260160066946451216401888059962516778732901049570780683024351572719151667787646855463099146585407964053825766930472772728698256660716949502801050859969127596546505976843647978026708358679238991719723994756553212701512367961114046483288579383813550637161150736903854808004565774707190980542096793989969411975096086259679433124457082433968122358310884166563878035988158013841190648076433223713075923687946218147161294236941276929535940783322870621803800934875095257103638684763412873109654240236089051e+21), SC_(5.00130104497222740728056396948021842053725671133632273915590421086540995885813788156178684793591659855727077330324357543560582420708812233670466083001362821798690316015631303321842998721923280159860116612739436828240078595075021023635482180195173811443143861016540316132682754359770001807411742030056445805013793074054109764814553533227232453792365752365826883614935008145498752931608573064596345947693694716816510723270897599891592664901791763900806485055510666392856983244898302151747117597853439027e+01) },
+ { SC_(3.81224138507088185839560978023822512827933906010002829134464263916015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(2.62312875547728931624265607213756815229837180169602095107327334620073176917117693941741379801758213948691714295468078460965756685506546144383314549488869924636549335223264787835030053818578531165584930072928904954024349836757669531292599781334847779073929930462134987001491872682250658594585821377388524745624403856725561382616752243818539754229843502888914770520037420032497262912077979169509544962261229110346059316603824642058929794962625900432712959225107275250144027312303800204614559719130614088e+21), SC_(4.93186547396602967807569716447834137730489798578208909181956823619940195091783373690286003795378305170062448815938262002666855919185740745808868834518988746793180050929189726528174841883797281208589583375771652408457949764152811572462780673549541833300927262733221435417215931929623799861721052593168258224331928041117341615950018916874018539855668865299897540452645987293103073809492246918894060636522018825311579944256307429299926433463157773358234415239424681932122613637285458521080913054880393190e+01) },
+ { SC_(5.49313358014133027717803441948574150188733256072737276554107666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(1.82045454640895782737597987629015253196424399819770711984867168537754339866104500301965169548440597151564783591998096204750642251097138511714139431677230119316032123096723638435315702956082607856781221770795262706437219993962584257438868249993742164284339577414043879202101786168615719873186715666650725127913925044433708513784715492777075613064868451994980205253786155564432613892877191420027887520647436384687185562679132018990435662701316643628299136576381271167422303030261887730404064469821661616e+21), SC_(4.89533731735552832041589301430161251020130076163841042575523208601949953816095170371768447691586445244814754879873655432782452790720310931894083872122785341863455879689084514113729905769521595789846313097484306889731804610702066651582493944283543411813419736212048892954255421551910526337589242688284096162070571743478755325100547875689720992357527643607016139503743185301042251704701530808508066708422044540174423444837331714045278436889408090514469447622243967937763842767800209868922707391107115056e+01) },
+ { SC_(9.67215262454222827277166131629965173388541188614908605813980102539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(1.03389600931501929871097748597108012503603240764947686389435163117375649258678792903056071607754243833593207370623936419856377159806444481248117223998829490194577017841692422535813595410446015676576831805051126599707021576420891181154412175525551678059867804876476222326414755412781154745397066502491812883871947516897588521853430063495325076052198574002590913096133461052863926525420514129463693265405456836877870291872408610362015129227970482483273273845790259359266596054256231926761044565464033080e+21), SC_(4.83876211526414979604635716263705953424666129250468312064929767779865870430085106549754942840632302924184467393105280221031089458453346711488164184273691108029712931250317685626244951629221689589424633173262031509079949942052033836097273287253793763926645896482582399059720693766548808207758164347982593877689742387604381713327862363173160844314328159732166305198258012076073150997611295564230600179954076979830331378330132787416576665241470078232795284322184660642563132648624641834323472973518630605e+01) },
+ { SC_(1.70216887177863917482281209177935599186071158328559249639511108398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(5.87485775694555373167830190810947978074136007912954035211349619261705336638409363420065882452461996702314667318377905295556382085566956103363904724888053444999238638638047322550676699560353465463822389438155518513284160800035024841145198763981778295086704772143892266059585666296705036968955960094559165454125738827162309721849410190497768549790407976026865987343414380830766635337193966062235485294062197370443236409650307028525323119441263966385207051043615749087468096830868638236989811223697512846e+20), SC_(4.78223837080342956793684677947106154961522152824515734094452704401576955395734057320806187417084580015495705104032785915022776196524911035311341716253866023844008453954146289524334796068740032756280072158706992888389727754165739635731112302444977854489414440643254915015070323265306535814024253673397347468234679060454970156387012906763493040337094509367197022134455190670828956855467931764615143248858050259521769945653420149568573354187997851604834498374939753381150748940039401972150105022390568142e+01) },
+ { SC_(4.81711376218383283936066573301115756322587913018651306629180908203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(2.07593187408273119152469340787584993890199570636061024535034187514866784687246050811341044476827375433480122929541167222047975713155197480798124497902130577079489261717652034359642106356416547649168312264735412183148465876725562907070038342803242173535250774119973305228029222184206457390221388120526840827119402382489085565296916043218667855465146608182737262945596180604152319863495913770032065685967941222160843715367489927722217409213962422170874267170019204004892033424089148243078905283228037205e+20), SC_(4.67821120086936591155861343624377850408269305810050469109688472737615468051095256528958901042725900832184701847084075487537053023539942576971128033660153998945676607285872594089641174041605333823436914379532594652603569351790857962248245167080191475771720972177837880349399147575537558363282997470664643874116717082159563251158697158617110481785942129499655204492946736783592575692219959790344322588335340149192743106478058297032949955331719952339817796143077569677432793189592681892060865012873193475e+01) },
+ { SC_(7.53835218496289623698718975960963994964458834147080779075622558593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(1.32654985527838137100932148001816998202531058674126548560649347649621723628346782156486921309260567626575505247724488705138662753142944879073548888865365873854899374953797004778789748638581143372102322151991790136819332204708988722277664693837174949456397321602470382326078211353728562381264101144823679289452835745057195794802022960930042459359943364735905222631946467121359896176823730763057059644290401154571759016166486610674803826665802666272410848457505223641701711941719977501447883034136159953e+20), SC_(4.63342833378474888230149349666744582083410493325092779782325990451750115439726645419432244279477421063064027863192770563073507505859141449350699461178579618829859155282280329464471157435721507507621366940722327450189318592513979948532139573299619587090909747514578389070859627428039581931779660251967891631196240115897628890456050781081363826940234999078862646972605461455399964225335297811563651185144751675814309192435649749296000702432933328264772882595395455332123984715360567248273515423621218181e+01) },
+ { SC_(2.59630539283257292986818211277810775072794058360159397125244140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(3.85162701876530232468016912812562115373016774249503275226081603451011972263884092116338217726073095315378831950037360909099536077599495060933119624377088198449654129198262640605955970599568081504230936190952678753636882742353834162910291504268867570124117933635673759417794194750694611151724251936494514678735433147379446557816715174471231316403411149395136087982745338487971867500234281286818420446085777843840510364259879208876519674749555766856827657168205200716024970765971906489858958552410340209e+19), SC_(4.50976124281920705382894731131297213130572717493742609284798877986990697571350693999371678487948632519864994037977278991511171422997687213322493057461733626999725433941144937352468234189905071478290922464427713382759016633848292380102094051047990921816293731510106932513291229018355894945898305007359239076376113280775919897826671201334146282266277827196326947730939522373694958320901000146985783812074526877946883639947205073390942506470008867088564871610508691951675410364770185985961728739523981618e+01) },
+ { SC_(4.44458748032432159103292338558910401502544118557125329971313476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(2.24992759041617511461621764486439635331268181524943714185422655502011940305830955842049995629795499038379372105174122525659372487742336448447414773844185770557560669635298671132635822489541669693773055967965532505432053161714602453342903646974643879994358520105467411119547515122875898507996505993250138824454260200092114888103323809959405846895518855899975499562260312288474932728168479107206688794805002289162783128162902120231213764618237747182467147917636833518130802203155531015258002908630659505e+19), SC_(4.45600148005480883843221099327436102666507286396321419246469079708178654036796335564537748997950297615591540727977401329305621673590499008495012173174392772256892507453002392058153845853189319966166580698136193800825737803950908645504563702087417217271483342543855867136519298690260888636782412764723517798316454633414606328262091535579645033263025779535288322669191010012877722363484688404092994821819255479622047806371600580845074877980334211973902257995372110831043126958395107296424305717728039778e+01) },
+ { SC_(9.71557492149857393706909557129502985617364174686372280120849609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(1.02927516701786239327088559412658766939139020160726492118279488473065998991185050649522612566598502492850845923928935444094096535636546140592813025897441044117222322919932658956040882346732304391680061902209382086302404668689151737674617016917845957206762618188322104946471590369266478660595098732069281192644117382544988957154567918982755878771131501810034492564665202549534237745127922812286537989714258529959375056247550200531755397160082332872499569497564890372601849391656798155826066504423590993e+19), SC_(4.37779716000584398698990777213961810795783081592017743708184220804927904372994901189967649515009735172880623955419740420012315986576189119126543575566904578046919431809875380432523353206754900523923781714480384673715724050123132008911344423077801177226414264244221939888532288642522215169036955971731289164143691078284671577290431144790881842027973573671404137841858557411863925709522264346872510355435006440809714471312012017359301321832215804656521781996390042520886865485354409134425576656515292926e+01) },
+ { SC_(2.03659828423951236444711457296286027940368512645363807678222656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(4.91014849486338795473190760759441444466067332010736115448451018358708701249483729445665603792278275962824915533363252447208992321271997558403209359068593642512124051171201458814565348168725868138337357097501234373545916690198371201406334166588453088443536369069022785451336023963788649872427573525422434996888534953599038755123121918868508030352785585630353270762249702292785344287764591129078367625041276697406774722135731348618936205273074423355634920869234376105907879152417604078132666329384170075e+18), SC_(4.30378358585949627123043266249905967962887816014864580030065149334627360311264625084269369929010885338331708629099405372167695832844306064622709950330533203706114565842728252858428991981732670460958718014399250740467134868328348527925344194855324451370921408502953554014065116467018777966799168200158046526847454556567370263163616973309536526429423014979421181142030669729325491143297954511079372608224911716501489196081860212695795268550473745083593808696175606006373300488827315794661965705208608074e+01) },
+ { SC_(4.24897141467077741851980990372972257773653836920857429504394531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(2.35351077333026230535011839474240622219483000391146763132183509793076592234927888232167018165059965341889704087890201558410868910455786613836598080957397030633632176587127990393846747320588225351631383496860587423029556133907670877877103353918512797316094631873557226661613318816657601526325447094347483360340956738001270992373069448262826936645820092382649354305920636802353742283580922610354426889294090123859577447266696482951980426047140310287263459070317723770875069575962886935550805237786695897e+18), SC_(4.23024398333195918158408107850347603783326689000823856751331542763754852295008148151040641858229359628078469346471651904183328738913698501012488411862344210217630892036531716673830832847274975771154382165559196133886158282803537992484348196540541778850787109396622290227802667263982437869403228137310193502583531468534595730634902358307597504479659454456104333192503021970905139088727531342322319258852396765871179050698860655091930182032950808135395012770057668306527411218055974698533878804694897876e+01) },
+ { SC_(6.52109697062557611797143503062912373025028500705957412719726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(1.53348432710711382412002595519912645825566648563457431696666953405839323663436385415540577078371909268498986232218717729843902408307671822735810898376099999002890492643837786599645083719969138547771263335859855947307816324679806209991631345545056461506588633853780283094320592719021248371654162004605737603691227969348135209903536561923025330689942523293801939078260739547166454712431551868620292198550625950525062132279655944219731109300227921932835486424569827867231613062088487239727349654985918115e+18), SC_(4.18740741580717877834749717580480872663444883214839906712612229928671353630872016793683491013573267754990828537497837278806841156933537456470785351876763297827295195430920851033552990997091396033417305252831735464754273359090537968713199905598504642031010880493394683204614779223808652364642055436096918311854372211100470681108894123216199490765448486492648497952880318710041148392364754006599729496266016887671960468648728381863442366793411335781696166403861745903446537097238299743376393803857573148e+01) },
+ { SC_(1.43612616409619005828149362891110740747535601258277893066406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(6.96317653003236534270279684056230493480974635294387864151869876012762532284596734951082527306944183471677369290174280413996466386927811922535961306689638808619571896542664757715749540445967495026030505751974090250891098156207641193344218297448568461129691361732130086054347427579303927112472352548506572728853835019753327122688017454392580665395920292338033791221187069780092498336554008503930308658152705336554580268216215995514521220060257848935007955158452333523773525415852441445066559674435759662e+17), SC_(4.10845823491203750269417544215072791519132546542332718178996273127574536831489212657835589746442090649387167240256729528753922301781366890181149045548306041011402050938687552735678160032267437349278570868601663400661323803208330594908106678976157884754069206007117314370496433949931110672961261612716138604168632915180563247416747360388044256592175912181596271822746593829008506529828578871060187771282714872573721122505387176962208757179811399463372209857716091891885223526650002477848497475476979043e+01) },
+ { SC_(3.11890848786895488590521774430186496829264797270298004150390625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(3.20624989123443732306466173906761681520397454797743411967171013836766623066090680547883575948261116875373758903768745835189573992875216085613141902692685511200847100457475304187579768628665984916839183891132515815084322285924840767805505007345562218865321739461777396150138788712581196262279033992571354092841083584810694368680835024576873243622929377079471785915486205112652151458409005461347986973352151531724888021213681531813870835307532278204228758832097427330025813162846791315218221029824619746e+17), SC_(4.03090485769127361541044518516749793558620098090648641127887094855827700200790074148846586717769702602507584916035694807696947856797493490000517122913319060871005295342371073736921330336059216945323871412710866077897955936403693279226005005938096644598230886353655584378890229552843787958464746461009779666997703222136831645152267985521755750444319743715297346010531544876992967622344263445129450448900510104730168827827208165554824488326702348994212535336245330092400863992833297810181409567228297843e+01) },
+ { SC_(3.59334537282425688607678804231682079262100160121917724609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(2.78292203015829599261962546957895404990081417377702462561540550534248787923941627519770252374132972956048659251893293996353753189857684586454930049807693801282519389517382281037655102888634397511227508026612893186882009903794224845367685465254686600207247735925185218914216633415917812638411226987452749991767060400949519492513420696456926364234344734374551036206649868606958533670717760397382911283500570331443689754506095339881662222313057843468236763118633209815395160066394239858074758994028666204e+17), SC_(4.01674480465780156756373233991409013436821533054168506258895292628279818069729361806787595136076424384006316279954726598012824241067989855404179824808341722733810737973220122456049123599114093743744591167641745949850999579256815048452990723593892588637365211655957582808948217026490586121983724517543864781645178437196162666472151019598645107712434762601053469666360788143574729074809760313574145036322494425208379260483457212057388135008101922347976288102119321928476946075419079715204273847836843414e+01) },
+ { SC_(9.44587319976354210931956956187605101149529218673706054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(1.05866337484292391877893553128199112698939570289224932065176817862141085135514836951586667720844659406770612439774968221124632789370844307001432545672057723464869417971709395799424259898055623912235791403741122929999123344770195973794864712554455288234558866684027599817096207096080284146412184004873522071048450897003367401937804000169854687400292647731549224669081176646068486188198521486876180228698061143311696077549270110157042874108852125353259990832498202645937700555218735068731041170828303378e+17), SC_(3.92009537262054234501302376900562352494457658036527151870180025479603504754753461578489644244060365462256407622755712594087048043074770735971508367302683895802466764533029159135853094442397091072625565603081572124195271332301215264596440920186443496183795483255217338464274566920054827464817577632394600445251335490560113043160121251415961773020418811680125283359994707443679440487631092951378592813529930845985123785509843786473207457924902332048362844352195749950987077358017799628118071730249025862e+01) },
+ { SC_(2.56618226665795902841776809921725543972570449113845825195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(3.89683933597725175319881448875156329550959272329681834568395064472849695620233075370398121094999407832801079152543061082854904293375770342032999568194809723919167029207972483181872792071870253942805732212213696866676682551256652819376616818109748330084069432861352227832513280730680509108965375769828468563041117914052232128632742067003958206273566240057625865861463363448156974487157530828513033287570098452135060842470250942593681513427150841818546592619926264067908663369379108875730639326268033636e+16), SC_(3.82015272857946013868972828269190565241603203009525306048316289669090329472938769874388002268858503344601957377991550737380331618410528604493034595400009144511968159360478428151102928583235292537366903749091753601878616080067370420318789469929376398084229926120334276674083850290518652741873258037928908447880487108384710647297029037281429246371294923692866791630607779476698503708578625544511474622147702976005586821125679388687458018308507924009603884965657863077894756124074217763436492364278673196e+01) },
+ { SC_(3.36376503340485928823799799403104771045036613941192626953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(2.97285925166949974807457128035170450066477816399282150074283633548132630228050480206101334146278178930908294908408020515338238795065654546119508961075437640461050424638007401351047794124504871288463863754584673855954961126297232599340503171861121561195226942325267400079715661257042576124244835504300757726324585566034800400383463784278686607598194278053396410834529186953102975415973744957865023871122361396135152717126955846865152882110803343610508752652208729776608990800704842038078247817331994336e+16), SC_(3.79308856886101391007069400688611715241306412481945391925641124503755302287114347811486474630031114965526460388140834253480812330063540612899960732864833037424012896192727400080411399823034435528040797825742848919090423377514889994050050630539014368288480412226524143513889592088827662068166527198378253824506638864160188289159987241034610535720713030553745641299836235130444127236622529535246872710565897403446713078126446643276414792539312938432098757656839684732673029434047131943526266196279957187e+01) },
+ { SC_(1.07358170281591559259981583096532631316222250461578369140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(9.31461478317936154583885573605068314152782065589549609469914565023926800351906893630628413577057329177994311163956620701142336185063877418787239256892852873445087920365235403253490262027044753883469508398410847328265673193194742911647138928314816775890233439455542433156942108387193099894695833914145431402964584546919313488937598696841459038400110037727145266204533694824059513121510339268845269654240403127274651877792927116000049616797253148390354717608718094465314742868903581139626551889300905460e+15), SC_(3.67703610436463545495026752764732073257799710462679383878926040687745483770759737595879677884882603573698864133418997486425012617679062865326383978427075714145698038560113831222027110705069239786335016603569169352428328537042962202684139397465453620032063627325258874434348407817356371726695939425687202245573310859195697100566991928320499898224427193219018938684548326483374310145227660772699544688722421474069378038779652620437195668034097533124429018646466024438627728567972649112787843740899791573e+01) },
+ { SC_(1.86668379762073861211080227917591400910168886184692382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(5.35709369350391592768923477986863641641041386670021657907817556703006517389988705389283232109982968543641719672782632683446951123770688487043526051583297000240895361108843806299619059970226545428273207896350988541869699991627107327834801493033331216553070688928465855987579410298857315865277432779893119738942981339000319483447360246902762847090996239733181691824983861438010137642268593931536986215723688557791478609307628514091675490387977196067334917940938095685385256768892170730058270859880636462e+15), SC_(3.62171980015770238529644276256304909762841122755715670454530535932119577983920286373688488828352754734406931597030396464476356557398010697414611460815730595598795724461987357764438028481679345185347219185863071734495762170385287950687445842789959555195963125019478348258106691677467080954410031938373216500393153641016722276609946656713555540444591568662264332738289295169018430812414467670389834383152578763719731976746966496898676584798648716600235148412802550386858248891110592564164992629404214083e+01) },
+ { SC_(3.72754000856436763788881449954715208150446414947509765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(2.68273445141408911283723006239656257697803268441537091833578995823631479637870109372542433045823942500493538309772882061158620811239346747126416414725632220522897904212689367685374427993307715937071521329955922919964121115209128646024026140952716125111524982773348304152867310039303794124441877617403751368109200025144399966053076218345391645919809571229742549148501577352386134954357696287153144345459858333574657639646117466158790728579741367905998417341437163124394832747783463050305056098538914629e+15), SC_(3.55256129869549746469129190589446112611374971235422325441661743173441106581270111685559740007254639646094495493656624168305177527459509052071035691146800720852814665759057328973021867643432657506024722624096544711014523774399719873932689274731995051138325881077303537458836774065049783694018259907349665329693554519542391840301112676185833713188657051332369184515962004392542293913181461136174541586330573388317276739077974633782704129881107851360100845571979416524943258965369577672126496148058574581e+01) },
+ { SC_(6.21164623847126305677956992212784825824201107025146484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(1.60987918759215724473296955164050711825489618287045866202801823414693239227582877689612642201828742154418687355121973966292505959901391806799139653809838745188340881684515162988792007848468674612998319858187092531693899932814139414825926557323551114672169822158423992839458703436196401791797911936673436838394240815852947047828174796753313307757136143684480285017719542768808602568057397749873573409112484432828327014784464583830481102656394268086123846746418699465072883104433293290933010401885509252e+15), SC_(3.50149355323288728364329861732880324176031638041336862139807052588032519007018091239566004053112678380594715791614694015553568082314922840573501903934526205826219301106252291108123590770428192799388536288175283950076110976661476116388877098281744244826032674245791119891143171701318333066266192173031544331503256176982628055047348808467609466555103556740155332807731035093879658546200419663988682878676527720256158920797662450751878684463077317141864229153842444817407043542613272320106476743924054420e+01) },
+ { SC_(1.56118675387513505814496284074266441166400909423828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(6.40538358090616930572199615451805628548811466548124866767301580454193836914688527258945904249400930128393597483821093345931465125659040391786350941651021513731158934861793952123651760083410251936794620985570172329548344492841407057052025958565132036658866728905612768400532182293158835054332981413662202889397861806043910747692211323788804394256779409295771295572821408075298471507736651155422104110473872767486593110874188436686541654282655355161458124621196612875076129336425440541282095043450040255e+14), SC_(3.40933301232014391150868421636533958473440302585740860260848018138238167947147035645125756954671750855391887535317009444065956767921064677968618219945959053639513910191608207857335901642663150813785332414376802057893921745648267995098117737459621623133122851171303514865520860577135966638142992592890484973123904068963085394166183181897269113986078489578835681632904743027489067147409257807141797115092583680460450147123180586018335936955745723770866230963621347586888357455203043177396972833240851176e+01) },
+ { SC_(3.09201076472299246633568259312596637755632400512695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(3.23414139242036684276083130604740555332102742732209059379463888241652420546423273086068775293720523823200670849046209509059992046513896037709874652313295779648822248664308086223556376242106158616999836997344265976872160860155284371645823226486628544951807381517275685383124474248733832833490965510634823019355780090367489336590037228205353144842183317855983909606680484114170019756574079014702848036194935144988337541633047521822526159654693197431239667075331189787015556708335276605238049315835810949e+14), SC_(3.34099547827158268511113993446903871609732924567423972328264466707266472778778891404558763137098605651259421135963813833515578889335972791280638276638644224502835075692963388704588416382084250235467716489647590712743538560386421899270208473311755340209188808173381086345830251825944994715547816456415714427114514915312552192521665876486824893423925556696142108780583640085356427710300777015891910118866224225325727148526583301327987132946111378409333344173151219474323631718818017607572968466884244881e+01) },
+ { SC_(6.19284930682226925080513524335401598364114761352539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(1.61476559569818671077849756616782395312094395613347467750921722608840205796460277758977185598066368612152647586355409621867085587660898402276437610012628993258471020827684469653607635220589425130797599931290173046110225841248699388265771294084712117371892010203190259471067461983539407831393871011826817832470708029300694095843415136560615706146315580504139342457709693423001976894072748271524278429319146224988993773668626131510931741784139122901762820252013439990701483599226194926428639331692995557e+14), SC_(3.27153811060745956545208526189697911818865513720855207755872098602864684374322696355123670952633924436258610666907170222209394190047290120323927472415081513666370900738289979879690186626743145600004271927253949261836286290740269610628605968254208476768024418971702204779288095032341257084062060344264304671198009573892376055095018771428144517163652189210316706374200046878577151824403617693596267098982951994663722671034852406566911866665007273958508147641802996795125455444652177198364896323298304893e+01) },
+ { SC_(1.04787902801498772342725374073779676109552383422851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(9.54308630352406516205359046743618128166013090307817797340778789274961654822225673440177258174542900560867351268330833966280245668620838918829357035489275755644143090680060808839976435761676367940523185523095340333253908768554277364428691654262043043572182784073217355994150549491589487440011307430494117507959296987864631992522761541545646638217243232172299176577840404366061062966572185707442372468239516417574982507870328724871909524033211780972857372209413324807897530256218888609923492076544192109e+13), SC_(3.21894231539638950907826379599187842092021268441575923627069258871771854433853115415782489861480221176798825589829782195888976062477106413518596068053420790907345073056114458972152822792634568125668736336221600151997074169590195016728096593357645536460894160204159094589833050074995328566868137793424194031239361538971519366809470194032401330140171321878243915169056979387038234600397250254904913143463342791005518801681322155705188385276179554739337515081187784957575036642842343229436475007253920317e+01) },
+ { SC_(1.97847313076864039782520876542548649013042449951171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(5.05440273334157824610291274505331299112537682918356644294065782874967080760819218369358842344722889119059120852563533630957034017900977677765645163762768638444925755118980175905552516718603988596151136262505942788287639943511325025291684945629253287336400993651018048078421763736114277036323128197654243217402405771923455474402297884519301843406468653715197789031889941921922213353229037615872818479641755520825402977352044532728989288131318994792635273076684794348019858198888846251883682434856709647e+13), SC_(3.15538659007727107880083686193998563292533754784239638473546230158371409841656726541189075805403753304475273768163410631304837122301201804069146565821080380728613439679856624459579438773909638520997068262009983521806344833780047975686836856408178527940530668908592418922849294084163218999836168907185916907686225093493625442584462427634364163510373475305542575946640596319788825084236461508223200924347550008190319412896325544644970319132017408695512459624713558941710455539829411743008273160922182276e+01) },
+ { SC_(4.04181625234673047586397842678707093000411987304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(2.47413523417687237626963417481472433633575119288276766917889956829706449387149542182869256245700252809127224187392299344118680726955621980608527311106641981758457137155249257019959311787800175161249767547732906304767784662313938188488954622233749014151216322402541870100691842879966764316542106877672313850010047940125563794655250325383293007679879162113741747550152520179452876634080967834990748405544440060405645105251924641229465383899510724315835256818990916050429842286719722149892359257192546334e+13), SC_(3.08394971435561524360142991538131117539701549235963414268474100167564253338933446140757694701064289726364423973157455283907856938737731484242330760047331965651566581163412758979346661233941073287719334494551282734269681696866274532457888490449760451692621607033690773687251984208887286450445309681513684821963475136058108812225796383611583847994569380161340863673936288863658102647041572372692358955984131110815821568036946097843162296614207222964877061568985465748411171374575442815448828159106229063e+01) },
+ { SC_(9.41030023002276116983466636156663298606872558593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(1.06266535132378760631643358293084561511832251368430794866564956367470040705018915409688083875482366263429632275039193240775766717077873313852950906600022896494221965573665971241663302310175858585575545771211409213274114706303571146331076743944647262144373083858176045960978072697190078745416271470663047735107459899716848754352570868678111151112812595107266326009187517941163620835723085933282061532789859285423369697118361841235177506549712822803071392540857286208956514811198187808084053916061721078e+13), SC_(2.99943864434060791143172217492896937207257949517184549417827064206979752588254776175589324103489335524950979308405249931740158481930226889556381324738413768244210883195345624061540768169879851570810583307354423589854007192927945909045754243680609798014063800551099760224902076469760607675735491720932918729762150703739803896371534094356260646920621664361156701208773746212016161641743802207607892411338748745704600883232903687017902944301007840250864179183844517526006505109173025929076962406537777920e+01) },
+ { SC_(1.33452981738307885350991455197799950838088989257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(7.49327581125803664353332686794462735456476172634230287246141345112050937168008380331979244951518303168542851471161625212402617638944763054689499203513298470645263374349226143689692949458761027910602397479322818253915367494622615901121203986244743934212301062374794036609817418728998513819624985002827010279122684636930340188704487616825826188496239163860134394337564212301369114736279077734733982238018672531979578933946521870429264290190811162244158436887004878920183732188673299621097892176296159380e+12), SC_(2.96450271758229288403252112889839343046264919348997051677770807143229064321698759490104407092173470549790770910195143510892421208124871524048537452270859140340894574198474275240976869613246364719079574395550342755224793264452868148741241005212364301594685738976292681945703335226563931912049610406775300176036592141685864992725787902308843717762037673700674556235606932116716568288702687427879873000484350347814943416258390061621054988463397497969887685774955472977153237799356556556812974507905534520e+01) },
+ { SC_(2.66296967116330662861400924157351255416870117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(3.75520611754846112229083118399808749001360022124058715474727790108499144051750552773043606887072948591733873717619240063080087438143083644198452449978587541745540668164534368081538836999426749485182722608937514052626546048690634099712339264714521629742112776070046990915446381417847222407042913672916714141265208789710907662269976047802795103569149539665396634565491541483384838198541813267661606162894493363675144867700571511618283433250754834401268934080145757542080423149459099357971487063044420798e+12), SC_(2.89541642911290985674935632628817900504134143476583578690835555153792464486843214230770681727568219370418454410176940082705556788379939494096559518415200599813788233053457422119145514230226273454974164747119856647988194000419844395517976877127785947700998789158949025802776791456070546132318867880519233401001419907844937725860998778948766916982532697956516048925274592479471863457959002692582148207882530569385026392064968869404325018522967272680481727974672171879554684614564347484171235619314903696e+01) },
+ { SC_(5.92041389871345025142090889858081936836242675781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(1.68907109723691052070486525865106261806854966699127027205669176277569218965909678349600366028971380180385906687809738819931361084816519280585711566815674289584306704539214723315643204060952677418896085153747819431781526018839209148072775102167053932355256696250635369168809087728146494200909522760193515069230982932008136433426818311186461001454876401671432451216807114751593214297322118984996051173573813270457915363615668883625006270008577595200337542985666436051094151406486548468223963306159654578e+12), SC_(2.81551998471470821921826157320225318779020697755817987877133780395168679457427671788226434299866659405041732712114375208646597948004797119550767305131975984686358907282376546079646237181336488345676458337148909817110936069601773500181081630094896836955048561619175391708439600263872860209454397931673667257880817059574772661504631368432527966353704558439825785368252610502124484964110156251032299215447175710893508980200682712137982588485989277355873023709479206867181641268659311575364569507471812106e+01) },
+ { SC_(1.55163989296047688526414276566356420516967773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(6.44479434007808281945668171737631984460126338755716050528259636607558935755206412545315633066199139062007451090068421786440803136845169038776735288556927740762250530813003376363047126561006457621447061946747652004313806111815894201357327059916054202470401783612662229031472185476081051007630444791825977198318692478573405964267879544376662236850355227144275165845837654094265233204518939903809979157878239002505955765874635670880773744972151920549504126507544870672637337239076996374024550050298288969e+11), SC_(2.71917087488208757956302942278577362295215807788263157065483843364066663844154423713634751254760580365655956711675975357428722671276630188824680533146797115053517339275254913516196328098442855098750314098697115490375504499318013291671780934170480957119848910233193628612157277168981731443947541882834369189186964256514844948997973976691949465374841958954223300229207473839330998856617233994716915993252606356782819485709994926845524965543217686418000523044509663205570777926153154778574864020540675905e+01) },
+ { SC_(3.26923297461201300961874949280172586441040039062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(3.05882146596417234835994602981634843704750827288294119670156575398858570365036581738681250292878619132939544196249745147762777975788702902641322452264655661985803387949475536433707633244000288147225470160054689577928543581745112442814412566861665723976043265302978007164309180647034560028702203990421924922013355345598647705169919067111687823219992429534585941737923695475857355829185398287550483537377689480938908547889512997031717082903798346740384480735275300567744061225303803147502571461670451282e+11), SC_(2.64464657228708503007839379797814889383468623408632356045883940239707796706335741648601257561033703735027993923522266991510795865405348473785708794241059879719326704776023245036986519209326809690606573999809271632372481993912245549990143970731534224585709349233224063569517537604626541649377460349869609607539997644367673174479433895486942986943532920284602864941975113981089301869678030658716662693056171364402660992019175343646111063211321804943853171822947415008191403169872733872982066844706145490e+01) },
+ { SC_(3.75378547690097263966890750452876091003417968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(2.66397748659682909756214887858083229415894420716762742064573472682474490462580859011373564363428084801314649404922305948134943734902447416261381967458044712729517464413747608514517893451473086812036842641949289328614680708631437977491656865094490800485832412388703509802032685663024816128140980278111665016584380476090092190662589280675294498094956505172465951855876751666393436168631795516138382681944895276698624547918025170510095147475386547606289130297220119860631615057432119740644819489077420394e+11), SC_(2.63082563245997692641649751900943291907691027144583704549442551016776634450412688273893462505301287777070668295183514819852524997814713408510699214857155819476853930204939748762743648482032606225357989833787868484607162940507880034914693458466251230146443827109590823773695084631603391774312246852917983179238312233575917758149911819562050473544307597831316353986629032971639235492193044250270704422734560896220909594598818102479338461828126613160467017936891031331993774585288966541820231566991439324e+01) },
+ { SC_(9.57916385102564049702777992933988571166992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(1.04393245125189169486027570038996582173487482590748586089822808469387431328301377618370442742826265541497232306444964659164242474807185782150761610210632289940820474500560688335407912085585699972502466458135697942977731536099335360050363930102587739596997254053324420001037812190352819577308953150566568369925711308080252617427664868786203872471901268803117970363715521670230414288279696940737544931751291247921012323221444842194521436843824624549899340782748610804764503134909942955283466392480149356e+11), SC_(2.53714308084356893528465928314436682427710311763825598345994023050258622398573852312837852231659309845437520988033941711696041489046002537658504340143627120828392418786708213179671375739089890154011798708971619878833013355845921783147827319762987629911070090390377141442166911300222465040042045659314267308680084418840737558155857306825315728369486845594480625849530184371295514707954989360252541560432094681464308036399339395096989260992294394578271133139088324006323139537103026881509515892094815868e+01) },
+ { SC_(1.85816709241670707797311479225754737854003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(5.38164734522710681215600336061308853120702404775145741709026396178823245553137666800524126297374217114724680251167541929241182261687949418995565335029486872157125343290612171119880530101193916858921432756965877000509299499604733026401192518432472807166016347864511370369708185703119315683513347311705471142373926510862090059777086621231383651397623524522666406326397488408425070093854590097402718270173248647652565267172176040569249429679757503140285383909390206192507646517253731439123746131624249013e+10), SC_(2.47088454552427137429056329064109142188843906165891475774275743679190025685194554734484595319669509903930259457820499849598199214676908400721919316015322380864769811197623330485316164544963476410844338145101962702064276881579255860088713997116411562209654938575284162991827148200313426345555058188280286970644756612598695826995893568264874467159345854674115312282747039761533926261402464939091487342073450254851176994505068182111978970672752958497500861843350592146405041615401662481907234472878121134e+01) },
+ { SC_(5.44948530745159587240777909755706787109375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(1.83503568419782742444110740345485123635192662508026305449822064127200895495506522518300606061885236080150004638907060784485796894919202236803140073697331043211992951972609347054589798075100998594256645375390103519596787348845827032192905773076186985280977236935203223950666348048814013595501435907216666387351197442286860869056417192384391638213785809676518670680508710566800590437787611079311407075165452999495406849472529410938337431736830657048795062807787119744804484928614047453144586034805245789e+10), SC_(2.36329148576872448249942821605627674186499356266069319715954487992643662294411738158241119885349703763796404853789880585762925019414200620292460678339262214588413946187958058256382025002391673480147145270388456894043662461018854194828668215962270960439151474188647474425625494775601112078253792726530286137717752752768842949012627953324732331371323991302860241330919243809216358651674628647197448697291367713884619010229075199219840636262767574903350571262368220355179436844196791555671752462351869046e+01) },
+ { SC_(6.08951777891775236639659851789474487304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(1.64216615546621064803013134062087811673092748693572885955291086615453038443965746918527089670359832467884627804869657509889650026751673783619206954153041104516844408513248895106916772556394041551875119284869088037479657980868966602129588687470062451815693221099315162782276653334393329494895424621430603591057616248637305903296178334745144236325653690117993496869421243789046117391168563934190450243201956497156633468278725255215744464020504309074023652187498470935365081369407764705200742909320431349e+10), SC_(2.35218671267563612353348723043202312786307472491656736789362170809010927853268720372089773533365322636476747355137070858356044677376510322713056628921780389307345874508065375269999253671352912911300789233090646288480277336399214203824400746311370034317659741344301244189548926906452691866457683693618594716563727782265819613630587556878361391532959913004915741915512858017425295944874612540863724007947904388532017360454437916475157224516660170429346394565018134649549162182163834378038354896787534841e+01) },
+ { SC_(1.33774435973066374572226777672767639160156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(7.47526979014226168376384951063540791218306464061986362930576004822937035170826747587219778713265013490356876945166420253260555381329073438163483115746514774479474424515084780051629598601133421867960470830504667887885069909772744114866067292970878487141283092292728452415775921280918070442774133326301037901061816917727478717520084018487350667522549017129986542118147485610067262541496627719604571748937052892434485040545825983818735788800698893594461092076293536724104072562332257956291083818308956413e+09), SC_(2.27348660478985728986052090691869895050374367468815674115675413846437487991638874436688243456130558073290283141742095678859644590259358965534318423720133246933305572030632400606313806383078380531211317966778435095299543494045005476053336526881142479116347292899023673200509584071082808986065746925389076777580052558272824153282309889654575678844049352349892755868036262512082925318962285347555701091174821628709528237217604386997327214614368590642701672876321992143952181847423729490477577346381853522e+01) },
+ { SC_(2.55445886665484067634679377079010009765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(3.91472343871439978910477041965245474686465180195914637204067931155807421046773613195218014343443213281482963786749317221809432998053890797111065514873743303968835421350089217250012183258566393346818055392099509447667423810046789872014606508233744159464480197460174056765333167633380035505451716049617734818251233366973419386831337618966097682993067804646577065386307800044732627324473412332158334409508167829825644048453099756316314804390039245419754866540656073700840066868100898153281112806338309714e+09), SC_(2.20880105224416920895025375311224309333191291243380788898883223848745359017136539357506857766099404650529030796456169266293876522646879739438348110747941991215095622332304227939069152729572485470267183483067041403067149639760009599374303521571969473311055242104395748819301709770976566775902041342531942700926010496460878831692942101086740124837297933734304244538829304784415560885582162795113502131933398817811477963855514503427658668565459402914411004137540469053418634046916829095623083037368147796e+01) },
+ { SC_(9.28560339730211126152426004409790039062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(1.07693593693067459739313196967983697014168456746735348950919376991901134647895921249473783820425440748624729046805302065147100445478576472841997876556348031552956847123213018659344562570860704628256642731968975802662512832765217693879980226435177749884163278536128229784803704747100947313765909472695150172294912887298258373307813501549625979139710091181006478520754982671108876330020574992387977252845102120807513897028338524143351916484881826006078361700760820994355807138708960301667204359286421020e+09), SC_(2.07973857504644610716889395527737992585186849324495128250619250061479886870375850394426233184821495976670242716899017325165163154088869376465418506805353926143256480084118576294761652581847352892907919904429997475140686105674530141840068766707330442895114253613073589774120006201302061827279282589546526093188104157655815622515958409221402489609226382619746450223058090686879130896414033263620750912064412230268748715901437966406012423491677890763788052175548531716952413812038430090387475416035911166e+01) },
+ { SC_(1.69822733653290924848988652229309082031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(5.88849312166503329222804086517709611102504992551929827158983260288274819355761666131361350403874753215463840071495318131961262300000765445973666229487031598720857498492987143522791355463828265864402139432350575863919550830036469565606199591470156705446960446045999559624084043933730929837654285300895855904989248038146101301631557036491570331704774925320131536014567404874489691389486251736352515404220755516488822817333832143329345542864773188420965679770154373216348702981384689050349014346637868895e+08), SC_(2.01936808721548656388079701232333621990292234406195324994727476802362692900192163204786445631523775797240087658142441617001290954758379696663986806394767773157322284307849876524904682586819191449092688119556710946373436273820321044371035628264815659393916459198676972087410240894826301225696379803232794401251838170344674786562306664018746217590477957014229341960304890117884805982875916303367067026067301211977791816334606548169972461693412588611268696560770810948724317758861874065303224659055768486e+01) },
+ { SC_(3.39355921141759608872234821319580078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(2.94675865585811635298905545790724556951261971511817324192800337091966952557433897238486040563146326422690127775802629136506732120683355613677456114065442582606140614028294138747202403264952788642284199088873893000648208374234647107722407968127897446593386208233249293959770393729136064523101800224883878867516495924927666979551417108620059324211868720429514373406034762486902686884221653802832710722135064601777922572822590724018314669731551707502644268987523794807797201345037498713836837200106117859e+08), SC_(1.95013865494979315748313424975857460473634359955171433398912789707630274299619009224156325830001463741355320932191136639198272143513408963597746842884554261062767061011794862873805897207009188860568189846504131852234332017714959090717508237726771666011207787732265446873884001434343930063513478218717017119608818828926407280580928774522312004033748177516159660878382197007027146156778530958492741043073137226561947610796232234756201323918090842542134154240717765908943925443129110964257210652469765459e+01) },
+ { SC_(6.31372820691922242986038327217102050781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(1.58385024439239560678029793644762724145694760750936270448787476917426742365312993416495445258066935770102073399067933673940787592468244489319355965681748597844017136875830896374444946819887498943387605128932905916683614722179628126645099686007619813917603450327015203485661027618036158569766302078449406310364340890783600576522072882996092981719203190666518838669113707153191547698768060884224247649696478290695897698814564809558453790895608263410530264953882534568878304886285345294246575653964394933e+08), SC_(1.88805394901935901312944434284350951219368630628612582497798500377213575430066187911538214347407247506592302835814578379074942968724063304830478545485499104982891564902834873083552388009367885301931886283108030732695152751848460305522542720948518365374089606446212603641365595987395773574687901369258435992285754676676444454303083046616673187875296372440378443356862117485368511965690403951383780793178907009178840322578791980487361471021699988380686049660994558986894513487250480575078814977194988926e+01) },
+ { SC_(8.38326386087828723248094320297241210937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(1.19285282171266658145508408138097534262559562256796179239060845011847752757742744827549809320449524476525678489254530873060639064343374370418109877624082104111867971537796336728658937487311009651740723155108598523574089439636001946998412481579157288344084972946019075804904453746381170904188301113624111553121632985948929138222683651820769143181173655246038790436308561376021389687302205902619878055292692238813786176438899128455354260304627671521514620334784061653162359203841812596820283636012413155e+08), SC_(1.85970285112369275360019811510798597407616819997535534540861800006130065438481930599974368466408856952940619414764119222982234819668925719824207934180803628792362844837237434872443976991587061436543189016693448298778560625710296335004224090879870402508253963121606317871340026351185428422401899631577649568952634738322641017608299843257260519480390161519206689676784551329384425137071265909687534307017746909409303177372383274507940067443301831530926380849233752290042798372825621637792458149510367158e+01) },
+ { SC_(1.96263059137891104910522699356079101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(5.09520229157747964001427996680084687728519220880694851417761451758485922028137797926986558108081161647424335273935443009450702693139660492793598652472042922321455560347329476289740970225980232132484721944368298424652675989140325777048780846103353145589579610596228532659731472516752040401388614999099106605361023985232754174754462689599358275454662950394291313192314924154309854807338240568480536882437606662081858664976471783856993462009295129472122922430204094632485111706729685334953903001928515306e+07), SC_(1.77463950207854514067971232064740260529105197804463559048243833216868226570768682518176721601656061733151204368405143742619830734756623431664082017620746152360142944331261018871625099695179564716131664620296596142717865215783930311250469461067216865839155669595131410277575494071155624571181890018520530487012085131270472606584209551187422858235247484254934923176063127943828270477251954203313710078679176167435792694591424828856084830989589146231865386331847539580708042557229489148910726228436273224e+01) },
+ { SC_(5.25638483850343618541955947875976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(1.90244816615071042976912611629696763144346541035766078085764029503997602581877792049646577520911176605141052583156884910047229341218903573541592559499518194959491983325368765455962448031602893719065828910665027882587968020448370625205459497212847547686522514510967372971354497619542701997056077016761039101147586700231467014866991293439747219121625945505887139948909731139184864350248915445653527417884819966623498522753330295654416087777162453609622667919905235926258921853904509270133969132116091634e+07), SC_(1.67612372162164061692861843009343434771981611053111621976184895674270615702556422861104711239670932942032636331270126587785220494849967705136661812539736970981197905984513517678832773229865521494702028014410160745047515210657408196793002836449416485413273544305012535544219297954738314917704098327165656062964601614781986549238030592926364895039476594734612878189916934277091367272748422762481586851408931992506671596123378100473697510918014617091780151806715692586329303065621890707562029937748330347e+01) },
+ { SC_(1.16242290459922514855861663818359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(8.60272048104487229772270370408991565622146793420283748432283683850487109590703567341512208842888206543920002357186841608997218745333833023455975206855307233940669287790010316749659645433998894151744284846749708391642403854115820092354766734491127892363620549380243024276736218478701060023730673432191670156499018218581472049008969127266351163613795232939963359099049229223643932353224706265523448130695355903869011220522517153184148351405100515798526771128492374949302429712428995265054565616102236743e+06), SC_(1.59675890462055852493050785354007861019565072353741022812627104322063156529086182292122548245675963093183064733327338722657905893984234890223568744516553902070973717709098500393275533107035456906906513737015232252328472020431774422782634447132083994791646502267731048214337727523605199382839002174372325259458602525164508779404945196242777027746479829450292065967587035499960957349740151867689420397814665735654733186029950552962743110042418202174503847771730953250698037145722977227920266313544340773e+01) },
+ { SC_(1.77692015768116107210516929626464843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(5.62771429605701866811138968820040581688116632816625983330513767541698354176855994730746674759831971880240445767320154220938966723002674804699555553392464572752062447887107572218019828318385760764849719115812290395527218248512835468451576239683644796014696087840260231260544768733299352553787968817182380161518794267110224517746786086312897558884287582163631755473909091469973820008996113444080900207916568204012349110621060594004089234828356435145317529589017309777517404825895108564229825972606783182e+06), SC_(1.55432139311902849557388986039946494987126573050313531526481779205905405668433477095198392052135320177727361621658987782230848885023817861314864082631463951648319984960611870632532168113895900910854247521399554895529781550582806849790523833389893084518536060834832685622097231090397585685502199395551134545521290924266861842592714224402073494637426674029193910125176587896815977374475577011900752678646424642579248726361363336678870110288587035477510896039630197401429009658705999914443878600811574386e+01) },
+ { SC_(2.46631088884896598756313323974609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(4.05463829463703525078122574940316185372614216769109157708814571443486612751575690613250765783963915311892809190311521636840848682833365271859823541200911649626456985869205183744879031447905297712068866428485718280809470026817621417084457752394310317819688996380906775828413109847499866410583703740515922882544138759737755727432557079831161548511524423498124090291597806689974390433799904149419080022622021024787189417104421660109962432297064272955004064700460013960135399781819403593602459160459413744e+06), SC_(1.52153720417102064745346523708311080286908527069304380979659806362345202173276520946568894036685196482196087450838867175344344468238318814384356738850916294525418838439245756796795747454256238522398060373267581786207971837564233417365834530177830732568954115312718140425486929049831566682146227958628349055286920128285911779848078583664754564964840731594796819254368142311552040020238959735263159278838020281187709608149004880883080370901523357618622591286058941009526205756711994702121770949864546654e+01) },
+ { SC_(7.93268782217637635767459869384765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(1.26060619619731797608818932503181830260823421781213048732665695327420696362898453758226660591820476065756957020975520019667707610555894768703507485484222106076869765708337512029685375685746413643372605490449629888194538976635668689248136807099122488332322328884163089485410632245588395068264245821725494222737390864654038651030533750522546976123471768082838483346923830312776214845895208472603705758787692650064498899060550013054720470762070785663552346599987591854146837595704246331651813008524383209e+06), SC_(1.40471032713253781161105456090844398310531699761588801858703943827256004083339187938282688922859386138059958746496554270966644869917724313173459469024731217872312313939028706531208267916779711847875755923115508248648357114981186732018707140167984280398904591328254471708347734049112217021783628832842204199345747439816740684385414946326168177179946882060522211697405823017982624446938981152321786117064296988318870088712395225819402305299983569779003430897690524415945397318576782524369949353588329616e+01) },
+ { SC_(1.37209326567244715988636016845703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(7.28812853343498664144152447838008783938567673932162819960961771256950384002603126229351335533069556913916892568138616531409143041501189818980704581213281032710490015194970354870756213476299773879811898004568190420013714451336012132400839252929052511244586664386695283946540013669687700896185000308463082744375107020456438967956604931415578634631979274913179204735917911437772705149748195582640430894253267806733655964881188471383295076887111769104559648198985229120804501321038598800302786397869897490e+05), SC_(1.34991722610834251544478254617081208033887846401310469427406095478843346196811171297685073308928006301987164377413398299284980888737753603655332120887310757344649691900092227409561455158414895169100825749492101027579480515522441587439428668126217470515921622120380597586481272803721815179676865176168002630196740690339996435287953994766447951272834237454248437077301244123733043940406921792054573656410299063798548540972124521498460570764799509713656084726107747894221393929095901305152701667831232883e+01) },
+ { SC_(2.14747706195339560508728027343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(4.65662138219785513456021194162659715040199784495451432714692244736381873142785567562103911931072664389018733512973345980123097086105957143181830422993307222537024789466998094044967709540947345569548881850284232773624903802613550469100983177752083220734207267969462805084427281822878812239074581148461697210298236933264855944662677760069483003826859992395504506972326467470916808301997979437414794764181083226857845955214583704416618979717374942753521670200061935257869925639843860532949699488119920342e+05), SC_(1.30512156248704163419310858052987283807885073935136057758898979845218818037254859855534477451394234492262573113912574193529039772507620648887073103288733240844530015624769737072016655692043999870453260213995786982745953810791105720212177103030589518066961157830316056921435994370920505014296960653565850275264051276660243817416894060431159237063418800675904538400890810373846318565995207426410477915174816465069935340231044180571276528013572674914197376905082237182062279095158542604714638986206139428e+01) },
+ { SC_(5.27022712049074470996856689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(1.89744566051396948131191467613435700133438193946287587593391216386661306606335409546369520065981423905125657400592597211211243004697254375450734895459592300815375383152751165081305823627983584181411284526182204207394660389795419887200792166308617327974051439608467092227533174890458055752767205733534348342642249333065058210492219904013467166773249090089125094303714125962392590340230759838587590812261282901800275368686907652321958606428003570401793590415297039558116943719793472143796722363193257473e+05), SC_(1.21534340574375251331797866321470805050072336943670368507800133643376730773790413820040384632351349786576361785072435541887797662530053082201097185957785332034829965887731383605989153147309401665061094744509328906214042555919268939030387813798149437192066156894881989347180491920144816757302805182042339614005936728867964872372329336770418426254156892181076908397406972043893748829677877785432144800417604037445100468162760543750235752313608369165085076555511055641440400557644122506521106201156828000e+01) },
+ { SC_(9.23316110856831073760986328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(1.08304692055151174435645853312702433563445401245428008062158172231455734708917727233248309622995416103476130730859783426082812474016241501932511000475901840984624284970956268938241100845148302704104227692202374326021995429710412190789499517501742831968214505026085727217377064048749586381949765702833484753838333062317642259075801944397863616645673756838251985742411639158567796696629295388664024665052813892150438181549706074897778508926078559131307287669070666914378154990685310194791830936012072137e+05), SC_(1.15927037566595656608676333962593457748246358442149722307760213653329691390266732585232312633218072213780520674080290918004260905060501441987250389989879522599564165926295894900973356709358185982833184287889198682185728270473692925487109895376481633969407425746209783983216649854424136095892698254944537841867507179483097032287978923877995255955010604613196178590571391372314231476100820183230223610979878398116965034513157331357185817159093437732287357107176531525209785815749703666087413492601638367e+01) },
+ { SC_(2.69396477960981428623199462890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(3.71194329747660700872822240489096533346970414462319130943332437727673026086395871555354923534426796329307758684090756605125926441079955027284505526484660084516570689496028558153640491596899194314856682287855875398764204347089952167700379787578451809878965118618325856981967306344605010950402177172875745453986482790033650570205353879618538529832262937125092859324209602202715647865832427287280809938499032165592488069349477641753571240221659642079940920995507104949485325593819265961739532385927724001e+04), SC_(1.05218959113191896554438255983392789165506636604484179691160873065455025312686246355084294414971498650330801965012760611510148977404541413264372006775938011586906419749948493205342928656222439747335580984568333324076988203103506297440002347920779866410520674190113274847777131783052870610390167794377546520034787355528411508314922975386358933134353197222922919703716998581882764082601589614612452860504022521256961901296746671426803571353232525264162049239730237299766785596779287518475633276054504511e+01) },
+ { SC_(3.20805702358484268188476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(3.11709385543515572081573476743918797729420381355450382111209778511181152310932055956563749014637508036076666934504020805229942252077588670358362288265495735084797052807569608353528679336352612738901337701163849825424516929631780124984065988054242480080427910793718686499912898841019187210679705723175454260477745636077694212098776697591722777186050104731968499613418884068268352388977472866805105290135328421979342194632200989741338926428484922875461512185439530419888158628103661380037688089459246622e+04), SC_(1.03472414831310176380983520126166183229500641071994253195046291587080019387137512979227110645263077621786969120878177843284129518960337795398690432074360786303100938249647682482133908324719023468000441189614849101558514019884444875606114225203976467536402967505115161687406889548187118481920055496926584251660690334337239079454029278564608943116880634267663164371010715252754735624250229428238157024613942707533924518433208364222285625505553939009603522382189325666940210790483815089523032160326727186e+01) },
+ { SC_(1.09570304630324244499206542968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(9.12598326298792575871376208892941821597249145712355235734553245112275791184424920173192390958809327836147088440453600847272070731838167459383457734633274396531286746571484131371295317801711910499009978655927962435202345802991303378916715764960222274468063689080593822570418178751973369105720490378352700618930760845476121115398840126230586994459640874070111920630086235547729480577307390280974311106356863825358553687848655142111054663297488417064528607271372924608147255338609518866735822561855075808e+03), SC_(9.11888092749354750131942804760198365932951387446607940153090806005643231331865994203153064090907668937081238831422255569214073300853117391260189906213547756795578339461193047601491906417607295384073771562974969006175586199307941274383550444330451406419535665500372152406327606813356895490483840883903495107538235046324827393471368712595702254706807119781085992818405020677615041495700125639064504392716280328536528527483253025798036974151336021910553259995244874029242300562997202783539503321465074836e+00) },
+ { SC_(1.26518658362329006195068359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(7.90339543765010940777148884430598859351624539666986011225276345158776246884141569590179807044935540608336020073420198831987509235879831098864207174778508378299183243304945942399124179383363140239127129852788889394591268763142954004803973096640508764838455634334250452217575170092021719528520780979702520546195516521766092522673675677114507991883621135632426293262864552958004567105759441872777690805227017885582718414531016665919775279511441635073252680404200996526347257159690831721716257307386634020e+03), SC_(8.97504774835078092356190417460687731975039635483901022943615671319109149737911055314981699026784930674690670230372344603892513366502197739637264654321535008940079734351022352120615821558964314283413690614455978052538154196046662526310741944191671468287266268233426532630706431678673817316378735628183210777142361433016716451904550644715844194615744623549079746505429283121123624192521206839116751685248416746623025501661583164546510521555172172770363313019918383836960358393888517833715726142629204114e+00) },
+ { SC_(2.89763789623975753784179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(3.45050990712494949775484002402506388638080961096441424786111616212629018401813163185537287870628332365611975002748252281954445942791824089759407952360045363041729854235263163931426111990963272192916849625697623347007557637621285946168372199998129262208030995630954149379608985182807987421083472125798154110350638801183057973882308932482367706263206585063709642030346439272821014392389727598715876907984410099739266841331289003132310293615533755248496236332102731721832627511713932767473667701783430362e+03), SC_(8.14627729827083672260241473795882251685177893472958167349605915118977814410015333417694750657030461729339257490528025119250178359084774998230863794007053582161693347623694527222996422723379100574685447013068079638620883177928422256598825247182208799316990898594977407941592694581625618281858646634334423979133024372486968759491378328948502691422577116400902205623065242117642679484587995259074059369354113787583549754706589392229130887348557036144422650603292395363687531902954386667400975083172345586e+00) },
+ { SC_(6.87856925651431083679199218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(1.45321416213776341402172643653824290406246448625953718991061156275374559371473926240159189562530897642663657874824554509667432592596502028111498876987731731419103181077902550647076830258178738399692656235388664685636163262176946409182939329754572681632034342895691385894677553479890654931971482605617255828759487638944296672758417176666979192400085893856817992255670426756593975946191143479418145211492672337177829308430717007395722848329062849814785306945348487702248579633088084778151184300309266488e+03), SC_(7.28153304578384526584740309475807940366672770326761440940762897710596740030873024930437245041126693802972723766820782336184883357255905701949197956259485841269939774864827721578724722429879285781856120681590534300373112907042521537083714436074932198957147919504117058586652251820950663673303273139893930539087144915014830401325006614936376974832764368207617357592682985463417492708094036271644356036769127411668259712404556319653473155967703044648299583649315831983842605529260138729644416212347308063e+00) },
+ { SC_(1.45484786480665206909179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(6.86781314954593160454464618092638855307877715120008177395736462810782174656198499987155564941616352195397978189958626591964468149122014404578158273793351109200213113242205214101044790656181720304965625629108123017569222776687767520209813381764274910480897470251188192687862750700740524066029998775711155906709369717589842957496547022861611550070495006016302488665795132883296840140179617961235225362018556687105202197899534545930741979641738181687774160395997039192122337171298869606024764194152572205e+02), SC_(6.53201592270476536860947401963790763923758464656367263306060046607497918271178641252338567185849747672002776634506076650648391589820323978592182449435073300185043423125573525602447945355905816656067022917255389590808978616355532501271604376496797233681175875074422547652589334792206541712331187984801333409296389423652916811105854094159227253078778899017652515577545872921594094374282044642163199705253838209075554053916667166971670921667204169860545673190811176573623732640765103804713524763978549642e+00) },
+ { SC_(2.84763518720865249633789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(3.50594171696151285909745151539060148090670100756598276592118180115987704129717344737175536146838467429650509880933261757536214809892173281876006961922839017349368918016715871059899525030941759609599269441898890931160728866049789584876193014773218548509654645319159561127258379771324092719966908675957131318483541799312767747733138961436119057779331859641695772856381662725815794379091863942494612270061680368205577445870953007609987741104005991805804886967384188275707554716979388087267636532946282078e+02), SC_(5.85962934855018738649587312234013861000302129002387515656848684744945876545003674583879202077964721098762835565299861962310916008066036172236976819930438289116464091969366411037592261252848982404206750088667969180754458945474285474601066663817491557087065960821804732948417813401515198784400105833419751461696325694087766748324802786184900101367488656974546138080516802723177843393752642666700380479419135279302308967786036757719890914724222867842139605213115580195304952037597706912460432334234902066e+00) },
+ { SC_(5.64682111144065856933593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(1.76519128540056304742831997519877820920857036914650901573270747956845477500889430697791487592196803258689553507495813881022776480777925700182036665576971280072328890974816214386062388950744611023401725987258039815422475168276086738701705000544747226989884474035058273612828243108186586517112777510088124111564539998697510264649032558567739799755678748844961531931104024399830344324164790517360715481533255431541118846660346844535860168147964486866047359898493337601385827325615954944742621429321977581e+02), SC_(5.17342924749847509395382677345036844101386697468349132677587382453025545597250597832024586312263039851038054560204026648849897213226041789143731646890157430242670947732858306884595312712256217331938275330011909939145523867716578226550295227412107943048043687400262298491544402458520241247144003660180386212975533604735504214749965015720884534279252951041120761999648196048357797420424505106730015081309075580772224806827744896280719587243764810430249896719753220866678503719199010381856204558124856374e+00) },
+ { SC_(1.16216316819190979003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(8.54805948781229923149687641890635273041975417474905882859150516565590298743474220866223427847397219829369000787365484657820972691183108360605393331283145369982954735683172978957406283752717555211684709068397614268169647182606579192285035162851360588278393626951222557182654523459375034429014293356095258118240324502965413852124342360304922331374659768398497859177287801543512494826720289510820485846755824343228251545178145676407581591245429045649416349044250416913523846071033825128926490142637555209e+01), SC_(4.44828938969349535148810997617139307954227933026998994112515594555692200779333843464356653807921936992867624497189566489714896857491962316363828135293928928346656864064617647335878702422430142925101126291391714324130882393175364831612313548374438381832325779808261417954388871727651255253232705020856911750794487479982819966152311932156460627180969788906322678826909888730809759061812987798687444590362138599953149339329603462078768122099122835718866740346965377935783016681741937074820082041620821229e+00) },
+ { SC_(2.57236361503601074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(3.83223951967113693849122890317251581426967564682796089915964456835265948178547033943047557579841168870426481105111239555909984888566219617456297725026211199966229821867396896637673047846203677720619527001090874122989539262164276823985235279052457210386157561812538654504918195664295917949283586772716395811634553989103419541323834554767430044867416405158430381076975887538013410973782203585237740277871442626129687031933867672020721719964459784999936157127453790515452253439903564787419239743591953735e+01), SC_(3.64603445628268180815228446194149337645492864618317199432418684416543018270226503511460400594569703029802101239399103310482691389005692181097074338257638671907992807691192922059620682440896513659224462009722394389581858799601911686718694851673895425167333370010580684144797968600958815062396012803331103402562839775473490687537808011575400396372112998895944651405677171661590755009935769417687641381092691734206386019166963834756183746889477962328743513839292774321043859834004242466174346299715639715e+00) },
+ { SC_(5.60617148876190185546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(1.73130292072055181332528155290397626567590041507263494389423293518332512065213706248091156839903121576423171826799183870730052420390377795841699975327731506894205043429718237598549528618024309783147598930694013249097703503193128875785371460887670941110426110649033031522216424367225466117889459621951853207485923846568405880011044669040489333426682118087888525374235517821551139711223601978742628388427488194084278925710136997272334148684152483989197734051109512385005918855581117719442233374533422244e+01), SC_(2.85145935140559624069624461061073352033685732756820805957005838077186103003354080673737557189099925222021795696661665853518636804085091657285841456607737476426645592333146127781631727888953940992284927928306043552361916447918323282469427741999878319265371284600734940623454427339491501614225992065340251283593925141296480332996912477863604005197249766568111289688786686315245507596213806311552005867021049188904470043625006815633642348871266026153738589428518712450395800127807049373655934687568417331e+00) },
+ { SC_(1.06835305690765380859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.87937594300137280222785178504237281981439562279757747352051112017636683902262772265882567787341933727313653229652916122291506572903276244906764087817565322262562231578119198439889397172690818865294208195973086367244330613132729788244977350056887782304089958939338325229445338626076593013444094664859749521861056733116710043733177675852597199662862200321171291806334222056142568553511466136167881100235172294895254202442503636358257078278759840849425123630124694068082847314610010282369584001586261853e+00), SC_(2.18373127784552189022885498465497378725174602502279874257568947818012110655570669710383812275007248898023855011570363491375778330408026208369307534619406033795714421333845585977938683598593439353594844370348254064282219915588151065915494297324923171198525509198152675095787497882326067723426000070832410772860559971251231892379783042570498001965458465779101525970184734775905368402518886395167646368847252388395330389342197997105657677203248240392695509386526846047757896615797092836470002490643633298e+00) },
+ { SC_(2.40109324455261230468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.78368178711231748572573525384921992043324039087841552984182765916536616511007182819817947529256026069114281603423250421784805149083154700929567018507486497721146897268173695523381988008996518312445075106405346666217454765991551115606292938365849946881660425346595554991194890984373406939193890782449870111966141693907909130927359458596551510644771454460052235072482166749519660613764899466155251273563930908045243468567615852308986288038858920350451375815061357930111117157254756816152463843436327128e+00), SC_(1.33069755333858002682528355594543980693815080830370533083954040140260195653398211600745407909514068964724602269394591033304236792153229295793542951189322400050827513942267588200591266599249018149995398100320469707929205615364581942070307474177593988947465298790510611575030618715531455462387945757223905207989659084961839714183952763698696758176669305915307247150797661417783641740176782212774158911335502133645542871042818603699326206692704757081405565700275666335072274515905630940653959113015557377e+00) },
+ { SC_(4.38671588897705078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.01934827098895240866291564717148470275669350790670181518067930385460960037293047713749104474976545378311550134726627432493246281473486566445456021631400427110536255673815460084692784908956829653495993998690913162566451452325878295142067599750666467140637626487570692754761019581563191008018345327025821296654609413196999811589162106157757140856559879383490075416647663882482288743311346454343684899228300598158351924220896203043721869605613557353107864698167995101951259722097491579350956902970931209e+00), SC_(7.02774821229955033201098872522145702309892877930122696222989524936496725944203147163698086529296544937631736479740341375762633221927065058166212697662139823190263516531129117388895917944769456807118372772711996458078531822620766199003175648806790195767357047125727581511679389676806235768985317112567081989787111582319607295781808387339568984936622732251106484870203126608862728541660239102098528893658125927049289362506476736744933084082880129995438327280953236300426644368771292926944860776376107631e-01) },
+ { SC_(9.03765439987182617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.06560979056544150631486646775654894531497351725167706096010663906438214437064541280383121734941160110013742022603852718722974043716489921274151432075110987277321452784597219287693334742039128758201596461554834254278304725176897557872665236905185284924160764990132078376209152960730546416782338895816056903193589945923357184438008243261009964597638527688093732813264760840562843021362962398437652711368023143234727399617697596268517882044297733794559710970166806228215768323696486824556471166719059683e+00), SC_(6.35472086047240242476850173653964968094401254249645125812894399696989269072611985147350175386979540001317320432048487161687158377836798760540253238342535989944288732501843277339124525960211590046211344621131449288110335040489171975921179119993706307712533585084502959793358884082738581504049157966802149956240785900918636177358262658800443458403672205227617798438927337432399221706666884340845929646445623501901592486353757974256947960849040821025145345264978638085227457220184701989027155986122840831e-02) },
+ { SC_(1.27602481842041015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.01414888950966447256741553037802701136914837769904660661341552878720993180981144638082955030623611082112991817736220467858881713541188940021200281798722356747839343824757865378792288085582653852666354963604237824428091058309940381345419447968927454656100213071087794811710211906454576989399445912084143541816722735712338070767965545035059458937634367561872704858664652199384243134873698614575689341524672508628895265595278960478185603597994851716518887234426980755563401446357574835173394489257258389e-01), SC_(-1.03789651277172193944086098338852746711453874554494751358201389145763256548191333008529778141620308270050982442005582738919672606157209775679357946534464297204946198894138476752722800806070647736840953123760641090828638676777046197081472678594658653029924350948826762779384389037531016067478554113108266601116041196944329962447909678357418268110606803095785064013479379529072212712584934963239795181858596438347804510477316820666489360204187718259096876068752105120502150744520502695973277633725886243e-01) }
+ }};
+//#undef SC_
+
+
diff --git a/libs/multiprecision/test/math/high_prec/gamma_1_2.ipp b/libs/multiprecision/test/math/high_prec/gamma_1_2.ipp
new file mode 100644
index 0000000000..836b203aac
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/gamma_1_2.ipp
@@ -0,0 +1,47 @@
+ static const boost::array<boost::array<typename table_type<T>::type, 3>, 42> gamma_1_2 = {{
+ { SC_(1.00000143051147460937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99999174288391999092757871949960760944599692334161113632612001448234829888352099654097074654344285708898686038400924243326257000995473599459860412189476206535957778861551088462375468578938240500307167618043731787467573306745319965463132052615688418631316435531309275145303892395341676733095522386701856522207240447267708668301329563326443831046210450368179263405643106444973478994275343456845976754204700528622443064906871609264433329448562184863557194334628845647631027980086626707202034219860132039e-01), SC_(-8.25711948900924692597299306183832574130326734078524848537366321722804959189414089321374321487571322916700881394838168937675017756067526027059906924659380618507813551107141661082752510377407448366888067712646753094821383103251070103298799663269077425948810538745741157050557462080083874347930605957984000258314264095908394093097201357665227991167061298266665567091332898437498972810629979744483195488186797207794753595348181654435055140261537588799716884603608921499148980999953580901141143177940912987e-07) },
+ { SC_(1.00000190734863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99998899052088870556298015139749114669312651159953142848295392815303317500016029969635974482718991700497816055817263571292901954688370348906253549005287861083171410201406647883485474421222649893000205148346129113166971062186410799748091336730057656052509954292585979817626028277775407407112537788176094920236533009104994139384430523864665582176691381647483160502797293814016280767994802120063648051546796192887146643586658388925305855542153022171696856252158767172309183370455258068376853535216362470e-01), SC_(-1.10094851717304002712268894099127595921487972573933586334689334527229248323934919014638550108524145553527405840273344353639000207218741487766297554573091476469480049905558271838458052416000410785954618163762239772914309942293307957081996934083616872743593791436745000684254951241300456576383726667911197040993317728453157236842228209877681100498209542136619826560930165076125847234456840374995616717759747291279589613997037378064178672114262185168274084948288257929977168303768505416039428474173888808e-06) },
+ { SC_(1.00000715255737304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99995871482439030123562974470516145713394424812766636877383802416011979320279049083203112581733456099995683282738209665836532102308697025612534875128891666457345958520964130243018916433692201391748875528601051438277602513487355536872792386028259758535373151611332556663150738220804194424251848920431250539383936484964316068698893034940814586752406503829065074575875145977149630424770495659102034695665964258237898580634499483188073724936730054003089085359012125236558137262535083336056587140852800456e-01), SC_(-4.12852608332195851691203735959218082583309360270436920767851544796916430110170536266576060329474456009336058048427569309546294249770163912414335808655484082224000396074276450271816190829739395101572464054265620776265007334847480163917450671956548131916218767194273440313568874946498741895154818277265159531908173961864655218297464043731661102093299016819229971909322404880656592327408588191219928932127624518196151869557514361114934732089059682453199895851884381325844177861206907545771018319777526395e-06) },
+ { SC_(1.00001382827758789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99992018290683797846000226935056171185859936503128820835471750919976663152444739936675800355406606711512157240239127384452319098942674657017897817468120805836926848121657068423652761200611382709254842088377275403963217241357409925817025690122325186353402737193791739281574809393066322820848698863824029214072384456058169355314312772713088236719681578106869264305967664276510843791749709913005299240434221449190581606080546735845029507633743966156522363875224608869485434247381577247694136841387337506e-01), SC_(-7.98174117021345792583197715106148864099769997469814968659586924923411082051309399423820083379003398574828706106026847702771900443355053076333928564661934959347977543844422372354610528704694194514369673005031394800075820697954595056265037686466809758696282814462959586452027325510485481129596043614869818722579861830854885232173045580402917981131629803571485201158990471407846736365894690896340575434314344665619486163529114866521238533471912104264466874277993839991170047144881087379199096956344930374e-06) },
+ { SC_(1.00001716613769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99990091727863163325242222177264151557699017886575216984231288977651535626638346381310234072695038675659981791249420691007156006802164340387989178169488325851634552002703894997675940814211199538881805758913622490627980631399097588920415763179341948229307099650348008989816592713813726915109074989891788978965796994913538811183413860908256492363372407238104866387595665466503765367010396538799223340678265221385147175632220501459281016668716802117533163355282958056372905167080533658897792045054410079e-01), SC_(-9.90832122408929040408559547336655735086172539547473819642814546268213452104179698046816192544343649213516276050992499286077179633065711247130052986266586612792198019407011580703718749973206816410430099598884696898621732263753199017370635170322352068229418089019905571698341346767171969043521773124763386169098538786284978144876183616053588253360709161373130687567240750392131068350600396793696828309634567406848106245558829741030294161625454805367042624975175240236006902139797188269658688359388850604e-06) },
+ { SC_(1.00006008148193359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99965323597539602107075328547761587261019813359390369760751109252264732839906671037031518875134968012136696641174447037803904262082887969976109296285684390252157866836780186592932702237009167943025982890755934376143300721600433843080584322613515975251145176495194038059333781579482810573482380992838639055654464946705171224947543458455875016762570976299577906723146773198425090625559656009265422616400519050536628957500842705209930585910280037352659669895054043861427070231539351464283935980884908931e-01), SC_(-3.46770037007409655757667178857746223190711811787178225776104706289662004501688838200316229177747817138199803885280303413474034927454764780105040241282675413678168958627420206298519414644689489796825217807297340862467260672318740929958999360584422503219415448595860007050952381087378585257254009183598634422465183290108846220184440918709834134414756286915640039850168914802758353098152897222212865686814139570252607648258247174783738621351343846323154823824135361645528936757373238593936453258830559626e-05) },
+ { SC_(1.00011682510375976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99932580217349322111022028953617401331744333751403970060804097152155125562795257245209990189244390955065622803586974115564775452579165277800679992202499294033532574731584142945934294435673450155960678373595954883991435191422966953073303251361033522456325375489064785213746192226948204738894305982149533115149748405385850564842587242123139516721576059297438931817529512643270863422808208534475683331512001048644854819051058927620674300198483640232556173168539289960682363209643255386743487137951435608e-01), SC_(-6.74220554663799556877310402772443112760157761571902023463311635516217433897770295691084680383277023834238210219871774978089885153707718168224025213708002539939323526485458159206065857983075309830686070983216968357999309570523171700990741684698946763301064392077432210536224126429808942160450023453639044757019826692163047432599057748754815292572362647469482812022241942671262055942485364235176211540596083535537009938706493439634976520904423708619194103147768525477352233702757523202626115873106021273e-05) },
+ { SC_(1.00014877319335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99914147670522157119990095816051182525869285752191570299986635498915136588896493248365257759438213001482731183963093196649233881218040818957792374396660936598196305684819148527571896894670840843075654286835564773000594859074473690225403830688350354252139596396883469105131902182804954743787255215002586550458745855022390733700033552487189754708762505434494766042941772545691183075216127229908050031032252997777058211897547918467712668931901682746348165792889219319764070713850889628242784768424868130e-01), SC_(-8.58560150000232182840017338970199207015444462387386607649752923794156356753324749863484023674482826368894211048585691962413851546114269579480065761062341760434702534740992077291531596054368583871596159082563812571726762650773153069310637429285445540476388286200085615639301380104059851185751956992083481298692217441089203287067778907940777696367340030092049574459913524572177529000648022805010658269187678613395820117311947653348295570171839424515238720298923295035866057993641637438770886487510361427e-05) },
+ { SC_(1.00039815902709960937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99770333110831492808746107899166135280142203963707103455559351498353730379622819894763111240763432539056047936359580766442659319921652358936987966214938950939435663301222127947502411131332209082447717639899925306161185533504539560696196046757852273728024849898337683541947420067193081937907625447769106391972105734465495304033409391663299515305873457058683377675271966433428080840182451133769485259668772279477913835172938605800816170644204743795319739336290349933820409636830617776722200662226423410e-01), SC_(-2.29693266647263659905267506634368150483626461773464138564883162577609178712280408452312056570476352591647966867985753773286072034838577415545063255615155600715276129983764450847384254995243544335451212874166249277514712689608517250431900213708104149683916395785770433269863454207362975420101202621074988088246180747303492773111501326915687144736749558273211568644678725198708337441028102186739131006289732732451411357227579446820937346539059417079097069904499656657749370706773592719032343614925133271e-04) },
+ { SC_(1.00063848495483398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99631859447795538102193086350466626797653070729794205440800520055636280763885061673862015030796869853893789243475736071832934110880676018608126876844999256516872278028164486551902037327521458584687257382213309438429801326762332746780555937892390377489762791671064874927604230957617846733925263989858598196284959978561705689127705026814246454264077811405090206416845460825762177518652427086599576814868159221508338773364149774888148314871107526895227752545125757315695610947566263171638714842858738272e-01), SC_(-3.68208332573195956331210081624594239749394416803950908768685933543093626633451555793231113756331335425963182990684777112954271367958172970283738601921956301734980965046021109384234366447704543598220974149455699644080458292345192792596261425685403086325921370880394538207189224801004010561669507034655239854624541613368723129243328830529900319847443342058489559670277958326928917863667680577628031005468470452675568722782294683578292536699572826364160501920571986429433940804663506127245264105983664301e-04) },
+ { SC_(1.00107145309448242187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.99382674822601667403239575382618951458893199251301947146215993352196283762341237298698231312941265613694903447679790369281559605314211409159830913156190622044924254885952656386521417492543976139615818498174187287133742132249380106828717540300112779917059538337849851096305151233791188029858916028445980753589436609863762082166374840070247490176396648225666182221677814131865874707658977935654371728304366144253753158711600380365080650129423678311958337349802342329016782920332415801360758065052764693e-01), SC_(-6.17515801040877325131151232919778004462797029509263756439665376295049986314719517615619416044020139941656219729463770419342221308377598718445537314327839397064675755119235423378203363475348607407689849591829201234719170773126477412940229835868424119423489707620954508876185462076594438172323119672045609009061662915362180538360149343723949200326445809001654182581777638480231628275052706847821672195497723988024572921599072175197242142212195116944762930191378376328084045634116582617540525060723552551e-04) },
+ { SC_(1.00302171707153320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.98264823461931536749416512755660281120989924865707625229833257960645264035500100250336898184907448998921042036230368188091708046504522273427794078979113111960829807534456665305177251159579747032678402428834297225115471239166750815621846487365110340243197886307308000837905364975250652215207125797086578339200177075082274308974522430592585814094736901318362632618659922741288815306432900856791717414156527945120488582581537806945315376665198216838443054961618230007143995001406730984367520071959292714e-01), SC_(-1.73668370059196286526539979196054130140895376467504060472269120641199689896392717833308713991174930707390895685228964418616313569936348016118980224344687827465558226448493405115419933128303920683280943663247672453726972961437611838482173177548854889388730797437720783444466661451141517724151590371105457213113919681710114442333257409145438562709571297072489258507270738823389529512161726965101165499837215710030502282466952003769887407843034316530688055949633407900696533642354006548208448645662316917e-03) },
+ { SC_(1.00499391555786132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.97141987555054340304313176463811884706264975589409907711234106560058609393271957307055082872891129410102083699500728283618347812653629468281551207846668700643470399586576624117253612700605418076832930868289087002572928070786756405137053359765443944765968271908912062956518242691227870162853819197340367908118996679846253679049356114011183750259927716203480089987629318935061831663652778532993830636783378403442682358220843386678860533265544542528384278621171051277427390347574579492853577100128619407e-01), SC_(-2.86210436087086001219787203735569562421372152373863548640068045829675888249714024869717239721994061219165785957749026372538378678509251738859065487118286167323424304865392614274250231752411862994497835172325480685039413276552426722185380374001250774890081771218253381634489468447683838615323458562556132390816770034833055105238636360789783990787873918822664133911201583322251908688863597569845687382260426660773087641598696053109034352095877056488917071635782120160167491767030736813586543030924751972e-03) },
+ { SC_(1.00928401947021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.94725649294890404479691100544964299212951704478613530903971822806017329877156708018465369324189948798034254635780503202894085998084733850371417658768318005687261606936611555053869547658745148804444802910439708812910773154353420286199364712053375318222724588767021914345493933709903167527793547413249855259854089366858866896664154070656991436736886582807429735741274943744190439486793177574882112810679231693943021915551996830675255244876341153517755183653646041518858296397522796201891082052630011680e-01), SC_(-5.28830919574000394857298213309555217277552558169501942679144421480630307191430194474561267421233056506945756642955882873960771251210761377932729055199230933294031635221988391115425824318672303823777879654381369427266345995275947337336618588685415927144581932003652590401257458835032565848265828024191566846037511249492915676767412627621261275712261144003161259984311425096376028822716363239133708904326402490271273591177695515131973061269294472455115171077929366425109455097808718265759636660823511773e-03) },
+ { SC_(1.02416992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.86614048062602117123406311118908657526377765145590897833523630975503363209176138538389943023236553603567032030295329814866052858161398959719488439602760043127493599629647790910368650401083097710387444443112945732297448026376057799816375936299971289892260452026548899140129220485002888583419955984239574912694509374491745016651528016606029396150839935179771239942510295480902170767514068781705260053508993213902538634255145495226403542335065511017877104815179205392647102946016289317357707173178319778e-01), SC_(-1.34763514204995372109520288412048333775377813106008243000148150918296004262962726414132914028794577353429614250975299694173700835973336120904901398475019010957711015087496744076484212085372674226997687893794106127390983166014459284671204531469581065659308636723155764096816681418792159648003075197102825097837643825841085478699904544782275291790410274144152650577672862729352423481593131480537858719681819399045310180592496365519546516973520373011933766484977458014591739445077700073769103597250567667e-02) },
+ { SC_(1.06227731704711914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.67683284737636217813685234156898327768051602711302285901829303009936564635927633847791905521633600182260778451883080067109265151115529992925211612926715722203426431025001128565716170432011945340670439807499803976561841973814640123513684707855300283766826345586152363103902831064307590922557520983011890727883861293257299222429489009382052966333548186633019471937742818976913809802674997409468133243009640443196713199007760299064535991343883139271256226294904557987948005599961383926203112142304751891e-01), SC_(-3.28504304307040642219585079239267415655387519327605107558648615710409468862569859227455978653146395616102834823083140570843368962391564290326611187884817002376245922067354288141538130729190429210727139841839276253448391616940778575204647813069308428390814330462539441519296405032309130029624726521666062066510420118474939973861641972779471516623719555431865569868101377367606319715633947259100590108593611531959008242872074641637498065015954588974509068119809908143583335322131919999217251753951186048e-02) },
+ { SC_(1.12234401702880859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.42719540443721868609002739661970901317374072285768379447466866954674796223379001999201565264677947553367307391082852503202607769289913522567688887058955685132616165787742839855998640874824219137049123198709821760747886535404924436193564823937315970827009692703009325365564932429177420389197235892443670127598813072041078050012898789236697316107241881629714345634175264626532960435557492555881063944965513891366901261370042103809394595612230568364837051250994297966981292812529454999511053648268266764e-01), SC_(-5.89864526271249351144556212579822618917436335049065095559579674127451726947716815647990915471041353567929075619948343725717548053442557223884779131419367919157584133387553223567375506176942960614314964694763936598785587324632686320182733715386907383114749720665798633555874573366724394801004742262541189978425319883592782254726978670759080718710838718774274176068877873338044184550009341943947599806101348846632287258040041525848381664958987160401558865553412301389282414760154376012162803848258086080e-02) },
+ { SC_(1.24955749511718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.06493816701717652070796129681189279368155581078682075820670134311300664131805878872586560909347774849547077856785642913530318887990663829885598997306430503539463747760384445798729628986584285556511189918203631381512642237968267976800749340764140551780790213440489556072013302545763169764814551474864925015186841329299201026352946069132722200522135595378262960918915145172163243476478068099324456198209609874843860356636542021486098870105783313973496928190246231924822313645766881423162228482926452743e-01), SC_(-9.81710698786497220376429335539270291577202696321668505055577023289661137227566055993679749549766918458699591847594920910105255828822634290141131935936546209147240316032812525952523382179180640249028818445846744545617651819215028796677831516376847157547306218459444490819966549093798582410582121073841724280247709105859157726125972512495037490263556773941212263105105345816502885995240534301400324958919560073963596185728670816181963867297997989630900958703732881856633201726987832993395543288655355655e-02) },
+ { SC_(1.49122190475463867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.85975092788991742528041047924561577192733154188411771443460511494016648390575001890695683272836236515321056943442804539359597265274910084710921603660396269156598507728775879061867953195401830327778287272821941688982147004473011352892866957493463356307424660232522691594801771101120466915823926551028340522696126815833575982012695964065305355745762363170848885276046624884963565926602220756773747996380869706730672003309814235399043910590132770511920234964269726502103389367669862235505150898557966263e-01), SC_(-1.21066440748512404475024426968054339220139475801816468185017851452260119203818813132939295220966959576860336864073002283446059920152906043012149024456589573987061299654713751597706989918988719559690035557918832819457973675159107009641096292984585286590294204090882255710857113184702854471283701290417226824298947728969222795981705252849942735333352549341821313583386938754136637061655567217513693143381971281132686015952311886746414259153818520215140430872206179626007079632596580406780773162650910071e-01) },
+ { SC_(1.98384714126586914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.93277940863746060094197659735027757230706286917741917762496289768909973927152319136925826790987137836060306879047113080832050742214997883337058606749529722735374603438145977294427160833784267011312076909076550541477208463886596934763667375400780519791449104728834334555489059974684968690493160617288828111978728838786866301310864555490911074901146366512699766804528603943358823947495513863982273895087758009700096077066283343694119497087163296220588369077116759749556165607389286281631813045097817428e-01), SC_(-6.74475393680727792069762024270330812537700489703053013284255062343350182439674474578730149516053038676811013704009948324320350047574120923780989626605300836004879573275984536698779115493092794651554687907372115587742289911340235342079018983733618420038276859524379547071361323963477361912857826074181438032171394433343549277630241247535256024056315554535944762558500606719649195939605908602554320144187923405070267451743300647279690038646110638038235596246122379284569329673191480466839566772904937236e-03) },
+ { SC_(2.00000095367431640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00000040319893632897083396218235250442687645120641744558071205705190318147242371991332042156751805833852697631957330509506196708584945266641045457660989815172203541816266426236940069173585211589763128871697578680808418618594108833421417980995744773022193915847912330485683365230207586357094671604272787550530903600224806658987408719323099820976084511227529072261830260642708557524072773978716369615012122132057589880483944058104433222796365791263393617076632690550955298233611068528870707089364095396e+00), SC_(4.03198855044301554816172072614225033788691505795611432584438613689610292824028384688095043674471559124897800612350231064864096087718457160639337450525089464591496773979407785076356708014174129536539640532615095723967138046302232419186403372347709059543748470408896810291291180015648613156670374402027509167511951650054983758492567575324143010258003034809361205157135224850913835714293416750775594448006015222943082316111780423579293934013166760093499975251633169677773646504254854198727344120013504365e-07) },
+ { SC_(2.00000190734863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00000080639862179156320749294205460277721263993072638189466465607403289991143399112081618390192080963070354362886119327646176199516603660937826302901159928779494258019082124712407057933583908441496121322063683259318008058781175829274964725273678817450354460034581300882836023853249853243649983467946063352515390711748246817082161654458328562433974332388415775058145731044093471875681157457108697886142238279184839101146584613813640533770816777389788965810315717293167650115988276824457403595566759389e+00), SC_(8.06398296652369388346753570212806293434617232720966725801587802276808064585926804588184187043135604602686396171466242066554348032404711308797270594130241494161534533864038783147874657175104558077883552634080070849598914179245766012967264457383839298001666035383180768607693646745391307544328709128695266429891189065277448225084990453870685304089249021637700855765025758836941010684469612390178013299005220982859478280091515998345131481699299506763765052696832472588629108234998520472751599705762862356e-07) },
+ { SC_(2.00000667572021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00000282240828612370720432797341957422445599590783120191598452050016192718431252156475433521025107815241299689727688190713762804692078252171442580070457989886811171740362147708150897847246521021353648087384510766114323922511042794780794963611368596831842470145084109206592297151053427050373627219979831633894688588291555439270912595000568295516884494034186513041322990336045552200687704404122041643387206167556427413751475495475766262400293533115355573835729416036577460770575506761724680166442542205e+00), SC_(2.82240430313693482259741002317161344692584090816350421570061439040390205793534184180679012494641343828056263558002807243971560338327014657463162594242259880851334402250020991610342925766542062329630756367550321323211687945637272726042075205149190416983911272664024992320980212857811481896974987286244636574782770763547904245074167747630014211411345847779432353677900379896876560812240587252030790328354166673314806061716097732347525218908223708776924400221206951936181129323023407095316462578683205523e-06) },
+ { SC_(2.00001335144042968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00000564485327991968668594609717588743187620334387669560320925683608138323706505379186671848228233776630265493443006782405469373155950681711638198173774648872464328767774535861493087995322216857536320454566762040450313550698727293463258463329821616727965930447601219959984721044168618580561296210950745646574464740623985999575897298077649444083254875738139464502197343599936704712558359823411346914202036213419554769879303409746624911821501582952260886957328885985322110392828234082593263639947413253e+00), SC_(5.64483734779536708386785894934199777725964876845433467264447717112994234556972534192218656188108493669337126323346525968019986211081211701648787471584545174938623855070199540574827647819065018548603418529971801560701167562341186495748315805711171811817613909853725214174720409287402657526024192981129576773427177060556261477821785713896316233730786535929598718603282821984633658641971448620591249698834069603542821378964494629888597814475264502798958300823972230397309547512496385402948011659018612308e-06) },
+ { SC_(2.00001716613769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00000725769547171200167564651655781339501747509170098598324110434935716090095444696937906607363088739878177923814143661505313658313437339243393242291780132442290199415466622168654728458608339173247740576549746614640956566066866430011407322576072587095409588704181386960856222173704985729295910394663867051373449414642750484101682727247737150988891422843497594286426018641870789465070238089390338211030500873713792516468514692736358005370399134292567498197113950550095013629986729155685259947938135536e+00), SC_(7.25766913476765189195943994441059059063931591396766321180095950635741905767289274108973144158196620893048522962182368196336453133307209215602635345230143943859407773807168277575281927389367146545537872394784276831689726825577222687305283368915549011001823219543451522711095115473870948208010149514574062931974517483036146556187182145659391171551431216570623340783643192270760300569668149898941633206468627648411118821538870638769588745778143031469232973340074226512043471253590740081694584319298530296e-06) },
+ { SC_(2.00006008148193359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00002540299606354791065346284198395071392875295770431323580196614759982793856324349365396015329614421966458647642567726829113804005273586077478149065754298525775201160607751664030681223021989523182566039331380106760457489528499350049417578075515249135149538682436349952364131677792289256760214855379993211811298605656429676833893492196246177835739676095563228276086226377489403591966271602430351591781580342925613408409569377283919944732510580834336822851093251943664838933995360754027866586976925851e+00), SC_(2.54026734129075920683292497513548989135470818393407385853298137294395173713099726839012404342665592243399085416582332060628801690208097983739002406025934607527022791719818585971188300777024910785735796519500643466487320162076429378768121348997496169212590642570240123161578934167744566979249172495862343250947755453958462282871032707952094614466497359897253881671158104674131343402296124478766617373684005972841762744006880609634714505140811507944847363892081962397928329908133631675224301028449247209e-05) },
+ { SC_(2.00011634826660156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00004919579971274987085172264051528477688620257556098733179199797634993006055608473993509011423580085655400431431748032522949606654990020016568322885459038549486931421278268572942503971061688380325649937281598614721987287749832098883394446271542552887155227649358981358083752285904573279825696370210973258395291081843521899210367510309139360759318429085870041933795710719739751402675370645882893834096485696907489845929951714564265042472412399767903286958066978690375487334358793398429830456561541246e+00), SC_(4.91945896390820475195370970645602094808037804377590418877034537519903014145963070050094790711325337883992554088808760086026030902259009588513453547405813184039270067427528313371078524967343062809805890477343634441228005677940570227333130604677886144106807165848097649545352137718974323948752964644308680893166137837610910555163484988859334163045674658729040392892717423042002979632823737182738830808717162341432139261825185824243512121766256143995598535133134723195587750262495436621336439795174387835e-05) },
+ { SC_(2.00014877319335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00006290809135631836010117832694910884162897852465378752121504232411219503893527713522395467812648391482447399141309991293749270126109922804569579351974393592882118993134665992128136689581102395919839579729236175109716400885285467347857304588838104602389799424028052742153471950528851108394765447248467693160600801279958904164762839085292385657809249863560539720701829052485256749042278246123879349245502162062142354267095491755531429549626456789964981518584088969769936886585070722733145919395422821e+00), SC_(6.29061127253201440487758474836373805783136286628744476010931129298030354555338078339617930326707541807536724443762505067268693291418747671368044733699672217831004599282343529717810773460926922006823045900978640697730593796486796292597553994448182322203424673613673826679553245785071474823905571747970217285633939851724732886368648977212490174113663820136503886232944614523399811332727124466745548877384069974675038479667681516039717424797860050660126927295087191793263665124491531011381265079322510497e-05) },
+ { SC_(2.00039863586425781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00016860244976056265274104250042339264795490885298408767683185991260848173515982048063530097499917171148194931029349352640670782785724424106239359449491337847227802622585196405678868931956700176591838250468804948749651418462210706999940223229935053155558688743886448270973803464416218977188135288871521807292536522613240793899596571718868959233786678163988748880988951672966050324443415049581691737548496916730217092347107982502603129665491416261845625192330758149843287258281523770384959803934715742e+00), SC_(1.68588237964936617725573866192084801300187025488573449723958905292528558677560307939136401071488780012664616755906250008647359831845341046315862971508236868311850624153598433932470170707220423511352555441028287147256686322654153696151693628355062766009121440388562309459578300783864351215367098079641124426125653492611009828966768679542829405019789539978282261729619815161598550862768014752088779305148355628992689441225448919902699678811993936710593983239834116001627961033784077675665187451904779153e-04) },
+ { SC_(2.00063800811767578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00026990750041852421765366910628431973474865306478493810159708621323870871973118744454114814939325483626647062327232431721609165735997428833979053416183622439983621245874940645789317173396881439394408015656296494647112371565895925809887772690783846745411149877139730876519000006744104903586271269698152110744658555649922874109964207178521955852588404483178141111968812445948355284551749269795546643581115097967186393797452722030686805063649653415569480391265099835897962993260240130068971271304727487e+00), SC_(2.69871081942065723897833099470995487800158997999008998347813401241773943654131765184972285158614214641749498196406392645505184508075530625363890023930226819460655785021303840797155528371522530911358371088155260193772440453024087940353600470087063993834537412713544819005646799581180031366714889866852653659503836096784982086654775806436187485934147132190078275537650223336741258760920441829149880313735373118931133566363904035798043218143706480154098407247747391184674434380504850962356703140842776482e-04) },
+ { SC_(2.00107192993164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00045366850244676328437925811291073214721976041570836260525501664695528715250408575145931378349350227688837316676868254719113597414318217870885844613229100808084497215923555968306851384139377823756137707740468543389970979577970623128733809962698992633941000918916641725087330663136277097326315490132382010503633074057199260098276330149620295467434128041592429716319985644497132929559777710003514847010029779221896564946779046395621309674719671941599041158491221996485551059405243097093577110261783446e+00), SC_(4.53565626005065278926467940737642886605249081041802313480807335050258790272115953359716522668419818080599307266053631904431521057302273515725629853746800638510488383571198722159231860540917028344994514956013946808052183595119710018510329469789737703176433796292351366450813161229871010564403903786056927568689158871830933860651600507487702193264045530383700007441066684051740039536729108634765214756819077820262508689114004651424406631533658945395417870161936749479421943272531385382088836918042945083e-04) },
+ { SC_(2.00302124023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00128109453382675805173992936811235013623574400347864620287586318438309294296665771775467445713658191501098042317502832687005143325478326763307131985706554101553485442510186534211913551363194311510651662998641180078528045675828899947117843797072061127185592558360128674206812796658575963285754372198258684165702376177309610909388042634428491075001412861942564107042409560615729123629146679339990196142809886924437774615022430018387187232103447017447004392918496134872896723476265006537164632595098140e+00), SC_(1.28027463239724483573557591805281156031783786455407331932724556092523281693077215723336812242738030575971419315597244134798471470509239217931886729204522846233287533744777134652447761428596469288172600899533917013300359587696649805109934740082670700437170661671201465552822434017620867488841178011239797068554314139917114166483646378072990776989847016014395621598620280894638628718729791912651882959514839837935385891368255358441348171707916587078365790333842092452342852422428006539026507499595286123e-03) },
+ { SC_(2.00499343872070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00212142687656938141755270267953218765354768440933747494815728726712151222070491619095448970333895393102444381708475627275738580419453523195048052196379247915358684398503757315017141406139047336197575310525733968756298578987992499076885165365084990221306522699178292450185978338864665272953117267614937180452725496381985816195572219564378217691076292404788320272952577105820443381455242824711291502490670740124425205103598528630778954594116895950873773335330424825150256890064566932046528756803850377e+00), SC_(2.11917982797806522188180583003778103974751450356379656023292543359724208118117325946572388778921904109959311356271811647949638546545148491244584564070484155125952798837608461639766227062066344856863585936876232794773824375120613111140413086769458486596098060127417623954442102532030333552359584958516332878683424121585275505850970921650425493840174528373209639623509936585019571702003296293023302489480387225826279840718692043287032926120545307827287470013099533025763093667172429225118318113870786208e-03) },
+ { SC_(2.00928401947021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00396070159046626935511242705234690901218236095282169771624882103505993499719962388966570231900481119384425168785810482517055802032380367843668498408199062053383972024792891639768193707683013646734312421126399867391625714088146455431741320398132294311867702699910710257806208656164296257925674148222338444701332204049088886668733363978488089027829282411338212114532892893682282276507146315808397645071291768383839937827086383616329198213608310939839268318908099732004589321018099591371493619747249631e+00), SC_(3.95287866131048848362949332955482809813076597121930182265468445712788358294143596058339399774748227605315495370143056461809371109597058293347314059761260952541527829461615326949940335043617147241318395774085607956500413456369858807011840974780701301554326183297359957043339930077882451930283804249507686065739672454172144114535956579235090987261573105806998672929894099870037590014574603650514557889886665766715585784345883317933151789624097968432728774013964196082834709374955951419821387012151249400e-03) },
+ { SC_(2.02416992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.01046043252505270540348864139253462361405144648089692783487100389214760953674167508997700463439388241380949691579319056966872356933278042871661474710292440940425675059725890695043859580872646359743050035128388851244819200943544005620842213202597157253369936431918277145821339842153005800963054574069458416961754561181466561153641602286677082930975916212869637489229264881405874178948279261212245261827886389949246815690926156066278390139052729949218614616691327310111196212366658537263564003698316686e+00), SC_(1.04061007614633015888506552864890187300424291776713882118559537231037896435738358627458345297202553217351350725032661791909644351751312758522401030616953479527240248501544067448116919217029247318494741938200819289498451100715539693480677760858450468487286554749460935161181430847180062573510341370004226635188701720062386639582275639420676796347377428587899902624464686139266483219004395187251433297865892676882328269889806653848707748007936999905330214536016979834048012739320965030439429057045382243e-02) },
+ { SC_(2.06227684020996093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.02794777691629049193504390235516903904685488713247685582519603512105260522463735818554622361453962807292107231999993865443863636016422482468073136921333975898098163990514820931936483699455271677262446764306240533746033838338608816064501896947661274923124993994172638131485369377970739578593544353021087099305294127230319375266951896578913720592622847270176439826888386290790930789539393963150979413129440604185373077854075465693083153485136923946684182484672155068069363826098702103238635420489190320e+00), SC_(2.75643650774888061670685649048190767794082581488473953554589507676339470495854150371718710075080407758280379482617006492575884521367017539656756513515621826253686899723946040513136318257344014516389163303047441444416452076515352022257721695414093144578314213761291012013465662826539298879963192579050341577937021219782512691210616431141692894047421455586943199613536641000412200192791271919535732465144076608722082755046949411524847483821817449723308031951964499163351930528842227963221257503313906453e-02) },
+ { SC_(2.12234401702880859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.05805563595315918870620421524696928104121094020123122438591403908241219015868614428499827547272175158643580386943048386142399843901618528166730694455229164550039869186159172224183094834887338162067894198894809433633712767764687117266852119387945316827334128187517324798364147479381468438290770208748715873468048281517169879643662462978121501305190754179038096804244270749490304891307019935778794914003748853181431342998479066888373904416656160676722262062683000801879454155276475143345792496648973201e+00), SC_(5.64329180205833189457202528539405980451202615961305194101203405759309850646470129298871261850384869366086721140086742612879750402334731484485411214841852903126716872739314918112243534983931682696927881636448720345394093622904476579243712320772347374338360965150249665935072437073635189766843122322561564241771470220052390739248148539657800012921462649571509627481171784835330155295559197243566391110694212531989990104509951797406602267883991910533467933935868541283958081404580151382316102798202818663e-02) },
+ { SC_(2.15761280059814453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.07723244020951674736879024409015567278674737427280181790958191485280131080304291237276361807466338094341891840492656978367711727637106416679804070829852978008261215431888758036898775633940482292123134601737585845696200859486998264872046143555878009818620345847733547045237356831681855942609725505498410349738410778577001739079204840229118046714852909334644202624686546361760524439047857738766396297664386891608925813105226195741601654256704110771917895237804372499638318366040599062738662549672075233e+00), SC_(7.43951968096078567450169038225671190608692238403345259369787919244023060889967195591743644105668461468324843850667686453041016494846928923754334711387649093526562013857192333261291836182288952913133602463831698851059598556266445835039363674561701274012167017363825904055449988055678519606988903967580415182626339877700624724471311093486364881415001248271337139615419880940596287705173710534987910042007765327377593821618312773836917297573770845920102032310648380234431643136775836112724418122395944148e-02) },
+ { SC_(2.24955749511718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.13271614293701721566359811181216844599514203933890310472153469801157718942898125040824868865093076523138824085647633489733751440515813372334536113721345367989120827892830875626989392162079427686322414937731343959752581459822783558484176886389947866708191972913902481439656435178795000816666303153729497641630043980861878770826826639629131704289181832948488360798051269765157501482440590629153105228466160831086484632057682895937375064959461519416204280008586813626946447886299889658545193561852005221e+00), SC_(1.24618414855135508767735862376307617769086138922393052111180412177914174153912067255243690888418634491489827308484772844885839836965633854624454396599801250844003229947321063187141240211496575790700669319652484948080298117038544086335592701606904389673878974576502676541776966818151447737115996064285788233106715666059725339111146196422616638378704568975707438135210898185649605602870819709122240260077954056652903506653003017718439923455933787418857732758136503190158208436673133318059105277181156412e-01) },
+ { SC_(2.49122142791748046875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.32118502516972019933515927336103098702121708295751105812488772605156911772365536897112612268098693177769841152502858397420026350114877465933729535497144281541135352932345376700618048099509451546579901663817269885709441847417283354768740949858195062449544534092668839707066796039624277249009376670869597887289998728613927141880549915613031747586675073174707758681855414360545031137199348021318900766417674431763100410455529404359261909164635053011626589643775277596465694320978005200845792741119134923e+00), SC_(2.78529080205747320956767680429427836727030590567393648909624132802498276501643152789574992070355469843620486053404278844738924735963376178005736900575827387449444173046088740850247064273970170875025909159212947254188496477090539228691270466260135938060766950587422809929080227478886503787218528163783429861153888831422036541043806448191088131552215464050108120064521772377215109248113444727286949161594653754349157193957064235785340374457082073732189833403792835120283596916983131946632783704229344885e-01) },
+ { SC_(2.98384761810302734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.97051246451251004874297221651138180345200782932645719112022459091787403373578707385755420465767533219748291242620211816297976513805852385613057268665258624866786329786770605380611756547438670824706673187364215059858745216541250405466404493859927324923837716320256664591098922123313952256060988714854976076730317786737382453301647556986241140930376187251202917157565110807687607281314119017889615728891326998507934487463676042713528408643485678529499707961566325046935529271977875583020481735625488347e+00), SC_(6.78293643191154116848661827621536468687319156088981302335984034354394098918670578514850294622645014725444282962568987918377119334481020922962448682614893199281184250591877900628340274535241952010329002672245246619180248418868815716112830856589649442068135409054374901175591316255625024021080534714749685122924217144697864262275559713954426478414234946523413370091910838172379349297462696560662622315457938241067416843354716162216438293199111251634403925999902117392283474387998693379008921611473955473e-01) },
+ { SC_(3.15761280059814453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.32425050221562870893368319780797394502817705273594528358155653513258895338852991948442481762704658601512028960856664174705178007652730881053103452425905994757107112196568675848578038090243587386920465763852835375409931606980737782869414814138253290988781796906638316383011766510477539256606138027072161714425587703780135013131440824352265816084541543950839110895486794382401092016139119485089882925184402328205831095706309275623235851502520342823708778821762663111690734745040834591026561416904111976e+00), SC_(8.43397622430231011639234819630572061422916186592913090140786438989872494587211928954110495101933895495925703033051008272776118939841084357793355479541145156028164488321529335753503026225753481617089830803055726056893347536445132561599214506486246671154145383768011338983825577386537992051530467922693326426358214921270214143368096532528712261953843791787651479311894578525584043960413997661258765749538291326432123667367635267757124285917821294505087615185252902658005357658301585065221283038946577912e-01) }
+ }};
+//#undef SC_
+
+
diff --git a/libs/multiprecision/test/math/high_prec/gamma_neg.ipp b/libs/multiprecision/test/math/high_prec/gamma_neg.ipp
new file mode 100644
index 0000000000..d3b414e25f
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/gamma_neg.ipp
@@ -0,0 +1,42 @@
+ static const boost::array<boost::array<typename table_type<T>::type, 3>, 37> gamma_neg = {{
+ { SC_(-1.99999923706054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.38759967029644469616560016595808625878165115132471799422204595092834392971724800295938555800538579100535589193822651301525500332693249993444773179507605929981356967101597471714913951503842754010685235605590797063810809157738833492835143542871035345598564520502417261905785944669205716043072390494373490322257034881967960644010974493437512042261352756680026670684484992045553462469360277775982744564680091587106757967345008672070319207656022615608926133979854875552214891487061214012912806431933345947e-14), SC_(-3.05520913463708585014455473559668296916495608452525817143535406097314334283489713736687704477991497991743275712369308074041840740834063476031830765479882984731724892451179592298597321676916458283977757781247413334326383052593649852562076019260959425621178055912343813003433354826966649421695320908213626776555336215272482327946648668250227228003910957432402159538084527454011770143934418513330640797665570919946502860682207966694798401992754387345165102379010439953671041677549784758078058910327404016e+01) },
+ { SC_(-1.99999847412109375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.69386191462138420561447561038626224725117398415048907272463757295904788742894427112020961644079599036497975583044564125160703746233180407160915929733564532906838635276687410781434210968261046929963453818364947812836593421630201317463294954608503146564867836821695405794382366118304227852763276692341615826262038036617817133464411475558985554970017557556048465581312483241407482874644374899521475569917118996299966475968950890235428728201297431223495619259559376314387803604742172470399752300894010086e-14), SC_(-3.12452154818785908505194845842029487392648620731103347207456198557211206269365761877112968634636619292832400844203780475198066901590319174974134489763347121929467737468999532787760555110439805900327811331337512388862249634034030061740800094556846919604832510099987981577497784616554033244322463034054231121064946938163159446958559684540678853656682058592193991149452718861454400627271395975031543423753488544502623725092389101829686729006797143129176563509552320320921307398500613227697762154498835511e+01) },
+ { SC_(-1.99999389648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.73558608044741627613413161420894656660058244124013446415180740530561515977792519827786858298784888263741224694297801215204067458618582387642758104711087267937066115855571693609659647797364715279501851796768712301165273782031584039675949865273825182234792801200308929645339256017900697087444360181691659499183064954028133244891427139092630423281589186925295403769367835997750592932795632852612041064703694287432540499377174363368787259684826128422805916075141721701587432972834880653382078107215883569e-15), SC_(-3.26313715687234132229989418098489729669001773722991796067366352789851953766781785355780461541281354995935763718291948133987534108182481755843147601008349939129025054962326064655846767144347454369030917012611615739585725945726636841524124521503115786360787497866575048827515382394272660988449740261822693490509884264357425735902873622582534393835987530480698916877954377750564674591032227255165999311213894591898118964168841058394282558238633558154941771511534821685892908044060408931199226908086343943e+01) },
+ { SC_(-1.99998855590820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.59289216564568867632702480652600850125829511549703922062266320158421424945544656850160568897182121831684617893475524325850864891292297653913606807975675975259957804287451864251597624292500430910033064835076068306145275196971245113751174694351289752436653598202952240666859873317646170787625375676127677093291213853982061950730506074442529379206213215500763520379868910898060124741913721352876983505985493576120693388339647532467182999015385778276273816304969530871418809352985232191692793886546790925e-15), SC_(-3.32598188995743285208683140963089026685291890297515664542182571526269358171760131460685426882247943951266520599997842598239034632786604956930951026409905645612178203533000816237119225706763979794277386461267856071615237308870990401079821797917297401362178969714385727645391303737983992056296555425202777558250602185647615246086261095852465123851993283123459088339560080939847486920372910054110601643702914129947575674545524987272553810415588957364532956825624756792802124871830851169286718730345076044e+01) },
+ { SC_(-1.99998550415039062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(2.83675532880791262845798274405227695235033818177720368767405099886788298502720505506737073601491437069052878767318115279839599543294975971086469127221299768974331834475248890837021523371368669625126416159480047062370540379650501227130334801934061779388454285066925574880229903013006356948564197074783512804183686582041834740914665869149472027830410017522882553274815242510011488283003509522030509719207159703981174448399923693748764711596103978889294945567655009609890761231551879773894045537823223462e-15), SC_(-3.34961154857329925541635513497050400332662351138593933473844965073376184380974825540094827220199831836256601695304595681236351737563191092937057976123211083578736440989629133694878674815811112503347936133530329173329879480671346713361169216781015612727459739168481942328351139199093627019073630639474288952641525920120137291224330266952104831972482144790213202830122960682344010877454347229224834877045631606844170259520138732358563629137082590241957714093961736983665819824994290029280116463796880875e+01) },
+ { SC_(-1.99996032714843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.03729552375196358164740823460318662026973060198107914419372487099372162041568590539256488351737294708523272012421089326748220291729909853186126389486113602638037464798917737352578675188372501828555604004282598929675982180626022680345741303618408192247021657568663913526028145211755475939928912712220082787359546364322306724776665922707491021987748181730488961439404139976335171257397123062907938178893465064874123590923110807357554574554643393980484325533171785555026546386123991644766170357635345163e-15), SC_(-3.45021595267521522639899367590843824281454294119481346405490171556502599486260615042880032833991036355745335331680454463826120830401167139969159200447111666769627258035766487364251085432525590308678370165837088127339748301089081077402924517920562849507307652504302081878680928064486340213487200592331694635202674901052848664744765324810044662367009830275349486690000382804760826758049268567991748597475549641935103602495852342532731294563801468186295906896930304103397585963644636392968366808491056441e+01) },
+ { SC_(-1.99993667602539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(6.50336577581735374471539264511018136719038458490199957731403809327992936679603463170316969907154025316626545553077722739733428346351928958003365080018329659007527067598438140087551150592925781388041096628034671302288112794755460098741102335498879716538819752808264418019802651491433352739354961564539598747849748848117392060902676118393565211519914525721009406620287609767915697521527717887383428629878372324308027451918296365023086525610451863304311902094773107178133171972202267956223000573838315409e-16), SC_(-3.49690416333571289161141805470911904438937037541235254693432508247352990157294679615675082059562226915476749521015549982260241269072669817183369963155899076472793137757186516087976809566510969597392117692900885107874333937105112403653596700299504956687509734290164995796117059729520144653593975744039317354321263755199656661265000435813191510872148915404528536453962323659146004419193306903056331043177656069646402815420399785981092446542074041177156746147470483132801996220688719111352348233653928675e+01) },
+ { SC_(-1.99989318847656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.86063929638686016500929938628120959904067448411287969196392885063559322770495366475727319122352450102372852768514367925813022215988708482806225319665665321959515984729363297544833258326504479048316249972543983343692720159781733035015676131873586475183939930321798151919207267354975040689004986327902522486381765817411164156193416250909025739418186991916936533719895706334810544577545675978353778516293280116029537817342097826395833368093844428397016931704389447997220570933235918212908707219681481974e-16), SC_(-3.54905286973159947948750002420348464584768884030695883466932404080114006756721010835426851676572950604843679049664249591827700119156571903610687481690319310894243129467281993060943865782714232253365668805576757241352750911798706606877038236096410062796907424004941101804850412041415612888889142024699971409528765711806754586271162013403266475016725698526855443238047897496154800538159403234101936140209280775009365332436270880758824408358848375439036589335337097474868865637374358575703628226606450184e+01) },
+ { SC_(-1.99969787597656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.37296605913515361209346540202645177501313411989850196817831068108372375868698241625156022771492511583367533337112524747137376096188024626936865639985676068925111095711404844373506733964319467852524083811984784373381226532512835075887454516237755489043135364608775170190200412813090698924043357984126479176586376756159697557036152924657642856869840911463747408646106382428964892168730182978444090514519785431129789029809068157041005541390960262548429023375641881292147792481840988867797477893326322641e-16), SC_(-3.65243880816464760868506252402030899768537444817173639067626077224643410635383857951770206143048299455767678092911959462194958237349255784440281069736923951115195900525720970672659685445864634967211738574969728491522452441232876494313586792230920291557195541800208355430057608697033133628867008170699978894609223080268842824992876510398676587888102517619145854012111900360196844437532665850195258458365957831131118671029406298076244722381387187475421481983813869442681219469329754750417755896370948969e+01) },
+ { SC_(-1.99950103759765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.36316098020149180336594485727979876737128531049589362065952907061128596733355987994139338062282819185131032168871304103838446925611937887286709237542280460889870514607319873770051359260602656881815374243469950002986395095763327646299989180128548271795696996616366271013899283537815894308994710220989138890689498075406940349870190603536266322693466386629525658624153938658038587233321888072480206909717393660016512978949214008003450101524012340915085779176171569261451020905517736412363755791242890699e-17), SC_(-3.70201101175872571127612018877735829289966222633530480008790833909574728125746598013668396826018331577307207372571982536533375670475766159667463037138088770336085182557008789072830655187964737898150055547782089485266963996311464860472366058905616323822767606450565779266186426287478141325974133538136797321588449900712817576885367547610257758543776619302254787853687553904258173810544999430721010167498949352803124945816205122693480879826249820387852287044996010468333861760347726199104230160743408478e+01) },
+ { SC_(-1.99907150268554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.55339584071212341970474422785353660335901128887742233122439875862920707194709937014271143578039223357371625602683087493114976678579159611028025254056758984409396564016410385502091566184046478439774591236752200564488173276514562388115552233268886746457616005677169443947968693409313673715975716502229752528058290122345523747766183736578870392873680550485661565438774444289782054502237465714943954936280012187025428899218172715554379144501923864512768311526035511226614602973765215151761547340902268370e-17), SC_(-3.76280732876900368843995872688914724614766154503743721290613036628252140382589938365197204680237191190001881516350171816957619447557143555943272967301450033805129891032664320382026387520989511492279683113722987258147580642668261454744731897953576935131567781599631138897409307262073904306157094335890447418596502741921164480836998465436241085557109219685455546928104579025472976271631871646590293559539692930387307698947995638166323978942065107209641441448364860473477127717748096251490511457991615810e+01) },
+ { SC_(-1.99758300781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(1.83112246049503080122237146768131561239165952861593764069083980656816133071712600960126755835070573344294099663480500749234277531625134201523458774258146034706967637818193536687702316522518109967144083177724938390732877090353677111923631003890839246683408350813534760772908633353691555931803914631321008476959514080214886540068969482875815279211161969636081606072812897989696761978145941506005215530706064321986891160384968334289256503133484325711859503334368481471089648442036399714132070514073271488e-17), SC_(-3.85390174356869999540631662416944424563343017686448585510542768258924935140650334849245812809797936619220558584447129061161041883006839073990822052685785409771053711522282916161209407932769517709141272339612700282656114462228083301569573087217876966524822852660405655108177399957462906307133994832931312250720150198781043931995519887737824647670514087352012661228211226654083530423287061165013493196255071502175665757791125308633317577890200630453290697760723342257941341060738612939219142306627366078e+01) },
+ { SC_(-1.99377288818359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(8.01693535144367134273026553716785218082557806877438069452199116781270088995242302917025486913792901625954351735018669523044519100879209643963924846343671760259128187972279606679894790449933954614431176061448363551333157736564270069025829703781191430082548068512059881337098970687760711178849491103179947661198372103494820622922005592888312013696994032759249871346260932504701246018860440581729582268067100718234234048848838644129619402845961461869654578671179269984398862736189203756380345464201767839e-18), SC_(-3.93649754507982034381210646062863889826566407396586975519455023065492015354853815571908666749309967422373602978936644556653681367138699578243570034459145777728357737438098138773965351146277352775387753534175672639907881178942069832564535372795578198481177342329606823641171271987457158600793352179440621485289920354571261729043734932851097530391769255629080894457549056652983860155757537030310811891415672594623748985942179579702560080484257706177836201715188778902120252813872548170570887000653852548e+01) },
+ { SC_(-1.98776550292968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.98159560642572769471679705760108836819553955845800653128274010665601005987113492561900144703140593263012810898767831966112217178821909223692669428149071863352847858293401245228236222196431038944392838651399436151035061048674526100274807374332221465652597940640163828271896168262085854120463603484811367456030167748780453221643535013315782836700239386693513547142120678068170315881364584464800999707226761493522115272499655210215888713274077764088440307774404249258692132112421830220308351144796995272e-18), SC_(-3.98407814312775750632655948505759119176224779884004606328890064673378552554757525193686835579511255181447342618200748378512699382992907049291693727164093761074261774488881410349964002706401261019405532796610313343889643193242858329740583589555489079186864603705090245097892687910273553815861117241007098888369393865117288758351588015571301443677764852078943272158047284630193828321764955315198313162218460948366246394905166119336122793138255072000587630491211601554256892640021898219920359539490157396e+01) },
+ { SC_(-1.97504425048828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(3.88017517014452933045956819481950900807442551001110048857097121388844647225043963352097526055371187772211576037491223350763235789821957483113201097090187557142479511185822625644332601233189362904562543687030267056348820314236473401764915276126764508190793356448802422301055179132213830892895126747969022229207179654266700452361663827823698960959744143211716265805526259617770857043895851450506769945022455533546585246809998963177901672080828114457141550881049970982949788268111495485160913989116636720e-18), SC_(-4.00906513743322665419511458996323201349225723259180576722869519970546509690314650847321858066902702770000558036920171548448588183887422509784019051198560190291912395148953616433361398321514302827291262158546114298443380391432156907120792226017162472101359939072979047805376875854177883215361737326229238270663527682112094510414417814556366321261289112288963812063166466882072152697607360930495102462227364399384308239732395749233273524462963918739611835992415189220703065178811224998580501294593845387e+01) },
+ { SC_(-1.95087814331054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(5.66230758491304665147102795245257419168217425592069799711487549608018624231364246953680468305752531986636297376301769325469502322471851593437159783231444403919853087066138399456497488977163427187775150730353446247259557640310543636216009045448281263625535378734382579698241218759759321642473879630568556532741823005839076245488105531230805809097403229237856626425257554186031699591598706644445689476274304227074824189207132578864764869307517588437106652581485851204451182521307598680869063344876248827e-18), SC_(-3.97127001642503306431018368868510822813077871040576980406279757790165788671386554429152492910562270875591570029751557166531867479172532187313780163974363901193188247687564696358109292582669997918861573399693339019987764495770565847958538474202672366615977739249614693866637380917451450693278590366704600806358477108821780498846825219688755857579333418703501660820620185048127256366395207162761266299559089783037567994540506596565789573094137658844891091983842233401459345063120752104143501754444023158e+01) },
+ { SC_(-1.90161590576171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+01), SC_(4.85094648700543313219398847352478326318965185964013459447512351308953428156330384712645652203197410950029142959888065828019087576686061648451263295485805361576784764261272652852562003088603485865016423910075013225407371024651921073341767205327719612880437487232429260544546978675694647337189003765337117000483128461838798268376650578166160655894616540371072755498153305326101649796044091099125863886705708174964952292493207651779512080603498273845117371411314850322040626713326460161210144724561957487e-16), SC_(-3.52621876500351226734458234233118143948269880088724578239971352285058450102495101628806600063576867220760570143096935930387888839883871325947380486391444764415658337923993597824917478464190608223034931307344415287605970181326241463624079727938746083914284903273883746077127195587651357194104990693139512263661207224321519387943330426769205283325696095926588091655231810133980594401096500720257700076361998811811146688344672735928725322254167146864192016693678802172165337148496655031068154755053397560e+01) },
+ { SC_(-1.99999856948852539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(3.49525794726840724332770531742533210760949030939150064838849016603929268240158079420646351018919870494992130816864538525681906800880110432809969608373357971562835031734463223617852856504288206717678633312929264358647621602816062958926953223434105587532619209946310434142604470287978627247076447003701407698280595109919257213101058520954002976857547124960200649769434010243812418865367203197435757976365462214320598427713582886554278342144196536549039933080774089051881208606675782058795172014506845303e+05), SC_(1.27643326425873384881093285872508179452498455083997386123791846098069683786954557724381755242107237737456425334403752138877081887262366450587882895441315426542862717610214957783062806011631463216155577579618174650591505415429230334239897241979183736600447839459322334682781809803931591656670137078437915218993972869573877667878499135915127684776967501369254905929674054441263057139938370034060614992097975121503535832913846498802397038787145978975145932851219785278838191467481268690078676805417976721e+01) },
+ { SC_(-1.99999809265136718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.62144461393954005576677083959081224922682116942680784382663786554477354091505652256089930582387034905082987123783686147384272776233357697778646519293202177088216260442953567427598742176128969392234701519966700913406593927278601397437655998843292257685500339055591109815077998948276221540695712670281137196054397511966305435012680590384519239723484669607888029902896624532963675465522555566371306498097745971066287647001776895938202191310694024225146378391339368362904975412072348405920930457524036247e+05), SC_(1.24766510101557213545766721136410453138493641946701292802442833827425797129904704540382723544412893379170946550873814658598452156889382215401141401793226256683432769439816435341614070628592950211106046360463620980685141352456520751056501335577860424890706166122786273183690252206928481409437290040107105400612762800109051739183939915165333256045614229952868762702587943061762211192907487015355715364832639902186783136127312606318416615322477883301125855361137217733810005631030743897129203961853211027e+01) },
+ { SC_(-1.99999284744262695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(6.99055280655334542175930436122069761290133983548532006796388549146348861014908087320598296301346411160370998401799938159888581866029751709088497185296824652466348119973211092989927709171600849203078010491110192497753213703526766239773066725748253740735453992439234492136465118555665575916337934823367953504368600730298086700097339519387123179747593007744532120692065230765100349251170948099553510882642363863764989129016733554206631919332143211983726526321979280034119468474152360465290561460889421071e+04), SC_(1.11549000104386469310318581217378978404108798637142623264790614654551465860165613766525338763896231086889849040052677873804922746038702465326123925324974167767546597691474395687144765863502639894309407960627926456751853434942337376342500635127429736502870706249417725219963966572260543383329779151091348926626121712222870254056682569389363695658167304526644142491795103808689641219761812209725779841832246666770063334779395069189440602891823050244930124977284293529931332541390700588598213343893338842e+01) },
+ { SC_(-1.99998617172241210937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(3.61582545085677523556564265061789275558420085423109560412225366655176897025562182547560897903508146991920512133842894068247188574004266983236166092320549776589666149301791876532193556310533756455744076037828943414924970515395338284159141116848403267093343282623079098773385537741681300833604756206687517267176183543188779918320955585390478066609031999902486182302841138297064961474034093076746888050514577947727440163188133886399891285573031624715880708476160240564600719219019397480953999125929120509e+04), SC_(1.04956605420071580634032606781744741643474075940276116906157128451763874787833226406335746586932167180819392693617547623661699198379679879472241104399115810710557215037397886139363442663864810170688720344252581932587162490590864881208800226527734817497087958248051970771681187067072798822926758914302554781620566550310313780069405270970525254314192982629980655282219306257104525199495277176758155346742765033720532454849549319731995469240561404515682193542797042174160374339788351958917688789360771947e+01) },
+ { SC_(-1.99998283386230468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.91275725193569561590016689655794168420228620966571368298273980157450738791800185120799393755360245105069027560472999937324445108650485939272745440145190606819951995859593113790682980972371233653642538147083802660603411711601177697879434359991996803571036009274557243778779042479466989793965641132673409423494548458675468354610730403558385953326702507473607969684599828544980277541551562751143225934516347787042819331835666113193607653180381361180597983599271660349253323506245247421653025229085236314e+04), SC_(1.02794405138122896402314881940604738282900129600289077017952090146533317079696982995762083502539714627487177044864707417428225158512882028105664966645423607544687065459887843793363464574058076111354667801476050818320352369918049033162304956069323775352811046342871920615690769829844887402721730480175673536482624050186765972164860620055019128295545319689415291206842391403816794856743485445184092820235173998625164635470678238711809067512302214434889317749801451335300035481668507468143889828201299775e+01) },
+ { SC_(-1.99993991851806640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.32249319447518855598944610753617854039292256296476311990145714296558036998458656918821506365009251364959904572811137153770442631195626341569236149478584546737152245266768341432912467447854655346609375771648779530400158279627455200777370366845760135645185689952161850401675559394594343764985201521321411485981589624799291023082308588711466604815036184548423850387050145798777986608977987885716993412252737556898589674064937119199668191811649392150573408930676461291127997714867381873466120503286044037e+03), SC_(9.02671715172282446918804818996023162518571481778646046484772732956317384828370353304559181558297863222891421673682259823646868763561090354017312583652702865410886724466141311870458212107420735691179628014825875988413082971512446430075718596153929353099382259317366492027748573322899645753821024940590770562279794986846425203365367429895656694890464472785718353612966631247824841684093739368884029310135508998603813321714361278534324740132357271577747825991014287136486456695451934992266661402277777663e+00) },
+ { SC_(-1.99988317489624023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(4.28036354241400130058705381882725999046241639116013619551075255606826877452636644604651341982568405913848090528825454016811852979966987414441609765953883845437810285948143114055346163368138808620153511140821913074294970274338981459461780195745846293255296962943905772921194262962996046024179304101202489373713805917724003109833450915814218273799360011692079574105261349340456724888786747274634828459793848677285899074058389948313476620716037763888535835434918698233782953812196563303570201525502018082e+03), SC_(8.36179322478501597977292274589283139518886305065425844964868164614874617907207649168636165810357009938065944927926474292133794500748914040902098872429767836976820558374914415660195744428422875053172805157494295734822572067475458679220611073040292089429138135583549225532487580813118021701211972393905414957119675165616825504727370662519623020660471291479495592691629449894598588052845768596631451491242905371300688736178966934044620811224456695685298401168269691120168797520928268746534849598073563811e+00) },
+ { SC_(-1.99985122680664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(3.36128204434740291283107770354586378346283439595679593594949210524489234356178902618762378562267535666175904129785120747651662911412143665104975016955458793784393118196269263025523335076889406349897444787005159277370437761470788599663401819981999218853086656741435415793526095051182679856992784435195588655487630156922150016378044927741531191682364126255096178922384753868717405690697258379485738398999670904341069842876887589302579704145040802034099243873580319117957884661068510923385025291814370594e+03), SC_(8.12007774099911224077674031582939293407072268410283120160248139177467352236787950741709327449661204101627452104848400096463204118967596688892445723941631704314577678297562783209606807172475052038356749473705814057932311825150329963969840788980156891988724759699083494912402524105501158989635979848925608920814051135828808581751025198832642962437007614912625066655215144555621135720046502168379860877317008493966281141249674566270190908231807924116067930262174250983880414789548679270954647569186496750e+00) },
+ { SC_(-1.99960184097290039062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.25624140592261575267278271940484289518480075580483297157581531914241110338376984136137853209559376401394082718883689331623249516193255900664815163812238640876028719844395892650957249605235281921292365169610839189461985220288383617439943753120747512365782707225814583627987391209031475228703173867481353781649110067039019107568342750599488417067674630339554122732514191362032832650736326962969325600194583793133488118555116227453949453195477751278597776714609414190745942394922450934781953398450326125e+03), SC_(7.13587953072736147036355816528887639826802159553598947589664831543550103506708350908036736344560077734555208589346657689427289222767237531129789832460866479029748071799264780934688947071994838969349226996016594353993409065278399027492505780692124331908601902223025677408337501345388598227277841303952412480274312085114055529429662028907729170169955023222056216936933071019581969634258689455594667577889504726170140818995305538107515921870405332546135662650561723462419727826606351956874268372077877037e+00) },
+ { SC_(-1.99936151504516601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(7.83565799289483280163155191361710148301806473769761421399736971707242043580137349085685963832290398889029922835758280315794977396758526824072817586429369366819702994429539223254414178932724794214207553405219491444239189835949198854269913836625506190203997818880282941522759814620371563416612371995530706016140699823029408579568047443293909880799984307203726160291494410696322200124464725600048565966565754337103788411893096012339982460843838115831744031219115508893136183317751243764313795428254149897e+02), SC_(6.66385503949446161490964353057404700759932498170314993855319685951519772420415762755612421329517512507401754140021735737698406265001504947108209652508027151273513300798240944398325824766620559433751144975606238110713670040924420573411292751049952618117581043972629261655204241979398389497786642517477127879747879911916212390205737871315629451177077435383637605445069483064166519416309498119797004666497875239844370204211268529236996878715800888282012049095445736065307218750923128759227529173184642168e+00) },
+ { SC_(-1.99892854690551757812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(4.67118382295204743401937254501573767480943199671434360254938823190850915833403801934586371844867967744091651336925376675907730238237282784349607890778234013193475547292318213052077228166933141756756427422908924797442949317616023112830726410939123632261991571101547351409931185486745127483145748880375700113736466217793925966792127947533799373560028173512435035840471258751889735357702600083584858668192495922189397869660685532274994141154462611707405745124099969669821149028958221777027109971294922745e+02), SC_(6.14658272082320896011483535569679739810604213770036400800091715689086571577772544734146180493197362913239895242960038327988879986011628251613934969785754160387923144866290327766088039955675828649148829131779854684483641828507579815539643578858903851037091320577884007201080127451064224748179877998328836094513147205379315186158274591836586471728654183660074243464409077906266941964012223839770573446137342312495426534839819825875176576557071861399281398737582929236303062411601392244029488439456818833e+00) },
+ { SC_(-1.99697828292846679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.65933062799030026499031857286439573057825979180067481887402769956172122065685585045807000188347841407446707061639560625027426711596987076073907063407152889853367716469339236825757603750989741418798526629185714446971058613215430702718134769670033959677353759278619689100985901866594875380700877023837639752859867845590036857634241490796985154991724793857881301211565140606814321931538215083761281490341050122521686748462324199594599613474854498378317283969209955088313651411879706436345504630018044507e+02), SC_(5.11158447088456327285300991228539833660960693481988131847235078680072149045886373239208411487942182624090802533750571463998951400823698957276812111506615598974444394407002484070136921088302169422280429906757027574361223644628984594464458979582031307353205737054490228551750014379346366992651980878945818669148232194215084018810484639556344683423385036117630305071212095451395510462976995162898640449446072737496747538413155936339856232998187919840618112609672401660774998188565640799563785241420846260e+00) },
+ { SC_(-1.99500608444213867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00587924761262775169663795112260658037813947243467846497585581476114421955317726749299731893226976937786324525582979731451343618075158212147675841143631582133466673077443893912530929063915059519648906249109279163465361129828794671469604941649949503326733151583929465567177496741612440164389015649600945687108836677050341799638872055874936125676513217903248696451648905457756723999758260862431168673835335778352509374833228745218167089341287526408377545911888789543737719512886725946916517409332708090e+02), SC_(4.61103221826699148685639421692714907149023874354715583149540785712901180479986015308857435216493645251391475968763231392296253595822154704197625561993779495939587815270692703284985173572898009432860996066960256782260922905962033845140459253829997088395227562256155357408928027795042056851131597625916921613972564329947415717361332777224365352001281348486892227555044666198023818913069027420599174805373709297093151673659228558391608953421210854147088652563286506485526491116085429363408683935355806458e+00) },
+ { SC_(-1.99071598052978515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(5.43261342855207683321471367667634298993130164657395652940698347263805738244409299534274904253386808889723658245910828689572671872488701248351438198079823607168177338643148221671730425380866440723755055782205029208883973464213226966927488613575887327563514670858991324649773947981306614998043425095910306427769091089568418431383074642514512607267342885724246706884212512928162866598488111182269355360471107723126753986315318461572934230251910391906053447975979536562592026495313363254270083774897227910e+01), SC_(3.99500540554754084783116320755550040070795432896218051460244050016027307080516706025452328930707372122940539374531280006067457432152053795595498975958414099013978454227666236747637245745994127339007567514632056680017225765921602312064993984668132176623992913227625767485150934657465772535770444759472966423694768064411036564532278372406920442580119572879366391149796455805306682150702485604169317571816315397840571826029052197640137590412415034348881647261441103457141167021267904530044433362633611162e+00) },
+ { SC_(-1.97583007812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.11713355568508717186749430619455765829944389572953926593387890142986425079118903228956466586034785656323975993009534744183681179572261067731704233666473752088214892713750726737578557299700556027748703489229191099881534356383060180175679305951211955138626254129859879913269047628471637484062282241878647186202424197930824531409890981709923645213793111935481046064792058678430210190296837963826587771101718103456760424093803975964255040042094700470767798212710711395227541566115973718114167151353452363e+01), SC_(3.05264817039591626862655099057939465179986667409005989715731859835690744704141548649122835851318344963701626601849114047531501048253619307346542776757184996977322377721381903566522822193104272396856042012430952816660726199339620731273536703263596123187839602228525400866664014760527003573811641632152035485360466326099946891663139486579902585522603531845013464113857010883947455000566195208734139820203755841940384563874720751791136755270346532812155352274399187564800218881502549907841988304120114349e+00) },
+ { SC_(-1.93772268295288085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.55140154989742563031795592761223740222933037369091117707548701719417324436043594149148839366125866753441846926747757961691743831816447266296249525417689639205635396869873026915817137619485725479365301425493165818599553310689074177762635654066147134250624424695555873412452228602918989020578249224991765324833399206904878229623160267226643725994540540538379700800744103037352863243040436490709462020440501244109441318942868408148457761252155085028567393589233216009163593304138395619387918531501329911e+00), SC_(2.14609519347921503734928390248919269700812373570607862587046702400866080506820226775324131591047922770564148385412775051426850391054709262710094222461322018730704436853657999982086234982157335335068267734765087205570600956372991002414990208544840151216306267557887490905482009859533035497930769422922408290206507773022866238259045914192630771754449840812003788665755318698278462898424482576176640522119386371054173657148616621611488616395440426423349037282231697273048104290956235560812518904511850199e+00) },
+ { SC_(-1.87765598297119140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(4.67583771863249529055109655612510730374992827217946078088186977344497390855781646691754105222138655257893095020731116355227986362966515780707698772485437094967536468214023834308178727836619801089569663047174119105167664428805441275112046007267349102582601522528843355129981789218535438305077043911372259440397637216382121093112527069891468207241109974792875017384778909045872929763491293848256218126413836287410323590383274638262206213949333260073094188650218883981854689988805258114662583813833446691e+00), SC_(1.54240833783916950711674299830094269420860989032914842380787685725906602802135415488922671751862561471742098321629469719633973418191421678612807986946832211852615654801599794257019902991588352013561017386475372562025192264722784055215705770996735617454145764311884033826035333514369114597097399498198288990985692089872458755227609611715846210608700162484829844243005353297597437263446897165946773288544966416662536713250022257470084584378142797370192831228494237130188132449079088561127554388813866227e+00) },
+ { SC_(-1.75044250488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.76521531383342777536096826241083426988946791885237328153143902257712477146935957758546160579910756476446412711524400835410428680030114368815367047441732692355740342646344258723284625720868992172797296604448481954562244959416221336611138303608751397924213759395368298472950576084573813186054133277598316804445815058268350200019426078774535372726241320430678110500166163408536083013133803069777977592233712273587393272238129354441223170323562228826009632634564393605136023563596897017566916161568373558e+00), SC_(1.01711850312999107612643679883702069406371231132721256058245671646048087783154950748443714431866884713764648019078645174991892339907448517840206497874509210723364252694864538940590777681188468426542254545822716725767597072139557232884783690928384523253232018333698447015173227162147433007643510931963840890536915692608769823429517486692530853117073535699778387722764300165446366925590821938117578815481931433033378039640398390812437572623525032416583644099198377439870409387433496490925947152048515148e+00) },
+ { SC_(-1.50877809524536132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(2.34957878792805622220208627908796604209022753669777984013397021521718672847364045384997126602247009262704209508441637059874646258845906595804811471172246490386367479387582395386750422304786391974080908751447734295954413870878215699818713260911166524456609372522274214548306662348939976667197188998712694834713732786481840430018084860503372392470155335279086088777016531440557532208724574181694106222640898095734633283023280509442132397047312680409203121903723018562056868440028789425492262012646158458e+00), SC_(8.54236072911255595134717828491113927004144370403410251865930440928741075566141261658507132665592617412770458712290479329578412453713534343230061302053867333849975384386984877754318709543893927568366266399879554366360287159464342728205089795418872839137202008820491949662117655143235966641935511312425859340479786978199551078742416307594623543083605438644209653394275575880139888266125377643794668219915008503333812637400462494313054948847229967539105158899413449126349909264243755409897303557758406009e-01) },
+ { SC_(-1.01615285873413085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(6.15084416829118046468452991400544498224185271615854347433260694549800043224355246574675466376373859960529333306270890955207636581369067853640476864447701152058770453365710243687329890852220965032159894431838134171173269029343559984826337258962443251204686313483188492817659715061679938111171826115917411885607899751127343441029695150225474485591386587193176839356863531438827218409852706526496642971237672335817246193209499962435510622872455796720812217398126074771344905297363577965377107684959317397e+01), SC_(4.11917442852952711543741507530337656290736016465506639741742101611014731373074855727222493539896474697110498858504643770565949929474195415135105179617700802945752394424643368615173443852328593935472829240359653696116395379824510508393155403134258111311673599669939241747207061523079182632547737365431783702760141194142731371171480274286029170854076168498596924110170468837240766315428782766656743993971526078852137464960957958084824518999844115962290565276220206898969535823972967013864671556923956906e+00) }
+ }};
+//#undef SC_
+
+
diff --git a/libs/multiprecision/test/math/high_prec/readme.txt b/libs/multiprecision/test/math/high_prec/readme.txt
new file mode 100644
index 0000000000..e52652f18d
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/readme.txt
@@ -0,0 +1,3 @@
+These tests are designed to test Boost.Math's code at really rather high precision
+- 500 decimal digits or so. As such they use their own test data, and take rather
+a long time to run.
diff --git a/libs/multiprecision/test/math/high_prec/test_gamma.cpp b/libs/multiprecision/test/math/high_prec/test_gamma.cpp
new file mode 100644
index 0000000000..fd04bfcc41
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/test_gamma.cpp
@@ -0,0 +1,81 @@
+// (C) Copyright John Maddock 2006.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include "test_gamma.hpp"
+#ifdef TEST_MPFR
+#include <boost/multiprecision/mpfr.hpp>
+#else
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#endif
+
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ const char* largest_type;
+#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+ if(boost::math::policies::digits<double, boost::math::policies::policy<> >() == boost::math::policies::digits<long double, boost::math::policies::policy<> >())
+ {
+ largest_type = "(long\\s+)?double";
+ }
+ else
+ {
+ largest_type = "long double";
+ }
+#else
+ largest_type = "(long\\s+)?double";
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*near 1.*", // test data group
+ ".*lgamma.*", 100000000000LL, 100000000000LL); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*near 0.*", // test data group
+ ".*lgamma.*", 300000, 100000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 100000, 50000); // test function
+
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ expected_results();
+ BOOST_MATH_CONTROL_FP;
+
+#ifdef TEST_MPFR
+ typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<450> > mp_type;
+ const char* name = "number<mpfr_float_backend<450> >";
+#else
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_bin_float<450> > mp_type;
+ const char* name = "number<cpp_bin_float<450> >";
+#endif
+
+ test_gamma(mp_type(0), name);
+}
+
+
+
+
diff --git a/libs/multiprecision/test/math/high_prec/test_gamma.hpp b/libs/multiprecision/test/math/high_prec/test_gamma.hpp
new file mode 100644
index 0000000000..fa5c9e548d
--- /dev/null
+++ b/libs/multiprecision/test/math/high_prec/test_gamma.hpp
@@ -0,0 +1,92 @@
+// Copyright John Maddock 2006.
+// Copyright Paul A. Bristow 2007, 2009
+// 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)
+
+#define BOOST_MATH_OVERFLOW_ERROR_POLICY ignore_error
+
+#include <boost/math/special_functions/gamma.hpp>
+#define BOOST_TEST_MAIN
+#include <boost/test/unit_test.hpp>
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/math/tools/stats.hpp>
+#include <boost/math/tools/test.hpp>
+#include <boost/math/constants/constants.hpp>
+#include <boost/type_traits/is_floating_point.hpp>
+#include <boost/array.hpp>
+#include "libs/math/test/functor.hpp"
+
+#include "libs/math/test/handle_test_result.hpp"
+#include "../table_type.hpp"
+
+#ifndef SC_
+#define SC_(x) static_cast<typename table_type<T>::type>(BOOST_JOIN(x, L))
+#endif
+
+template <class Real, class T>
+void do_test_gamma(const T& data, const char* type_name, const char* test_name)
+{
+ typedef typename T::value_type row_type;
+ typedef Real value_type;
+
+ typedef value_type (*pg)(value_type);
+#if defined(BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS)
+ pg funcp = boost::math::tgamma<value_type>;
+#else
+ pg funcp = boost::math::tgamma;
+#endif
+
+ boost::math::tools::test_result<value_type> result;
+
+ std::cout << "Testing " << test_name << " with type " << type_name
+ << "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
+
+ //
+ // test tgamma against data:
+ //
+ result = boost::math::tools::test_hetero<Real>(
+ data,
+ bind_func<Real>(funcp, 0),
+ extract_result<Real>(1));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::tgamma", test_name);
+
+ //
+ // test lgamma against data:
+ //
+#if defined(BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS)
+ funcp = boost::math::lgamma<value_type>;
+#else
+ funcp = boost::math::lgamma;
+#endif
+ result = boost::math::tools::test_hetero<Real>(
+ data,
+ bind_func<Real>(funcp, 0),
+ extract_result<Real>(2));
+ handle_test_result(result, data[result.worst()], result.worst(), type_name, "boost::math::lgamma", test_name);
+
+ std::cout << std::endl;
+}
+
+template <class T>
+void test_gamma(T, const char* name)
+{
+# include "gamma.ipp"
+
+ do_test_gamma<T>(gamma, name, "random values");
+
+# include "gamma_1_2.ipp"
+
+ do_test_gamma<T>(gamma_1_2, name, "Values near 1 and 2");
+
+# include "gamma_0.ipp"
+
+ do_test_gamma<T>(gamma_0, name, "Values near 0");
+
+# include "gamma_neg.ipp"
+
+ do_test_gamma<T>(gamma_neg, name, "Negative arguments");
+
+}
+
+
diff --git a/libs/multiprecision/test/math/instances/Jamfile.v2 b/libs/multiprecision/test/math/instances/Jamfile.v2
new file mode 100644
index 0000000000..9e6aa4729e
--- /dev/null
+++ b/libs/multiprecision/test/math/instances/Jamfile.v2
@@ -0,0 +1,81 @@
+# copyright John Maddock 2013
+# 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.
+
+import modules ;
+import path ;
+
+local ntl-path = [ modules.peek : NTL_PATH ] ;
+local gmp_path = [ modules.peek : GMP_PATH ] ;
+local mpfr_path = [ modules.peek : MPFR_PATH ] ;
+local mpfi_path = [ modules.peek : MPFI_PATH ] ;
+local tommath_path = [ modules.peek : TOMMATH_PATH ] ;
+
+project : requirements
+ <include>$(gmp_path)
+ <include>$(gmp_path)/mpfr
+ <include>$(gmp_path)/gmpfrxx
+ <include>$(mpfr_path)
+ <include>$(mpfi_path)
+ <include>$(mpfi_path)/src
+ <include>$(tommath_path)
+ <include>../../..
+ # We set these to make it easier to set up and test GMP and MPFR under Win32:
+ #<toolset>msvc:<runtime-link>static
+ #<toolset>msvc:<link>static
+ #<toolset>msvc:<warnings>all
+ #<toolset>intel-win:<runtime-link>static
+ #<toolset>intel-win:<link>static
+ # Speed up compiles:
+ #<toolset>msvc:<debug-symbols>off
+ #<toolset>intel:<debug-symbols>off
+ <toolset>gcc:<cxxflags>-Wall
+ <toolset>gcc:<cxxflags>-Wextra
+ <toolset>intel:<define>SLOW_COMPILER
+ ;
+
+lib gmp : : <search>$(gmp_path) ;
+lib mpfr : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug ;
+lib mpfi : : <search>$(gmp_path) <search>$(mpfr_path) <search>$(mpfr_path)/build.vc10/lib/Win32/Debug <search>$(mpfi_path) <search>$(mpfi_path)/src ;
+lib quadmath ;
+
+rule generate_objs ( suffix : variant_count : build_opts * )
+{
+ local result ;
+ switch $(variant_count)
+ {
+ case "1" : variant_list = 1 ;
+ case "2" : variant_list = 1 2 ;
+ case "3" : variant_list = 1 2 3 ;
+ case "4" : variant_list = 1 2 3 4 ;
+ case "5" : variant_list = 1 2 3 4 5 ;
+ case "6" : variant_list = 1 2 3 4 5 6 ;
+ }
+
+ for group_id in 1 2 3 4 5 6 7 8 9 10
+ {
+ for variant_id in $(variant_list)
+ {
+ name = "test_instances$(suffix)_$(group_id)_$(variant_id)" ;
+ obj $(name) : instances.cpp : release <define>BOOST_MATH_TEST_TYPE=test_type_$(variant_id) <define>TEST_GROUP_$(group_id) $(build_opts) ;
+ result += $(name) ;
+ }
+ }
+ return $(result) ;
+}
+
+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 ;
+
diff --git a/libs/multiprecision/test/math/instances/instances.cpp b/libs/multiprecision/test/math/instances/instances.cpp
new file mode 100644
index 0000000000..7b4b845fae
--- /dev/null
+++ b/libs/multiprecision/test/math/instances/instances.cpp
@@ -0,0 +1,14 @@
+// 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)
+
+#define BOOST_MATH_OVERFLOW_ERROR_POLICY ignore_error
+#include <boost/math/special_functions.hpp>
+
+#include "../setup.hpp"
+
+//#define BOOST_MATH_TEST_TYPE double
+//#define TEST_GROUP_1
+#include "../../../../math/test/test_instances/test_instances.hpp"
+
diff --git a/libs/multiprecision/test/math/log1p_expm1_test.cpp b/libs/multiprecision/test/math/log1p_expm1_test.cpp
new file mode 100644
index 0000000000..29767e13a0
--- /dev/null
+++ b/libs/multiprecision/test/math/log1p_expm1_test.cpp
@@ -0,0 +1,101 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+//#include <boost/math/special_functions/log1p.hpp>
+//#include <boost/math/special_functions/expm1.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
+
+#include "table_type.hpp"
+
+#include "libs/math/test/log1p_expm1_test.hpp"
+
+//
+// DESCRIPTION:
+// ~~~~~~~~~~~~
+//
+// This file tests the functions log1p and expm1. The accuracy tests
+// use values generated with NTL::RR at 1000-bit precision
+// and our generic versions of these functions.
+//
+// Note that when this file is first run on a new platform many of
+// these tests will fail: the default accuracy is 1 epsilon which
+// is too tight for most platforms. In this situation you will
+// need to cast a human eye over the error rates reported and make
+// a judgement as to whether they are acceptable. Either way please
+// report the results to the Boost mailing list. Acceptable rates of
+// error are marked up below as a series of regular expressions that
+// identify the compiler/stdlib/platform/data-type/test-data/test-function
+// along with the maximum expected peek and RMS mean errors for that
+// test.
+//
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+
+ //
+ // Catch all cases come last:
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 500, // Max Peek error
+ 100); // Max mean error
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 500, // Max Peek error
+ 100); // Max mean error
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 8, // Max Peek error
+ 5); // Max mean error
+
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/powm1_sqrtp1m1_test.cpp b/libs/multiprecision/test/math/powm1_sqrtp1m1_test.cpp
new file mode 100644
index 0000000000..d0c6b54236
--- /dev/null
+++ b/libs/multiprecision/test/math/powm1_sqrtp1m1_test.cpp
@@ -0,0 +1,97 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+
+#include <boost/test/floating_point_comparison.hpp>
+#include <boost/math/special_functions/math_fwd.hpp>
+
+#include "table_type.hpp"
+
+#include "libs/math/test/powm1_sqrtp1m1_test.hpp"
+
+//
+// DESCRIPTION:
+// ~~~~~~~~~~~~
+//
+// This file tests the functions log1p and expm1. The accuracy tests
+// use values generated with NTL::RR at 1000-bit precision
+// and our generic versions of these functions.
+//
+// Note that when this file is first run on a new platform many of
+// these tests will fail: the default accuracy is 1 epsilon which
+// is too tight for most platforms. In this situation you will
+// need to cast a human eye over the error rates reported and make
+// a judgement as to whether they are acceptable. Either way please
+// report the results to the Boost mailing list. Acceptable rates of
+// error are marked up below as a series of regular expressions that
+// identify the compiler/stdlib/platform/data-type/test-data/test-function
+// along with the maximum expected peek and RMS mean errors for that
+// test.
+//
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+
+ //
+ // Catch all cases come last:
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 300, // Max Peek error
+ 50); // Max mean error
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 15, // Max Peek error
+ 5); // Max mean error
+
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_powm1_sqrtp1m1(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // We test two different precisions:
+ // 18 decimal digits triggers Boost.Math's 64-bit long double support.
+ // 30 decimal digits triggers Boost.Math's 128-bit long double support.
+ // 35 decimal digits triggers true arbitrary precision support.
+ //
+ ALL_SMALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/readme.txt b/libs/multiprecision/test/math/readme.txt
new file mode 100644
index 0000000000..c0a6d92144
--- /dev/null
+++ b/libs/multiprecision/test/math/readme.txt
@@ -0,0 +1,7 @@
+These tests verify that the multiprecision types can interoperate with Boost.Math.
+
+We use Boost.Math's own test data for these and test at various precisions which trigger
+different code inside the Math lib. We don't test at very high precision here as
+Boost.Math's test data doesn't go much beyond 35 digits (for good reason, some compilers
+choke when attempting to parse higher precision numbers as double's).
+
diff --git a/libs/multiprecision/test/math/setup.hpp b/libs/multiprecision/test/math/setup.hpp
new file mode 100644
index 0000000000..ea019f3125
--- /dev/null
+++ b/libs/multiprecision/test/math/setup.hpp
@@ -0,0 +1,143 @@
+// 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_MATH_SETUP_HPP
+#define BOOST_MP_MATH_SETUP_HPP
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#define BOOST_MATH_OVERFLOW_ERROR_POLICY ignore_error
+#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_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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+
+#define MPF_TESTS test(number<gmp_float<18> >(), "number<gmp_float<18> >");\
+ test(number<gmp_float<30> >(), "number<gmp_float<30> >");\
+ test(number<gmp_float<35> >(), "number<gmp_float<35> >");\
+ /* there should be at least one test with expression templates off: */ \
+ test(number<gmp_float<35>, et_off>(), "number<gmp_float<35>, et_off>");
+#define MPF_SMALL_TESTS /*test(number<gmp_float<18> >(), "number<gmp_float<18> >");*/\
+ test(number<gmp_float<30> >(), "number<gmp_float<30> >");\
+ test(number<gmp_float<35> >(), "number<gmp_float<35> >");\
+ /* there should be at least one test with expression templates off: */ \
+ test(number<gmp_float<35>, et_off>(), "number<gmp_float<35>, et_off>");
+
+typedef boost::multiprecision::number<boost::multiprecision::gmp_float<18> > test_type_1;
+typedef boost::multiprecision::number<boost::multiprecision::gmp_float<30> > test_type_2;
+typedef boost::multiprecision::number<boost::multiprecision::gmp_float<35> > test_type_3;
+typedef boost::multiprecision::number<boost::multiprecision::gmp_float<35>, boost::multiprecision::et_off> test_type_4;
+
+#else
+
+#define MPF_TESTS
+#define MPF_SMALL_TESTS
+
+#endif
+
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+
+#define MPFR_TESTS test(number<mpfr_float_backend<18> >(), "number<mpfr_float_backend<18> >");\
+ test(number<mpfr_float_backend<30> >(), "number<mpfr_float_backend<30> >");\
+ test(number<mpfr_float_backend<35> >(), "number<mpfr_float_backend<35> >");
+
+typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<18> > test_type_1;
+typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<30> > test_type_2;
+typedef boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<35> > test_type_3;
+
+#else
+
+#define MPFR_TESTS
+
+#endif
+
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#define CPP_DEC_FLOAT_TESTS test(number<cpp_dec_float<18> >(), "number<cpp_dec_float<18> >");\
+ test(number<cpp_dec_float<30> >(), "number<cpp_dec_float<30> >");\
+ test(number<cpp_dec_float<35, long long, std::allocator<void> > >(), "number<cpp_dec_float<35, long long, std::allocator<void> > >");
+
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > test_type_1;
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<30> > test_type_2;
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<35, long long, std::allocator<void> > > test_type_3;
+
+#else
+
+#define CPP_DEC_FLOAT_TESTS
+
+#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>
+
+#define FLOAT128_TESTS test(float128(), "float128");
+
+typedef boost::multiprecision::float128 test_type_1;
+
+#else
+
+#define FLOAT128_TESTS
+
+#endif
+
+
+#ifndef BOOST_MATH_TEST_TYPE
+#define BOOST_TEST_MAIN
+#include <boost/test/unit_test.hpp>
+#include <boost/test/floating_point_comparison.hpp>
+#endif
+
+#define ALL_TESTS \
+ MPF_TESTS\
+ MPFR_TESTS\
+ CPP_DEC_FLOAT_TESTS\
+ FLOAT128_TESTS\
+ CPP_BIN_FLOAT_TESTS
+
+#define ALL_SMALL_TESTS\
+ MPF_SMALL_TESTS\
+ MPFR_TESTS\
+ CPP_DEC_FLOAT_TESTS\
+ FLOAT128_TESTS\
+ CPP_BIN_FLOAT_TESTS
+
+#endif
+
diff --git a/libs/multiprecision/test/math/table_type.hpp b/libs/multiprecision/test/math/table_type.hpp
new file mode 100644
index 0000000000..0b78ec0fdf
--- /dev/null
+++ b/libs/multiprecision/test/math/table_type.hpp
@@ -0,0 +1,39 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+#ifndef BOOST_MP_TABLE_TYPE
+
+#include <libs/math/test/table_type.hpp>
+#include <boost/multiprecision/number.hpp>
+
+struct string_table_entry
+{
+private:
+ const char* m_data;
+public:
+ string_table_entry(const char* p) : m_data(p) {}
+
+ template <class T>
+ operator T () const
+ {
+ return static_cast<T>(m_data);
+ }
+};
+
+inline std::ostream& operator << (std::ostream& os, string_table_entry const & what)
+{
+ return os << static_cast<const char*>(what);
+}
+
+template <class Backend, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct table_type<boost::multiprecision::number<Backend, ExpressionTemplates> >
+{
+ typedef string_table_entry type;
+};
+
+#define SC_(x) string_table_entry(BOOST_STRINGIZE(x))
+
+#endif
+
diff --git a/libs/multiprecision/test/math/test_bessel_i.cpp b/libs/multiprecision/test/math/test_bessel_i.cpp
new file mode 100644
index 0000000000..0e13862ee5
--- /dev/null
+++ b/libs/multiprecision/test/math/test_bessel_i.cpp
@@ -0,0 +1,68 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+
+#define SC_(x) static_cast<typename table_type<T>::type>(BOOST_STRINGIZE(x))
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_bessel_i.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+
+ //
+ // Catch all cases come last:
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", // test function
+ 500, // Max Peek error
+ 200); // Max mean error
+
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_bessel(t, p);
+}
+
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 9 decimal digits: tests the least wide arbitrary precision code
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_SMALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_bessel_j.cpp b/libs/multiprecision/test/math/test_bessel_j.cpp
new file mode 100644
index 0000000000..0a07f6022e
--- /dev/null
+++ b/libs/multiprecision/test/math/test_bessel_j.cpp
@@ -0,0 +1,123 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+#include "table_type.hpp"
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_bessel_j.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*J0.*Tricky.*", // test data group
+ ".*", 10000000000L, 5000000000L); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*J0.*Tricky.*", // test data group
+ ".*", 400000000, 400000000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*J1.*Tricky.*", // test data group
+ ".*", 1000000000L, 500000000L); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*J1.*Tricky.*", // test data group
+ ".*", 10000000, 5000000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*JN.*Integer.*", // test data group
+ ".*", 500000, 150000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*JN.*Integer.*", // test data group
+ ".*", 50000, 15000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*(JN|j).*|.*Tricky.*", // test data group
+ ".*", 70000, 7000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*(JN|j).*|.*Tricky.*", // test data group
+ ".*", 500000, 200000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*(JN|j).*|.*Tricky.*", // test data group
+ ".*", 7000, 3000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 40, 20); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_bessel(t, p);
+}
+
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_bessel_k.cpp b/libs/multiprecision/test/math/test_bessel_k.cpp
new file mode 100644
index 0000000000..0608326e00
--- /dev/null
+++ b/libs/multiprecision/test/math/test_bessel_k.cpp
@@ -0,0 +1,95 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+#include "table_type.hpp"
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_bessel_k.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp.*", // test type(s)
+ ".*", // test data group
+ ".*", 2000, 1500); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*float128.*", // test type(s)
+ ".*", // test data group
+ ".*", 300, 100); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 3000, 1000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*large.*", // test data group
+ ".*", 80, 50); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*", // test data group
+ ".*", 300, 150); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 50, 15); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_bessel(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_bessel_y.cpp b/libs/multiprecision/test/math/test_bessel_y.cpp
new file mode 100644
index 0000000000..a5bca85cf1
--- /dev/null
+++ b/libs/multiprecision/test/math/test_bessel_y.cpp
@@ -0,0 +1,135 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+#include "table_type.hpp"
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_bessel_y.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*(Y[nv]|y).*Random.*", // test data group
+ ".*", 200000, 10000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*(Y[nv]|y).*Random.*", // test data group
+ ".*", 2000000, 1000000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*(Y[nv]|y).*Random.*", // test data group
+ ".*", 70000, 4000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*Y0.*", // test data group
+ ".*", 3000, 2000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*Y0.*", // test data group
+ ".*", 40000, 20000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*Y0.*", // test data group
+ ".*", 800, 400); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*Yn.*", // test data group
+ ".*", 400000, 70000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*Yn.*", // test data group
+ ".*", 400000, 200000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*Yn.*", // test data group
+ ".*", 1700, 600); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 15000, 4000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*", // test data group
+ ".*", 50000, 20000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 150, 60); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_bessel(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_SMALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_beta.cpp b/libs/multiprecision/test/math/test_beta.cpp
new file mode 100644
index 0000000000..88858f3705
--- /dev/null
+++ b/libs/multiprecision/test/math/test_beta.cpp
@@ -0,0 +1,93 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+#include "table_type.hpp"
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_beta.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp.*", // test type(s)
+ "Beta Function: Medium.*", // test data group
+ "boost::math::beta", 2300, 1000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp.*", // test type(s)
+ "Beta Function: Divergent.*", // test data group
+ "boost::math::beta", 2200, 1000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ "Beta Function: Small.*", // test data group
+ "boost::math::beta", 1000, 750); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "Beta Function: Small.*", // test data group
+ "boost::math::beta", 8, 5); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "Beta Function: Medium.*", // test data group
+ "boost::math::beta", 1000, 750); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "Beta Function: Divergent.*", // test data group
+ "boost::math::beta", 1000, 700); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_binomial_coeff.cpp b/libs/multiprecision/test/math/test_binomial_coeff.cpp
new file mode 100644
index 0000000000..334ddeff6f
--- /dev/null
+++ b/libs/multiprecision/test/math/test_binomial_coeff.cpp
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#include "setup.hpp"
+#include "table_type.hpp"
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_binomial_coeff.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp.*", // test type(s)
+ ".*", // test data group
+ ".*", 3000, 1500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 750, 150); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 100, 20); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_binomial(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
+
diff --git a/libs/multiprecision/test/math/test_carlson.cpp b/libs/multiprecision/test/math/test_carlson.cpp
new file mode 100644
index 0000000000..58cbee63c6
--- /dev/null
+++ b/libs/multiprecision/test/math/test_carlson.cpp
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_carlson.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*RJ.*", // test data group
+ ".*", 2700, 250); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 40, 20); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_spots(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_cbrt.cpp b/libs/multiprecision/test/math/test_cbrt.cpp
new file mode 100644
index 0000000000..c7854b5f01
--- /dev/null
+++ b/libs/multiprecision/test/math/test_cbrt.cpp
@@ -0,0 +1,54 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_cbrt.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 5, 3); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_cbrt(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
+
+
diff --git a/libs/multiprecision/test/math/test_digamma.cpp b/libs/multiprecision/test/math/test_digamma.cpp
new file mode 100644
index 0000000000..e3a1bd56d4
--- /dev/null
+++ b/libs/multiprecision/test/math/test_digamma.cpp
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_digamma.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*Negative.*", // test data group
+ ".*", 20000, 2000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*Negative.*", // test data group
+ ".*", 350, 40); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 80, 30); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_digamma(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ellint_1.cpp b/libs/multiprecision/test/math/test_ellint_1.cpp
new file mode 100644
index 0000000000..fc158ff371
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ellint_1.cpp
@@ -0,0 +1,59 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ellint_1.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 1000, 200); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 40, 20); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_spots(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ellint_2.cpp b/libs/multiprecision/test/math/test_ellint_2.cpp
new file mode 100644
index 0000000000..775c30f6b2
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ellint_2.cpp
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ellint_2.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 300, 200); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_spots(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ellint_3.cpp b/libs/multiprecision/test/math/test_ellint_3.cpp
new file mode 100644
index 0000000000..21e12bd544
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ellint_3.cpp
@@ -0,0 +1,82 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ellint_3.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 3000, 500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 10000, 3000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*Large.*", // test data group
+ ".*", 75, 40); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*float128.*", // test type(s)
+ ".*", // test data group
+ ".*", 200, 30); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 60, 30); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_spots(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_erf.cpp b/libs/multiprecision/test/math/test_erf.cpp
new file mode 100644
index 0000000000..054ed663f9
--- /dev/null
+++ b/libs/multiprecision/test/math/test_erf.cpp
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_erf.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ "Erf Function:.*", // test data group
+ "boost::math::erfc?", 2200, 1500);// test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ "Inverse Erf.*", // test data group
+ "boost::math::erfc?_inv", 2200, 1500); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float128", // test type(s)
+ "Erf Function:.*", // test data group
+ "boost::math::erfc?", 15000, 1000); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ "Erf Function:.*", // test data group
+ "boost::math::erfc?", 3000, 1000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "Erf Function:.*", // test data group
+ "boost::math::erfc?", 300, 200); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "Inverse Erf.*", // test data group
+ "boost::math::erfc?_inv", 60, 20); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_erf(t, p);
+}
+
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_expint.cpp b/libs/multiprecision/test/math/test_expint.cpp
new file mode 100644
index 0000000000..c4899648ab
--- /dev/null
+++ b/libs/multiprecision/test/math/test_expint.cpp
@@ -0,0 +1,89 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_expint.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 2500, 1500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 1000, 500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float.*", // test type(s)
+ ".*", // test data group
+ ".*", 250, 100); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float128", // test type(s)
+ ".*", // test data group
+ ".*", 4500, 1000); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*cpp_bin_float.*", // test type(s)
+ ".*", // test data group
+ ".*", 5000, 2000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 250, 50); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_expint(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_gamma.cpp b/libs/multiprecision/test/math/test_gamma.cpp
new file mode 100644
index 0000000000..d752f7a2a1
--- /dev/null
+++ b/libs/multiprecision/test/math/test_gamma.cpp
@@ -0,0 +1,96 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_gamma.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ ".*", // test data group
+ "boost::math::tgamma", 4000, 2500); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "factorials", // test data group
+ "boost::math::tgamma", 140, 70); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "factorials", // test data group
+ "boost::math::lgamma", 750, 100); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float128", // test type(s)
+ ".*near -.*", // test data group
+ ".*", 150000L, 30000L); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "near.*", // test data group
+ "boost::math::tgamma", 200, 100); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "near.*", // test data group
+ "boost::math::lgamma", 10000000, 10000000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ "tgamma1pm1.*", // test data group
+ "boost::math::tgamma1pm1", 1000, 150); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_gamma(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_hermite.cpp b/libs/multiprecision/test/math/test_hermite.cpp
new file mode 100644
index 0000000000..766642c623
--- /dev/null
+++ b/libs/multiprecision/test/math/test_hermite.cpp
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_hermite.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float128", // test type(s)
+ ".*", // test data group
+ "boost::math::hermite", 70, 25); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ "boost::math::hermite", 10, 5); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_hermite(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ibeta.cpp b/libs/multiprecision/test/math/test_ibeta.cpp
new file mode 100644
index 0000000000..72badb0fca
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ibeta.cpp
@@ -0,0 +1,92 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#define TEST_DATA 1
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ibeta.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 3000, 1000); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 2000, 500); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ "float128", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 500, 100); // test function
+#endif
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 90, 25); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 150, 50); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*large.*", // test data group
+ ".*", 5000, 500); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ibeta_2.cpp b/libs/multiprecision/test/math/test_ibeta_2.cpp
new file mode 100644
index 0000000000..485548b7ed
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ibeta_2.cpp
@@ -0,0 +1,91 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#define TEST_DATA 2
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ibeta.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 4000, 1000); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 20000, 1000); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 90, 25); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ "float128", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 5000, 500); // test function
+#endif
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 200, 50); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*large.*", // test data group
+ ".*", 5000, 500); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ibeta_3.cpp b/libs/multiprecision/test/math/test_ibeta_3.cpp
new file mode 100644
index 0000000000..4c51aef610
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ibeta_3.cpp
@@ -0,0 +1,68 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#define TEST_DATA 3
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ibeta.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 90, 25); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 200, 50); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*large.*", // test data group
+ ".*", 6000000, 500000); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ibeta_4.cpp b/libs/multiprecision/test/math/test_ibeta_4.cpp
new file mode 100644
index 0000000000..f9064a5b80
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ibeta_4.cpp
@@ -0,0 +1,76 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#define TEST_DATA 4
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ibeta.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 4000, 1000); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*small.*", // test data group
+ ".*", 90, 25); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*medium.*", // test data group
+ ".*", 200, 50); // test function
+ add_expected_result(
+ "[^|]*", // compiler
+ "[^|]*", // stdlib
+ "[^|]*", // platform
+ ".*", // test type(s)
+ "(?i).*large.*", // test data group
+ ".*", 5000, 500); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ibeta_inv_1.cpp b/libs/multiprecision/test/math/test_ibeta_inv_1.cpp
new file mode 100644
index 0000000000..160fff5c38
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ibeta_inv_1.cpp
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#define TEST_DATA 4
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ibeta_inv.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 50000000, 7000000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 1000000, 100000); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_SMALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_ibeta_inv_ab_4.cpp b/libs/multiprecision/test/math/test_ibeta_inv_ab_4.cpp
new file mode 100644
index 0000000000..ed83082dd8
--- /dev/null
+++ b/libs/multiprecision/test/math/test_ibeta_inv_ab_4.cpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#define TEST_DATA 4
+#define FULL_TEST
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_ibeta_inv_ab.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 10000, 1000); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_beta(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_igamma.cpp b/libs/multiprecision/test/math/test_igamma.cpp
new file mode 100644
index 0000000000..75982d5083
--- /dev/null
+++ b/libs/multiprecision/test/math/test_igamma.cpp
@@ -0,0 +1,58 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_igamma.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*large.*", // test data group
+ ".*", 20000000L, 1000000L); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 7000, 2000); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_gamma(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_igamma_inv.cpp b/libs/multiprecision/test/math/test_igamma_inv.cpp
new file mode 100644
index 0000000000..b245305ee8
--- /dev/null
+++ b/libs/multiprecision/test/math/test_igamma_inv.cpp
@@ -0,0 +1,73 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_igamma_inv.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ ".*small.*", // test data group
+ ".*", 2000000000L, 300000000L); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*small.*", // test data group
+ ".*", 30000000L, 20000000L); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*small.*", // test data group
+ ".*", 10000000L, 2500000L); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 7000, 2000); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_gamma(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_igamma_inva.cpp b/libs/multiprecision/test/math/test_igamma_inva.cpp
new file mode 100644
index 0000000000..42eeb946c5
--- /dev/null
+++ b/libs/multiprecision/test/math/test_igamma_inva.cpp
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_igamma_inva.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 7000, 2000); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_gamma(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_laguerre.cpp b/libs/multiprecision/test/math/test_laguerre.cpp
new file mode 100644
index 0000000000..83b84174c7
--- /dev/null
+++ b/libs/multiprecision/test/math/test_laguerre.cpp
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_laguerre.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 7000, 500); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_laguerre(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_legendre.cpp b/libs/multiprecision/test/math/test_legendre.cpp
new file mode 100644
index 0000000000..787a192b12
--- /dev/null
+++ b/libs/multiprecision/test/math/test_legendre.cpp
@@ -0,0 +1,52 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_legendre.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 6000, 500); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_legendre_p(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_tgamma_ratio.cpp b/libs/multiprecision/test/math/test_tgamma_ratio.cpp
new file mode 100644
index 0000000000..1ef7641e61
--- /dev/null
+++ b/libs/multiprecision/test/math/test_tgamma_ratio.cpp
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_tgamma_ratio.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*gmp_float<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 4000, 2000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*mpfr_float_backend<18>.*", // test type(s)
+ ".*", // test data group
+ ".*", 20000, 7000); // test function
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 2000, 500); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_tgamma_ratio(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/math/test_zeta.cpp b/libs/multiprecision/test/math/test_zeta.cpp
new file mode 100644
index 0000000000..b9ae5f6c9c
--- /dev/null
+++ b/libs/multiprecision/test/math/test_zeta.cpp
@@ -0,0 +1,69 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "setup.hpp"
+#include "table_type.hpp"
+#define TEST_UDT
+
+#include <boost/math/special_functions/math_fwd.hpp>
+#include "libs/math/test/test_zeta.hpp"
+
+void expected_results()
+{
+ //
+ // Define the max and mean errors expected for
+ // various compilers and platforms.
+ //
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*Random values less than 1", // test data group
+ ".*", 6000, 3000); // test function
+#ifdef BOOST_INTEL
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ "float128", // test type(s)
+ ".*close to and less than 1.*", // test data group
+ ".*", 10000000L, 2000000L); // test function
+#endif
+ add_expected_result(
+ ".*", // compiler
+ ".*", // stdlib
+ ".*", // platform
+ ".*", // test type(s)
+ ".*", // test data group
+ ".*", 1000, 200); // test function
+ //
+ // Finish off by printing out the compiler/stdlib/platform names,
+ // we do this to make it easier to mark up expected error rates.
+ //
+ std::cout << "Tests run with " << BOOST_COMPILER << ", "
+ << BOOST_STDLIB << ", " << BOOST_PLATFORM << std::endl;
+}
+
+template <class T>
+void test(T t, const char* p)
+{
+ test_zeta(t, p);
+}
+
+BOOST_AUTO_TEST_CASE( test_main )
+{
+ using namespace boost::multiprecision;
+ expected_results();
+ //
+ // Test at:
+ // 9 decimal digits: tests the least wide arbitrary precision code
+ // 18 decimal digits: tests 80-bit long double approximations
+ // 30 decimal digits: tests 128-bit long double approximations
+ // 35 decimal digits: tests arbitrary precision code
+ //
+ ALL_TESTS
+}
+
diff --git a/libs/multiprecision/test/sincos.ipp b/libs/multiprecision/test/sincos.ipp
new file mode 100644
index 0000000000..2273549d11
--- /dev/null
+++ b/libs/multiprecision/test/sincos.ipp
@@ -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.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00) },
+ { SC_(1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818790351457308800340787773674912766449462132584452348391040651604302709449379239880726512478831381302725264182410989377719891632824721505923538954718756787336781717738534589892517841597367279244325993758027159471887458619888927468693858915842127431596637785499217667152866164893680003868553832956009253404298979008131545708840033018263781326433505544641583562700173344804674499926293464492880691980275690339365803e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999018181306940454689380845609002744871404956897500110086977690176562578949055656828707980423353194933884755560203023626611533678706648719853431695157198205786802969097792096779337651473648106366274410397508094269252694850980143248502445340096430658555215811691593841493933838124949891785030283170868447315870535323338409489664710335241993056422950940322493204196544853978533985277190092235175175166662055024795932e-01) },
+ { SC_(2.80259692864963414184745916657983226256052388375303154351413656777958216537172120297327637672424316406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(2.80259692864963414184745916657983226256052388375303154351413656777958216537172120297327637305538709251652726302189399302131595697060675618787128325212834421675595033919045812099830759114965997778797780834590216037028749734324604341671062262121984141170908506261795217328399995070051694207174852643747661007471491085388153950316454056337188894731416167834304541739657820299760902499844561410566938370733275087498466575935335388483418932214377317214724719142755203142240541630547874210971000852044930167e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999996072725227761818757523382436010979485619827590000440347910760706250315796222627314831921695340715627621329535004694534216141863971398843021645158093032804874254958679377217097895883419963322632791960267614868367018464110751226843336329749526804502021446103686642277447920958483566966767779163022051468729743460838565621454431717928897730690691764161059400654765666575293764292473950159219386917758286295006197205e-01) },
+ { SC_(4.20389539297445121277118874986974839384078582562954731527120485166937324805758180445991456508636474609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(4.20389539297445121277118874986974839384078582562954731527120485166937324805758180445991455270397550462609201269889222644694135477579780213406558097593316173155133239476779615836929419876071343120971532989314549209781635141154879822077216303667702093239942499810993653083491071372581441825986232094472955340205971243975796884028319908471468409203092484306028848922723223269266129671649514061121265458553966701648599990935430386904212713721653207641489661037980396865125821447766865757966623202011002481e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999991163631762464092204427610481024703842644612077500990782799211589063210541500911458371823821746369757456643806982812806123846003228662260328395521200223742443485215609381850897310524629291344568956530530262684105635460612822223837210330705593721872335387821404502143865865987389605653700871033897311375196441706482504472066650591798878127657289137553615069304296604544940870015086975449211081356049236357710750027e-01) },
+ { SC_(8.40779078594890242554237749973949678768157165125909463054240970333874649611516360891982913017272949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-45), SC_(8.40779078594890242554237749973949678768157165125909463054240970333874649611516360891982903111361556044623610159113781157553083820638241707252464780746529385241065915814236926695461618692810291645026043369651421342028007962602533874712596930401059391166595777353132351354736336704190050078910834200567500725387522401892079463643692576146069143395731578179123995246777807445028382991342302004768477178958229712964263884786053770003966369485261014589712284700049082525146041017974355650133493523666604208e-45), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999964654527049856368817710441924098815370578448310003963131196846356252842166003645833487295443148286288493466057531853473865963093643770093554970659404333489664430527782442632013409169209372509621725822822280428683194964710409099655027231809772830542963187159283687376144462766563252564386045904505129129380699890638470353691133935782709516334660181819672442049363705097682342862579067086527667395708957625728010687e-01) },
+ { SC_(1.54142831075729877801610254161890774440828813606416734893277511227877019095444666163530200719833374023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-44), SC_(1.54142831075729877801610254161890774440828813606416734893277511227877019095444666163530194615774084988825358852676130889214423409846990607570847510728532690627712376828124698811004373805554947945445940658982587165803101327925691022042340834793945730630651714551646267709027625314258120286618611628110979879120205714434111724186618983889316034414274293110435526057786113651996476163163956546218796793849755436659001175560988905437079489045957123605234732369555892588189553152777884400882221479823702315e-44), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999881199938139795017415082318689332129439999784597513320524300511364072052835734476273665633558539016419647248757611892421704225588717291067846471845751360789925288829565527986759623768975753575997773800645970067273825398960965781570222907333052180870307750101932061092875046215001474627990763755720004253005726220961181931360340566888859898469699692960128833946501406695399631850637468380933106599429434314849425374e-01) },
+ { SC_(3.22298646794707926312457804156680710194460246631598627504125705294651949017747938341926783323287963867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-44), SC_(3.22298646794707926312457804156680710194460246631598627504125705294651949017747938341926727524573185742374636484230266362939060576715503172287379160806955106587059721162879947735886748511328881312314826032585123373233873715409532159887503072282395082993219295587670117698205854346930405798097420936363731431238400620602531307113293335307369886473931872251669066838685519427524997065747532725008631793788181680132189938777240459148366970187452325085041054979389568689596347966804174842938247660756550437e-44), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999999480617911371500530682467327162452036973222198777558236011198103401604264050442462386521688828475944132820270974357744852187719530274229740373520595807665539873553993080745823439955253622478543514458940785554677862703585578090996659264673716399020742597191730642633179383457364996748943881349656994930909983016269956721448068004898707766137974729184023442461006739874323489203375832554602730784179556189605934184419e-01) },
+ { SC_(7.42688186092153047589576679143655549578538829194553359031246190461589273823506118787918239831924438476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-44), SC_(7.42688186092153047589576679143655549578538829194553359031246190461589273823506118787917557071567734039333546138139998793069657391277551227141295908889377447469523309572292100019331359631334318174561609698634784357031155321301439148398735485598083156201912789699437880499952454662251467269128292323182720318781277898618615138713234960798201648044045228024517817220298333488925242202864692124191272173879533829613886485347072065635916938540096866697115628808888824427591990485826501618370545748403779575e-44), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999997242071291195737222470795315688710343776523925077809234320331705964284267897340031840718276442954050335356685171447220544117279261490357334686649206295189130909786729091199045220985992676527516309991379539048035055704301070927384372207584878961173246105601002640718234285492270478202155019800902822073363446671078460482683530262882597940421207717144002253386046652555081637431410126935539589794505731025710676379063e-01) },
+ { SC_(1.05097384824361280319279718746743709846019645640738682881780121291734331201439545111497864127159118652343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-43), SC_(1.05097384824361280319279718746743709846019645640738682881780121291734331201439545111497670652327220720187698420191038233458668371840658344774702748955652055489568668246814974626901822859305738995281066066448198114020751344649620709960208002064198384905117235274182583546441284941429826369890146228651398698659788539187660433894685192269471013358968568537625675802567571975922807099858605616052408037138909868535400231927588666795931021281563837169514777440278854726220318571799562403632573245982136141e-43), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999994477269851540057627767256550640439901652882548438119239249507243164506588438069661482394963882717005084354341383831108371223875714348110550375875361891735468092383465608580594392203699927961133554924574448443357107180124203598756077136385300580115685171857809418195803009471462689144883556767944584573067238540300397625512326425856193876988499074312589335443468863296988797494008557816054949653946346405265614466521e-01) },
+ { SC_(2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-43), SC_(2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222994180455663053847439087361528305867669346974725266758197621991645216443916549345974519799579636871892676112526648444061630875432364581411034670256488408102709411987031842685229809521678287117433846120945714500267214729465233728758289015332663555356907038138247888801679347356008669703897840194824797666053047570787305557626392462396479147321595075220703366096193472213477456408514532068165552987454832784517598469370e-43), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999977909079406160230511069026202561759606611530193752476956998028972658026353752278645929640856627453437091647678270578093867348912670303473993915455915738774094895059219945425455712948260097287167402615818858938341377297396988942875681514508702249864150447882439620069730994781383325744667145025187907937825146056513256418433787478833229590937485750976313958959995857469736815601150524811999423397557967975094145663405e-01) },
+ { SC_(4.66632388620164084617601951235542071716327226644879751995103738535300430534391580295050516724586486816406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-43), SC_(4.66632388620164084617601951235542071716327226644879751995103738535300430534391580295033582185205789161845419398674547856851973379123930414244575696445912083280274388675828051112459855219307669660923033393959195552402701380143007212075019536866539095886456124694103812914692592186813095161949784665763547067799123307190932094852262291743854239589467068246000091236672783966432440796514865312222994728751652343905850683285452371439099763686518414140487338867024165200326852923049841093249444705198793873e-43), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999891127106945320080050752588736705376045224265406889707434869085988847817081832730078601216698537208723978870828429426132354223033640845300085418977379720396588632501949070635779461038749299328050727369251003094322938028991998378771012224015911587313333701442922100083787345533568931010184906661307603865664516617509537152983462675147192472775815030334087089321785263057861128893065942146589055914769708614295112037282e-01) },
+ { SC_(1.22333355935556530291641592621209678260766867525819826874392061183578761518475630509783513844013214111328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(1.22333355935556530291641592621209678260766867525819826874392061183578761518475630509753000948705533479418866027375467625129135687610161180897162329185595954402814970753825051091958713527722375174828431644619848284971925661141095511345836491236689334826010659371679330787292070314641713965540731707275304824222335038176768345388241694945900470602965316849261159010127304761857501611899200514651777047976437164422797344832678448893012684055590664977502888862432076111336870979449510638233456440392092154e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999999251727501277221791963134483143652946098988395334861400478220036573461731864838683206477730569359918994418110092459071692590420954258112913054863293511313821049032279840033133091972315123462424997068552908251488888835340014765762041910447767748264144555345710012367897821701950047391724289924099438289720106542049969731533631374438421776311556603444490337372131933655486205390154608413468747459621886432625215014782084e-01) },
+ { SC_(2.57838917435766341049966243325344568155568197305278902003300564235721559214198350673541426658630371093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(2.57838917435766341049966243325344568155568197305278902003300564235721559214198350673255737238966372051888799258963778247990152783376242111381303331610145725745772353945427357361145486695541184381321338742142669770269495102860756614147260496795107861458914054023077958024860025506704682782268721894529111699275425956795744932455234081018984532485402586765516884392364011034682787867594623024532922588091056836292782026784274713857015966608080506950980879305590087445073079381675098230575099138827876112e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999996675954632777603396367790893839693036628622072176372710471667861770267289922831759275580067027867234722228430080471552582226415723987626237690981128512381741567675223648396297701756050725932395149173824330771267008371869876795254391227451236964243860781777838348733979424414018273387935180620881558052018364492093238348499691354984306857440378153948514582513764076650823260920930404915003875414931338093385440488610425e-01) },
+ { SC_(2.96094365511833847086184060949159278539519348318507782572268528385912855771522345094126649200916290283203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(2.96094365511833847086184060949159278539519348318507782572268528385912855771522345093693996739342932663804846651085820195898433848681112306343912274946090956703290365385602078892224342391181399780345406462574604119522592402659502072571781680123040917209154609109171457264508074993793451528626299861129351462001440897361404823166962990209615925574365137246754984870857324607933605053121269918918153614170251284286175857951281402587778087901842648839202937674178237986130813368757321932975610351978531701e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999995616406335607226943052228668861576216757838002294669012925294791921129051796275883456903694979322501329971375447753971251773961247808436603020996111873404733070017197845470310705625912309526290295374073656496025387323329294558782671483807734805753414994834876374099993858561755751805408888198323439213097646998312370490782535190924653242809107848005183955596913373155062584166537545022162737405001739308072239264970136e-01) },
+ { SC_(7.55720261810373846349167364268251769599445265254004955708586925501764330892484622381743974983692169189453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-42), SC_(7.55720261810373846349167364268251769599445265254004955708586925501764330892484622374550612448373730191413193303431049794041304644123408793084820745811028793562333348916456519265465336696463122961996291323668438209924140273844864059538944318277976227762678517671975595479579453080897835805446525198108109753026208669175956600936390166668134897501291587095007074691843131333212682512579039986401027805480348350886360241751644496932510052072285282083099768297529183165722660597082513542981408056777981617e-42), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999971444344294463000450108045691914274072389027232540179319088194078035322752282849196194896756803855580175797043645074196213887410097135181896784101900962704236324186319009789568789941181425532234149392153366432424993544410950289613464726947532233749725913910743043679099530150918947846596008589510245917814356607023762433721080260938839286761529865612309642958368349089189032058662245374996383379270059613802426143510423e-01) },
+ { SC_(1.46589832353019113789331351707958126493228201739702314883506913177711045159767877521517220884561538696289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-41), SC_(1.46589832353019113789331351707958126493228201739702314883506913177711045159767877516267208908427393861721504907325171929472720865773006275638632426304933510409951261954656218026260776426755670372542025774879490868328477422522654282360896480461898264393728557122541481302896883438232050290492523787110495425540325854976498628867329722408191317623181418915019006160748335621352766125413675429734653791931135071630025587791482079495664566178902236522056278966690016735464045305629073387162733493980906882e-41), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999892557105253568753545217864104950667197665245189775644595497906778178128656691096078303466467187938459594167417463818916417117358473643785540714442073012942743717914732037748071998704147219159170063017358513712449206088197946521436940697640711296900126660913421258179104561251733958995998165062617805307831291519562109920870718679948001278826555255838735691382758937227438223290700605918762038729941060805254738926364578e-01) },
+ { SC_(4.29890342885567381017981761561680470754158758528877508459633408131710108346368315324070863425731658935546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-41), SC_(4.29890342885567381017981761561680470754158758528877508459633408131710108346368315191660548910487698640593276555287590068274126080495796600691159804102586379685177760662635437114892933360460302490297861538787485499296789402780765824215676091815381268645071433103144568224470731467136203368744072106184460077740479824007144285177878600537935639122698858220342265906528947489376413420658288715001310209384236877493329408364270388530486494392325150006115430411152539355170867002025305337772612859827428934e-41), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999999075971465468646533180207192109630863406681770546873997223395847820009758339292966324975612532967466820309355879235997759431321194583616980614121361748306696010139554876844921925965078471560618240863429559876295366367257626963436982144381690256088162065634034183526734308381551083435025308855773105012914069158476743241978619938658527251068183076619854877720409206737387349288732114126976152205371577160652967630617123599e-01) },
+ { SC_(4.80379126555190540083363738447616148964186596294688371716040578400259281055539872795634437352418899536132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-41), SC_(4.80379126555190540083363738447616148964186596294688371716040578400259281055539872610877338501347601219175270676662869099033699415241762387976667404536927935589076831672632599089820124680009011322734319715118623320805661025510875584717953950495972701008862867740843426026356222430890016125676658201558709582791616384491466268886310743277365390744757660647471861857386539703251775817308401899230677444627869562185725283076582085060518200835494958195542251512378077909637116291984512266293918513338503809e-41), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999998846179473850361154371674922854129986084727096709142870280757393394130581463291168610112704406499060352403499469291720728306994847837600250563158304798680794177527403425268942921796278460653093888122873284053643989868791585401086238273954075339473301544992488839606468292179655865318731156652793808004127813501461466101819147627941309038766551940761100509140381914523658200325453837791357981873672885699155514487958255331e-01) },
+ { SC_(1.05528984751373323977124227458397004014453966318836649739481298323172386854906790176755748689174652099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-40), SC_(1.05528984751373323977124227458397004014453966318836649739481298323172386854906789980887504771187332364132636109487217929208679431907543158803628082268875678333496411512923906603472445334327299722485190443927742726521958136503063744853505202494039957387234555933593281644632395449538000337461647675827932577828286596180344814422872806232066066010815495542783741497903180129364783147090148024196900445602757951656729695080517991132336449993528257155261985896406981415684240794679489860063828342392027328e-40), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999994431816688672208233710305042314219151101272516933748775711167580922607168373864227965541361289251010654534999802989928735915119413129451470140853636658987643574157298081896981245127358297596889192754078582247331884307559147751318090642104769338421104440133007218078588778511425272289353063257890140890461661561004041429851910440417566678968240145321910415990690683553710637026739594965677666802372650596926643292041996638e-01) },
+ { SC_(2.01510923065301669250045085265839809426495508027668597525981690428203627063474812075583031401038169860839843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-40), SC_(2.01510923065301669250045085265839809426495508027668597525981690428203627063474810711802373032594699969810619116841404970861472887256166386048754834748113391268197763832955073628906392784795381155976046065612198436366710288821444973028946646023484366577270255382565430666890873219733228088428497141478307604678164851586001801533760898750558581710818483297283897358606526238189016006778424780680200657251336858863806486367993844372954164133250632883143114958449643914391396931717830204115391769145546484e-40), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999979696673942685035853850543073045777707954868946997951599446982788522244825490912223945146237649836813044005513754448276849194256842083656687070132896763547132020424839753567770743006368670904848300067578350340653279036966460909408461382429991769872604279825699445913799875847014991026905964403318089265513005878651764666517348099896382056900530127079726632856823997344435810758823451691867992445903154064288120383150987671e-01) },
+ { SC_(7.32504950151904601935173936261887729052525165662936718917887575242562162025627969796914840117096900939941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-40), SC_(7.32504950151904601935173936261887729052525165662936718917887575242562162025627904291011292837720144593431126597367515998989153198457015902750071695137835990685604892263621831515557060246307131984841519212710373547750063546014290419636943710720132280288244343650374997981943021052969538830344386792052372151384906422960252069039716388381803899141518571399834733857022053723510925721401160619649691446479064067028054989737014742554510760352969761538081403146605616293590611767277714260566785874599515793e-40), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999731718249001477877143168008532640917534029873632032252120957303589649904151885305973799269888934534909136198437925454757554860783321503630302312105520970158621889109299625562988285780953907400410390020639968947017260622162867366315832821549484018469877658751307945502656509972585482311806680315543936811858642849279465528279655411048214732456565842865876212846439566194454456637005298750822183817695104506210394947373953085e-01) },
+ { SC_(1.33966515396841864169329118502807575007816218088696097856787714955946640149608839465145138092339038848876953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(1.33966515396841864169329118502807575007816218088696097856787714955946640149608799393466769935160071827043264942041685242847448108284494427393761948492846509916986077875292923082077469184325721717857533402797270511306605163459987343262256569264007349244333444115764051413257529668304213835300075569972339881302618317393221832794373332099017592930269066115891486986577472025784928127713471885695681145572611164474622978513975703266720143131891946646092594745882505672457515555881327346483090258133109813e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999999102648637621386587238987552746272043013454101628689499407841187184948605476876334955279870868767750800059575163137784626164589056798852834142555490085645186899015547757002677276114759208540303733026521153564543719479878946956818853456708417790933960103537105155253735839010002786196075719602911681185910630157610492301675225607916036307950416287870173505934149096254870905146725805112841309456550280335897354832252188484699e-01) },
+ { SC_(2.67704619143998783156097669083538893686233753480866323642779027781619244352739883652247954159975051879882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(2.67704619143998783156097669083538893686233753480866323642779027781619244352739563897984299105902128855302251894710143801990277685086036288881537114672707533483727518555424527302608356036356217986356197792739366250414583736898340317558602513631529933174608625249495997042977955438961972134324708577539931088346231802431204407452780232261732489676314940425767518677852657613399447450394975134408614300034765724426388230494398863554338885318201348491063100048984565134316337355192798205904718373408055959e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999996416711844448328010836543119598472240469572030882370560576310418964309618728328179940611074428491474999154941510527197897854270875982495690413621119770434170978547360806493132985478957649761646330066648315631863124058757356730994348799421077276380735378148156663760085371571182147899917776000626572381366357642100541978640426148495871453988769629317000167837866856830562597160012881170553619814677812429087684105533480604824e-01) },
+ { SC_(4.98065334862973353780613406637193167431914166341694440226118064331717501247442925205177743919193744659423828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(4.98065334862973353780613406637193167431914166341694440226118064331717501247440865961706082185262300907349748068968430289329142149112388324350697105735066444850117781308977214384632246495516203852364550923245875264911126054830285447794666051901956355872882436639418664467404450121285880935039406673241090924270460939631836024048762290640271473049067456927214532714526797251300223483202814869269567316784928514501511005074814011991880011042729877301864770711496955945630526292405050391715830741638832339e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999987596546110391710994379711623068869451337606096342108625478131918320009488445778250750401876191182731266979269973303293901478710089771515180173918644613342792395295337150147962833559157614103818968508131256797025993480612649131131295014985392720460404345935117219910238516012744511524766168411644949909022868757584567938463480609599435179942543723898381721040096255576605436773910863929161497154264218514163673674788342460421e-01) },
+ { SC_(6.61322911799904004220047059873593201348655443749046971956789426212155666440217771651077782735228538513183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-39), SC_(6.61322911799904004220047059873593201348655443749046971956789426212155666440212951180267037989278011390446684321888716336223066517279132166898428654774534689211293208975697927510796390180089112434958835354241993947050884854802882807109910568964641743255696216900096606365458624787210152018106794407805871136753532283305154054797825092007339353096964641783328787428804217368758985796365133796747731180160659350716972790789978702678899730892531705668567399746853894977141121012996122009020944132722807189e-39), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999978132600316424819458871898582377151976877276609840945795779220166843198812911241921361184270437776491458291901247500946988256003349588053268643044761577809440194145005106845400574711621718945974528696979467351650861357365416040731658845738292066488483990916744859113297684359767658520832922218399521682790249135386599957375066859000568645217385839964246827971397420685997824501311319875532430117958365665071740834286896688200e-01) },
+ { SC_(1.54824254492961749846859045383652994857147779383512446982767538392966946703133146456821123138070106506347656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-38), SC_(1.54824254492961749846859045383652994857147779383512446982767538392966946703126961085988845194765016677224573150759279990907005138172280344305822762129830974739861817563548607584336183614347338206829196446854499415600946091562886397948974153134147914359866606123722979808726587858809602661796413993286599443541318127541811836618562120619935933142937927283356718969340037803418384915663635421018050240390063399173057203977102865070796348392652096890020237829272597410682790525617612157766125616287252744e-38), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999880147251103493067079197906492851642489951807612675096101071372809763052176814238098234757914806141252740340867410432612444896212338592468868178773649165288944334267569037833785705287027561088840334981533388491347173126442412363399111551633509256874317164512773006907444197207798073824215723487854515014273420120927829877512313201892373536931918844370906211898732256730679347491689855151383360496535317453280786049708294692770e-01) },
+ { SC_(4.14655650189182261793630321328885828961460755538706729231614042880185722061980868602404370903968811035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-38), SC_(4.14655650189182261793630321328885828961460755538706729231614042880185722061862042592989753985866613511536161784732505728534611917389621675815565806216456733797635229753667377166650970990553431464073848921448167545536686761492234778689910956124468888048028352079425119895491432133576643928937349140475648209132764234915780601666168316129135579051679358350888091833066751395602947699623976228467139520969584938853923527081219369788343445865866087636551945529117194090170963755429299772957394707033664947e-38), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999999140303458830932562495970891609851434141169762625227468703921261555172214042553364993994634622966419016883421920787233269568087911528717371496834529990991021120129680362470105835559303793013244274628533900046317008176792327455914771957236528289495804030764115202483608113943926547285214664218148302982221883326127385930775038463435090571400891500003663643560192259356160907398291267541063405411124424549800043463320847909557477e-01) },
+ { SC_(9.16989984771782597788130033192388394290674988675850299695759145456042116251182960695587098598480224609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-38), SC_(9.16989984771782597788130033192388394290674988675850299695759145456042116249897844115270071964291065187070451428162205117773893965556440691457216154310897806331075177813107720146501971323479067623584326457128542356781061897017124711295344504641604649164572504676902618542136026936516116875011868845410581154011041055005068165526312569371383835954064173376238455385938643029758029883725569938873704091787777011093003754252650660888047134772339268203354903543272132734204180304904382006508458834331093434e-38), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999995795646839141229597049600163486950487961160605966971207927639433117443286573917272952598730352586395213231378556612129809781665455673803791882078391445491798305436834690788293112765270306893834416062496422378540679879435567787167675258265803526815917323453636547446953905378952509733862550508155185660036566272965610345657669309817400942905631053083173596575938300954384335741012857888893148639864847391669179906074771423380675e-01) },
+ { SC_(1.40174284409382375691326091641536902948381353854352365243860788538397821323400194160058163106441497802734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-37), SC_(1.40174284409382375691326091641536902948381353854352365243860788538397821322941150712376691297505221433850032159236497718292753220163294157274980746057268308682402443770033257716345829685049988934416666205697588973059884017465980900504040551091151637072348559801709457371522176034711208838536663456112005139845564302752800851586255173206233829429750479632089286711032500609176606849490519569468727094188589180524908936230012972908141632433602684418792195948582158744208296995186130664849282559534747283e-37), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999990175584995158790521452395330292149934987246293181315818289498140837852990983340598997291574198506644414638962922288593792275112076522551276639205559930026303787875160133236787445628969231440689003816906777605687862518569148148349736607073003542934036846197242745708929670399344795068969975702827824659694309674652879251454493737996840612211561985346098039062629674466776090326736274135796172249813160074647258847047218550681667e-01) },
+ { SC_(1.94557624033383353951438702124371913986437597061599651205892247320811128119544264336582273244857788085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-37), SC_(1.94557624033383353951438702124371913986437597061599651205892247320811128118316843443667798911811276260782979573655043471811433560953937347381596636250270351757320824484922352524345495092588725917950183456096195479396095297149816723715887520239499660954344948495823620417694122747792675711464880383881647242003709193872670297166532991944589140423445905575281550707206772623747725383628200116441780614927532794556312983397464198282523328334749316987456840895529998261299646887219234662348063597570361594e-37), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999981073665465242325973499850572514928918968773433476252290727706213747142412896890402940728348529719295299594618859825128431836531924921078163936256958737028704143307321875801616577679750689234365062786505605378356205461533046996279728442748616071759347859462543457969102284480550870641847873336874142813399784209309858808036665885184827443870158113940056434388089580250524388193858351108489442281034092467002540157658438751846360e-01) },
+ { SC_(6.25778729623775298048262176417037819653492494267247379139395559947273151024660364782903343439102172851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-37), SC_(6.25778729623775298048262176417037819653492494267247379139395559947273150983817975401690962877507381485954149692981033327650991617834865104519184119130061428188738093774975277921899654100143262904731856281487753604601557753455546117850172891385055603321634400101181307965562370267510834301717555763528082516451060689486995693578669148903908270920118745103309628202998328094040623530190880768011165490634231906351433112453170352587798690643432435729816389805275266302654200777080302116699928186436416280e-37), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999804200490775226966111214503355373143794475289458519970663519021821882302293192082627747880642626873706396542685764556638857367505201946491497647523599633143848708648597649676052358311232218277829371003261111576758376332700582495048660141665559358151192500767632875806022243667932552701370660858833078445158658650315371959830990489689133490741796408732580215105542936306741728965736925282835297914658845693947125055548101972328355e-01) },
+ { SC_(1.08239073560602090995217585692806369173691892430234761217807120271122700572163921606261283159255981445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(1.08239073560602090995217585692806369173691892430234761217807120271122700551028985034672156536838775060537851211158634395935548306255588517499841223461589544558196181625229089645208230094515808394044610446532031934838322012297783463544971778652121566632444020332699464984967424106583836820627443079249218431496439763226943699593605710951086552042194684093571682506350566713599585362101737015819290889457768321375371619193837339682475558478823722791771452951524569087148988620542200906995110022069839836e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999999414215147737128469167864887720746679277344361554323001931299657738560350385993270574167093724891580864281120375306410266364949815767159380406106349373771695612577895176379716706515330135955237783460936144953034420281108932351416421393064032426483755702763946710102993202761795407302174421831510588548964721554672431413244801666849243141372241714766821101374200896460046332817068614637339045853629713469603736177193274739125474695e-01) },
+ { SC_(1.69406069903391450739476895874772531773020353068657868999386494068826181091935723088681697845458984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(1.69406069903391450739476895874772531773020353068657868999386494068826181010907623836633953419580256640864513774823628873707949104515727247109331100403413891290300709523854457848706858116029524709018232091056506435291372700659313907652389536318026768678059554060588900632671169691115979901437413522298032403609565133598996394311329293506372714835392975912718206936295166137569549996347175694398582596884916164647798625653170932974980454711118715400166890733722244368752314502042796902887081917869423252e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999998565079173994362465396001931894411364393220606475206715927476216753773288096464547196783798237465369184337707326956679899579250402430116331781856535753325581983852597538161877588948904446302891805591165493406298635982122739131855419006169860034975915041849599506141381562127259826196852690691935014842448052582785680360758805244541197319297101970723393414590425744716094952004261652430364851834943964098519682976590628698821905236e-01) },
+ { SC_(4.15747613699065532685928122715139996054660257193228334398574664448888782430913124699145555496215820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(4.15747613699065532685928122715139996054660257193228334398574664448888781233240714882509337727250115653085990578082365934763746608796598027817817403401461047679675712170611380828783971391822261067802809536400457345024480713629655636200059306305344565998169640785290567657819069495209506513879092612549199675733793897404446425995581237641738804282966499303539895482161907154840024757495882276282239646780995340616670801737107926048021853177442090405674446382967308057029828089451182423912906080446301645e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999991357696085176628871090559479687924742457625998376218971921267372616718383844949588137456909796500905937687155045180713696605882356605141845708585115529311992066558444828324343695453901931401333937064875027623092193879640543740281736662900057499119419568523976952025817917330364180443654367979292006373325784480983727857210671247058000389980104063249629948415515037996578331323999224928160405646611251354255937726429113087375434086e-01) },
+ { SC_(7.28367983015663846905417378314883240316980135196070300998300722783440619423345196992158889770507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-36), SC_(7.28367983015663846905417378314883240316980135196070300998300722783440612983116478321067269269552308077493978289889202693267062792028217262679594799658402831534524488850105100944772764063369876205824531656366687705105223061889202677601008770250436737657307404663067598694505137070363243354865573283915190217134660161868686059432339437177299032222560991940423832159892424897426322085372898507971392663686985246163580637451954849520995735087906076886949281806248923115176051266427223525387444974822188331e-36), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999973474004065884681092335767433370237858027851321456659743937462071520016274972595345712838831068927056324434283196754695183381625754321780334336941984724512744537129286325405215594299982932720024848636604144040397744749234633858822500707447887371424947606546560076781166070773896632315222333445267419206441770719310077458761071140435155108660069240335296609374518753267631061279679348531496176734798021898607900054696705595585834697e-01) },
+ { SC_(2.12516349467652166437607482766014955572619379291278811395257773014799695943111146334558725357055664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(2.12516349467652166437607482766014955572619379291278811395257773014799679946580917405606737529904973622759508384432023182892335044923493007532938776076021675357752206257108287956169574764984778204026048822274447050733368944371230550045017655124033941820725414467102677098724735986282971546316360184957916240826596403661388999867239776163371097109947879294702830424203436319213220983022808349976076039486046869137974826650175930349065434734116373586647276765562985583562832443119253244361340883240441062e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999774184006044713683773900470805922150932250054980379582662128503096057808845185235527786487472856932618201965360896707252655627980442148963128043654276596608302237896826278499952875156492510369808863542269935941777674888168571205797103443085578125711094779798379963949265068579368931957701357361326476145671210315141516694776450386623526577296405590662971296035440956921410316901837494666387892421775940274748625097808888274273886927e-01) },
+ { SC_(2.53071076762576381696050568408073626122257552718503248673567740389955815771827474236488342285156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(2.53071076762576381696050568408073626122257552718503248673567740389955788758611653831292769789020166483010759970222136556385108151865059794457635671929591006389256386912362204985190361367849653914692349249660353344507347124549418382882966230813006834337598876272906754108025215894180395623651246082863891038037258220096650540393960954745608563649602644462517562149795780631117951814592950632076254125100378944378612616648449108475867033852063670662261449078443752015576717559948578847287912367450188387e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999999679775150531150862612324087422368961581536597039422383152126708901047347940304146276116283666506430133777448923147529348926857835369585229245501288249005852911543348998007660604853568806160045133561007206980521854122283010742632980337999371272670810643167591287325720576566145125174718484145644918457200064131979165887596637731687390351612705444505957008226887752046771682765148512429504692651191887187474974604465117914715417737883e-01) },
+ { SC_(8.64357296960196048049463886033217008510050159920791504997812301769322118616400985047221183776855468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(8.64357296960196048049463886033217008510050159920791504997812301769321042328005655004380652466252000805353736975177627305689102897263689458460558483905184538823511276614613879037974542294557763642845332403887710155638310471047995839486930032353911469131857519161973191263919662124863592037455099841121434453263204523757117696307125405556392707606083229317021124606853797280595140779847922679683860621633533580470006084570869328567023511427290495777006546862741888593675678753734706727091765908497226790e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999996264432315958317318170910958737722004540033486380110083998546410044791571639359001045000390165257415777237093860585996520548881515148587137444154873492144978975716761135704715068314007809110467706034696558926322998865776056244797839299023107292117589896179835013332775610172777676182558538012867578344415855072459321045720088178567198565080237600962243652912204402124151596300356253263256122139223449122695528077428547738849446992392e-01) },
+ { SC_(9.98056233630547948377202558654806807390245378474739594717134172352501764180487953126430511474609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-35), SC_(9.98056233630547948377202558654806807390245378474739594717134172352500107213774235211520366087753993326665312083888782751842897484262816852301203303461018681653919301907168238595958554638307471117620123755538957953333151205635414773328841023242129782657905930623401544810100924035706284091402411873695041620447824159545092622198222137489682714360461036541587882003436623206649000290867227071217854957074912804962012941175988955433888661010676438557159248028493582668925712339840773429543419954418016701e-35), SC_(9.99999999999999999999999999999999999999999999999999999999999999999995019418772556025452179753936296723190620561787496251708691401075923962934222261393282794216532984558739824698172829691185955595995089041577202174812312947856501006713170529287477350411350868128826538380042853030454395774427817996996972615435833753547763126950693322514112229274794236400050824445172812668516611850872983573938547300630346487402262543251741159012770284460576903327602326016046183371595735415925160127128817835623068688e-01) },
+ { SC_(2.28583325383040341115984344956726956942648839173021717936437613438727112225024029612541198730468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-34), SC_(2.28583325383040341115984344956726956942648839173021717936437613438725121632406983133997779856371235469800960484094688446211707494308823723702511129954566803322521144774271849538557931309348505755177198991392479394688991152239758824965009950771960366476022856124052233499690226825352494698918049373160506861871032682154872340811445877852985420557422813230494867182881063793147826094622998366088820877495792124626334108720159346279352639830014634233819658689195810426400524416487075106577081762959804327e-34), SC_(9.99999999999999999999999999999999999999999999999999999999999999999973874831678415552645214136320719547515304986065715399671015948522117357521386822474945821385174233689548253591575756766508400490826265582618706311906049075954729995626366958081761228787732882417823878421236061267588485487036165146284349698162478575358442590632990892375447104360565217621089582310412890703562600854348719569212910573217175396813750336931826089876644954945470721952677819309500120155038935270482632452051218728106534190e-01) },
+ { SC_(5.42623437031930140219487755133755705879730231824934987938484354241808205188135616481304168701171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-34), SC_(5.42623437031930140219487755133755705879730231824934987938484354241781576829753192001504542670578168514322574346362411838697558294055698060256643491044626864706023229351509292462926224529701979980092636352965151156855735493539697229126183525244673254444594932743813340713277981673283478626960530386752618274460408012086120450381392347958398326330449608398379219370083483268351133688476999510593296289238728648271061550800714334372631288774732378360955680765670890145329863879353773268761484500941680668e-34), SC_(9.99999999999999999999999999999999999999999999999999999999999999999852779902791827473069699853002689009383385697232980632967935862458237014302008822313290073227392761021824999598806655046675355022913174279103879824846548509249049870612992964381556241095616833742905956965264034731825567461408179336671461735669309570725949353784032168729737514901374614918492020733323657326776972378228052939461852740662884848942182183850537408756939752311876936201545716136909239650842326963967558877840074472028373156e-01) },
+ { SC_(1.14767260359023175444419398476720241433534365304121115753874238230025639495579525828361511230468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(1.14767260359023175444419398476720241433534365304121115753874238230000445166746063656515559841089289105607686539825978861594544159895336596964422134771640137572553567078243138888530843580152233779636754650662243824370534098475025420547383932421683776941031164647482102775065775891998610842166179191292338275465136314733106299902048187444411004404558040659067390216180114189607920889347076280704914251579487942983549927641405688544915035199870167862655069055588251673922237588302101782819511491910735654e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999999341423797484209381329588309288146803267822324076796870775252179426174205035478581780473549580911343948996844459479379323793574583702208105912195692041827294007298447777379983852214659915146476246650306684196241377878426909383663765219628801085832023184448671086794319720603937760883119648546708413620967469776165374332966612650640592032647489688329087738368543536541785457409887376144297548884705846677582389852083943727803618460003560e-01) },
+ { SC_(2.24638807152062302597056753414010558790018579564078381747074808494346598308766260743141174316406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(2.24638807152062302597056753414010558790018579564078381747074808494157667361269882569441673060651915437664267383350810846419364777111420950445674141352657892653029864814464928712480345882096155199766282054160037261290793618209567223822474205025102444332810773106250060132178243200876493509840693909890022305266515863453984042974449133489686322410570709426572392159303858270564017974265942192514778239674771168343975398653578155273192682439379656676210238904588026596239307200791791903087670175397447691e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999997476870316064928124336269726622406446098767475833498791397615072417963776006183762747986076321718823234433302205664070428488474365161284533503805124055838617058588428710575226216649561390342676237713905134207296393773422163114041458550176660590328481590273828588141315198970622646050350164026489967133824488059763316031263167042511671805434119993909381688766722661327619081391469360750198917897989810671842667975179843263514510070805364e-01) },
+ { SC_(4.45455641359219790147891656069310138539319495403506917428904099409692207700572907924652099609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(4.45455641359219790147891656069310138539319495403506917428904099408219006244020355341019923416458691646791783382968221703942437110847236298490017165119347209547953248371396373134888130108963826910897009132512935868074403092848118118664348760003373801795767345559897877338293545883678173435890964691395009506069309003543166240667253840198108859444636305560559966548986023314855939971070573945498737110851520499021749551723015354411711372545551098465273329330533003046029281429836758805400309819773473594e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999990078463579062307755526600873014625216226284609280745739844840338725476993691131021921643887307732286631053281933853188844559271647726836118909431359129252865878843629812349803224098882677865802701318090937633055526915899392674220081478796481818247514342288829051175946144134849997283314619395790196378587070000606077549331566177326361432397781171544675801887712953061428639817708889966799537670086563002303589097210837017109439496973892e-01) },
+ { SC_(9.16785088874388950633683172059419126693105638377124253293737332626278657699003815650939941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-33), SC_(9.16785088874388950633683172059419126693105638377124253293737332613436104518246704921369229928400760527355642289946851996779146737350255733633661964290512225435043234556399487444290802165698462256421277014798059769310983640659437713092187875796959432270158150107717786562565837537819205647372788133354445767003351222939549690095319817221458619710368607102404725417014793188796707925380868001635367674953089171550791669153185795146352256358389658293075151223426432691016855045414346008882486947094640909e-33), SC_(9.99999999999999999999999999999999999999999999999999999999999999957975255040878937656479309884424948105529598925238666019539098203884358858925757483714325117607223046140184112647307315076184737530446206798662621567798660251616524997044561301533332545638798527755946852445727867891941468188937777228366606532547501859733408033893918556168750942201731744749872794943260463802390118755564820664666033161746287816363441616184896748936552044324961750117806166223424101518916285648897331999217064683807662234e-01) },
+ { SC_(2.02923708991490176840630238442216715768751725200674633498021393052113126032054424285888671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-32), SC_(2.02923708991490176840630238442216715768751725200674633498021393038186461172686811541995622938699502131970339437751250339238625815957020497240862068215740583517496640248330164143489558982862806234162766064849533848215436080242913357931665996587857021941752158058508684563520436602915924175811991614599975795835696422654161032468437709940060988366827698300610082819892290092277729920515375436926078407908932472437573715334908580131664447785618965945457668393933348454041625387066589186615396751622114360e-32), SC_(9.99999999999999999999999999999999999999999999999999999999999999794109841645685043783972015726491288792978131514713708274780330025533629205662944646785839549634108447687840508965230119113963615379532190188313923611545568771941825154090178302130626216188195315323190824517446123383168919123080013332622969893566616492877927920852006877324669233583154264978656000830597138317838869261407433049633324695624794836488665265011978772645136673545407262195618625203203879355393108059137267873193617971618206698e-01) },
+ { SC_(4.42248951544894130940528341232594713442514066697910501274604300192549999337643384933471679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-32), SC_(4.42248951544894130940528341232594713442514066697910501274604300048388534828291368248000655277014127617817653398762581638618471290886802883726483863468949945059593381263242533391933794414525027070259790107407224559765775467901539274939302993231312884256750489422970198786159487386816526747486926456510926612894986997421618922394129244673415939823811066890368994392267277208762239811855012666341819077599352572997378141194070253849874766309784441344604549424903684138514279694274951881061702927451533603e-32), SC_(9.99999999999999999999999999999999999999999999999999999999999999022079324287209415370398907373981182933279508453789790467938655245533487930528343294733428329788530035987276746814790251459059570475803121922243235079973116073514685919176080150643624530110566284954847483072464101496311828806947357045503519156870663380634223091627304382316385761985476332723633210730619607992350388299054957290493063137783934349241860638349612314464275086378115025201466548731296891098091234203131949150016181066415051698e-01) },
+ { SC_(8.42781959567806922798262160232246372270599330117093160585906019832691526971757411956787109375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-32), SC_(8.42781959567806922798262160232246372270599330117093160585906018835004232676551216143003605835844772147804482341293060488809656855003982170735014827047357433688375956609359388189092785186417532268577724207998474793422062770690091917194630921025260130856747865767201476228381150045632490922495973100197965054663802088799118777412336195112563548331738071270545429477078683972801812259741537598080482468263547598192155653292206810106055756883930340550445588346208476969664176558588870371296008188404710029e-32), SC_(9.99999999999999999999999999999999999999999999999999999999999996448592843135237286091165040150796849379871624458670791989980554559338381716042829887191705426916341372304104795261882687098993621618405551393901151195570801163017101515947641613510338321872649883018859071285949307351409094849353881167676920664229923088157852833707315319923101074787754717513588395159959367332602241142957127421028949816954472640924253155665536273295336649713952163746432483241108913079712957120243617036879037622622538037e-01) },
+ { SC_(1.89412859041783001573039493180153157286866659770869884826804963040558504872024059295654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-31), SC_(1.89412859041783001573039493180153157286866659770869884826804961907957016457841277954170997663148947571036531047064431642805896330034930759416956199694978572815071058666731651254768105525868477310032596108285663712491486474491896466539021451298126209786462442787863272306809927492774070601577999434654525757637079097488311727900888155525874031426502421362589400618004106762210198078372938517086882765433014405633112910490353995497880955390232007103552263077517753158222400047231218622431738026725272418e-31), SC_(9.99999999999999999999999999999999999999999999999999999999999982061384414808821713576182666609878039644939897865544835638329686226491649739125933554321013717333433543099378073396608435514337600944379023047880002410158175418957761934774609458632133813775338538191876152234049430980809741103774734281423982888311235989789454329730656135971743728618766288067162172679182963181306945338676336790805660620388426574235413302344008441196805499833894731982742214073379793623068582638800144759140434822835913240e-01) },
+ { SC_(3.46050866712583180197896586726244593923755962967554050679908073107071686536073684692382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-31), SC_(3.46050866712583180197896586726244593923755962967554050679908066200403792541583724962851495560867343528889054708442883895437380069508042546263121005899818228653002696895607035375445728524805997740154069184308371395573413789830700635471324814652145015259054050169279264095836039055979403561200832628862682451061731921571819799737972148041901006837971648529611564412861696678853896181077926408637564058833153119920148214522871342104651385797073097865150211968077592727269349107621909741517960544590382880e-31), SC_(9.99999999999999999999999999999999999999999999999999999999999940124398823734995141596440434464974244751219327466265222844766372889104327611054096738756247812175767192010639298145667851662065738236651240834717361592738914549129079886068280561353392857420537536300576737568342768883135775136819101106849626431205672726699464031722219512428433261205505914094665663811986532588686230507896059311487599466477815387106085624087151762903302249300390003946296093093177327727085105725378839624124939177394646318e-01) },
+ { SC_(7.12945223095754899355092259734822137087975601614812590223202448669326258823275566101074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-31), SC_(7.12945223095754899355092259734822137087975601614812590223202388272065795852880530528435299296317544556995760601773638283325379911939903571836900644291057434079192040898145963464340595581666825670240485504766212435730089156718952356796619997620039045659579302729635035567455305579146178793297109327080700792525691652378010535659270634655634013027160489309630069697235358853454120303144972828027427254757612960692804314735367184926239135471939473377997839560418095284241361294625201102079699096990572732e-31), SC_(9.99999999999999999999999999999999999999999999999999999999999745854554432472137421356692322531386578841747106553826521261980051976928390485982266924922342534221178591468128649396587806039752619666583832562943361036177992729075795731069740929600978682292406399805423201293360461699738011150346793081043613496064788228338205920715197760196407916778244101828803632524670630307241142534473468033170125491021690127096505836902793573414646811153356864292269712182133970687352333716996429072607598331767709150e-01) },
+ { SC_(1.00660609334360197519983437147660781896478392508868099364249815153016243129968643188476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(1.00660609334360197519983437147660781896478392508868099364249798153858080936425448600591621973115560627855028065799333409897140200148885265679992467534852739850747222248848665862299107073399715300687099710849976158206422869350105977308451559506740322700159209742272248262592820712485642826574623775858899478336761127748047538148686933386140802062852176507997090596741478401266909560861459265729175839805366572371876499841116246530566431597941796152044187875578150097604630566317951712723436689304568110e-30), SC_(9.99999999999999999999999999999999999999999999999999999999999493372086421765833637980670400207365226394547668810490027357326776425074585947177784858615439332893124808170043124363608559227850238712400015608276209944227241371157871528353635158551830209899099887818354190139598879685295083420474600602830379027159206760470992231414350386011266309174227316415267053139521691420556930484870500945966743591236097202666761572417847833809770025888795274828592890925562550291716301144729756151134542208118283223e-01) },
+ { SC_(2.69123732824149938499603597762300694489537414332350206969124428724171593785285949707031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(2.69123732824149938499603597762300694489537414332350206969124103857810767495828489737054207251410808681122731739619467712601906527210049295464295960467277692977312706695955670199037202229435671253476370879184247206949097764210253125222013745966690247740273959101002078101052320702153894889859044028323293872207281921255575141740576311042337948417604760956103213467396410826888372613668017898457988437785165324322263668128076427321715842253774774380207618971473886124995752335661990322188081682637137051e-30), SC_(9.99999999999999999999999999999999999999999999999999999999996378620821539778048380463868513259194760492255182104854568796688266675419704926830251200252632342648903096548444973065272476104135551570767481529019631860487682694750175649684483265805174607079594632937085836760739509644610706339030789270993126743782828796190161346910749433340546847615059025085175720807259788804205543021767204242455348546537131091713872864499858332506952229596524693375212327814887803800604671074080458111672965192708371657e-01) },
+ { SC_(5.30020735520228274850637769744228460379981918842995369800519256386905908584594726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(5.30020735520228274850637769744228460379981918842995369800516774812330799508872620617326099181025241896326476412624958350438975815287228970877366059626972050598486044218179842460188871993307555735477910166154701843990230147811148075605205091149734124143879074762687642121485251530463684000397680784373909121287180220939449768835664018563015958901955939555918594959423810252278527245000330437175671279082182637911185388106902742727326345838543927260707806207862430587227020039893101942369841931004649392e-30), SC_(9.99999999999999999999999999999999999999999999999999999999985953900995929811476056422508436791230644190302525234876496203862361441479979240671670817582863831522397601477746273094063148971169325819181895476334047231053156486905486717389993270360728698723956084136276022973880242228876164041350147859316688277903051550256604857765735403446100822161708518544520756766090021113367159495627025122118690418451701542634453971356787032615030419972024177419316747536463094706047989637284849247688069026501348549e-01) },
+ { SC_(6.32867200109829532437439231857584752559277676327992301352765025512780994176864624023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-30), SC_(6.32867200109829532437439231857584752559277676327992301352760800903845619423737196357325304747879745252873925358692900533140087584092061056776880998418078436771366792172130615694441224553869516110696285113308449364458806503815478080022339617731335765279640230991043561567239417391539877766804593198543949855172745230422656638678997874589593384074934687600773210894288303473880880254886959958423405253748955161866378820004589056363559043842961556034121326086780978328676846776257244124423169029634234790e-30), SC_(9.99999999999999999999999999999999999999999999999999999999979973955351257249132297739506642628067608253815179906562758766893326508515403412089617957779132649053803366485188789846458854195389563078655816683639618659725133411639581407050701846126217909940232813138092643766517480225563453507972750436168378046481952469724013530977441367994976024552595817659400560646993221229292530320553163338423431159999401088147155330538375065693349415455291381281036874541221154864146711221686283124563061261693337961e-01) },
+ { SC_(2.08902732172766892127202343465273188850850078629450834455383301246911287307739257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(2.08902732172766892127202343465273188850850078629450834455368106932472518003442533444738013732972172524170504867713481295574699984488179497595556954982281159191426600611772457907280094472444446526906097767318461694106205023057515992153019190053074846913307319672878369674337703391926853006361756591941459322392837227726860734677796478409587068863467227336540796851320837042413120494689218187960655610792406908260360300781784460111226939154153768203634470611331753015040253727623101116831042856283118737e-29), SC_(9.99999999999999999999999999999999999999999999999999999999781798242453766122205539394256558981790035011916738210146764717850083017498869117986917334140105874547601883683652419246819349707324007233935785604229116661629866992858972496907635417802504686787088280017984569335880144104083641246079269870478846963689107325438580421100904625789353960763259740089364026058421956654839479843921798486264811522911491001083265611400386002109215984073917186677818137057726212767013088500337178286110333927786429660e-01) },
+ { SC_(4.31842364003957104364921550167833797346950293859213498848248491412959992885589599609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(4.31842364003957104364921550167833797346950293859213498848114269172593077298696397899384798838469892604707488011054598848283893536902678591236546102866040861584529410483678727842807847433276833855057760891318416503206022097303343679891225538057159244788369859928195264108640659876740964493397865972409304816791167231373348176915544777281551742557768615955019905703834857959520663077576140020595051789049976167763123526754999503968171424626064916365589309758779241063972711828380772013755486183258900870e-29), SC_(9.99999999999999999999999999999999999999999999999999999999067560863257369066964497297635006156021568522300783335967250349740344844534901319880357791301580333260447029645502188247052834316118747766647184283669573773641111448016551204104749489651931198788083105585218464325948673207669756192754134996490766498322067651248143532506188091467780057358394263396564140986264242252659898448085877812703282546394684396353711386913629178399462666156391453909336437084126881865332207056585053550245704827076211059e-01) },
+ { SC_(5.86968798787057500194131613525764999377749863741782210269093411625362932682037353515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-29), SC_(5.86968798787057500194131613525764999377749863741782210268756362039026093347106681700963005204298316540799263712160813295023896788923210038131231729359910124024765152092781848816743835790982793322692254018995150489459244698543524531669960364412839353464649104249374340424306627305738083722440141133394562858285415561309401781003468538863799032963287355962286330816653282615903419003646871305120817164223024587131178361020150902537655163124117909209753651581353015255478297486067561986868484183383569950e-29), SC_(9.99999999999999999999999999999999999999999999999999999998277338146252394028444360458490634338533730868520104582523076964233154042946023028494376942979900160655182099281740037312428247080456080860951235873560774799992734471072154703739778110386566354490103567627438668795477210527514123549952245254446118613994019388628262616959375892007364702781185996020488769149346311118578328013836346363736051454653074172300840059947623326863459329086865473983250909431232338050346477348291583646141405082621767203e-01) },
+ { SC_(1.65997635243685806687162489251543212019385665351167702397106040734797716140747070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(1.65997635243685806687162489251543212019385665351167702396343690649279406622208185685772371642042635555657583382378567496299367580435665007816699412063990899032379692904556199031912037097150817151154762330970404285436867965385550288164480644118405526519591867746797880459162436006007266307611893562468623609119099257581069356747154476895543024656480280895695912472010571599599251032231654652201571896290995321311302562791814134762167132281252046632937215018876055369435169910753443600501786404783549568e-28), SC_(9.99999999999999999999999999999999999999999999999999999986222392546752119877172455733144343422153617716843213233849865061714702604533008336989045404338076431604109019139656871515896458952331043568257115104563145716224299069433954165917783579195574952398453239275963477090613342763588712548617716508144008331395635254149169622982507056455120676580525624478841644805727152863309836112876912207670086636480279108601885879827013844946332071421481944537385339435290404473361071594632126459317753099739416686e-01) },
+ { SC_(2.25979760396654073712664394284379480891595572134011860043756314553320407867431640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(2.25979760396654073712664394284379480891595572134011860041832968719355876869835044365217455203766587679052924363945885330138781175699004356886326461315878508574607801535429369621662329867639012659170124626841944542706693024456895004571467368859613474653967637621966840269279943579469768147537831957760369296897132611902967456488220425778743950737821192336748172296951691608578178031434568917471992763881726196647605940577327234678663760031433853057319001482300725159609161191240732209972248840097545236e-28), SC_(9.99999999999999999999999999999999999999999999999999999974466573945535407540722564122644653730270335778455508418466529045718513922718886100912534895818253373538618832955035269339985226660671223323808402289012470979235802920473617365901795722590739424739236939849121464098738027239360011902586924503160858852829389284193017042389742359089925155636590521137424815290123425666004266451656277708781560088189215777182758042202386192993769288859261071925760207238131324480206028779549590623894468388349431566e-01) },
+ { SC_(5.88086945564520119649519587919781243555710122106194859270544839091598987579345703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-28), SC_(5.88086945564520119649519587919781243555710122106194859236646894415357551059141397023458417833062577359029564844162033204609590305835423056545498867121176126632793246793268385945281614118548944015360500160615375605964890179073630375449490595805026103275679829933163846946616206245364280259248011174962758311505159562522228739210437400034854052649377248021474372845818354013318994192752570529497471637831883781636591363767499659621054484652363632372161010655718223400880672351441357302327184778736180752e-28), SC_(9.99999999999999999999999999999999999999999999999999999827076872228296574784938072078042987632777779373212220013320421186320701890213115370714655904269996795936752835087158978849132030314481520851372148162220392252024392951130066198535869599322556283299011074244533964223971169725705069975036856966893929235747080621358676048032547928046779776545537078204166025672077226387013907373034921452470080143973339745452949777298353904218157467268717719840861266286404603250029803805345314117460010988128655782e-01) },
+ { SC_(1.21036877729163561187004806421015787165206423897645393594757479149848222732543945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(1.21036877729163561187004806421015787165206423897645393565204457912911701264816571244794535317959218134225014169958552523736788409114122297436868181226815279034412881321169642223875674097709647855827604375031824358241944144366445573929416470439005395503117973503734219418534728301453626181057303958103351724877851168203264142250990894413861772049242226503921506225025537467821476224063452800660679037557087017705664155277109587372310479616565458246051267877346509591647754710506255296568393163396173146e-27), SC_(9.99999999999999999999999999999999999999999999999999999267503711478775496588677576535325086227779597221002886707252402490327884747951115784517104936932808165900808724915631123641727203222861050150147651933871354484108448566090657978758580039215062735042774308027967501555759664924302333070164047939619478223553520745268511199171340924464150362396855520866386718959618607407989478385259566952042271426836234189920618059223328393025465752381963814589296901671905473668692059934918608470334521245869322388e-01) },
+ { SC_(2.86591780197233630096266787463117576092606550441921342553541762754321098327636718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(2.86591780197233630096266787463117576092606550441921342161222222068580800966682544137566943916529202244565026849165917689115339968634607993403360769926559200369755774662937525267563059791287293737522918628091563802893224163219102022651770299219230186791956803248299632691991093629314199684333347897102830548237298315010311044730195485193084923892424338781964874235326160341226843298953815233839005737913847063012077767968705624320802625055333001429140528531401876618817093286023128173313511518783122757e-27), SC_(9.99999999999999999999999999999999999999999999999999995893257576169026285539877760558795157391162603540944407935916752527193049445428999402129117183211740466656201917911860186104101449147091696064423853526679157666560883407610819215488170224094967395802687764835506335828313831539244774700666124123869631956899323558688233804969117908091547146856294231360568401947557943242277643217697037895388293183516766769220683181080990896035663431905961308406527737489186974575173159921544827293300371415469682081e-01) },
+ { SC_(6.33227430861452581999484454611910693827255339205528628099273191764950752258300781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-27), SC_(6.33227430861452581999484454611910693827255339205528623867446152256841631469412291633417546931889160651496054333610986284102110667946485950432616582676312411355058576717839739682518159345923185634501417664843880718577905491906539705931182725375625919372975202996361570514461776634408433338966339797977448297118474782218211957190056184522273280748144857873967637259418048395430304299989325085162205248868175909572286327797137877060354856008237080835087356877357082257080856918051114008265455655019487099e-27), SC_(9.99999999999999999999999999999999999999999999999999979951151040230214506255192196435889986395782955668070169865274515021265153938340100074828753410630959573723255540421525879853083440370617587321442949822080689241095717596747689845651905140383728830851240780714315821784210013927509314368353073945711513577750238180546786612592987994333639727450312140879771130424423234759366739932350666350848077167008448715281548827725389679678867019894421671713832098020861648755429255119400453235121566672119643836e-01) },
+ { SC_(1.01701488645048351742362491418610868671324604095573818085540551692247390747070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(1.01701488645048351742362491418610868671324604095573816332343711105452574091957492464881609874155310766863692744462832576724333201541154072346766765699382330455449328670000824693475330729476850648504622116357428393638924348684334202734614590150864624972747190059777114682884495479107547683836964389876682263545801218406797696755174002666675010845868456246670653754593640444430031302545894854186512936706715445970111851394306952403843392018334017630380881701135995898449745556206987272254860458827723014e-26), SC_(9.99999999999999999999999999999999999999999999999999948284036036905505878106539445707420537760789527302038597212359467142829365208706753583480314769727080472930841251769546963351409456940449361362239231140121358175313406601933249214221483709738384955034161941181642229311966635264585411192939606100913693988068970849472839854304825457917976633971331888622416264553414786998678093087237386348505398600997287141943187035373529035889477280544420651863692708964270806259470409468261873182906215372422322967e-01) },
+ { SC_(1.73240757319454876321712945561046080415745773706248655798844993114471435546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(1.73240757319454876321712945561046080415745773706248647133238368517372669601990330799556402527637951741269169384293128872046197615617540226667834356423933205107188427326680610133548185919626864593914565621395409502576131328917183920809007874826137124733497023570796764712055352074351571474372289601075075459499674205118343075830673541226595909902574436976139978649084117906201588021595106776245227150460713535970276671005189606139692578545494385608927634920188540193618266875767223076936884045301799348e-26), SC_(9.99999999999999999999999999999999999999999999999999849938200016908708476593647714441301333449917232983935589882430679475416544954876348553925397810778869587095531333583024361182841302517003625488202943023609471017988004115329958801794805283413883069329219120736694877350703706015755371121018859116819175362600531729848030448359027909259268091751758805481267322816409703379926304051989443909674842437962170262660244896591208386339631691590295468623127273625017019234604902092688257738783189975410798798e-01) },
+ { SC_(4.85130351485873938948550752347723088770022059623698851282824762165546417236328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(4.85130351485873938948550752347723088770022059623698660989265579405845396658976637442438125095176181951006434441217066488647145239434103050209020997217669861406942499104808384488564017630082119257664238877191868992490954837514807928987158262879297403583333129860768534505794967430677313206771592868244951747851027162098997296373643704928156139018724130712676417846050295071919943533977576706542066029275753906933389163939680811922115873915597763149085735550761292088164447226954970021899306732669714194e-26), SC_(9.99999999999999999999999999999999999999999999999998823242710335962048381002602975450120082698125730821275809015238732858397978522600912421317625034506185283381041247245315231181192704687177080652677909957736806277323440788586701520356870644612503456121454600655994784709816767064317307696249210126595367499329958169688760532631401384290402120831004217069063591636817019515117344034470106663201743497588043798600260081810421172904526658043913027664092737590681657820960431067605822773898751239148465316e-01) },
+ { SC_(8.19564111209312229576920614539122222344177948194499094825005158782005310058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-26), SC_(8.19564111209312229576920614539122222344177948194498177343017748383200491809918243048394658985146309801342070172798129317060732100471869081924638003843624841659291147365005979573125412883269496938888583134207844882906967296703010454542313998295672651631067077118755715916679489586784469054418026434594124039687091670610435199200304712425457430048065297796755899235763622284756849628419660523825486359434729527454908615511257896148281635239454700199639016349821193759549082236859911041071907943324237564e-26), SC_(9.99999999999999999999999999999999999999999999999996641573338088450481234573457024398606724972860597787690528561595250368010475731147865565852358362282402377731027222818029922533458270416761219423731258201786579933778187649172980926082987949990044126602969665006020738715662221823288423516963711294782279533044098884502137714956876894483635745762291452505629096708868676483888239131082349750859024725134237454070937690955419743758388472674956943081664624739705487388292808532654231504313310874444108604e-01) },
+ { SC_(1.86960971309704747834098596399691609741197662053480144095374271273612976074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(1.86960971309704747834098596399691609741197662053479054910462327167331615239418817962503081932931890340451634960464660216606441811761316234081177905303605337200742387367688910565800341036275956637563852160531953554325135475392833468257948608563494113749585234371551757071694130223915334283493584239200027621276364767514754042741892585251741381911793055254059951345608157552222810997419824596284086600442530807235414227929183812497937283829173203837683555094044436168127344942265592102254286969191292399e-25), SC_(9.99999999999999999999999999999999999999999999999982522797603465879073668264091885252923350791268663373238222024647977933941949502217305685050899028063005846531020583588854912080275336499194509169417049847433982967267356038709929706560291564375320329012735750986169796551989634393672397269192191279813362016633847875037003261985025832287816083936612617230687954205533933721331308570516151542799667874668414065625948662726592275792037922673887795272658210791962804009894010101881541472393674935408472853e-01) },
+ { SC_(2.53078312700865749726688023205126403924331013328696826647501438856124877929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(2.53078312700865749726688023205126403924331013328694125094200048076230080016126218639853303928255377939259690268714396613122787433650320374366030227782619269823933735767013246863110450196910284239084879826785393682811763209776116521693720560912939421095526746825545988905306566110534284089078542855109778438346269505715388785102546321876470210562584375169773147320543891026884940507054819007154856530305963667169008200395231091814305437937091075813019418756767568761605780308796701014080661492368159784e-25), SC_(9.99999999999999999999999999999999999999999999999967975683820241406874948934166653533511172092156534116443975462625617239327288391590664122021589352522847665373016292962519418353924774489444379168931261935483162281553621603433472072728977349555072109712109824679883539871447602535796929172730022419399714416003150322948950527704596047738139301910101594105207474101086184045874651597158224030689372875979961705537903665460088130392611988152756381550782800594641836041649779034851910713684757134469554580e-01) },
+ { SC_(4.20941306621815835944433538670569070264115829616002883994951844215393066406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-25), SC_(4.20941306621815835944433538670569070264115829615990452785496578506081955278927818933546242324234408087507662277600473802576457412134611750078738527194410669419929668722322908268897559932584917418004310810500892339693081122324922113982951012729749899983238419472551739293314611185990890280330838588407393840465717473935700337993507898010621074737807869345998925750153486451144321089261659824774170196857387514016640452953177352954598344864951502174653356419210290498586955274100732171430477016287905719e-25), SC_(9.99999999999999999999999999999999999999999999999911404208189759211732740935886171809403395266911806078856652711466436054573598817523340373110699177394159623578955057382297355014218133635413780957701638933946157411062927243877093033139217823648280095519300316420682551404000074847744014121081615342707317521112431516941533674300297570189514239618931688209087596074231043314980205424667058883669569048269145955246279078436197081567963182117436875444286563920537464570946709214553473195719248157805826855e-01) },
+ { SC_(1.44861407368038454520845469252141317524629204882558042299933731555938720703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(1.44861407368038454520845469252141317524629204882507377439558379548241143060497886024742974552920942134169066357766969543557906176014900674357628857983142696780673746415247742955494485041233510432503498990662670897583220950378641223845696741332846886381559562313740385981778631874554601554942505433775616570972824832253816067914468693529837886615045250367325077108821183878776735677428964476732317113820955012707665146207822278999507004827271272406590842128507252382490865908958483246235481037761488907e-24), SC_(9.99999999999999999999999999999999999999999999998950758632767560708027866249151335156844582811589392427860365058124782731991642089310632824187653159631590934407076009545286555100782968710117672092259681922314774131655526310297215642116091062577441465725300669936944717371937199769171206287422313565977915692312983930643989022024956769092957221565563347010333758283732976918733369635806586213023769317382137590042397624049523931052552394023183946141838267360143101307042809763499173544335923553929609545e-01) },
+ { SC_(3.01299821836738389893191302236946692641450518124202062608674168586730957031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(3.01299821836738389893191302236946692641450518123746188030755122968582984350853696020509762314198657323081151588680108336846788546232411715077963117750110231668656877141980560982390492028458072325781199487427547774731142002830348058895360123183367536673133622884929051386045183595019288409884649664003307670889826073917169193783491732886154383548786467650171746923041854625144214891691798636889671240986472559884025759608696658369677102207417841369481807012979833164166774827934061044684944062744673202e-24), SC_(9.99999999999999999999999999999999999999999999995460920868057485205128768495672594971913871863330321340890939584043333958542050402215331205051475347664198466408074500213177974669224638083289662049237142284601195838742716676332740373469330245058121848911657687577461695268645535074585543539333588005818218743916760513910839394682596564857909507975555965083387737997577009316309396894895609075395636625325378660457230047137085278175267168516376809105349281309907762284048847679978876273402954417505488514e-01) },
+ { SC_(4.15276102030971139663869209978990740955717697602267435286194086074829101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-24), SC_(4.15276102030971139663869209978990740955717697601073833203741542064934510510526957950581204331883394005715948630901471997927439830104941785824048551884364735290037184153144384976775028148587726371183017979938291113875193364207150284386535169050781429892659177118027944006608871228821244248916843584207889779509611438747449459759079063415836045186956388107365399108205187418470142097577403806506074170019542654504392938836798968994724336717205552118408671854359307226530571092950101315722654561248196480e-24), SC_(9.99999999999999999999999999999999999999999999991377287954098122384541119849606577690137712663052237626484886226624201275179099557875928787292869332016691331690451970323191229894147818897508450900230579748333236740459401315242524613097017574548920324066573787146553420482969984795794990966084403222750515621558455241429579692068429292194601611839618597431386451583256294712361622373650212144590915969048413769735033165732778792781611903036592449421019558254266016509793355137641614746928246864257491767e-01) },
+ { SC_(1.20493139018354050396364738592701673636220505159144522622227668762207031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(1.20493139018354050396364738592701673636220505156228870501377072546140795785448934637384040780928123818418711832097125695859823774786298584802644665761440524674007808622689693328364348533020413848466175206888319008516841831958103380116912523837504422147239730460369364452006526848629731486262997785608581521207131727962356854878661708837843815080362453410963071299076782169063239102687079062367604358347170690882963033237329507516340046341643171849692271577906500225569305343548250042626451511137175974e-23), SC_(9.99999999999999999999999999999999999999999999927407017247518023542093828750747845440983680844635722123270981180494686023648655779582416049950013567041075891205074926299102616026352240680612367089833234497949938042589987204061624971059683439238296677903567701771646424710727595867914797338473188745190462628716359293458300735139756066056975915457284798104540693807472391874216930264612444057558096322941234802484276390976287104651130487501202428300210798836385845155461653897798462137129023634158590048e-01) },
+ { SC_(1.99311766155840730007938784094077312725179496055716299451887607574462890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(1.99311766155840730007938784094077312725179496042520139764883300439646816368720456092676944471103322025451567911795284173614337721246228874587063409912507756393062952430611259118958267626461375511088224904898160946614122052834853089132640900055314485320719145583388248429835054532103183976418847870032408144871456509905573547188366856627559148136421454622564586651099490169128108968885059694779125622376422565777874605339289879857280154803293613940677047193724163580178692359761986787333499982011811429e-23), SC_(9.99999999999999999999999999999999999999999999801374099359197308752453603576131047516452927368262379188764120720199355009182464606310796438364009611630012891309259500469404587018398076111559503245120051103061305045948094247341241375812558792771202649745420669737550570148968618631069359581952924771812453743995708795765361659351053384477330821156187950952631834801216235080165212423381265856687853670463014423100331979948561859656233260381056967971933208534465447750912285880093439696195128696304586474e-01) },
+ { SC_(5.13533303169498441896371390810640406021647663692419882863759994506835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(5.13533303169498441896371390810640406021647663466707913784420626786848577539948342073166036025847669329695284322217298918716071238698651343415598538250431670607803501970517843218886621847266716883178140747653725502209568774513395235783269558998316168037717740076267726591747242174767979952117276381002699472649174616077021164949081299164057659469591297012095580504483012733964983651613576630595686881098039543282200671710571050264000758620846664833057717433853732634155777995430743343236699023074748072e-23), SC_(9.99999999999999999999999999999999999999999998681417732679120007652379550596591905492960756265988856401363474370065856842250691051795682600125230378048035765792891449165989441598706811070177528273711549839200259564336326789936789663320974251530646924695649992972236365657484978287531578871981209060244121480491480455181587957340654196842168225043432465945367410684908910349873995251736646698623346087505106038789446124069111779751785632824564972863033165113004579223400794734193596445597759923144733830e-01) },
+ { SC_(8.99483690375495720736892890190099236757959033639053814113140106201171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-23), SC_(8.99483690375495720736892890190099236757959032426143668731447440639681167212721719527797171146780064711290139936822813266107297096694010903437273253094169778604003578411890116254167896394141888066597915323804162041623834369780877656788545758984751109328238605945538232424708584063182474390962559554571796521681751272081700883661854119875893085070506261886828332864936080100484756483393062273557319802835697341546617168723437273949322628005639380524256721160529017905511793830342834237004895799326242479e-23), SC_(9.99999999999999999999999999999999999999999995954645453742396734618715458511854104184495562420188515421533916537429226097460026264036467110741766607883632933956617708518701079643688565847361956144214137931960590472723950498992697567682863075293755919249786604882766977536693359519182877477328890563527188345220444160685396409938384931861947484586479429357220482338242240751400752299436874559164364125531924378724032958139179940023509176370945771016673914300929823722007356528898870479147557517389880506e-01) },
+ { SC_(1.49571864649346833307485258625357804618261070572771131992340087890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(1.49571864649346833307485258625357804618261070015073920275828586139803697397329298876247049292767823930721928664646280396175986573307948574603167029053759708351340408089861830842252368692479328806151926456552410054517442049843084891325733155703329349183805644836512051216479326535756519496287734545419385841272613869470168116766771158038584407332321007611244158281808509334596772913678187565743057031292080255305715499421711913564786019743391589274653289046523695017001553101130979725615147741949041976e-22), SC_(9.99999999999999999999999999999999999999999988814128652658735548876489751653632066463267199996838874546485861024170068076642439321865577096911069193054009247807397756338385789586245178053759530459206338181619982472545153142325507508933237793989645350340818618149342431112261373507784681306094710396664115931177436350260577400393592421996537588766274656159350651739114480607092171421786422551162853697491835876809865771806493320077450117619067382134770625366483400794642466254424303591567538322745697378e-01) },
+ { SC_(4.00414284431856607422728851794317683765456195033038966357707977294921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(4.00414284431856607422728851794317683765456184333195206973700974720833412827561349111534903317556817980656128133092602553419958729122900514959804969013869789265787235423095621762770597973981276641935386442897542439663060611413606555088682296544134840138357497567048333704772308885787535702653546815581320437704238908588978564235210861558437389754925738927476835434441948940351078398962913317672503714060148888943703109003041746013446735945490894076945108816272231149038872655535603285151831784811543159e-22), SC_(9.99999999999999999999999999999999999999999919834200411462117654908876795301697180266696942853917756660287008811612236377008009142526634798790119600335365087275113255748079314394274449251893378218614737201859271607325227251618933738225971941576528112220435253954268170625581637995387933236258130147349469103017765108522242360528131339039562505036202933980339528694872687238244385449943371413059087702123057738972040998513745694679298693657755065316883784332064415470726309308364222995539698254590438048e-01) },
+ { SC_(6.02733756338251593561397041623819981204235318728024140000343322753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-22), SC_(6.02733756338251593561397041623819981204235282233702566913401486791426775103687110889263957618410039087048941273101200938463614468150120827800477838018770842674180469716485597405584815675135794066416744168771828736855620073291330239928662617195730049089107104830809640584583111672877743068233572354141431173358317923356008888890653111138300825081984365317849191686467019463412431488925669936662236278811783071074301446313585328727814832562767268810726343613563857416015442117253317601957010597175231649e-22), SC_(9.99999999999999999999999999999999999999999818356009485190578482546674221374375368594114174739562163693168458498108577433869958984955063014426674897062191529113188079524114052399013805667164356230849740333628262774905524309526854466619324671312571709022034295074629727972637948818437287458343367815594474164798876904156995774092308942455185318540096020442411397041128497181895394926057420958628716609903020544774920207736406633265904254545071924231990748168185969288263033548644250093223918969099078529e-01) },
+ { SC_(1.65958441830993022957262063472871904679095678147859871387481689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(1.65958441830993022957262063472871904679095601966837716399153948392276724593103434089562172080458838515273187060992126227997153192115202457915692129454356735235073605400638134357917784912674110778169847461470040894546633501732110449696587200201476723266357619796046417510134449764621599988613996516194544816998146347299996219407734259110701663299055122630130899519332113285313562567033295883655605951290101055589376890732579582152046564923167765874119374947074868067671814401094675259499614273388721205e-21), SC_(9.99999999999999999999999999999999999999998622889779251445258286087621577479547730371095511636431074447800273010019756467107497424395835806730657399701787227830411590271458867465739237101448115269271934522847684554002785566502858274779864682062462477972492848515295469837308173201281626304797879259332255094869310728677490420013760396455577678362901935667125091682248666889454008184912936448873641174478629627505364119977753174642851612726858065476553313586172210586359118094844336594068254853430507605e-01) },
+ { SC_(2.67824441797191267011934057325206470778766743023879826068878173828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(2.67824441797191267011934057325206470778766422840064870362843454282670987808803755436755298645156076250838104729082319930570856455235081015866539151471601249584165034579417886690930391378085994351144416093816921745155989539888869178642665734024688215770730792957971897714485926300053104010312217702497787762000600178131123822923068207178324331870556717556692047768757211314761404695899857873185399678411750902389980370316784652673933225122309449058964813115616837222131094170241529694767641836586628848e-21), SC_(9.99999999999999999999999999999999999999996413503418801145372469006266796825097449079547965742050312045236434812687615811480409477306286249752257313861368005502632923824453712494844206966792030996008614656490931107917279164562515860009828987762299164627454998237092918265924072060166259081213225845889343552482167314807271969366924784558616790588874124263514421653083849971429085957566186712099445800428991117097329072977627279324265465922751250506427025739354053214371066179711645306025175538222679648e-01) },
+ { SC_(5.24216989034958268735996849210789783057862223358824849128723144531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(5.24216989034958268735996849210789783057859822414858675259055095569448734151215398339726766096146349230311025214806431942041459877604214955154666281316195630230528893276830669442194807933628997209391753590753098673586783891123345377730826919565725420391992871094492091262542401201132150073945320046259477580799694273254959986871822615719799353804620716184323201856322354973907153381511764701918797819267745133531796918951528706196881213538080733436799921765950225419130205065909600439051039676665358438e-21), SC_(9.99999999999999999999999999999999999999986259827420356122112195185551672366624073250839599194457507453628742642408825539587574321988663070531346665091210332453377213607635910430558804237795524086420616498779687994004617113416213076016284649087888750760030455121073468191914791665942367281561547327106767288655797810569336941648083751909818487275941957413272284668887599357964225376383967099007378119631322072540336535338653135115635982689717806180965476057119726371592548750686453644217463638771365051e-01) },
+ { SC_(7.84730091257718428828730593965756767715902242343872785568237304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-21), SC_(7.84730091257718428828730593965756767715894188380156124455910983891034423640868297767263887550182849297147132094175148945302076002226638259291036091716141789071639833073009348733004619542248113421569210924255758451199583877546268516634378160445786592474784984436341844165522203578314841448712063415108370957352428729953649018180131244898775199678867336912535166488038811707208498065945628369299057350240961931251506328297565689454548369226193613688346870644768191552015883873931768088354532679931063997e-21), SC_(9.99999999999999999999999999999999999999969209934193732645335964382330379290253067743257178776587771145954358465579435678655286836941465589087619806854778963332640469273241540043384000734386835119884823229777143085980583844451626007518535647962371164606341778086677564382803208102585069159214424081238283097552554678548608898040886644227817986624770310493880047109975878179083799382082128737216670025250465946842362679942603966581060757152365990866172573014876004863001409841826665676884523747998078108e-01) },
+ { SC_(1.54312352729357272495300072712165473376444424502551555633544921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(1.54312352729357272495300072712165473376438300281922995823465878950244844409842644794531288751261732596721610642491316018434358307548274540483643794160847070741795459748461895642004476272062795755403849847880564677825579599934784750161452649688717239208196143024661915646344740414093963827975105765370910223327211058618438109286320788031834316649009892069350043756814202077019809570433098648537089622715106088352747705828628681809819934794959540948429448184341283146097311426691570520373285761288995802e-20), SC_(9.99999999999999999999999999999999999999880938488975652115669643213631230248126799838296779591231609801204436699360836757494663576140036341768217196428279881453755452963024766965773560507122795822076000780692881366245754195533398857596255693285795829751852318699096142023830350334754364808624892439333710684341795169466561692893207551567117843822386554921700320723066779416814835120422295083102698726676136546837592879162164887645156563225574180182790368161855975114174502212139974273411738602866251571e-01) },
+ { SC_(4.77518184435850312824695974855959690330564626492559909820556640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(4.77518184435850312824695974855959690330383150786986950012496836930074878631240804035124319738780013645083375077544616898561908312065941430347802463107453041858495671583762741096029923257079257302968047790550769792307128713580082994690133797370824117510373959841609896448673241459037898046030086145115469025705353364577688588250562688270970666695785406307428035312168024680392843053488776735857595501213628466833516667726158422967395113793626911252805964855127321974455583739901636298003420464827010385e-20), SC_(9.99999999999999999999999999999999999998859881917665446220291365201399797968099921727881847815426248931197078614981311072035724421911759715979094472457981523507074663281668078107427532373671551387866380649320442592003200200431377322948753077746077574202454027025945646595207601239042527395341917368022264491271985293624469146381728776687435996883164233298131425702484520495446810290560085866721990974101137184112839486463835447743589853836128729569230456404847333286069284701906153131312047203315148300e-01) },
+ { SC_(6.23033471350706135997738616127961108759336639195680618286132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-20), SC_(6.23033471350706135997738616127961108758933566957847999289308558170784132778968965056317879231412769917679771449539438348439187932432493322547267013194531309417671787810003677479319468323294595854503684255557491537731045988638721316770431599974491396281662487780560416719890123465165060033082902143555001286051776247690298863659447671949751100979523780429285085076607036433377399469725034990238965854157158763546494845113581705197635768323514084271939558504928218466777087816118281922669032194856920486e-20), SC_(9.99999999999999999999999999999999999998059146467883444182268334649298276434564976929585548792314224542993928933951083639699574277795394564312994424625369164959037371172773384747232025021592402636011483717441355967233675768383537538357257986806020531720706435789906784405523339574569102482506955066894177094965148419682062923055222829644783438538549051815255067258408435937976971922027519308509543595916785909437447704234765230356260327291111447155186396159452978437353554256394464351228571434927304711e-01) },
+ { SC_(1.33373774787437629268591066100668740546097978949546813964843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(1.33373774787437629268591066100668740545702557632514609637109354894670795671905012891418174238222956443457378985272098537652333132013350163148619347266169535428935790271959785854155452128955268040415297439974798617332131470285817296376813372025095563270334709839436920485315163295216999970532915024196623990234556546750213339892672121031667423931247372788485766146488884304258726675821256736326005518351249552597350782054581090216636090655004539684401347254213062238979175599528628149953908411989598459e-19), SC_(9.99999999999999999999999999999999999991105718099474933284806139857400813352589827517564927043682648978728764758259157548540521229982370103779386138188937766605887502378218907747175575340569525702100714564339935788891685749871866514578306868104810273210249836494289529105147374405359061719026715925340956119852852492996601324880989891212817101225911122299495377327270035416555776310547611050503379101499527525151298272309849046993736994837320252913021267626530928647167494021867650980452641151659034895e-01) },
+ { SC_(2.72678641362033605222928850375652132242976222187280654907226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(2.72678641362033605222928850375652132239597113865233767282496812811434547903471145444426860140849165730840154443142045026389042524606225536996273431225195010565142182031866043832827369044609848704703782132802561090043295900410238999861579888039814092986414773412351284654281044246052360633441869568298727826155909328956857265054324941267888898815042029695822947856553640688900715106569954380462969592595043533559140576168918044774278564716729030098230376601726176338392887493576556803716314240985244825e-19), SC_(9.99999999999999999999999999999999999962823179272477727965947093384519089206611732778459619581048522840843983255738245207282856356470053984205037855894718532833271990791091133588186765379675456288234980220490650098675151780551707568969447539905274856216620993281787677779454733403694016219238223636757761450274748937793228503165450442613649588268034562597918498086592965280705305942919433851691464387890013808565426437488525566307607542416920601654752739157313437038398177564522256160039491363191017743e-01) },
+ { SC_(7.84847163163788824526839738027206294646020978689193725585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-19), SC_(7.84847163163788824526839738027206294565445289627706367397044516728216502661445392300478006248633939386640842420482995279705186836498615499704063686315382015944481417124956438069937893001716889658824383315836128859850145896671561869807159580264109008218390919771400485087005083932708363507903306384325767738641480522946290564444209005855639377332161802587036895543893713301102591999134123077217638518756971205307741607894644129433547698592923260994621866931698355071283092718360372159939763148236356081e-19), SC_(9.99999999999999999999999999999999999692007465236876521225591624733741973580413992094514864951948409477638354994860924045902686945655537440822272877755997184065488715073530826515341419594655069460256313924726013950095489865778611313502990595501567365333328403336978055022497339264912331540809314218388716961805500397317409139244048139568851551974274994613766476680949014369225330326153094075670488566570809659965208296833269543942839437306713455429886097267390826909886913799325068151515675401821307784e-01) },
+ { SC_(1.59656777006820041215490180164238154247868806123733520507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(1.59656777006820041215490180164238154180040523146025537688153328547760359499813760904753192863253468773626712297698660124388326296138121710134471432406051440808915749048856231483953159574219728203962113030610855651177879388716588720129915042261664035793682631272244330593879603534062436307902756624026615456937074668685614020808807209201572426546153680945500170264414397099342062973442361578952380032313799737733204426677060914568817376985131352291265491571136049590994403151805024530900585006882465838e-18), SC_(9.99999999999999999999999999999999998725485677789726970050441887873791324802821873863599682065675369351546184000866507009103149360549935240237154588525165432757567980472696826283523224052289490749011903664848152710996398754070605570284221534583084155424171763973302026291361113216315086799683804698865388858367703071408534692832158042217078221374921429321228108536764324255608445406900297031772562838405852406675264021549234730524961286458631341099514706834735141229319185038708420515965497634457920545e-01) },
+ { SC_(3.44953506024823770663434441274830533075146377086639404296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(3.44953506024823770663434441274830532391029287068934228996677746001591898296589668811859099135418230183368869090360366169316970324064915891904038980287950101288861517367153994714618453877419868135863495400888589151982726942060284747289611794798919706164618774056608179851652058360068165608781457601308274531931492985898183893679408914979686066252487633256264623427099975969033776016116820081774952167052659583745697715204840936711313869898247097390719918108455249924815936377403504970454933340960681185e-18), SC_(9.99999999999999999999999999999999994050353934059093527720023368612070391851891406718440574162266209027406523980686123351044050966467299673133404524778194021524254214740402040008906435126427498618501963733597360987556318089420367195395956628391426699039046618616479253844852188916292966502183910384510396500722228980724697185501358054419824202059485672658948142353306536149886006393532789623679836881982922548558194712986003534069955762666111663959634870672560092573427252698709721428977646938742506195e-01) },
+ { SC_(4.35166485374347011307050170358934337855316698551177978515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(4.35166485374347011307050170358934336481859685873216140703808138876914884948876331316739925647147193023892864511114548238457128487754654556216343738493227753816508527036822424078877053377450262892442522287960679598399216373675467067420960306212074773556400362052082955699418548571551788254097519705082720856063393741663277035047125589079587783198416413169663797774698575716466933356398467157205064339327846149216696847465253262085226226554946659832296405255702874805050585475448565274780032487961906445e-18), SC_(9.99999999999999999999999999999999990531506500346911434918787920899098195107223890450668484205227829549023183287220398482022387187471783874651026967044131244719811336026254678190222733416033489289005400050123232478835262944811994584478096472240564710057918847691506763403668556132046747246126505680179175030370996427156273193469951062786344533187975157358909776771548110773203090274293899180349800394539287346096992143426016937645719411397808886142140406571702228451300533351648334028048315509115370507e-01) },
+ { SC_(9.24571534386041068466488557220372968004085123538970947265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-18), SC_(9.24571534386041068466488557220372954831521512026783180405754354097886633909666420259426993221137091279535065321898200088264236523724424960040430570024492732801486261174800152674655450605909216450153664375989066460839592611461245370445914423958469134702623836585450775145273632179167068159633632516565206133697650089607101943944658893386809234746268745218644974101782367190994926519199092662771524309633358926212213660561746092502239714663634109325449891669735443584060620900381198034818129697477437067e-18), SC_(9.99999999999999999999999999999999957258373890152083906642579378593893901713675765098318926413104745110870584186071073407804185704163908348012520912780573078297733751798245590050762285702888909088013591367509411470242468260490885859347433147346225932292893244796521699179017915375269683211891843022671906243123097650437828622789131762134264796168556176234658033104766744814914904339713894114835117307900457700205766539066206181496361808280227525595233858167413695522317781531300493715242483817542972307e-01) },
+ { SC_(2.51782594979259907296692544420579906727652996778488159179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(2.51782594979259907296692544420579880124943902261708085063966052958947147187189514241614449776830904431946870970159260360455691937092075466222889953840855771868704636118588224163624330062909301674972199987289150997146172863151668928438934140556411036253155163667282032912833405760303498275742772716593021336311752096063104868665845591806232654630920833411198402563942100933397822310625608203804916226388547452865994565194163622537436968388997541774348017060507709506033121197774674300740105857149675366e-17), SC_(9.99999999999999999999999999999999683027624327549818611642405259627277734545779576176956905635223388012474302610177483603851865686459231081769991335822870837867041940841659622753593655014713940872093638971093240790482102143812831175709620648245763558424105881217295782262911565235585052686966682126499325038194102297320702415146289036055973821432912093687266500152913802057369103672457993874673452831732722685075424587280286221673083152862430730343082806366094609467948165260813432090271885255078181302e-01) },
+ { SC_(3.60775684432840075543946767311354051344096660614013671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(3.60775684432840075543946767311353973080369334858269134898134738756735710959677046218904765558906885492364334061087292000344970193513481403662883440148912074435103556813083982898635787234571361755716055018572586190298430906370378661560335191704015720371244055660846998368129007455709209071804971663274582300937117518716033394923135198118931181280814242888345084797455361388619932190727294536114690351832821038660288193236381399279391092707971406328888496938832156195246642052265826811660109189638402499e-17), SC_(9.99999999999999999999999999999999349204527610078975893456674652126360120817771889688340590968406061460125038582488754724017627375833001324771430239571028894899497567383218424464834879205022318861495316028975968435726716609929616209942133436466398134427112551311140669580095176152342696145945467540112296016461483911736978651291905258534879989907261687437286731511535258583610086316346495465395414349916862854388934045881989849797218994179829942041721541151900222125391260679662481266724801598694735986e-01) },
+ { SC_(6.90295059018608417669704557795284927124157547950744628906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-17), SC_(6.90295059018608417669704557795284378906469154946034628615057275758767580827917168872394030586141560531872074234809560204671436693044343425840391457010301504740137412171139792833213101802925834324490824649737298051601026361059699458213672597472671940024151452085874111882881940096147836064982443543053856840493763963733305482754535226167817708959873515901950734304015397820960143176206034587501435625778875628979453297551205219863495406983015780361797852016321617748926259009982380223123180180635317112e-17), SC_(9.99999999999999999999999999999997617463657472479607266215131600498895145019962619817073610305785121833967037170438681582573928284612137780747419863832305571281883014950124752373550795955181129976650681557447404026625564572824730218895963758905602539829994766072456089977592244417787627088492524928818145775370505461217658955536144756735086815718595245350443425602386634810449310841322556872457206827318110637949603603506259040330724057028251216694224515414944270384104053076948461167522911334233852695e-01) },
+ { SC_(1.12525415366977613387811096856694348389282822608947753906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(1.12525415366977613387811096856694110923727366543178991248424063936367102797106855871236693745998067792183896492313740966698000926384509124609429426947250949336737827454663845525972326893699060730973692704401099534341951883068691454285910587103533107303005237227528372401263431557132330403274340519948918314428351859975268429373327658293293126940989855765542949901183195688709343608094809310090493938946747815402871007789220671491796635682024533321624753650618068739379453108842797651045201761667915069e-16), SC_(9.99999999999999999999999999999993669015448244579190490716020688404404988716129435608800138080386131101191985387656303059757501675622372081366205214275299789803844591657957023425966901002289779390222862063087950428709151159887731980350511804536405521204092863537711731089301980213111230626506493072162164721222427263528034471459447079943925573395807997966484588698625396806888099131723626070423844207983223693719453345905264650308583103241187401206619743563779615806788459652582739288156225108227298238e-01) },
+ { SC_(4.28382572030007718194566379565912939142435789108276367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(4.28382572030007718194566379565899836945234420371503713724232371619461518506013953070308907657022223120432356779587799651917208455464125023945619250322620734440739272636606036542794988782854081250549762246318356169949227702350611711099210997039015438674073645627935319092938030223129482110154686819363861357190498576723741502657507450107991097688652505486877417543163721810816380539353617200530000879082221365523977016071919655819686183525162967504230324883441039688604036630737533267004970821556250520e-16), SC_(9.99999999999999999999999999999908244185990477624499510226321205119721095058075021258431213944274724107301289007609545750918897774273978402826099822688602645967625721552721825145710869947821878494892043502042886386779524528742129041553615891060311231387090458943405060106557011131937219960743403970810197762094709961812604268256488146909044474591554749049806787202591299579515547894789910550353470898790744771998924472207450437412320226664359385981163518398216312240317301698499316137407872077789696500e-01) },
+ { SC_(5.40562027377591153287639258451235946267843246459960937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-16), SC_(5.40562027377591153287639258451209620238935816537673386849100638573507598699570776586306494386496157492458850686285616875867925541474335159799779780220955316889931213510702441069443159194380992809790714268610391273861815905903687389829176851624715712613059046143861758161875814504643502656660200767189812949905736607262048197843805032721613684327373616908312542190461280141634492118337843627241511563352346923911175072722072966072193177907657314017778251100684093567096339022512256463459212982758053313e-16), SC_(9.99999999999999999999999999999853896347278714196230278468886281830155045973395275720923575499461975468393288308375635985943289405969943879734175052611227437313547948709681018548507712575189908929527549469183969349762222426533435169077447468058380028005061025510296067919339408665667471629938407525632912450465661014944423084708195510683442318106580092132004438775938913243626094924308943984839739704805512183838281324880895887413435530914721449115971797745548216512359146565268873966691648325262937751e-01) },
+ { SC_(1.19902638233177101512172413322332431562244892120361328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(1.19902638233177101512172413322303701605856504819416313943283595900895124055620076170199817791086158982821414571245272957941067225878881094777635192202973211099821708998113732307880722055342305354709198635269006039158481945297350819140843635049214167947460796264522687764348740281409248135258544749282489911854318186620606384911450658827884693894389423867972448049092242216854615433791135706385760735336705625212816403060778777341209622092144231524514644426177053425586224941858192290734691115813095637e-15), SC_(9.99999999999999999999999999999281167867236192838031095819701787916028865373804359002593710111142773221681390652606310884830906788286803616120473194438083063522759231894313363861617725958310805741867501842807266210988030666684760768277264807533625085500984705089723638296262863615123643927659844348026277776487148412530668062202507750370540981950803485371381729535175337385633187123449179301997596140088990341420027197666179279421047422739289730401845124093351489448033951720102033987005033127759823277e-01) },
+ { SC_(3.38815974110446074818447925736109027639031410217285156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(3.38815974110446074818447925735460780837077250405121624908912811375492279012837756694433825794177369571316423181623747722330627012456802421253043560253125336775562990091975356520362422074333107111588703197523535255218079359281180279158607447962967751462269796380368108394244242041512896847324483778833671068785773032575465047510854277006905770126219090406640414242106898982323451003943735814733493683579617533872767857670925391333276393152162297673266479295833057475252401519711564655129713657767572827e-15), SC_(9.99999999999999999999999999994260186784379476757981152515209436341728036663980357387443440104175124376831511468547287382319416060748994665608544177190490182579191009837162920485796578048138194041887008869736016572866833834735218013371717851707589665383762610511843580510574079870970128972241540922984155443035750300251011010520308198519163161300610750853200215747579653236184803757849345278234749183060179873847789020021279061575836422283909676225842553638445293397586781889264388759259817414925829082e-01) },
+ { SC_(4.25116010644745190294457870550104416906833648681640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-15), SC_(4.25116010644745190294457870548823941816346457251046944865032376488142333896402551791579276032444896639851938619033815895833657540967584273977907877502009276953580855032699870807772322822936877320097590315344887937786915492201615767133292963150490357076868487302662214735366771516923521663480453249471739343125382720393628673678394339909114917543444697211149317158220603255176901419974392387577177162511580101616906659855126508349098308950139220756875144978090282917331368796288438131844298023787069363e-15), SC_(9.99999999999999999999999999990963818874674844702748116475486084707856461295907339275469937291571802782088108504905557783890708671134426482936133958851489468696392146303515035649204741944920865406162487979478067491792560183921011153079063283495854040944848891001128521367934055151737110438100017484244794529588617295000506752734482974861081634028579480845943553032127333374137833767657979137594352600945447012794293469082855519756029637064798338827033317993968438364908937482910493816043402620465161846e-01) },
+ { SC_(1.31341538664973833672178216147585771977901458740234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(1.31341538664973833672178216143809571448147914551861945315022842811990408652297041461885743682766018864667058821901627898580410140220884869293241356915777926528623138687971777326704302793043310182526965205603774385653311969321173331212835547392587296845221807206335638843928749849510457947938612432868241044749076353621407488410073206207551248333799609881930000055823209165036193354244804208920991065276559411758752154294001775378226648844516156477334427467299485263229160154290869729898721568604402964e-14), SC_(9.99999999999999999999999999913747001105585917346448255468667731418020687259389117642182162355936270894492609327035751577975781905511260534442528906521602550843864551447652777416530770961671413078170413492886975664947160713180489434110163702311286988054098578657891174616776498835271527908985423746559334439292604676555187684744172862013311889242392247626156810700173294404002606146758360658265157997396113740487595634539444440222461918086708882309162207691177052462629678972670037494736536100439792893e-01) },
+ { SC_(1.77789708411153768441437250658054836094379425048828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(1.77789708411153768441437250648688524478645580912315036422418839735129736561800912560835961982067194327873729369871016834742639611520196204396728785664128662482147177652003174719147456642995536688761494047602027150333731314226281909251891742919393899761767420368792123139583925661503462304784697391744091122115805322210363460646928593577702071795280277818846269272559540733486786538784857222816733384344097244591858184250197335472047542795560179495424920330227962994053357077457931707468603426251460959e-14), SC_(9.99999999999999999999999999841954097915384594811735454538004302545016037022517780490173741435795675944555929465406170133641921828986499358904005969797819484344239424979764763194041013420519497310559183944490160788417032999948756260634473243130077692082484694343666135596322405044585526223426948443120980873050098596571808877217666689185784054062839744405474537113202401718707617992954377641581966966545840927315700676622358215732909299904758018931589113524600079145027881524323334695454152651376769920e-01) },
+ { SC_(5.55649412115402641099137781566241756081581115722656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(5.55649412115402641099137781280317284473213695030346303590402303931988046396190338269482149660999168475038150256800723829505660449059395231364201161042275163348508537606449304494069682810716375693279805579082802414158216642122510822165563995802863552100344122494366921663968851214429922913820743999886335738338311045421972245807345175726774597818626362833446973328909358428881598965762081042586774106378896781546245534530618913971744589459335901893304147242918115216617276790851847223349497418927973733e-14), SC_(9.99999999999999999999999998456268654079037183233581732191235680025315867467018181588237226553648078402104412568966357460261758140705807969848157060264373212772583437857468570864009272459824286929152662453086520176402045732499654604160968831934723473454758968594200776188249690085254846050117019853832573195081897863789261857952979012801346898762681231872848791491800971643317036237879893584845809194076325524610955276649279179513732336594657763035295367706519084046186378639813891200730024664881194352e-01) },
+ { SC_(9.18614956237767676938688055088277906179428100585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-14), SC_(9.18614956237767676938688053796317258083557235212189163208541269091999669666251862949510205364812241435932602713540901656517151026883360600451742706846201757354337788307438543330054149104803715768067518620042425775420550383928117557120515122638131395055608328341320860695875103112009754385279107344430056107313863250016820433118759295567727218114604325934665604906406791475823429379313212052101226211800542137836625027013187029262562420815009289990239523883555061206469585943421229829445523451696682896e-14), SC_(9.99999999999999999999999995780732810881420878824781237756494428642216774906860674262521495747901019476422529053067054804076342588867228309892313842590968737438559958533351462306136561566035343161310449667786137339299678900922238922396965259978293416064425654849017060386290453490593319953991014716853265314390480621748175217352424683886712175702607549061234175218581612412946946694618730133735506473462495392167916885413468468240891287057630611654063369552363308029777319668075166154464106813717530309e-01) },
+ { SC_(2.02237261225785003304622478026431053876876831054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(2.02237261225785003304622476647850095873909180892287918519663670291105892549106786498699240038550543980803346111571520530796485649985741199932123859242106953735865135143891664110901496277566279720106785214896873432294102853816490874908943796259151346566606797734844804871424841376931757109413046850801530240143016207449719658356785167896334666388493819143310669816981411875825762085981881153178256115280842466820922870399927388430970328517846034743061348720046367396642901249562006592204193360151806314e-13), SC_(9.99999999999999999999999979550045085946798831307767615967815728269180214484619036252790909403641537946797064418773421399496826527484740300031970118682423523800911121951712600720523023938618836373759218286510508286981245064681398402091026119540125145271144222176557855414254314889883573284827385379124690381427040558491108917124358629047794540691235512374459271544852802999945917447080468309969091217719526175112209317700651086548969987910493118357567850475532204275002096398789155408595057632731154652e-01) },
+ { SC_(3.34987029435018790479716699337586760520935058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(3.34987029435018790479716693072418709836017910929437771667989352195765848457801327380537239173197201180176080218346985650892495774035295932905608250406042601982574423542358371694291944969185689340470978450488775476762384924785167574380484450959985723643696985669647726067536240145655995029501448315267496689967102955915125920689511406179578883297420325275705419734245616104771318170311735879077910111632963840985257248968295796101579049149898595541297275950413245232396232327962777768734503394067078556e-13), SC_(9.99999999999999999999999943891845055150927223405544616685223412194532018312352112927452321976910999098948049508814822499116849784098962082807247240354662341685818269245714571156296285694028218930934948908556886283919439083377260618552964932511197054219874122814829581002165311372499459672863965236873628437256914247926307351641680837638533400251705920788307072678111781083295027335002395879798438407459058176503673480726665421302397190962673216184108932938297777524721561087126288972933983518946155179e-01) },
+ { SC_(9.03792015186088981693046662257984280586242675781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-13), SC_(9.03792015186088981693046539215738321788986007042365699492396320316279543704656553385920212950890969400392613697102194394333089009302293356880420539828722393281429459440756798252690496493026357977966088511646078696519216849028481527689534601133226590775882871940037713146444153208116387342034744131483842449184313713683684639667347361681889679947544099071968736411359531118781695435946215982692488955315854459642225183570337034144595721581924901891009381696599056233108436380627927215964786584791618908e-13), SC_(9.99999999999999999999999591579996642934151749028718876204266336384518057312270158991179501722094007867269513312491970576830983231405458466598365896114293073967915021543855661308978854719200666851617736145918857326995797691540025815161748308738637322261149646675082385639820462296143823539613814818378533729566185263398193570914921475394320955027638215702854032556452121005120074292215838023871081463612153498469043881103912304300914513522689206406089987405856445764613561621916375162684097661929892747e-01) },
+ { SC_(1.22932697008137914451708638807758688926696777343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(1.22932697008137914451708607844192184591614021773791940328070305907562272284382223300433745269608192105599620144790494124731585172304253064904889570512798966856390838847723038950322727570967216489506463988189696586088552862576676302458507583018378239538011152581276602465391085652348792218000095574348738110188831812197308238926987928796802995971775221419386158715740692175212354148929975079049190330152422027211799955068768549451248468523076997234543234379586454572701565848445729465086417448959545618e-12), SC_(9.99999999999999999999999244377600315267972846306889896038052955037247802621151442469870443181687549662547384392242168552551586198987635666377667288491218214785084557964246070182324401939504153389732646676456576169283311877256893335438670498971513103206528391739503987826941965462689634528631382329044690235509449552819606620554284030388025785016998747768833817596505441782759764113304742100788573487452340669666205903502531701419783346606301970952783643261289551845395097138033771960548299748561183193e-01) },
+ { SC_(1.94194400143787859747135371435433626174926757812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(1.94194400143787859747135249379511403083044871897362511037050124806754061275336835830905725762621394550968235318798300478790638972487568362561464077501190661717588852425709719253847163292958680062291156470483595542128963560564633973633700109207198638475983195243424201811540606422066782547498014390464716148059784336885812875071003684709344804730966630672604654294265898013648377879784197004207883524124056780017570061779067586269124313028463274433436853556491404974636268026606448413073206266966668134e-12), SC_(9.99999999999999999999998114426747639720283878342644563204203169790716021521459251173383061511822722138542525896575482448295370211190274140784860421332669802522548665773047007513535501337737342769293246553594052155484863347990751330806127168505703238439677398058671991000759955784841064858343931841972679048717309792670368465654719670193574986504622561882465200813531019263380321051541831568937340898838311445737284611598359421546001386821750750668783594967103468706500099741033123754869005438685314915e-01) },
+ { SC_(6.66051588882332623597903875634074211120605468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-12), SC_(6.66051588882332623597898951018257669190239027988790280537744366770877869050933103459259476608886777756579915690814859257345475034216099104871689275489156456302753285073620213598586781180228060589887702362312976118884573130740471011229159680210967244895704144448701015278817840314429220158019791909505966927759104498603516304729831106483512971261087799947245393962528955678079281745145306463990785840496109060362063486482136257417186274670623641839580128843624512912347189142131567768430005910784229570e-12), SC_(9.99999999999999999999977818764047366008251915524084203751590909615251086260955508748261875866517202782687029477624871890438384002334203109091463704378174221182722376822335534340374142555193102169681841196257200130319439394836735580276154595560504229580621565183026575699906092001065134615587575775622899658383438321484961911921543293368782124716382447335465893719947339645128446390223095375192808481543364390062737788287402811325613827202640885016945267219061070038152413660953412231060479866988215583e-01) },
+ { SC_(1.30501373596381142760947113856673240661621093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(1.30501373596381142760943409660333560692039710197239032057112513034203903698344616901524225376776673636415296454266367127536474789531939842197697151398931051954620168734015505409490467508115402882079987820789347094140079821190591257048602505229613017427675926583289549059019839863887788014562137726446278719219792278561923255388743792279408327291728896923250516571971257379108941833199023548584100079722864916841543005155359097839080114754493639235506419010170504574954807431988824330519664424575231670e-11), SC_(9.99999999999999999999914846957447288773605522779915678255591462117418280286605417598269089175755617808165165915602683165476414345458269433948306260363854177529036902285732309503596434344904848730286616536266179648232912749254260921122177909333891770273234400774813916276696399105771617638759781892253016980274639868069042438911086857998849593859350294868259456585846305237089203682687313371760123762847165326247352229463880572729131913191062641677831432439574962099265732575505785164506006988730385090e-01) },
+ { SC_(2.30686234004018331233965000137686729431152343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(2.30686234004018331233944539753366059849572649087610511654342255381136041764843262848250444528344180274751100392168733968453303717207105441182806117417443233943716010264058015378484280588583802181389162890492955868058516684358307750210024654293194277914609668768527570567723841110762132081932253661492542191753298326334321162262780851843772980019848390872856649462749403323629021847818806351420968299819163556526351045832094245083900470441925991571680931787416162265425757570563755456357840904233300722e-11), SC_(9.99999999999999999999733919307205216483006651477197259401080960096043483966257192343615939983066359058015411234573217891951462139195543298683130104275658252397201222054956161090902681981646889634021219639651905330486172099952446497605963028200398919937976311851278164684080724300523198038402357061425303530776059374244813248811828979039869539865200596606550574563921484875225783175485587493630243707736284879141253824075634607287034007852277416184589479502402414449884296567587929029951662730558004216e-01) },
+ { SC_(4.64061566951556869753403589129447937011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(4.64061566951556869753237027271728267095397991615419284758180707686003398529938108907558659049805544522166142089343687183618822183674180398802623140208567072402203228303956147191175622432634317287818984037751722759314830706093834121136985601634172326524194261532142165832914113607429591085129772083038510981278068584029585870749896926379359591566067146763734165664345664227381459809244090427239355076319156218271945168418909110785694512816165916715703898907302335334394861643407127627549255668241455228e-11), SC_(9.99999999999999999998923234310392328504314665821502918105582647737643019746695356200341919771774449617719049429392209231285890370146966327702937705005002184280017353077487902270647087318848825953575460945669274016393435239996905422988310852251085179190521532751217700605669335225363776810282826832168168254965685159520325099422292341939640480539562839299127143241281660562761636134317866645828326358737604399820142244271880315035259321648287816929497132547280897354649873459775364006169123128552913124e-01) },
+ { SC_(9.02057872842476626829011365771293640136718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-11), SC_(9.02057872842476626827788012314974142790926916207393567000799536747528665852957940046104517610928340118743826314162253680048717597622179343740006335264696415656819212856065002452706323285773197002877181170513609645226653106034257353908933673379666374178326643605624295953803936894098093825390857002684872623073784374057517550449125474465431745573184934610421148035203590941470464984042723048840309084189771384579997243914014773511588312133450507254488274889474764456105591061347125528289764395734121383e-11), SC_(9.99999999999999999995931457970214531344382763500560740979521450298825780214945541896202189854474216844275983986675930662009739900611201068149959653449557497416940647881320682912193115325791819947936258729341672087252057416024263812703049224805890246943526656060900271910628931812153202546207245286088184201636723675366258575793036560652857802740273426903311938076552797325985907156430651556662087903430650963838535614862310585721428952766908680195035699158214593729978819602348438663666578546511487638e-01) },
+ { SC_(2.01724303927619530441006645560264587402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(2.01724303927619530439638527971518402895378308593167368933938083097895914105097853220949809226355195616763949665976607147482734150177406396672952859214765226945452347977564327048328471633932359706066181475253090365189727333367351575060582769461913412620214498488588122674367266769995222789306232098144726082974899810430205404009158930892774244308055687571333194471156431420346649010206696858212297365763691018084631483817683537177298301222874090599257812256350856270478846129594126378216518526591643988e-10), SC_(9.99999999999999999979653652602458691842430650820260993559156474358290259195311093915253527357327361693441729958969689754741626190671808226283208321176357071049612666759270261537258301510936970338807161008051696492329011151441024206711798673439297093922746120664076403362950701801472249600616977394476695828826008527819050665336968791102783867687569984985171685557174424584367761174767539614359167513379500439820659122737961073226213712482343940968286210986638068482869101288889181592269909589057079909e-01) },
+ { SC_(4.46381376306703714362811297178268432617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(4.46381376306703714347987244476099027009902224539880005072561623010099356540803184148103036001396078252044944026422080138240224768254417146931017323334565624451815099945627590607391027983942120417773378104950239985323999117684804060836017845745179632044457016676450796401932538561014818518845565777874909934983679133832686623486576188630071071148938083208938499085183977246795190669480369085393999940011770378838807632321077683437611646390289967229138020819814603314833128646684632972758168720689991635e-10), SC_(9.99999999999999999900371833443266485913038040997156521730870275068640693475214820902318135015361433760915624397597203846840940746657939286081364605200713758595178692424520434822206960393490736772166491137163017541233795275517139247267410699507649970089369444931075965017855747225029199138401668188234063259525010428970267417033114000305412910864715637928080786514254241357289574781729733996541742322741084600110673688819799600144608849647324443184768061684805422295932405956450624750023427143250924393e-01) },
+ { SC_(7.89404319689879230281803756952285766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-10), SC_(7.89404319689879230199816332201782739529240876597684471272919980002777979484632363432465884931581298754425539385458462115986883181108643392276139302735348983421293058202757716484062137411039264846920281186219775313627007944254474745735092011358327265824752737392551192886602710943611890515757652974814780630277463419954569206290620286570655977415225582763091478596449757175244395774820571912306590264730883843056758929601320981726777511322879727946707924970966013671019646025854312852174453387563435502e-10), SC_(9.99999999999999999688420410027479475305362157778906332143894166082169936942731331015607326922677730904125008992719151667796893832292596525226080125485663687387254462074817179973188165868637583981505405306392273710095595133094657390308796486677320683162477145982344545246447461503948259405992813915821707874476148435145178882368552160954920286669801651923953245324424846942116744922945358896352588428998382245435357510599957693421002169153027160299186706875542049015760799819878960550724185779068785498e-01) },
+ { SC_(1.19753096328167885076254606246948242187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(1.19753096328167885047632011372988366839572495166042379119878396866921535579541590222533938771802127489633885286823687436829092513169438926309539112468485901612826556554647131355737095301585331266627432715950786269002497531271856275268976492286772142534422181109956360070777230825864534228868599188286080749992690194349465150189374099100496968514528603190277672577719059890396520617292399022494599881257249461553031630617968764612470212007400625184399122708879017220672145741500373239998829273594129387e-09), SC_(9.99999999999999999282959795990827170135614551023194240930093260762829569325129878206690247961179210344290146583519020530140477449064663472153477122196148449723990947674581478397862389652720572814459349933259175702680962896596786112183582392780523594102607808197088334429511356009699288389060708476939825983150618719140382258928526048553918913632413879435283278548406386086586092090685080850137974728621832392962549756584863779090254093942057791784312747925080865351451451980136949655068387207234963197e-01) },
+ { SC_(3.12890779952113007311709225177764892578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(3.12890779952113006801172430787239899843014121180020028987887830642136016563460269227648455367884353405820594949780478791250435270727158941605153451515613224900471744038506348092656973671581305148881839609084002562834453936791618968140360445438617378508144751389050414302328039146499148686500822713769253502370230875150664323494512343222329717689617673865658363215948765288460608585507671188522539091504719171739787225791322428333826762895704700179325887091436326383419834154611514564672051705672679729e-09), SC_(9.99999999999999995104967991047919853288257931434502650824735772704901382256708715021400393451254864039132676058501649583756462483532603552799348051856624202071636323687874357588478927990651820778386282265459606160788426873464937091160667643766602768082383907777101778047612835332747498483430187110019957772023312922681975084585702702709221851139804864228687947667854639696398886738326057666662346670866634585482424442770349811280971220063596816378250127941112472200556139543776950887869805152051636464e-01) },
+ { SC_(6.54608101058329339139163494110107421875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-09), SC_(6.54608101058329334464042270717554606519400676020573764995976115778693340979388130080022974423866935284325224591960497690969536588939452672365750379157106213853159115223232557801762788904356215610406895778680268668011973801486872457234995334787076786196667120204171752334345220791146072452816721140739938381457912498306668372885313541251070938296534995649585503668002513271906453156430650046287837268495454161895286850464882200938396384912569859073295724940016743865987946354209215048147814054560547411e-09), SC_(9.99999999999999978574411701440404233691911105547524791228756909319836684728278557912715521020318385009945375240636666743026580394412900791259090936132285225037596739865993433693958701211417830265319761760818827268301975142733786084305836633688005769082569801814452087685765102517906826744994947215969543741061484041836019692751063794459856496528591823807106900483324218512086593607216213529777612655991996245466300172132394213898662211942653694107956279418132602626108011683019257953461179914335417569e-01) },
+ { SC_(1.03735935397253342671319842338562011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(1.03735935397253340810790893751025841403787815856505363100476894912737720704301244348578436008313475030686333192772334627176325130192577834575419942038167479241334017482987492858923177101199753404916939468489116939860242362829280075273559017235394780006839615093480333418803996300935520495415063145607760188117015493031522213277247229248056357387542181122622768572015076371502931740140691049999730628263261329673265670764049208272952521834722647922384989326854349198917760704695926154462049679427169055e-08), SC_(9.99999999999999946194278536284405354610570430372345844458835181493008418475677210409811435500978199000936738380347156217172881551605742010246289295475642679026543821035644853655390677531816640177832243794051207478874195355431282643488079197260679386719149446309958513855351476668434360361836809340787797843883968024921763591812095900362002068091186310802402564913000326899027361620529514471492425167201427430668102330868055716754719034039207556779437459710875339678788681820457468797439539816776604272e-01) },
+ { SC_(2.61325965311698382720351219177246093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(2.61325965311698352976552085794674873948977136797189716587867829599558705866806962643405885733038039478988642364563704357082502093947827944797367772608225883166215523823555298418758318630457963482420232556107317667605517036573551347481182888243640081567986906925549623281756915886475451174605904832849770710597096935848251100601457675358153761388535145261895383377176682130933568074601365026003928958385110319127880786379945331696265445429638709206271414191927076865306342505962011449784687607233615452e-08), SC_(9.99999999999999658543699269545087412937067564529648844277884576114957046482837719543260440895585699908131861178001643432695184748185712205336322075891023812779806400255307285635209660964682222600661763324276256706481766722094270367164876479959205752956664985241064867292918583916329838581852654001919326649998662347558813007474950774388834590480461253782550965790984460939938335780491393830813803651547817812540355485622875414796710271358731969408980506856043610689479845560715880583092274528220974819e-01) },
+ { SC_(4.65380338710019714199006557464599609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(4.65380338710019546213101449129115033161848051306517504163852496999266647986927435990977890722124470233716535035990445228653000823387146271818720426084568211949650343484184758290087581824628001771507825912267378927562049889381022044816039337591261522072635747352493136871116429720337851950673898424910098529686862263347207701376800524528418048828250587804897579251153864192781131793938839620359474075175276829198081705127544868279759961683164164202368688955879018962498808663268299079979752869609245111e-08), SC_(9.99999999999998917105701710736827116732862038891301894759899293767055928392225272595948117206501678573317153059878167175491018649556936748464550872544907856954522933464150470681110854065542390219844974968670264625826027885525059842104573562044746263899791837945122572103192121273049517060613765582028914775681100285591918055756290567968423433583223448698871995491519052440989343536966227231794085271655176660154985346506937216237832680674055765810058625222813752209386455645318051700424429635825604558e-01) },
+ { SC_(8.22809624878573231399059295654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-08), SC_(8.22809624878572302974031454935391361372051682957068440610320436801540761922332609590542871910636824146618989600960676006105552258407007206307536028311773758371384227498119341523374370443380937572494475012853690439239638281798715153078626511309309040418220071090995999456749591226290293812387279580872835304139321819307678449632135824464227576504967749390956982614137103459123505807303434260206228565147222591135435434070689816927846520472271632967415936426640676428703540971888279567964898575910715123e-08), SC_(9.99999999999996614921606035909924093917868987200475849137228921444966119154931547433131311747286721713859993964713899333566061563563544320069396737088155497880063790400169176996226259767364154679636076351504706293403513289841547482443607379100708634166577212868961703960806666990381162806668658969679112306754390205132297815473144631413825060452445785272573811906319333663841292964458685149139890735787210705223580744560561707667329507023265309675234477115176492742999823352033168878910390869069602146e-01) },
+ { SC_(1.44012915370694827288389205932617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(1.44012915370694329490470632120488821960831420625097208452760967773899621810591454782318687404722250729109496920322278038980055717492831906815698784428939225099587980269878692724152957317801702412412993718131255597355895454512166790913978083465076143342113847865164382371389644607523752931911069238459892398036303216120203753683695430935556070669486987607684338788351666960681655650102436765917243152996502890151550049144015760341535686810061218536126158179008438752649028139652964238696677459061310317e-07), SC_(9.99999999999989630140103216562700402577129540528603374109265955230536308597494067119686820392828740053320454263283957034972289792638690212984598029233291446961997991969126997116029008314129347403292717442507305281117023966514614990281472312184568218292849743703025193325667661349717298061440359197461007084458252138139784938458360221184396180949292384861603688190523134947836462720740001267066751287510670926330528553505087996619339798329208819107563086094981065297536727314006650691009272319462255730e-01) },
+ { SC_(3.73797774955164641141891479492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(3.73797774955155936340127351088274306966945499304687351262224327036485003195399876134404030898541569452698698785128297775253846740013651700738117739570712980936632597600460893639731587793211760397741272305599435232590671004667375647855341661506518793260072662904540036197343969280257117154710542629945909475065608111305917119485608749363342549197465035729619138390679809197242810869893983371298887552954017963591067229750619536979210184968032123026629350132118672624718293514388725210602289794113281992e-07), SC_(9.99999999999930137611719284858340365115221610379236961291415554500435872388131334398788410009604492364643595965830967680631112341724704163694720399722612295634691371226329624623908442837416395690299608196223118613825405185261111911951537848971636572392818714982018974612977857238412841244788826676293170497835913653497769763927232690492490945784008368787039023716182343873542256800681402456564241935627923628431291698833219433246493125751712345703002417251750058512609170411880034738680935556902505563e-01) },
+ { SC_(7.28307441022479906678199768066406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-07), SC_(7.28307441022415520449044890666796158134075453197296260624638167119898104724468797620569591993934165154251894245847724657348679804318367468423664871917651373448389334331503882422006453094389677135962962131469634391849918422883493755583387914729253820958027791152034299949176207111497843039802381391080335874944849745658182004855872129588827842894857367834326716640912301040886396931562001152712265979590735678629914058813142332537079465290202671615290625230647393466634240383500876112800156132201974042e-07), SC_(9.99999999999734784135675655199435477062371271904158802490932787360232684194206055502603613593047275332698707464520011088631566295631082659933586705030333526358496612387620984644750063897599725203398934908527060541521854556685436158796714198252960674419809228990516232542677961431420440764986615825562613851043943570711111775961182791307437967727617534370632679575032475835782635221622680183128935771393540477464095097827358860337546655974513824038524754934769834274209792801776761029464963487681454638e-01) },
+ { SC_(1.02601461549056693911552429199218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(1.02601461549038692382672664367980909129797678870667768849146921712212318648724429914717031817788290760089726336692234200973914773135228261464696094871714327427696538664377177507837044850603843659343822132883729646354999890909512098529406876550302701462857600464801392168260146985374253754203891556843366488152159129130730566352444244537417884234639163162077937574407637561014227372724382633431402179130482335521222619551445219770431699554800298663104276019009351056140042392344367285483613919360270842e-06), SC_(9.99999999999473647004399918212790658478585875953442964686116107604076344236801122474185649272934613995743945730939569552300021365101719323998149781972994755931612189643480767690316499261003148488594493744111104485195102515931162213304165502158643932709516860360378708209085284952295320543183629161025237715099530969074626286839526867763366850481056477689318071063989591265436161763207215219865838561800778868728374531420305187030797150900783726793452464152222676753653006247167516863553168502906926078e-01) },
+ { SC_(2.67831455857958644628524780273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(2.67831455857638435657005412213610982128276604639866069595480496471537739536401609653955476091173984298018333992862711537987312713316036415483747683882706275541677384782394839207289648307083009870715553463423558163889818178051780340013240706740963214040859738404485649136995119403224901763227367017966025598531866420695841491386351905041601360740252046371060654593691975685823280716565708139718098769413838914699445951082858703077317900076440435161320338733864823055555572257326477201841180943482872309e-06), SC_(9.99999999996413315562652461552002296120358356472133278078314440392542844209646953698240203500798998633549867504425862619825808196127841261566653158765476564276301681397741407108125586006528685692276874904550104105313883720338983664992978010697540996668822432388675633251819366000519391363331431034508455570735042351871115290237627556585117202107938696024469549112905592522041283932404634914222293377504740759899590438485366489707037641986399526791217155900620551904585509940641934181648230634413259265e-01) },
+ { SC_(4.02049954573158174753189086914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-06), SC_(4.02049954572075024260087118468826429814663153315077991718901582426759064739078052407110165549578932460376560288440104449973094159762702982705468081682224630114850462597062111224598235409091240576849433101102274161969329875425199265191158999339698045252297020474662563333717095860445116915074136815808082848855273281504987601523720992152761270084812423792786748728905718724925236891423461782473311868144673066624924040595777536217052283197112160037036137391999739146035325998017752148720000605119897683e-06), SC_(9.99999999991917791701396959419313813401265180623673059179911547500949908302190117148933168329908690893202837285420822052885466203283802841353637437714044074266653743183772093591630593925853924527974309329870487833794885494542924974682749486064402670967310507687630404555758440772082780068787018846191231498609660679588396035862441583962343363796596673788481921721284934251655364564300464315956781078329012607834367762424242617511122928763782421412214474185216401731965589463411912546191521776651138922e-01) },
+ { SC_(1.03207567008212208747863769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(1.03207567006379964486059135317923765178884637901450818590057242469689597001143337677447826397179538167736031048422475631735874873560436656704544669504022530773567828579863580427738546306049255238803108540550172893695386461067609240342223514481537877261996343209535310475116468606103856887738630617770362994732691906313027170715951153121602930976853364057496740031527741044543252742005164654126014924982764255443579086080334090651228364872564641844143122049086203141303222959691381228360964775537428520e-05), SC_(9.99999999946740990561699687835096311656569291167275749312185252030381383219899994380821659170492794982620386768812474172028293398252431135066349066538792647839668698102255251061620041845986018822889924627257362980746160722257168566939728109073250489334405824801674286788645760845367307942971073221727371765467748461807566364605758791097966471498518756887318016848413147180370466183250281458021428954703658743849818753824375557456108425203304608071735244045207645448919381735548782239335207831536854561e-01) },
+ { SC_(2.33581158681772649288177490234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(2.33581158660532274536503743158240337737646213456952132594369654562065216097877971320195527157730193358300929564031798828711595676076842939009562163723943297244285734194006007223556382374047257979318721500414262285245856557018249968979311552508909534303598154907496279169019026232123477133854368562792522099489668676299693279861365831493384781972611843978211229882541656295508764994514877851663096566718391379871772045083068385054238623504509574501724078123943242318442223144503041840263886374089552234e-05), SC_(9.99999999727199211556806106904766880124422922887658969070618357584897186718873889930706733533737414920883255973805088255784903870503201137916841892176156804261940743581740668610287436174400116137484876377141991877409180757654824575875337907433838981829262228635400536890633592785954176621124567961998085107372061003574500599157091043708082332975297815142693186921586918415547768897948908381471877202194378061551462589503407388052810183783734976447440624694286163063940147901602691211823597158892680245e-01) },
+ { SC_(4.86091157654300332069396972656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-05), SC_(4.86091157462873896531559848284582637784557632474682176085172337595134155904033586070379315035888134734726032766408540784812958598806994566663326780124710770377187107108833873767030923227727011909837793256232391518542423335743456454652126193064084872761224599187295590933776831599753105253666406548766772599334972756691975278667198025557000529670435088027588227931051871991509667076507311250562204649129417687068848055773179752252762878812337264258619348030050901842648799759954611402159498056590639155e-05), SC_(9.99999998818576932484137442598201473525328287104259159863210153066825931991341897043829111475228349045483285498413995323186917285933143000076937430579794115233182095826446006806557434845683429950622114857801966123846319338055787024498273217621081374284059134966187810875651505392521771289854146929405808060886179474334346367549605047691775074583245613018760263934687689325536147399232974306541392134063454728398424522096828357018128412581868706236434263323391431032449702295638869342133483754974197517e-01) },
+ { SC_(1.08591746538877487182617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(1.08591746325455478104821136819967057961442551278838752348343355566286218686113929505011769085392722880098614840019465066786627028957464813242084556927966028282629178723699648064575453887218658547931264605554358563986502073409516676818032454066518754329792331835726580758311211146649657048162622184720605255283044527192625257797088007777099678809069788187552437063489110706836509997536602585770349259033122327371763031488856712166353836833237805897511019879417937250092100019381559125979139968316714978e-04), SC_(9.99999994103916297612061821589739247612479612887786329210914478898502255396074979076847380789538147269506577481185329419865050666328661434508868431416044477700542172646387026146164224487845332693392736684598893846596257736456069469932831303309379700235636614876092375485047676007220108087938935195867325054226395462569755020081184471649585143960785879580745133870280816789767884448864548351682712557998756420520254199770987894208326002729195396286471764230750762925411446123482196587212878858449600175e-01) },
+ { SC_(1.65569479577243328094482421875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(1.65569478820777002278499230035423603846508955528717361183138764363130759934146907994995145252564658286590588043330672733736568088625032438281790665274851888610402105671884799890946873289097350132844056442855760778504889546783747804632166360961473335056677009872583516249083776988899488413878415770540869751761917785545042821020637486175722597418790478332983352386892602088522806462238312763565226884340025562855038735507337739183687799030444108160429127483514013497187305409079224093423840656368500111e-04), SC_(9.99999986293373747572336229637016911015215548939030428628815886701051084032403634304387592163823574064764141161745510371323667165490842320379672149455810787341804779685538532337126177529898307424160287639638228578303059367219675887486179384440818508994233187183235425117869203130395479376427352212373583179094983956677855049181936352501675476518166852524409114024864211976654505328129329141275749256228504839199221229471272083720991903424231132100498001886103604278094475959343911266474062340673953856e-01) },
+ { SC_(4.72170533612370491027832031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(4.72170516067693075676085308284046548368287941901283849283802268407085001323603380117712993012887418320098470197820438430800375400461013742422252145872788157889745624950674378630308331446848389037105550082483516085665582028196070194038315998455738351257405359430069565974850464666742859881265494476240853811215470922001980390784076319007787055901806119150667756505054118980239535903669464580996153901994796184051966736242100731906816925205360327063389707705971734665764585696567561507749437887229461456e-04), SC_(9.99999888527495665124586181695612446896055759076554914046210391986508076349569320784929587149658215798725165235431650500548420438784030227751958358265628970993501643962381317805243477469130674237304889359122911251912706271419560285910770631706849781369467753261971106878784188494585647101027739471383693003980737319512703901979613054654768752954440845304999284188711132746818638758530113359491822833435683803246988867483208003823651051032814261010407735099449745359158953284399378090005712210474581903e-01) },
+ { SC_(9.59456199780106544494628906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-04), SC_(9.59456052574554543206855339368821738303292144129224643533250613815319054198172995757500293034201494560266361040990132903799826087882524386271334883058570222574369362764548554621322985293459036681036350936792370263478263637436635785459960302052069887902457445187820098082690964284699226936748715963376583385063569355193783639233905746245528110402738779975078022638401708272956028719655548309901166652903956254394607665326795020988537856449664481578241990439621439369798643363472829333476806722444683316e-04), SC_(9.99999539721935661078558358877631095592475113333838978294776138905920499993032330139337421241902110329995510935282225042250995091483713765893804389358404607462625442239227727503856365590616276283533013690912228413610654893588156280765066256573917595651391760595965856427674956693283638835311400506664007482874607000520400464981164369338168028152504872866005567199753620315631853218147483048084578609267463623678894563773075053269450532221366890374338890064467167184494935898119563677811132238676494558e-01) },
+ { SC_(1.10342400148510932922363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(1.10342377757381395572780813465347362173848474850723949280118058196604746697019572341413318215944145126695958128785386403768383539056318668913049580511267222668786396512987355606357832079330824071633509714763000228154703805420380841226809762285320859255338411857700840437097392670248917342530077492683819354527846578272478059817224126037006797924447420234585794971684867137695895352065956771102354676254811894365161560870498206118533861539197244201894588423238917868029352924008553204725898125797159845e-03), SC_(9.99999391227798240570355499022960361310528390499881018197266455182809171966708398936554453665968911045993870299118374953720723952637206472112388139335340004035264857609225769117609578581537811200358127352219484431189085457465511011367152198078790212367556345107155050267755673291854354611601028709748042046865897310493248610005403267618655965229352763040418269822894976453122559521873062039563482824923611739885583070016982058054313658269935174171343198190502958661221270818484040408653750173203230643e-01) },
+ { SC_(2.25476175546646118164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(2.25475984495072670616699492058592318073731947935815704559772827343957028999833639178303301437534887758577187984590048560049309194362578427803068644654064353829312571273881404656974876959933956881749270257978577085791157039068158591410681018436713818579999705850717033396103629973591002115994971570790017014579064418272908019539035645369810874787478707942360991938657434252507502080409901856172541073238790283858388760869397761626405870660463300506949260102988070042807416992646493834806872323726803835e-03), SC_(9.99997458025789982445234678521350046147570566747269097297006799068277234530960383891126934577579240030196329864154371255579971284092149965664359210957736971529173205042093081250449736372699216695844500361817207467277119512515305472466332827851429424250625947451636368646391696099091010507514309786281538269045925530297104928415277439273287729077747597056412777599320325937253062039121168242112708605401359148662225387594303232749296186979313529662443155110087020374951036032548173900426505478925101146e-01) },
+ { SC_(4.22764755785465240478515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(4.22763496440571037285398946467322152879438013077166851167820322096781411803101602967274080802806089831791310107085441630457942728083218628874481058836415036218079015608106582663616413342942237592877795451725218582690701538322377534768805672823178514496056562910114186529938444688600571794798707451517027196106959482213808413198379234771333495250671145504358644814838320906361026604251041524455314777424351345824775387198748093231006179859065418633089177670013556478508726004901466555382091322541680881e-03), SC_(9.99991063511373452677789560050715373145149428952096904697886367712876086292035745304311300137665075775273598372499767812075771242786145874855260095826032408084979781582498496550763382567267778984462635680866130352737905116567138144457106898289831285799702043487961078500270822380587722117890745799126097012166609016750935133471076497871995927122341989914848865983119754151725078374043588790005160728009669720033867672541115407013710341252692207454447790955386571269789604798208580025842831790721417345e-01) },
+ { SC_(6.12821616232395172119140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(6.12817780483560382808213557329119466062200876361634502126654101855994873417503462171920965026316613028274177950775049233440669665302666581845868636766440489877186411773482813665253370273946003944605695383754736936873840106381068326241720149322296111362109427697762615253610223173961747328543942833277670703533635146996505994275092106592137357930186405512884836781314222643145720639318114729066271317143669053008940304917313235596240875802807154598766141454795653291599739378818168929230008696171347580e-03), SC_(9.99981222542099697541143847070072546971828712330332098329770865072257185985031260314852113919032198468189307863786664906732595418738355515847783722029517753608046646105120123876154838707339506523033413632583032210663688541682592679914200175407756374745025341137154609317405534874067938923193059980542578882066469704789720739170867326643959200096981737568594315302314431892923592597361251855561253029981966969356407795627317125366633329796621808980454701786643444907402366202716161170312320402120775433e-01) },
+ { SC_(7.17522576451301574707031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-03), SC_(7.17516419661267582836034142174681465204546939240119108133248205295339734270417930084308859916380512773163931881507840068416345388390221086830455795381118700976633134766870842626243909834567744533155267945294716455117405920717282899684428800209181185252677870139843050740709460388726089385203283189938165953927393351322007154426959879457092338736053974861861644896156794783787260212117683134116318158048696031746003526637450133982920320145132406951950929463951376414554776872928379361757042284269550869e-03), SC_(9.99974258178055125266307198014100123003566845596771527056984119690792340007476181043717952620624133322304853462699177805133923671700194459571450679112952110115183754067736732754526085407259235156594925752725123490577463983114254313088597337232878237130488068840714630832409931261169972643381940574573574251462173875076615043890492664417739484346470106699266972677891219384324959207370519061992691189768840015505197742750976116894509011762334997906198598219245703947633571105806140038697463949630336210e-01) },
+ { SC_(1.08977183699607849121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(1.08975026685868225082099747945941996671381818418315536870193669678296106532928807799250909718485024339364885037800450270269491539718476844275823176938926046293973622562776303659992189903112282273804688777592450861967790592563558839055840320743745743517124801776837401121113421270015723410236272602511202037511553596347924893762020894206394739312687863922968952922066268886484510171475010251450006622524798965971270954932230608474913019167203244840780765530916268329460323782785258474769888609110757044e-02), SC_(9.99940620454828879176449810090714022793966325036551863037524364956170680998552985230627257441664425512623325862947910848780903454899838812983927846862074783892122375682062446356128198011466542914409856704675107268613669808806223468999915731471549560119508428919853126572110247471699299141816274992236135198359087865880841983233018975591367702314503088337980462078592624863043456548876665098346359209814481626968880920471651405777824085084498961422127406379393002743019949466056574181916058099651689932e-01) },
+ { SC_(1.78531035780906677246093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(1.78521551967464525812118193536998457864178736944932839508966062490920983977913731452860386330129428988643959146499238519533510439272212211988348296443064807083049612254960715004778700987731749155310876701221314643204230414499688327215921624508990886906725847368865040147551794223030969339112865851425188756335235867433293871733996891222497034543953097408857990064751695677356390131257556267672627210868961098841308101435582396237613538685321484883810914108667403775738742025077232461429195116913304281e-02), SC_(9.99840637579225061689220616432075985634795177684838328799799378097519517291013941215385055849958064136044025335614398935312278776881615250387809724005390098759965632553311813973103549298175120350139482524465729389908312417807587194665842630539253758936784938132701160252206934489824287775250794380842975790174460246991944385024354743401221003796973051809502576452212229636093005330964395681987883595479541881975506947710338355137649374464671012035562176747997429673069797136234426619034789230719427497e-01) },
+ { SC_(2.03086882829666137695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(2.03072922829785412764841050885782924234816249136965856784583938017611790081018736188223687999876856101493286192891127224653907316634100288250902277997512484886751200221909624555006302408389544784101560093067868425111920727574110886210515003659002049664300850730141800851166512616080332122075080697842576939296258415122768607418798187858959383049671689481354903539156410201084805224067944662577370176530609953627594786848538340329423858423683103538089020644057268289846646276221970072536489769025643200e-02), SC_(9.99793785677893519174812779480838655924731734932423234294294069992449425216385970005461481038863544081690554334303539704684132073109604649614262579053784312170241598442533216766228590091484634176673005320023682039710851136366207849186480817732574508774099889801516500622987309336021622394250832627784750051628496869920836260929136480639941940830972794464084948098223215601031017843124234960140768044637617707391949948127367933673498635487224027515795724693469515440840875190922863554670250380512890187e-01) },
+ { SC_(2.29592248797416687011718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(2.29572078654806901956773962128873725317258199243322324833026864813543563298791582759067345370927013211131751436485373135926303545824205672100408388119836608013942723742698253158825504611525346094396821412403622255927493921481889928668837905973603383651805682086702397751093728776912507758571185200632272001319729003355651579071960733495090546994746963852360611508210301194267977533797137231602723726016493487285942976883227358425348490878104264990630653588736390691329691673892319586298997892103355891e-02), SC_(9.99736448573833438551901374069916160082285485161657935970098520489678155282193702973150207036885608526804424111064981121646464459825539846765219169457812958666384096707176259278198827616355298087054529952352895771688201169993256457977842748577431116383131563229150919282988665267307314378159810855110884585840543438664714574577985254814341262596212481955968518620628040275972941893015178582124863257398330562940280357682968567499337875321971067674002549590662525412105546099814520291879786638677849755e-01) },
+ { SC_(2.66608446836471557617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(2.66576863716550940523643834663602903343412691027273852843135941288217001883358922665531133518750112173938256664285346400960504583060978937807117359041113160326475215921376215686647943718380783767854304202922439633733916721749843129015530644519528290494433930248285283911310398738720138221726525289062335677459212027783675235985721420722586719469315045658602049763170408429747316938170763162477214635052925244540302524248462164057897716244401861039283114010655031575267508920532761222634789689538511757e-02), SC_(9.99644620731442977071074952503756513594379179610965927674853010103238383122624249337790075531392503903192894317965358160816337306507873045677143717869693639520801697528499751699845748033476777032067833843164251267038735509848519717356813147914406232186302906853746387101025616449658340377064049192334098838427810354558514702289969721445128620523303760656579431646500448912155533543139906061180895870794100250533118584128980041772272673997087854201826597188558589194919728518908452007643217258987134441e-01) },
+ { SC_(4.33529913425445556640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(4.33394124252182473430409877221967910797867622226492251867897610304826237176234205087236591492775301187860990482272397390755639330607447336901965105997233088160319014424029346223644238916843456763981709289162131537218519445453237404967311695686259903340466092692225153320582089587252645635191955910645798631988546760161387767229889141907691633440411944042639714942724664881391497750867101083989306287989019965318777179382753475304491095052075043277502755738012378861349287761686817900063465721264064751e-02), SC_(9.99060406247108182433110591563949184008590550285525910681138166422995597546698572115332083802970332128616627121897628062691197069398078335651999531708939350394021171461022811848765537950565221073815507985663387023414130658678517161835653671716651889105148592561400980999844972491569135768885981972484556339777089910598305278254049157000511662638183390385938716919090639856781430202246719809307852115859635342924078122187579416517698884917122716280159598299212052892821404132658413827277993111120708503e-01) },
+ { SC_(4.77492660284042358398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(4.77311234361182370553346707381159993522127668228423471698794041916914462592971898735317849465740734845328633088053944012173225744522673856105790002415848172408214069917931220805129043473864993265296014536251765599619235474270638309161980840862577294567887230574710596674786583672806261330613179024636609581486126381444805459823476722923620864804227936605524668224800326195728143182612430137862837785368173385669325151174313653767933525960762817591648188359244076692216655226984222876231471974326328940e-02), SC_(9.98860220378970765416666292064830637521544621232664286948273469114279815643994118299261220464425608197046745838168231112925313418673671418209258128341850371322883422387259027817868426171842847565005445057442801891309920668960507045036275491752451469501935202560886734381086026356191953555384486093207040581077635167409982151341587820821452812951152750188497181793364081579598815492232851725904672864062658468093007372919440011978305101459486087741869001923855853317522336571059851757312553762759660218e-01) },
+ { SC_(5.16691207885742187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(5.16461336987755230869002002933674117113628450460422043485783336784426247557022356731909397461110296707780131841951583578912090434140144989808173826842170096882942749374641049049281256365429658426702580621050221660498897060467282826111146984504858071976776010862044802440626983001384950620260121297069950332695775013404688865827055306077429454209895399918940351395258935654650406962823095146186230791842645841873960270123869669412376104542452754845295352322884283271557570532941474399861951518394012477e-02), SC_(9.98665447922360135213521266796851531835766163012102217203454689231482046185392838489821970734399552125784174598237931177178099063321027279880123829101090102291996800001170395479384503634523326119052750469669124649924813326825830131301210568512199084926242430541410903632134473488254399271424441248952830602871668311874043567869499006057808372210726562783173297018290349493718182960580142111841000744070620479569810216657779987098922352077088309252329258306000595216296566049509627139117579193448663272e-01) },
+ { SC_(5.35675138235092163085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(5.35418990269726278953677792861679455376590654675816169848288105945573655682296899898869189937986681565688296738399075385825415191313522118358129631489596746430113341211856136081029311923254306994352803590375421622780891367234256434768007178556481730242780532291413026293701001237059312098409866323782729969789632460239666058895869272654313586973220036641750017933187081733418154997011863506155998863196409535077692811025064845163939795073047119520932989194866829270668217258257742446996467296239119175e-02), SC_(9.98565603778031935652835648513686708834550710265717769750310667576425570795156384080269125053377701778322103408050072703031273382230423580101177233233637046691140883620617512339519592385040904452381281257315749593686899133043996685159638851121619705365155446292409398769831758909586549766267584554212254610789481269394405823437544863448131217831503558412097043985486772933184380606483570614071708902118307606358672960875898690760212848810279332764698105509738345245083749332937066279013972721999860951e-01) },
+ { SC_(5.46618700027465820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(5.46346531864185652266299265989588209830477972038596340046745896270965748111117915407412844957783278731133588174240048037524044875999928967753425125705682555219277190276660395984393739754427791927609984222737114058002449717593767347380412781416718720139763763560831069900217749569616097183501956486846275878732672863046892658675036070608869773474008125672567991097462136933844468402615456658577751136172272644508197808001817946107058777720287520148449437408040153565904831296703427837337651292795982606e-02), SC_(9.98506411932942854108042459383510836576611626853085805857841828589727024599578729102555269651786073170459620653723435360146680969297857326420874817490649789865110476564950683767869711247167921681531780596807917980825034133974022054580775539485597880316923766328630105414714347920762036457437458978017894386560496656019128174531675104091105815589303265933653087805554087457116460752142693192884431966173438902253445039424420104100800153312932924952674504484086634204703161803242375829959949079328371875e-01) },
+ { SC_(6.32438659667968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(6.32017140698571553308044713212277127305580363675994643659056175266603461157186436972772935697186775584447574120250300482955852737095239398524047402605320085802360502734438527396117034710342713540059428441862943107393468247351552313105817924671750521572193181871359324500531838441102862859431500100485751200567575889152186067903542912689055820492041485586215746117964026201886764474679347399259605259899390116183549116857291416283292113855783627598795204602258349944011558929310877634929059670251343108e-02), SC_(9.98000773215447974930857087008764150802722713855075131190757826889154050945553921220661121452365560389264145143901439511281161342450172975749282079997770447047962785911737177061850743521158087304394889557567640376240963884213622716828950326306607973087843641309155595671290107453886169528964221217684412490926872530448945494986971864760658616100419196710271977256795134280916032136610315122731856424655612669204766978915937480231411079284123625076175877311308405119710061909174916588652383642106075950e-01) },
+ { SC_(6.92570805549621582031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(6.92017280684475612902603902770438207229823809705471271479828689022445623726238799386938809349344091646528512687247043332181204378221893753409890952132644020057841217740487449401462724977326326240588555873845938412452043950543296812754149801196579464929877851745061494558924117827686964993369769544684901144441194229164891237169979061294758072061727145767674440485650023105765507606408329089425013899299577165073264823196330995405816916856144211104913426885632286552108251986044868955272626643196292768e-02), SC_(9.97602686861027172603564582943332105673127986071266218353266069809274511253146184206845366224173756081058509215281054336469951237433524652820574411529939841191369181516825328759338555257162658220329035742673409660923162322070338772130378093565233782382859190969874936467078560818088676989913102487523016799437156795510688393525166046823170397107091522702108912971248346576465497475646757504529354235293789719140147756309348702788375506713736572756372750138970931785579136687784786155541123581503410624e-01) },
+ { SC_(7.68246352672576904296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(7.67490874173009135069880523412697822508457585502890722795865696772047729876064075442195819127967415252174730960637180479582147474309291939932982065599344583920928985188488533311881202528894182053880415621488280876401150191961474589923356376146456592619669462859281190965749024420664637455818648545745030269593390316639260811403394610404759688632573916754271685582926522678938892974475043221360555516845248432643113640807434458674577935765032643325568519227175900369858636214019202303533964419422257850e-02), SC_(9.97050438834772040838901364158313289434451716031250064153596345308272018821197676129084180229236664005399614878677876975471250325523150960303590418697802419593875967006452331656192889917521490087559820130552413382203751563210591862975073872269071197791671987098499838808586255207819747398217977453730543524500812800441363575651210847109655415586570890200280733024493168949243199540216485504542435209304533986390812843525686313059881265579087409955174014924808295795997240217218146624971087121410183716e-01) },
+ { SC_(8.09251666069030761718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-02), SC_(8.08368672891704041856401399565977462633145541207784105195635281766371350041715608644123439493672541993789745715282339750465069529433973679063356554636481676969838531641729712415794020457592886899793165051838868222012601738089693486666663383926935917522627219438621364751646584726391558914371888319525238524046669167174017862265555593626706190460862728323563184295785235714399851325267663766041999660466314577095673142555868764898118503537742829338293948772872287161730013924554420829079124806859650838e-02), SC_(9.96727345309073504356335470880926838901535446591427240450997135536600995694562006339829380366181693066021072124078607773475760189943037842585673090508596377006890419990768006320611612165829317461737791908612725831462207730332953868156044465579321433828199753603772645372217436238602125419724170481393494192174338226617942337887718845813995926557696166708043078610521363485223670975974379541202944258805434600100105554638957533334813937130562560651036711336483875166644356875980418013651512472303074208e-01) },
+ { SC_(1.01393043994903564453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.01219403908943933199608683876827266822331896657015119348435515995873251362892581898523969110413473057175484874945707988194700827394492484991666081694502360714551805379172398977994444953795788193400170674845605172617176911610981540681123148867173832535769953275410424339906182339005138130601396483778642126418902955006537169862336104812922619101165500080507365921158621143838037659291114217732698524358330821295373816025579728381376436689358518738815604135961883722908286779990249376227775979659081520e-01), SC_(9.94864127543212840320288377821634845647085414624812202931183041261168843158195990345771004501686363057363117868426992237675460528773854521201920483305361363360248147058939179651726098593741851629897985101915713322985077003831521906997798395547116734574812939319828244003602124162864904183647670159780723265956499501655186584470976880921550426566136335393136640881134844219644797108944868300338025473599742848702293332135126250466031987636207455199516403656090507615110967455528204674521869347233184283e-01) },
+ { SC_(1.13781422376632690429687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.13536074842449533573056314560680541888587073396780471734416954452266370815229214023167805970244196892487614906848712576035545051060440640696937578458753351149286198659859230491031913382949861842131574007393962925506301352740569195139817573460190730933124402796432541139111274714968331991159010328143533636587905459810458085734253711085152213069238726912858320015971192029698392132381284060402446909062105834221574702578371713280266538027801135387833807187710401803421253961741020954081638053867325880e-01), SC_(9.93533874464967449063569644542184589167411915145555830925800925048382916374957718228156373711609029097586917146755989532376282173266030804470640098835579196241275798250895989878704696330453367858309552789068201155211873250074943597130122033727796915843325644852705268264420421834017375881556371386266487723607694010828247880528072888290694751350895959530491979302529696561595066224369723425657904124135240815273639834011392138971431371570459667652548016159381399021194622625664031635527048346353172978e-01) },
+ { SC_(1.45697653293609619140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.45182726545119910896301503065513554089811635181347002919360968238106525239849127106083723447884661619491476318996100888058149769236740617553657423543246126224805640578506008942954719919879771041763841262575849284095401812024452055715104953842593111698915775744793562621776046814833194051220589433393977077573901754840253776854446283075046240949980380729523982026872467677407277506741271915544833128497503377061431926327294908631808827940530456038838245220782204713528747800140098835534702697426926175e-01), SC_(9.89404859454877012674104360255215697445250382526116686234430435111636180480363210039694164084560087713657579140601666008513347848135681345012895495404482313374018887800206381904740118067209223511554356762905416336552796599320637752873442358116522801991236920325855007630644300246736916456519031036406469453087853685796047621522776532546594623313211992046640425909727951781150478344661351442954782469918430949839815203310019596602225454055470344982907764565783793045739939149621215477845195650414185624e-01) },
+ { SC_(1.46310567855834960937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.45789119883467940942452666599838103341359960449718828761719210957523413508589636439490441998945000690046439423719795496860975068959608833118482126752973685992497281683536728240268587587996557081304567902946969692888006023433259944486597453738216622984795412987238720174132836036097378879575428714062852373236946181672074574586946077158989655378857849435203064073233248254743027223599966958610307889622372063348070359540031851175872778387328989367308344217063459104308008467995496716837575470375139856e-01), SC_(9.89315689011148661602733208421699488607704021068618550402008672427204988986372856602489837286757458629350642286967590178573609349566514100296374300421069016400647354574847125419309106253968630534855968665549713372062563646883184246277672032915339186942154941352874559377354486407977863425325175458300408087571803444300804433696034967764795880754888144181773120850915128858590327910126025450201565492100046247582395277159945474527040466390117883445528272059409080559643218070128411416452778883832850860e-01) },
+ { SC_(1.64792597293853759765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.64047741622927076939215271236654594127897011750093105907421204884321017294953058710221397042344470958585047103860977693513220373332344673343758494866765737962583701512149928490660206619098121564968746371244119245299480844406136712899775942646822323057929571303890179803170552756084664071910161392856844372737036778217074263519383318878308282686738767677049481400503597999505931480065837516222420967161921750298185638735643161192547265245244900149693758408851479162365892639074870266742575198789041130e-01), SC_(9.86452400508213756079085881807272936135605003947860908459482770413651759106178422243846316436626721487369742516524557342814943387245800871775776486342542756619267901007984402634148564481396767251299084570255625415724967480494452602327750220935561537677562719487800489429908078112186638391572916817894043484848106365987479384651955220754065637423636048081167989226482466763849124771027198972951029669062947310139511886934376746339774134623284767012226001205043028480105389214119654265467805704996894917e-01) },
+ { SC_(1.68696761131286621093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.67897753381640777196490976482953588467508831683372714558795951689672127553712898036662970055721497467147460442678821010944786665039665291723031055582489572136347698523359833632507727947120936709230382289481829907710145607418756967621108259349346466686730159813704577895106354119168392929747217498250651261920149217884008242721599405476228265647737002662434987399937591531877704904771111015714073021213635766515555210055971877789318074905744443808130938693092802702033774758042610910893914411986093307e-01), SC_(9.85804414886339273471656447974713083827165382741323834224259676470752447152375593455603668369541005720264056620625978392433528478869903852378131490186154661428713627385705999552117875818397456421062795844691099250197140896284553382461330648118896559620824983015387112024605313724313404676635578899408594831199173075967069948429971307857666478428419348687818365697811430472301400125955439683148729027958378246677795263283167676059509815153284641866483046913274472527809361657130996884935738437688390849e-01) },
+ { SC_(1.78496479988098144531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.77550142947830555217390492492207436163564856376397691603471700758805620505094698945847003802998214813652148033430104346445883849635826609851792442417372917393077225504169766027761171289816204119015355122870296588370885941402084021320650235068717288615664162092993878080601955739098755934530077051921941503847930336545118455807353704448177612457787143073152152474912906128361372592953146702018572591695826734837888565690378918416926761365428056068697441293452285112838098535915209651376327087033569747e-01), SC_(9.84111755208322331601783376284031457134510436574988472806865188081776835817350548686113681409314838853209555871734190921300414611852299784524298797341600773458233613284112776255935237880953315784741791795731746499567321404790697016686075710158398361815849761549871491374222001546515259044955559094074496617496483018774261036037936237441724292540322806453448653765063482075390934100259487001653040960036047517057244093701162162170265301510994152643519555751491036603128207767303628421845067766132528336e-01) },
+ { SC_(1.87774121761322021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.86672607070509018200769158467157136756113545054809133514599006798341838147428337915964255447040875993446601094948338007788867131495492683573549252266794504395930828257199806193163317944026329930030276018177467799947302689747186012618665496659752413411604967342391934340345214204527433151759729624702175254292451837535550647514340490554770316288949909792125071156560813410066946473274599946447062966296654108025847480349640941090560137303957768362702065204305022159912119527935408421499721086175643635e-01), SC_(9.82422178989002337815610061337143809470232196191426172141227152440284416089850158360549098995569868789283179124826053849882848723627305374894506652402723568360198439729964565008020548646418669353974087094974102981683934246429517284904279436821871136249465341395739281782779316039327149652772606504080824861909307024955484203942865858838215635646193223373227875069545714813048165491415661891289071426040111977674591777031031991473152177396063672370564663369651796710946807883420881870357844328037459019e-01) },
+ { SC_(1.88844919204711914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.87724475007002131192192907909575574869468107940416726140262504902012686677137623390390440018094087947975695782954301767385993337096992265831822959983588134109865279453818899378809773125976208984682808324883167608808274828949288633727230553400197642565185759119997079741072491457720275500904428836491322659017614746144708698514497655273321270625201156908314994126688002285337649091106243420898018671107461537753842230681275281559140984628635324537359567946033168059091609203607550845641421309987051017e-01), SC_(9.82221727250698436817021350854404602400242591298039572591014001362833626919487015527681343503737629906656769473041944230032084140575629753880323082381394405508949229495961813072980287617641885223163912931175425781095733566247409734381851802008224421103956525409424631620202344202770947172844441311566015165775590081462279294150426616367490190370747077080364066702877391332809076163131938938563303607706965846945894566447961844220594229365249133061197350601224127232615735975265049548774049804588028913e-01) },
+ { SC_(1.90480232238769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.89330463273083171501356047975738454519834711328775668799269418262542693675230211169484065483867752411796711944188561819164685584819239151595903268311841262796101414713826819050365386774822672846563612883606074822171787843588864652239834264812845660497544748008612180548384351041957557898905180261997435462673216754339482806193427627037707093816679505008419641782078097220844921334245843967537368455528797062366592333764784686568744055047958612982535677498760226067950696358916937565635392744576096899e-01), SC_(9.81913425754429586682013889768017532600113847811291666387725000947456131091217295251884688576304598996117091444449076993919438338637549621415126694566727540442457041137575867954992620512786069817600004167654500318167894032291062929699694909648414253182150669496148723694315542902771679739586190635289986724110105904070094436041592234600515389991658872221604551947008209955001901499595025153606756488036807775907625811360112539768038550121486610887551305042579936830908885733477436299200628358975660870e-01) },
+ { SC_(1.94859266281127929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(1.93628466557083175937744864244790830668053598910620087560855663628326397918747917496701804712300389916375529322287795071844972897988282823779113733963560377794242008202198109920596762933935555585424489154825370240638238205749913867006539156012553835311920193678258151553765976847035445513869442729110946964494746309715218534610352446566786039322618340026036341364523438132919833221181717413668583176811261681042404934548226514142822649044118616453915688888690801607706237459440680955231700292236811361e-01), SC_(9.81074929319240387502184662874193366494892376995268422080911994896932188938843218100678702648454595788195800459189480677724548072115284301366906218387046613476243458332542611925311671611202355995756808329738252593319348185404315688233584739120945457255900313939696248899018740177998528759646883140416866189013968416544572880129678451134992718322404596854003353515915190671579319691512530656126775340885106148417889476553076706646054806482802741567572180944742654675167468422482141054087377709351667607e-01) },
+ { SC_(2.03215479850769042968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.01819682646920095923757718257761476769301989665491185429289158205603248364522455384939136294409419950738281505041126361431633176654744047644395695093833382944676718163092824428861071634027022690056323106012491255936447757470753147279575163352864381221318443333004723142721489343022119668959646121865064655890154871570932168528973909882911830449156165155241550354768340210585682803959840545783404416670702497182916990422425025622036736615873006366902267886516071073081904058012469598959221005905865613e-01), SC_(9.79422695109877704279630115016162779341438729197653622653511871860857427665621496308005256225301647590150890183023870213973551366446778827045639583831856224791984674969152761667061884727276778725391290362457018194029231238622882731367668907983050807609897703313170541946017503082428616641673224025500577727237921678771503953427745799384234510120079570656146847344758019012266371807613472779375992191550902090841424078371482339253787081150785495461758875501897023881237849778458350386303488036080606616e-01) },
+ { SC_(2.07936644554138183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.06441432111765598898622696628034638008185695872547628186034653306091137842792921910271809676733557669103553974294053328911326243602782740588214297154717533970165522331160663449357525617459935928199881831844976092566068029955259730825952855266608700751730681501576772094736417834693837749663027914778438343298984135440812456259434671197055417724040905908168521650742559047974895842842429141632802570279876313914803674312694054572490044105458254539298356949176720439807787731898038453066126598813031210e-01), SC_(9.78458959337407914880017857366240707691566796770579819059463425270298886098360523692900979968885125117268896174792597043925346271994102038730825752617956702096517615173232766171688879761539440408643776852196199211523030996935750277368506862219703970756235309064425023141236695239770048877371573690168695503939188151919945120866996252845385595169432390250574335809999951819900409720087947226987798251572790175287245792567131272039006656437435690023152451503423135850418689659516050248598574324279754693e-01) },
+ { SC_(2.12829470634460449218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.11226371452014391278874870071073310255372702463777968786843878133124112097140473459644588680440461706449482294123265808698739331752009084647828193442025974033968649542432348123746207023993629961625392580147265129400199313735837841793972839204732752322634442996742998985161049855446603805134233954899877102074734231966641527718799921704505666685238290172987528235112149856899544215597311460808399136987719564373629445617240952996587119331927421670252293311525292408359167374526921754803210077087692532e-01), SC_(9.77437169337863700915956028138184587880119521309718402773143822868653160875229416631075342793838257456807094385135358010247340775654046653152968486378214625824585383995774198214703672411773216530432708000905914410924076763688720643025445894500247986983994857940703526076436401941590579776244250215552581924626810062975652107309232328773982583693249830181955081354965661172527831758216391460026530511489630646442106088711356971367646510599128382728363593410702655779358342814182142737020940630712872361e-01) },
+ { SC_(2.15869307518005371093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.14196640505365112786980685694428344657244963366876302714289501728318645735513153812127852740864750088035328907097365685728621293352830777003662293698178407244178434333281299242679553774479025546337174728441787336469271585023342163534779593199490313523522509388806059835583629329411911994168179200754968369466465053277189853243691400027013334899114643882547886884557705155995062509092370819402521209651344335312028605152197178040025081548811752240491682214361328002239129021416396548559625427548307079e-01), SC_(9.76790560558513680337105210359946000639131660265038803465419549929502333210272302004423538883524995851695890751897479645727458798428416719156047191385293536035128459622583740134790612138039228883962636358032372726838818091247096202590945439186853892215507835182481988301876992478308045540062442385616914635141454198946321492170688154415464432037046812112157612157921692137918708124553009612313024458692547550071702227895302886545623596270022503303566442880581687999337288455147084218206433678719726348e-01) },
+ { SC_(2.23670959472656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.21810624597241132842120335214517834339392143595694143128274453434000897522756707261372395934316603499717542829693748282161138714986831310993664331890086521601864106048610503690287656926479843414514538641298186870853247769165125831749677090898816822399854510209571926905148166670105459035975836926248520839912108203719166947500998176906261366299289408429302405966781907431722890616467807693626704698773283853361405226169691717078175076647095721409493977986059074455050738153382636134995510720710671481e-01), SC_(9.75089763465795884741527131038743144799709001486249188041326805783918794629379695544082151093155092077802612594232019135110813148686802535895584065956564082709443629066755383612577269625034627767644996066171592038545406563485710108199711112941937879356362448421804832671387840559048718713150354052800343295008040554106973215286388458315674666252648980563396332758055989177687609577120292484105909678934546857037299176307632935036447727717180599996592072426254255769122423991437040773975082976170615027e-01) },
+ { SC_(2.23940968513488769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.22073899560262365694286717947505519111283644170664206771039359926910630331073658742969412774825969687561966895608228668933631484783875397376737627105822734327244074926245206170293122854697640440913645377376408795641981619695565686182046225697863421164239415487132576368407789678491873903413263920057530744320682668616303876581465600307577735903297039997271274233170932990376623624909612289532920770987498809066596075937444420611813712211792472789626062389304386432536592499629126767217589494642390982e-01), SC_(9.75029837048127723940822139588475843177309010241646824834890251549637760943126873479985410594784222688808386101184513250743227375486680081269879083496987587993892050541293998127521838902835032687085618894862339570796558908797414825586693093266928416593647501074052462459315194898583715110932923738805350182790175717405384839937757189467422189694843791570712808954321923019264560496148035150316447485360041658090233265738607692675797783748168822650033028609970920677845305526624179703136420672529771980e-01) },
+ { SC_(2.31657624244689941406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.29591182609749077127085238730170106706857736813427802366752664527336057726814890516348780149683921473939966330426614880926920513363391834821219987707185070310628905127220506682979261182544755412644963119149140529134513151273713405482176072789374585351910363421231659904446435482736921672058606578269611158940183557290963996010971436645314363561578915471036636427166369046120643121839806076708837377175313829976908135486291158992783623234671513494993196428199914265882626510236826919461730552972391764e-01), SC_(9.73287156428079478716002235261840740084659684284952238317074702351111144046965256073574026272435872923902375480127932863055570218099850498058845991144115236244780808787578236004823706045777816872726031536853820091469953621293211418659119493664242846692836341723477399946935585891718727826727210269898806213165073098754356297556028189303673469342497995341189516686033293401960600894424313593735029754214488412768090121108833953441556711975775178389200877887553119192408194268363451687882704343063502236e-01) },
+ { SC_(2.36419618129730224609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.34223349413056397535012002649904436414830305844190028305435023159273725915625176126070536513473503773761443813896860179566226215030054698884364739340175429059896502302795731430829268126913758185127914230290081466116918621292797533041072984612393204017063572807293439427376418097279461665464082135412905032217137478665683141093696829006176517072236564399362165513731516388562375669839784466484294380256956425812467551879325915966779927314593002321921021618774333412509953834406188378943630420645257043e-01), SC_(9.72182813358541786002433931175590541460042986543364086630592342885383343147001536864805980731828619596937794265961718654901510514211526139141566031421543677149169475559185660751374091780739745412205256535077926002018568915189369879576144325949910721880001449576228384354311343808510925877039105192748773741470732514283534463934140640280674768143828127412493203855945797591134707019619827976778153234830092252653180994683559102578078078112922678991500372142077874616293332485901302909710329044805275133e-01) },
+ { SC_(2.37086355686187744140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.34871488097739499325182931413505351694220593578761046285919402900396314038981468317698513784728753707678904087823880679901353228605506493220315256494105744645692747607812240920726257071852161205469905087486866758169738695197038438740564489385546672183892154520431462186791739263484418481646858664838898624946550338296059888986041536124862767319780937491163906732148464236988371556330822489239660766950561247285175680759472814930515821542521752960722919969604212826825858521092183886310338748881065702e-01), SC_(9.72026431779894251196781770060370781942232099197921106135120661810632188271447767998922653780711101087245102808499149689925215265153567962454784863549632555036609694179109787570991771070663299652723230727682947164732542496676768999691153749799756038153217247976912922241000804288378011338863184388596886818250778639888527560620930279032479989201300352288270935683655631157863204440552655928070032781156882878658304467502917435388924019356549251639438049985256013104098155541508692246870574344519742925e-01) },
+ { SC_(2.43917584419250488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.41506091145277088258055644639441358569817962482007100168326311125875063836098620622959651436734701882471449140478713900715909279878500129381183514118262024999806448408272050800309873272930533810785473686208836539208518972638810893445205260384153052201544122370711332024875386229654633135116430009940820660271175620311240007363471390893208722112919297060548435968682520385755428340093566044201493651538792843899162713805017257089805610227242722362452752755712664407437715881745250028492688314820749267e-01), SC_(9.70399303348744740629281777996064222428263418261615513535874548301569309382617106182778792029170310698906217117798672892846704087363302115493606289878448928850470701791100588123422811681772912832747047311027507693577117550759576184158586663998125715627678041983984746242143715742993728038685477261982457848406983044715860265386172457355491196156817728778006847646901469415351803533371713662907224869572879545133363858740762107694657156648981963196682114252505711326234507610327782656200028589799542508e-01) },
+ { SC_(2.56780028343200683593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.53967476197974948300470152348630856437778853649046907694498691134499701923143127504469744324018390842560373525607438987081112551226067812998235100935619020567790557343921036803399849329868217689750950833215794053798842332077966448743655775706289028308203291243933883217329742193753836170798816464800183920334186820141625424226651537454752528987557134635465607564214599658805078608562467124353038044016403220286947830566599498009540891072458280195284478680372582276803344509618865939427433243186835188e-01), SC_(9.67212758928267564909913781023042850649210074113110150779555204117688346768013381733678013082194846590955208239649965969631661476988930023126634900965028238708450802408191612909963009729559467638514828430744779946263855525266081909443245556093474249189026431060834809707402911975224217225893793806041927048869332697822498929087665975883008669509854597503249122523872773752290855879726093009296214739100119212703964980457607123946633959558534528977914687915954938045274688207897907901409739771736928444e-01) },
+ { SC_(2.60797739028930664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.57851397011684381653215493513429137796568027542563688065682683181925805410498887334830107315497716941069126625883444139803709878524172956770808697806028611481752384474693564304778209137714825262189628252311617579879431939465205565896109133223548776955538905705145912571038082487099819804976109268792901846106723571853632186612320550153956924085148492263001817363502564890939924812502952221465569860263998509729178129210248318839719688265189638258894020460309734694369100144115339691339084345644936187e-01), SC_(9.66184587467178925054039264094455111955839447116830926670726695111056480734643576588829589093151750938173095092013885475613504226596420519468505671990665350017874837095070411073494200828261854901406233203038856164661310773504995966871525893796073964171780940959271419513681242667294030646037129134794487249645323271597514346135643239350470405850128978217907312787357546601749225176561132483998559247022954834588628902720040609501476406971711684162585915398239747400812327533943923544201497396858592127e-01) },
+ { SC_(2.80308842658996582031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.76652450296482007185109133379664986610558754140681586207688902695753779035115936420467935545647816866342460857251769261384109822160070822065813412470021999090276003650217199311308412474031531959235881402933414328774518297808848844446010593758203002690435296417019422446348869688663492867691085846932064019691350818883217102844458071500953410615967446227001405852516815294644032584384232982816378360038056258865349197065218045342401352567566701966410085468889024864179205506936222190409656968011900042e-01), SC_(9.60970042064242787586616146107116426197837340865418091095527345944895322898303059643272818932380762260288437483034417861243469274929582394086567541874872298007787708205027386061888638647875009556202948648007162736259944552779661019144892638210622883831588324760346381909877348578780965122436104866880945115333116909739647331839907523858068914185740875256136194033491002352245919072705583433053970894735852186581105174794397321295820740029624593397555262163670489560045281417159094407435052568544583826e-01) },
+ { SC_(2.82572865486145019531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.78827397517083501471330268973793982020956043056485002311128625203480909125454608266708548153980451085052473210601286247173130026031229525696322745955073475919151565202896009717230846962853493839247625955407998823036775750704244213916449208714368364119934116691972792082838205032077422066968600200507619855517581347340368705484048290481249715689825146802325327892978911844770343056488391346810580610465544218157636626264496716159139173077724718154881144994010887526795536631047147615072038166218903597e-01), SC_(9.60341232267911267381183747437916412664206145164440808035842262775205190353599826199664529625608027776265256698881777090330134881882621301243080560629047040706379584629760415449833531862131285447677178430450969795503445162404785990634547384830535281646944622238215968178098765324782398030728384865653375265992828298473324897027995908029167111445460569023719561109308443466971207024803868610011124698023157985663134329675540970828039088533857954500329172829898440732546662708726879160639308567661975472e-01) },
+ { SC_(2.94892787933349609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(2.90637267717841491949561104535364579480516629619465233961662088429726507862432828707755088894634084811614033440036389382302935785798227412292625877543660982096842193549591017682122950990682866966335040743620085528472443575918955519317567547115188821596525197289422532447233271171624471539630699450236545660114361779939258247443407627749697559018581819196742844858102033694745403183397812269091094587500437089812851864223611210570999251990567044704396204865960223230481030875348590845729075010947570529e-01), SC_(9.56833307642197273737587591887788902883665572636978591492719689000054294005116111584930889939634837715671167147624840625565369350659889484795889431524480465624414463011497751732807591607039510326250228891745651691444695736686228212611256519708123525260472804829095732402311433573156680016224942389308080982389958686607782516409251583788265789714265801240259587125208043655617146669163064294419760829759381222936837853395161186480505868322168426789639562818842156041662627171754918917363217994882867932e-01) },
+ { SC_(3.12102079391479492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.07059841753405999831874709749253165600072848512992844635835215773540826519074442226231634868055680476383181767927905664549163235763421873187566026682056186067295416245364237011824046633465852367385333102571562124547765118946951955979688673963059577571404554960876833646916051947025162143308838685134878667283759479195753638922242852116176090313158946224342073520204197762440935994303058357749693323128948419047343584057635944717911926030922197584857079144392533616441138045686008248146167555714269123e-01), SC_(9.51690208829729037576840431988604462673713730884139839166679534444816195557573539853339641864393360660504275727368557568823262838299991557009265270390565138215230359107809334255713836733104929918340210504480125985259471413876980637442771471105254330498206205878359629897338212290265053486914375204242144872790154864198319326981914100262103960665203670552921064019141135434898985176613523157296876279526400987298715110843171312881802185002847789634535539274790806820388986630862009819666177780928476240e-01) },
+ { SC_(3.15313577651977539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.10114604486452371602244148218816881223891635019324529166287448596151639111642932716934998031321887758081822105206398127173805917178421889838267708823608322091462547482629887325714398579152373118391661733631956935670424908070096598288890186299966082187457854379359428008012221981487666435201267688526933831111640545952633383495730237567915622726814523104107288235805511234197870540243163367745558344313156824938835437324606528773827062481267605862954451462115351447898439272364530965442052891672758788e-01), SC_(9.50699180647701628487396566148787086923240127099513645066330648238578006503678248562865690654153023205128969226084861843000896121071452674247004201594177477295365880682146363659658132961000098514414933707666096881539616427931595066196727129449358218571438918172767600483899976768586022179968871687915301710377855566927304861652670623702239418492743070118830570825034432808087497781397107161393707647233534139257467088129639462402890402094063987132136815195270053434040240225055479367979728606616266096e-01) },
+ { SC_(3.17886471748352050781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.12559623651764165322212807870515013629324029147733283136368157446606778188930564445609204886499961778113105740877974322135198114141812803765994002806460822966254911867494481580789265715208254959317709157241611034313201797819867973863308003889863252875768021308953698342014871650514004286660121299147145333979151295417317040523136489794647687655750518369731036588972462596472475088750359571516960658510285090228124769299218077291363452482650542774467825115316859673619565065980798986374309452485170930e-01), SC_(9.49898142783039421065638698949823517999068885390741197315225792223882369515799723390096969334365360799651944990990126008736260456275912352502979942152551441391703277100848388597129862238754948539625430194167651244865488557343514835741689946133613892883144839999896471282632969671310466844604095590514416359901407768042119424637583642405348701870119240322957130956609821641725423853445963795969550741785845954269196961410704228281960935161638393923018793106680802489022846850256426254909441722034633798e-01) },
+ { SC_(3.25856685638427734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.20120507353269781855753495379878039066037854006666100431875056421838413804434799538536796131401377586084756848199762002155463765917890690463278250414769080484724898769887576443647712277040855636736860793283673505250629213435263243010952510656350940830571318488977600380399190797841811306256449264920800681050590486560731400712511724653545521079473607389857426102523810827917591200372568412968363871519210398075893782835325802414254408155013444580413932023311974315726620968068870995641605931014140420e-01), SC_(9.47376831451922908762838282957157442145992857786296235784212495393301704460104847354739924979541258506937517027115869803548217365292294994683305525441088520786504133711569381042592814747227046691642156766413306928961886122517550515083018577582754286916121647946117367658688563677805002026853118734799467123603953437571908546773590375255669559554195262563484850221119526769206964645745371200283122087981568125996313543979605856609804588391661451911736704107832279674007979966459328784100364931584175637e-01) },
+ { SC_(3.31551074981689453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.25510020620429986937042364685995969898965460442426061833759213271618775572332502534089976614218129638667760054701539234024827232341487900744015042229086883340942475886670748218967768455382802470563754576394285926348980977435867907849404743916110773490924826531389495227209664054616287863263783122017536567084703743906774484377495915058868396046672143731061243453772643054096975342187985727367782927328631174431309715560975124132906098483254874892901622307738985680021770864791926680949697814898232436e-01), SC_(9.45538590685587641765146475422348939326429323171424621391898923841241370861109699620118035342769801759409482544912117998047100210926071569675065306266069361724656534365587037037868110606988888827981568032856808887256355100408672863943230307292336810456098125754092279702826073831888005340499510809313153503087612891627341062875052751636176617417058464678078249954552097871951771955835877730404553836456812938118844431736505209097446001441186653820938292010753906907384093172264239077979415805009120406e-01) },
+ { SC_(3.34280610084533691406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.28089685607080709228217073013829244980086878681949079724399520487633027638394190434541814538400934905081532180164816420388055285420665732864262317815475564039316355408118701761716444027112107825164951281390900576158191601679471853089452996750018086395127843764080783337257824990676149886920563849748965785244823891473305743274155685943018629644086807243531846369123999673290765390381103557636778684428308305943242684044162534423213607060046023289485555906833555493391103695531498716169793021646257608e-01), SC_(9.44646578461091414178776104696863057321576035366318900946928701896304565272753568134499944857053310401296727371998536245581622116253817033069387105765921559789265574277799055105587127575674744417653448482768341621979927800216571038767329703960510700455029704060654386415669464439544055800082527669571331791333036873476255791772619645842425077726695598719804374966376814363540378984520539528376950546852227736557661595457652530058530010384807128844351046874339155347485472200170675059489215428103783219e-01) },
+ { SC_(3.35717916488647460937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.29447092824512814936909857333978391523033617107845224299960052310075505573523247423806894791454173014988340319577201412086373605467361183369713001711732687942338004705092653189077698811297143742952310132467187968195376507525259359760053099658177296477700127870263226898313059209834688876407522087440889041166353266203804392232463726842268818252672072718758696114963418808736803405270840450891988650029268928068267593406313414900302848492608154325818062755380535403696499569100684167144016534622448204e-01), SC_(9.44174037468451489365267088035088591308914231862690972249200442949837785950407535409027599648599285502776226478256147933109443887177193380043180048082903797204441059665700123928027068350881895026828260257751054653259489839515100869333027571748111448461762198635703731207762633225551171516871297042884419072089644553053235367393558819799679458992088965895165907796551275946174973771996164630689803536114225907566862466732519042785081005181299097377872608409782965170572073375788770099631685964443078209e-01) },
+ { SC_(3.45234036445617675781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.38416913937733709520966757813075385353964521900390094265192777781629180976759543154906543836722578297225206900391344879893757491801180228412619362904008080592164773731715770901812124465081132683256968992983463490691796826575296603858671986156353981116073706044250214430461363924565609842848686311030235843992906274408601427805012593167720487267919576241994420803073155263941036332062580595356544207542092603981843801789150431453028466293952942033458196009466273835759200514863565639305138731359336054e-01), SC_(9.40996276486182773958200681776617930878019625164650782459989674721685786733581681932601940668534891638624819666126614999639608538389019139033792924807887873658144072477439537153459888339322514858220157931802931480799204440924867456798681215615902875232401509200568538258491816834661886375031648651053695695008518747665629066305896997139102057691144830863318193139443798505854893484971824361515308653303166230586156475304484860728890612192233269198727803441963654040189339709235023467037077230210136452e-01) },
+ { SC_(3.65287423133850097656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.57217768507894662568204947843255675807937935600700729302012587696524783357810607397048811065814498967938226837184635262008597624722131769201971396723630579715381213329596400181363335657577351531699109052437321287680445033826034637398775827065362847680483693681794005685257771393744322277497734213843627872895529910124192773346772853342732564856818563872653596038077001555882493740980096900501269614510507341673697089464726073205061497129282810973902529861673474624188173849172105673056093274773828338e-01), SC_(9.34021127096298705697968078480829135151809558383637730911362229182562918575674304188846684078772850195185983871489264274885680433213531999184880930953027049908681630726745658816468630368765358193438388444550380824018487174292352049577694523697545985202828138906216082567906790013271192556165028307746636921068023709736571214708295379075646659675734920359518901568485358630990354123359427090885536764271109786114632830747506518916681775364286220930917538283026948726952104248202947677212055723332125159e-01) },
+ { SC_(3.76625776290893554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.67784841593578700750674588555290009506833785198348319721510313441501546058321463219147968315752577898440423256713691448443581574192691647704995440505255700751654076648229558941889912601977821037648184590226948590561121481406700523514552066740175676313066736046455083685677333444270219582696300014573394994875787124404609023528711412221065511192883282687720036086778754443433513428817391919934679127030005160315851412786694335867458231606781752083185163741537531916116786797423415811680704425913470479e-01), SC_(9.29910915246178956526127762996390085290835200613356307328386220167870557042453483854688920463534735704848107614579700250713670021607230520617663103835363172580954471811001208312362172610537525644872697074572921104882182234857955896468720884006442649267334904910635015379373768510723551974327520256221002373202064028482209593021722744220780901469462072704535345501354165333323228964404508546659907713114416707717373662856960688517308985925955799243302609395864738074576882921050328851524967663617819963e-01) },
+ { SC_(3.81423234939575195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.72241801255514780141645255986938706876112807774978209509387148729169318290725606760700653681913332402962543956038634844559249660919958569216458990534120382717908857425855493941999728044814288058920926074711487206514766810508241197785036696492456712063744278868653038662478625419883184188761197478075666687066372036201467246772272514710952851151273578267666562536774184425760572090907481461965187195084739783731922123489291901533461093513997345050166140627717868911685869010459883198045391385926459228e-01), SC_(9.28135788232546194521132038364809995469390110444963627733003823836878564741627652253894760903734146992929661240763368047921077487071511504258052886480661022417869838293793674031109329225882528098987875042539736745335504700923216449394354443076336899632696517389138146947845556614246814361499391989253510866187677919616513098995303183374067848140596880185394397200828384737411722734422037179383107166780417945465829318245357854600550219827881612091297993125943808294920703332405152597090926176383075193e-01) },
+ { SC_(3.82642626762390136718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.73373285419486584743972658295685803190680477862822134739166666187839123230941197490101744569617457178315335266166130750832991878909867576156780303116056310420466140082721299101200920702587341679821454021314334846514284242173605432831549954909671972671604204676424139437229520093260765713230589032508436314799966796028238874135487653755383689513250270278030424284694964092242438945526030368678720080221231287652171512279965394603632848669343837316862349798845015377578075793534194003618831109022953953e-01), SC_(9.27681189706387550241935391516788441140986263214363275884321094395171137913622380067740793234692019438631673928581985674669506916341156375623168665333737228363700115091027793798720619125927596016451913658533598902824347300282112219023964174055808582619361609375580562926630694475951148344747973622432995121921328491332370352018238045259859104891643718529474561294212242144058064169023705465099799598255743376952428127753351863671878368910927582778614322123906693275823239648107835571442216049845322932e-01) },
+ { SC_(3.86262297630310058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(3.76728732695111995209787047749548789524801202873801147414647946480127764915716334061985047622063956465372047461169513840471796315532115359173336743873445306005316281253589057706496674703637936040009863228061656133466646243287601606843215898479726999791238624900548309438738434809614670759249615353685532441359840957459574816765343647633245421595235656600614508712872485696566736853933569217131361140361224346898137318046381744922966597856864444242287465346902114484239349231535780595166779044827033795e-01), SC_(9.26323627012684403552362441816766844353860232235455582510490392971499945546238943437785773235217661433283894687038938985447511929341894290408129096863458949295692036268832967955731447440343561805616333244588222790288419597665737236923593354868829890705441309176814435749719667609906194049295915307431333453326042332981889559360874887602964847967422924588792838807113367272643542930126342757662817756798637736653902160534644351581798443570915292325167093110317648605200947026727695940938373926472433313e-01) },
+ { SC_(4.14037585258483886718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.02309022358804334757455041997461333566140505078691743879158537946197564687528817873499495932056914664975872822876541937159526309012964625414972273125477031300099908935396987856592915608056201697241267655473404418171750547283488188116580865118519309071287054397095416522184857129278271466239596660565476766442047439665102232580947339905130546605943299522702167491665865861076373670504643374092808500589913972673958794539143899968006744027676954924675483526113359150297838140830328866816034327650573685e-01), SC_(9.15503932557748805795905106327040154624309109701469277166353323330495047580465013025792659440882401238426239102234866148304120914512259428508256188143971352721134308110915372071940331370587398302755815933308805154767044792918730422938424084182623711157576329336501323833302695423872291003776628955935696475315999936581807634223263656320757954433352571965156768392318835020186996543923793469596505462054756265809715842422711159634535912628317197753269865492968844280778333139750719502353805594952751573e-01) },
+ { SC_(4.15384411811828613281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.03541682109578222980709967440528517225985048739181053234151269824226530297613648513864625533998909524118788668236538749776089110757004324146429534716651136448541877388486900985147623171694083216557078569832275804610942289353672351183249955641829618726108926348664457812212186737762600307260074435150664091951860119867223657528500247305269729397446717578634530181642697357377164502826308277017576726140565738798396384850379134564652651902037517959442379535178746452390200652275134723487656738588814040e-01), SC_(9.14961261912312938531757251963975606171056514942473409705633306647449354976379445925883627419334645798319079684226691906378008685660573351264008078882588903388240223429432390727582752229567332000937331874060395961329538558312773141574847698110453487234957120645662388905771842480604587202066148916563834063955601294103619888302125700623333672970104702059659671918785799250960251049309415162312990259195375210720989849071824171027512824769600511128542169208024958188843927510126581850114332992578859756e-01) },
+ { SC_(4.17747259140014648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.05702467375339262830292961509995901497692400867284402738762532834250477363835078085965934594517062125768598757766526851922833631754674647828222320869834909184759233249381727184636148778919865878136269359838089231384756518279665084042168764638527443222169694429102756136038221869866520348923978295435720362171281132579960723316488821997782812137875635001430867252792096344762654563157443481314180207819454673446288993477360064344949498458150462068431701395898113402567554058677908621209917529511274949e-01), SC_(9.14005201279271594646377346252649494298094855187886202187175311561295118776486501235354805261697066551835374680825865131418933539899994837700018314030655871117929178075445220795873239047434025597938694394502337464256413558388215077611141956094182176309111001038031202569691323194114312105868329503689334322876507456971856138524924216804206474505999929378281865606690640041390901257392444895055519693226371911181192458524126880247545501940273866502248870119369368065587202123602049180417713932024067610e-01) },
+ { SC_(4.28758502006530761718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.15742002299706000420350747592552687972223045741113120302870426713056348785134333968622790831264865107728759354826226457922147645004178978906890466302133894988997910046095558992072339508109922275893059300684403843403469208547491053713557851579495826754053336803498111074934352037413097450601064007516266973130955034354985639275464069104775602331875698543320889524438624926558219777388682431329523910340231167389669640360911599413959164117296479251134912579386628245181559149830695067791965265989825212e-01), SC_(9.09482593304473997538693396104501021330804905259321616290965777176758565932026915430359578499551755453855018104008343574872469655100484191283971052910960684234579468489756593689367139584789587966575411667359624750619523168195322985712252979133849950930553365725100676073949846542207245503600835471380015446062680593988976586976478740651122179506841813035927991211507985430856749772714779898018916484970646645074598872686609284387685242249795194138385627188402736027247052002783295346662465818309068700e-01) },
+ { SC_(4.45544123649597167968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.30948948363146300723121092898082664509638352166588140034727822877235815161424352108919540042044112538762724321500621101449739714554194593913009804814082214319683236683235378672131292239439017243450275920171408813452754685876072458057289815611669924772864816375713651966864094479591019632462077369132936038735863542405984367874267619758481899414566965131924850013983459072412954571431179625787390548119791714022129981306939522139524756766141242804301974521747526987847195165237002774828120929063067044e-01), SC_(9.02376309476649693441524341643113425775341759303426903412911273366445409015974195367557714002958404562092936423592261308595113855232080165919809274780820143580092975184546098062572003695941781094812237267584142325544572854177059090387904225847548546592604087162701961190008072455837295803252923772102729014511396836934627011018807054959294568326023254994571985005643935955842579796563403396030474028550374274698865457770359922325670148823411893173811002205405063320700662280071632096466284915759116824e-01) },
+ { SC_(4.49747562408447265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.34738213556773642926680214435395136165212079597736426483577114464574954760942735244406621691382502626047930455107796986703456539799434205636585457310894775674965419564259809763663316804513179985632601467299117182000653051524824513608156808552962216189357948272785772516989094473515847766720617268987918246630121096935720033107216651369640459371086215249538380063034041248614589579006572327908496498138487884900261661990149804231843631572049720496487316635858861663215229112020031694962813171109404925e-01), SC_(9.00556875312972708386219971645514750726407028236990166826545850690241517101112402708386772819738278247821223039253372151806624483240868170703439164500972016802825899173423975206096499267656188494467490343061966750639625116172486836412318757879291167804312026689814805881985161435878128369258978791474612039898718575491126104848948833513149233754819803905446108254996077234113802957319405644663301288887608570332657255734673102012379728597740044611750650505636559769166038774171113885058050685760522703e-01) },
+ { SC_(4.52869653701782226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.37547710974994897584705187753064697109279998870352465729791285811775949783450984369414186976030231997903936542730772259184602150876951845237393810162537878680147493102334921792973422725128642580343784196916482216571759314951546223891751601357730521264862292717459596414748032496113998107987677978514908760965351653539082846202141162068066229715005699057270713171635519654203034142538854077714450937335807216193587516840434812114463380335247298814001603054089595274484793803913196348729067932487448869e-01), SC_(8.99195196061757399361053971564480269499531017554558188806333532790012165395566350778235469914291403214368025663247285422108383319133726403092839105467674583216419489996730319770017782834530964004420191763527478616501382056309331494135424274941738292844744198027230566152257675219107464838859525235403944781216731525975237957756110906785551166391061485422062979524846055589057024469448090864935182011774817757038151966849853878680226230008627334013666482561987510034815801678655762497740517344098508436e-01) },
+ { SC_(4.62250471115112304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.45963521312847654864328865321710153834950250932578074080324986865345001347757477980380037307625324316996140869018244797349374314464797111971273640399940359453625448104401592160237931091521134609576373756124867133666878568292268216685175056070883653017465501384214652347965224862323686499134477315926437827890962697836714416129583317366024114625719308608134932258724707861838402087026685949036796896658072984061548484922337651296656540856877253462004253362254138979753923381025363013468060276015659293e-01), SC_(8.95051136895677751924617384872825864034823165128075186190186597441499402594610028026215446231506707482496405049193560314497720776949998204342602626498576594729080138214268311850150450912069884690009285781631057732878261831293268241590115039762894904299669089563069911684151632786373315966907384512964784420116764033039210775638548338742350110429036452439780448368390817796260243838052068698870453925512851854018094826029153391333450112576463179849305395825697902104526169507205246156780703291651512347e-01) },
+ { SC_(4.74825620651245117187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.57183365940682599975989520970592586820486164181686091846497267559877931718112664415849754810563402264421555205308368211389019514311727090114799160111233458181110518886927325494153150458455801368383321159237832190181397017179788788565348034671792474074784951689636545848238112091715561617887192620879235113630727198916655136944495368600608371090443370159079467076296209058342329613809933283306711620704002298838140270847129213918736992399234035900728679054869995037571067012754502573122858410648385207e-01), SC_(8.89372458482467232515984882706268766316392175186312413450500984156418092064222973341734033663013416063605391090026250094816551319611263513570756366575940855133970988017874843537293831076015304335361026846863787886532344841888477575519000815281674674387373130886802697452616125647564031430432280728588072646726366057290517226076579554292387459886530913543780265990513411010099135364163024190628978406074455036483606737916437326240976630201256303072037744603889453782870568782425202552340165074002154219e-01) },
+ { SC_(4.75649237632751464843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.57915713053557019712710571041157624420787445280707553767877608145773274376823349750814872550223275249292408134487143378104524868096954725883300351468974464179235940736798953299937073264153740357562860979284897004173565825491677916037847354653853155697330499983418051656375578206854603319061745926619692052275536816848374432279273225818616759602890929640567133790022595885478921907728424755506810023816964299739366390511572287460730643931920759167017258310322725947076324143381556431536551482912904556e-01), SC_(8.88995612890554386936750536483695852513476134588276854940621936209484798254166731221556577381797747107009996077607638797281282169756881823806605504914655485098662478733008167757208013537007605205995390767969085354280041451305854109862952210025061158261775701522354478989910552534967567504369494925409880197034305655329641794883644933639429106847302092581964216122603833735671572473609141321663618765145993837213168005923374608817688486956543652958560596935007260687185222881835947991213367235624530633e-01) },
+ { SC_(4.98672366142272949218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.78260008103898513541770539979545252964823085593186147977805482371936090051789194883298976044663165847231099537581272151268640403450342975211569193068993143884689281956002319593954584670463486438521537593822985913643621122287101931914945599854160679995190456369532992685427878582889478807139605978076391142750636244370938945332122662246707951249901241678461593975209892588164366223696745448816630911122129541960760185263002196493023080164412082738356264476994025730867735243022611054082301179912362960e-01), SC_(8.78218289862183938423134673320051739785499965734206019255453944263680156104999722243484431478559982894433211165939525740927677802481620209787987469668196432753183348602917650360351196761705324639570894678343806174504972464616029398441977168964174542305616645585564890203491919072688843982057716214127237367286250524167686496351943954136209482432227787458499924910595283308987464828136067964950498523525151712485885751332694062133562868735135666502557385948862113323459244344865735722400659905954097980e-01) },
+ { SC_(5.05683898925781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.84405858017577105986267760267483916585338576749856882759172895626687414023600023273330690992932111166705419294046737645663748536483800337813273369788242501381982115588238995601497093664158009612529499219498997691419631936695751958404275519240089912385757776444311694253366794224413925157246424719597851079869724407808712512352837701427411197808439056422135011271874004431323584925233546760901701318303123610840709380726059202286895071249175118205548698394421602866816959285749061736352965182903328770e-01), SC_(8.74843394395965551309879575006994293780170209819355112069780111612973176064466490116143405110208953320912424509429632141945615508727433835671823209591595840027117758435836418746698473625487160353463202211263804287657238763845717958427514637781076681465849283293563449319792496466343071382848353682561994442500049737084819031517295595081500622131788600851578430131514229865791059536905654539814085000247420280886316611742047606970990845403989012375369636742595073827358323462326594252382348796306577237e-01) },
+ { SC_(5.10578632354736328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(4.88682163339641268740830993903499713333103251236996499716006988777878015736524923456957058032463916399381796036990599132100356276535658883546305343337696754464061676188567185777127466524069532800341427586153710719912664955598618474630711138614946373765273877760472582085430071576921952645961698653272413608503453153197806113172393198844347178330076429745969698136022573102889522545090495121172637471356210616480434202516259895560003549541729134784090264648450886179847814571572888679828103974661136166e-01), SC_(8.72461886407474060714407841408344103310566393107946054900278740601639720374550511441120502252902388979754468889400577378186176037091714805093039021955101337802634805647926475922612749821549415482888476878706213592331467661841014901258491776322643364592301082694865914465905995266182295642416483243655610737136004298484481805105164211720159011364859704660695558074043648664464886946042750820472298682202778339382014672269839699188939702066594156121240103071280379589772983226226437628463900506596443992e-01) },
+ { SC_(5.24975538253784179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.01191837189188332694214140970173583272072418982091171099990217528322355908701601074843574220620926568587427100106185208424141794463468318550749865198918222933452753894983168862879395093972863777587162854161341623838683267634514499273793634809539888243351153777357711863648802112720860674910650236088326557687244625352269331347752591187431084268052625047310691014416304761150712344502076944589767381122718623738029559779248541968413215734845216817629335238040083726559240958493572045375949676422640901e-01), SC_(8.65336201909365476282264952965879813708728978060751127967654913609217370202756737977950828334691199199976926417238532043794926355532947481142954461407252044813719568757784382743516894146761032400992386509481533113010581110801833850543938490300413179047145173264679839208757360189966101065499739619788796308134610685979722462447024950122740160145465326704016943161732826708923981690332630029591524534742203726563441280505345615124076805639821503843825847147963259968095571638786355692009671769162227729e-01) },
+ { SC_(5.27489185333251953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.03365401345449383408860333424913780207988550100204590028868870029082008815431504758423586705415291104049317650359215675999850793031199068663273702222642153320423789127546017526321083163725048619710917303499008938706160379552195898338647888596408687619633428569339435377627846917599043895430679468876428984172711517157785079613456068832181981407178101377847554189494406405298668146314781890996229730542960457346820729615088234861697107177030173183731100838582070578677194620296888474892159954565273594e-01), SC_(8.64073650060187094044260451547211688700438767712561600570577794828378726394909204189762941771991578220730402396676955636744871614391751352329593543084586941879928932358923438955814670349084472219097888970353931097795949207204991643980011491931912057515838687636408011057380021854018301724623343646746214428802010107396186526576456932281434816548797579780532292096032569488952258398391121041148784934172900458255768654111061811230940022903378642763134546338073627936701731193377581008095280554682508859e-01) },
+ { SC_(5.29143571853637695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.04794223638559654714052859357090717999622260784855409808634989078887486144940014927685708982597532834080469457507632961361574662347134140277434796217695714501665325492161428047990334644102887653883512211880498181056340765678114100867222775547658592234983367280978413240569780775952453371822485892673013027626427801396787248830744260539502204944014104375516044504428492436280713415468738598119114927622247476993647376152875728729101947432829638976206820212333445472631237675433182564095978329615664320e-01), SC_(8.63239707022993597136893322506765820034361346112663538463972414791073370154305164478378003111211836597802305631320518420581136473884404652772091008668276365589888289444996661499277415993805087615581532633652799512767943967396863329599519961592029296231874682822172954305207266939493791501493068017981697650940168348078699710912960970725464127937645010065872291814436415764998136905354545811245853507327765948785155015610075015341632933686909091119377821270677144528894661672118438512863633219124320223e-01) },
+ { SC_(5.34517526626586914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.09425923396651827601926822928735155064088252856426082786526190845964204988316925419044872254542709621420571540784006603826411811003448639408384047769534128208911369114785800703498443321159790230667967132978923969686304217145245447891299325303801607122440580539861470662063751394859981212814864251307909808543755875881980444282277876104151040347175759486733148808186549450553664854348136500863053904875153607921232269445247407180353728071225524914373935912046274984168277951004602019741469779806341241e-01), SC_(8.60514513864506892008571077192207221249060554026029914290576312340240258880637028036909369321348861974704776026746365068619441047096898112000033846266863807610452759734582914614646277049293267980030326298443752183971203489738755455196461434851228175258681960086135023742465121275230985955002403734817537433921953870100053610664908725632388126059875337258857523149249629888488047691276578125376557074285503537637244758876151932277452200896536592707368519003989964434924497304420869045947916636586185059e-01) },
+ { SC_(5.41940927505493164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.15799772553089175322429546804626528729984402971095986838191671437559838091400764456186303627799843763884537162041166087814106014538813389286133552707573620685136964249044596156941771605153568829089706663067154626220611610688573741181955647188194844164474728375527074823727245043102213030247601723739382886465900641274005163769190452602531242975852118536822257500909949021778880648088059230266333056383840262532179419129696109838728004168475695024970146221363032255275220888680046617773531409243514538e-01), SC_(8.56709165723223411014335237353370281255069331993132041369453793661319800459427331933541840549977376297771348346737288581359391451133900500291090244022962821184927791851021143294497495159928725343129789287753994061178720219940683024896165695812422117725701849685285221767838000418978261631909106043845565174640775546510270806417747477826212960857379830622034161031711153431645404985440073536073344356127003444050336984235043061917702296234719814367574435512053911951724834398066173178051050112431061131e-01) },
+ { SC_(5.70668697357177734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.40194904999217521625501804690859171039067247880710746234208426075198607183471611383408202308291614394771378315161022120939361683341863245328239311080525400231914759172133604894627749585360351572238809861901598552562064229601453100001108907323135635709408318063048590299037584475217997696082682643246277303267205386540634807765892444596945715402510723540439660292036601740905303050564714747573350134003426478908063404417845734148975182487931433252466861406507785899684486691296993422451783426280298401e-01), SC_(8.41539936433730016393560004906422624915938938115325194490676417499454277363257513351717803741102759502698131899495817149812454909175331973883700436174253569027354446001310497645728117157402769598212946681008744824515769796806799794169428154993163962915010793856563617839979899789147308534322116774551895925642603030657985033808960856990336366381026392080924808370232298262132280338670172394908359719237017432710995566031980474531261480441546418187451593636619852940900815738161505085936768543613021562e-01) },
+ { SC_(5.72337627410888671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.41598623328850393437633038062021323062155738168341351833436028051969259019802500119843827650904770820919729374704351821359078594634887244323485747368770264507358749265565856367907429518697764687039946840362229092312343189528022703643914914433562134342001022778527431759309937446852858562197449128236170264433346711673981647198294649587638318617209546521551647034779793514294203444340604570797513762817006497651085453358051967836529579122058034836273502520814068448980054745761558457956910656478888369e-01), SC_(8.40637217358530962617166869970573153775954370007516064477940281451417234267504782461385855075871355157179288974185941910150256426691364101853486231269256472771425076245123147503280465557373884684173386719681462663766345749724735744081185615292127240794974750109376937292899249194855048353532646675177599991950894912833572228079283360178968590319455475444665383695538491207634412121327239846638502720531644839511030834497680853242745850920233520996468882127230891627624467473374628176256541247234848953e-01) },
+ { SC_(5.80943822860717773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.48813165155509844192454069897378255222059800318848971214181522712559752371392694439688950488008279295033778330851407407538523566795739799654146239460178355402348023334155625459433534500603056681526233824629667872588475660174360717409290346777163781004021237411856260793132118482661903922892916677044810015653072554145111411250594554349346047088432220346892733029194947849380035748205871877674526988365095539652382297318895709019317770178368606577779278083479508492404153089849803687769215965281310732e-01), SC_(8.35945039911112263677095616391004433124413495567336752167508906438259743069245990282913973214554571969177304385557106963604907643376708364394277256629360667941308687198759712832908130207745510426514303099747739695715739450579154667857648740171678725754478281782329679391568802376848420455165726573253805090116019404447208067037349934527135867262568590898932612843028746601037322593214456836565075844042126797907841397369397266754100931894716926234857663254549747660361282112980225408873527817007427990e-01) },
+ { SC_(5.82854509353637695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.50409391298168491596150482570353186473225165074869249579230018842157715680613771764649128192314700378992368535474742002485011421875906957385285657324300726277958078036298364933603213485725269218826700648644800418611737606433714230535321683504247685363594238155126069310747013818822879985570627906886508978408394982831547956257956536544590409045853086713179410800861138484380067373798502293727454801649155059590149624917718627938217373033323795237305120621762948047394416264859542618264254192433551073e-01), SC_(8.34894904745968397122337143288036538697236885805361244093975311074767740052020907304944995451086032530150791095893934644176994383991691599271559032684425891447484026866957350929544470806453316870804998160772266105931932446680136021999620883072198820874483568703347245846148122134149561292328463469229261516928882818387894901878049370770830895114699946795594153739461667478785018799954247645045229378473876480527746725169467194980012963031723208736422455186147677872207396000474362366949139854735598959e-01) },
+ { SC_(5.88340520858764648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.54981328748038594389409222118296493361406722204316601039080045097561746367256420457135064548526427768164560764497538972461049133429788803032011714631332435608878919210217380233636379382769112156998945046969620193348706178392702708810399735183425378496361615421991110404840318568945206401436743158511187018101434033771663853525624649878863128943966755740362299129646209442115612058642089207004232090022736843462658328519333427718454217482740286302870932210190437836952038240934544486327443980179039611e-01), SC_(8.31862804037457555573106159931804242284656404384485071335994653733473005054884858296577229285204654906976630312250918448628259671755231029989458048999183555644405516193443670517849772686240891945946039525999988429248534398424025093271276531490728880513255793488192330389893779683789326076963100529203447817457355637888154612527551686629330928079288557304750909983330349509528372839396456227835571961111453638045659531283279746393377633392525795321762710545335320001100575629727024680780347585595575401e-01) },
+ { SC_(5.88480710983276367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.55097942244132061495531571165679871262724499795417513173083413485055019772427361468552500656487265250806213156009035760042477803381019482502820928713219477595502474314187126251062789023921328177960662028807827415938348104614614375028942563055067804906294650682269671995277955728374031283398921302129002652523268955506602620674798387968196126816730022488639662515652349431661679239799288485652945302886443757790689209020541656411027584022229840977377299248051528161147723320595369228691342415811208773e-01), SC_(8.31784992961720983534359232391305188584063751853626211735857810341353297240324549055333935647771867957433112311280525051166735373970035761464744610858062803351708601490642216194702218471579830292132620536272778346971800827572537398578189594660242145927783320871528142664463408523731435595615813644112256518861511592562839704037855278536568685836654817502765844816585425626008475692953552493348690999667725721103065091643783290643380737951921116821247273152701349225223838419791660101143482872112798004e-01) },
+ { SC_(5.92362165451049804687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.58322288253439051744557534267506286885060444861732597553964794301319966217038367928168951903535702321312327402000330303180259309249997384870049569392286402372655538202926605727312480426025714746316833966374166956030639926161547076571832803358539092894342194537261846646241645995470185118744157796984447771024032092880613250533078792521101538396462947988540549649727418090597597042369359700302976217046151525960360893745433255209441737159975029418199167071462611499945258530939279452145306487229413816e-01), SC_(8.29624145284745020516215455724407888077213673743160788252677680220684699002053633204757665277322687553558235918282689862240807444306321340921280927942735138774702365689856787083484164468516551522355741319231716986119476001913931681490030833762017164619862117967111307933862130716575515431340977126892141889221627007181268431489962360421173167336434798315226930647680073783873124528566080722281638117951478967706088693998991575443387902213162302286315711337900394259691186938803878903789406657834635069e-01) },
+ { SC_(5.98107814788818359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.63079775669406341164390113803457426876218890714643705918420902570219293533895083351987901536166942345184372663706747350140651014744113421153546396462631796031006217208526759117477953688062277202759268233614725401418898666007993416469703642358102740447434080477006785791875740627440576182794001744019355766499403487919514669225812073408286318205970784355082471973998831868467854363704446997087804272211009212208588585247986200104642732141375695026387981342821975523123173641969953803066131974996648408e-01), SC_(8.26402544909011658241432585065175399903821756918495896750301886981808712362149771940549292790542650045147545087131705570423534902313068039653779493898450768666898915232115053623498506902881479053281044503339148499487375815668198415204385288141684801981955764702648853853788870503645633524763713779262558003952462666882738272366662792158419831973039867973436791725975558771042770624392035686827655124184929447826740277132618212118727354263466185605275377022580858818482725012031583671742511286356968707e-01) },
+ { SC_(6.06312751770019531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.69841326954622286372776223794751375442564387527024987387600763171257473846563231383256042951126744237939173335621133174126564140203783722168940160693903369738874220238990420957962570709306595253925042184973848951481282707435821990405340612615847714760791702548764815132941836944307996329168183043964971707047310773157459458933734373488265390996753682505088988425040804909331792833393036337801209481443096681293307113983919326697774171463311972401915096644602844245006893698721334381447170355033646130e-01), SC_(8.21754745708593558893877997210453421259931832482362161541788802678473040052084610746608123448789164569464037819997816728512707321503932270814997135283224942751431111955279774528079707816282945989997447671912075562165513682745655357171785464101630243159881468499507267100858619865385365378153126523299388132186668506319523531631609433771914896664530437720612542897542396620962675976882751729608935582973299418407696895956465945687660264361883010261463103102557157947538917975921761520492381028453930485e-01) },
+ { SC_(6.13096714019775390625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.75402924758358231334650295925458267187997174384331476102790740464035059881669019648945917495330357832199117443396061757906648148143864565486655997217444390326266423656372581729412495134230605632775775658476278080199106041530764431654018917606633061332458253725936672170985855414138958779244233609811429392906129724813200490019305469102882138282187987758848707647084287856167057475384628960636610699989646566839615230658291641180186325980960769949839830931757500819770067681359981531260310739391528533e-01), SC_(8.17870083925024815995359911687699926394910179663053145399361592982175638714351229731592822367031107979190069836208751007928500526343506812250399499321292994038539333622880839450312630804560038815300432575283087889439566134289676657146439855404820384685674238529876396699346001212546362146669165127918149018730694797820327381382869648762338833184522726914408835689355455865656334360248829227226282107950259754120637101606226726958719637090515583876970735442819938536217801085805639066391598625734381401e-01) },
+ { SC_(6.18999719619750976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.80220763340469067252319354348809525508566786663639706547474531609835093810520638777589378050103692705699084463851477753313324811311532142563670009162918655521549754866820982915345992530355351938172236029963335866781105855187839277567473661203089423531017328580776713279646844758775417526897324987212907470655814963274474648397065129785999643316638914124658962640072449392408594369804885547288085537425585383679063570894092676237315239702551170852776102535717628402664327422929792503986746762679984372e-01), SC_(8.14459247469511753057400936713432968553335008699570079517618820900093799983757685955255000345600952230461680637343901677229590811516546365848604073614715769779803264305390559219038249596549722583488785915653953746125687426557192475272851289635121215421678870884842323812552055139391315679645514791432234634867654564749569105902510236521494312939601544245500760676880839934466297825827186225790770259383958886091365471907625416746368992933084207679548025720343035493993024080822460847793935966129878775e-01) },
+ { SC_(6.32641792297363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.91277340467781572501372257135126124830312635097266844526637989610697084071956468123140510670966119034398211587971327145083152065850053928352251643344115891560584207422020080491324364553802811726723984253955887539864120462372467968010685410707352060877347028135620212231883891826722468377361823617389583423755792541719634023245230960594991594343071526963547302594773264903765030123757196797987522666861964544622436149688806334825780946673830774577772569410218147060834770459214518300816091633699325159e-01), SC_(8.06468292401720597243607373643076850834340099346187496135107605436527121943597944556982323079565414212179242634055279668924865287777492580167307947076770033365812533884726110826320880591592785941005328200888816051713221955488838557889813329320366811437654737145172121579310229169878585583506116077567673630546054503550524440060601659762352169904975997908131574019740393377568381882944867982968248139190044503341642391989065718049393007583854820241850044293966116050194422903385301862216349966179580820e-01) },
+ { SC_(6.33131504058837890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.91672206560683861698540323502801662910962736425356518288149873999685630240964750179568794247108357160690946288481169713940570547424947615546778155106801267043363321492217167599527333952918788752215773564356918443371916686724984099928777803084887684542012414845624911080183652414153605252840275567461856370803877535932898839635003969989430608143290403589515438067716518748385434785173915278527980007671148142994730359776314173753830353587565828451836432010916756952104014001139911897290974597936505947e-01), SC_(8.06178640242726505993242967926694062895717233265734674638169215030194480752243897660577492537544366232156759749837560312908253286224387082540538400275543585442286943985552382663607758918581064299617916349453746809306887843201069591375384341794492842128432850981297373891467581358275207844126709085873133207125511792634497429296621277890733121173684425000350842660734392317571807218231702881414377327633225177841877645449690103409480881383280862010633511049174847649468719070167967064564429876144436423e-01) },
+ { SC_(6.34747505187988281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(5.92974219022706010108992855867183734966583628307882658321095701243900911417197558520889489349140573836663955174824380113169379533261839946161834656524007580200253067087554456971500650127473047120600495452949972788383451786221139777272831295410107709155445038220377172969485227970155197636388634511381949187072449999444268403796704613250710106085854068057822684526341487684193917169435620792297081433473836123012367408071501519994617388901764025552905992036717787425425258583171549106370962485524713660e-01), SC_(8.05221445053726746419815971651888518671645149916391855552948789936704566336934637270876559849890401158717510479582527189926061647034445841426220869339477187180352878239905783188709671871951560328539881083404045467288507567247387366383779542043359249431790499020266939594575410939230015987101843244838403909034273579593668568094414648076559519075205679025774159395184845727898759689983721106347949365458892435974166757049922971026861665764014954983365451676686431477740484946958024140265760598858990745e-01) },
+ { SC_(6.58116579055786132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.11627877491971613071587044772912068167383316357396771437061427662844502897427620466609259658621123319126645682492753359863400100008935248827153601001426080169982697412239718329624276398900680993889862668591190467393604988686920649867296487377076766197467386553383366994250727747880545993652542366387060248701021839633518153831885758282009991740386520264990613788985281594829350408970333117550653195156920397388678526234922066237547328598780847807509003389905942436432182574100702994762454278779126657e-01), SC_(7.91145586775699434706682325152449132619505292885241407040398261444638165675241801795441015121394868129782183647525514379878310240059764779307080503506048518850465060777594888337287672252521112896981531471145120562580244467829046974149957705801022065945453350900334077892966242546656406133204748800658419775649709440059128375286344767464588124626908555642921898233852706827999777042876474714967504251148166304922393615026590743022270142067866633081636388432547812265438968963733102573956969507972985056e-01) },
+ { SC_(6.68379306793212890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.19714837588306842543058718138740246054926714910382239485238502970856970097538661113589982165067187132619066720539640268281160439445562932670528298393556312197693972629332318849922700175319101493247268865659591171932951208250809708474317514861424683826798638953226526386055915255029526789214936438984393136364358891272530680010418976217414151997197701807740467294311501247213013330492290365626594001647614860954112844174704251515352162101891298939671842185917196856654362819933010462684597327427126850e-01), SC_(7.84827063799980379211779203074982361728059891779214152842305280398556004966511746571802372837688959219310907474890329036726089422113991718114500383303663007778344198446438007989934781619010896796633674747003624402106368817595803358545678907629281002244851037896204259330272863561367660123874616721196035359424902912316359766328561961112087692177004024520170858826342186686483560937099248883139544325049777616232022358653962294978208855164667855551374367419008803669675437191041878513041619215093977207e-01) },
+ { SC_(6.84049129486083984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.31936353372929666377534172858021669016330116548927716436870689842767426969839532417161302597045406330054939921641169232029932391615578373403572026279946125317776120510795978090743324577846359989163695367113214738203419801342136118452677670008707025764333970967546198963531058683258802446493328460499592380459692702978891403432765465115433277962954729226399518070155783579346510048953263158414792673476160659020329400278821557190918419587562973276289817258986258653326467450495799750000672275655561574e-01), SC_(7.75020287015587588914578411771195074192222224624281637676262362599907293785961779059986129977211025177830784348442168786682183450667953136365155001785832551965132555642589664593887400121769662552071171946634504133253856348488980396076654712434606013146460571880041761226638371907081882080141542409394003245437988920143100898825137908543687996968163501342562315851663970885479616359018385950082689104218686603061204210645171977533827915317644911647373597167897649132335989478522271207287702127764972518e-01) },
+ { SC_(6.86983585357666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.34207892130906185138217995521070060980771134595814223028401424268550028414802642147887935516716437745780743991663524914640101336980226910760315195318804657377246841453310597941350572874724965315733117460066200156678788109903386746756862845060984064517563908979315608178603088957964531685560982456412273287353648076897631728915407427856053044019768395890995445141933769258230908993320288843265454369317690853165669480148178407097303779349415564481663937376368058473755523881122097622561160134717532533e-01), SC_(7.73162563474766841048483415887815113128270668467243021121425122543440004967601932517340170925412923140648469189427391493032322424298025129846960002538396012061927491269154650119691626990617439396114342524616971770389759352447109606952151184472001811010660213708603024649577978842970502993544673075017954455152924365371723225635025754836264482382777266251590714034776765873194178131181718759634161918136432931648140234489835301481526824895759034614583345030384106065853342198571446960029902288705166826e-01) },
+ { SC_(6.94284915924072265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.39836052877330415849557324484442485246960415097675587817729130947796598088679398211918418430782716761499904608212690457611529828373751516280960985062072450410659960845465774665370459640245023079149008857282599337994588698772961300102932470670455964033692741822804798894372704901582184812003971294366565124048223850858405484483918946765658340154449257921292765659570238517273545585244602216656601192100295568929395484656008714082018969371732663016880302660592574145128291454881820236795996282547497677e-01), SC_(7.68511434813014370464071069339832221311083583138535155987163342906384134901657393354802549369389890372582861852791541558171094773595275468892230556500115368424467831259833594084903054252311484213541678484269411902594249145222403876708128400697928924522816288182254355192372916075954493920965124086228091558841373752049897442849725930050350651938100137683579995803849252482883931876266606935457585636549131596716992112380751040967416114021919373289953352841490346808526597399414353552864896082644783968e-01) },
+ { SC_(7.04085826873779296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.47337314034375267311253727881438908324914118655596903539009237679025823609807063414519572776218793579216891876342705736585205189677473150287545285885407465163607235072015934997648155039523284701130740438070319174804288419720689962870453835500841745307067839463534671761104917869376632808602691603261461941161338330182919616033742212613058331738146514456978322077962906477328825044854350200058603333916688049190257182038575346210285536253744404448592449041637901255073270427164340439531631907267607749e-01), SC_(7.62203648547263658124556003919108631375059729455752347315416115221615289769809363766341996100406708571842804474615990281624544657474722340968058460824215775408209176056732637981834602157220055699450856816394920036523737063558780069515171775820548685613535497845720729171156701201157483359755580485996949045344633845078270826538922382725667656783623857614425595386019791584646719482830027977561461206521773127678313382573998766556014080907045322829632444997663307108065388896464215295338370168272490364e-01) },
+ { SC_(7.09933280944824218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.51783172382929841429151101014983203627578328333573592510980632952108143767795039762068083754176504537476052511691864448014303053397482545651822053832287705058499414996079783090399120862253899390521463138924593245394562793681032248632866266766895509930032123199410475544972713589449479893108999097158598859942660268342636814309052963446861245270616519908709276995009050713056849385235425190399279180745720917292866069759567084841827333335964523406079209272268782749630319370918462231083124713647708027e-01), SC_(7.58405364035911841501543520471024032415280607540389078760632519463303840329020571045544960761585578507657880881719158444633178745177097217632381274410178922552576393958541137449644629859679438925409830143968442835575512375287556654397959631087638498982572638282648212386560157945725763904932732228614132924703510889158885743657357850286206983294111169997088528262884477065796101760395290581798087463364077999452179153508035671219845061724275612416469431248397257676448236556699979541960793793234354297e-01) },
+ { SC_(7.12137937545776367187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.53453610421558887191770037954012677520047542608253781911414475633135762082648944605151127271372005391447599439490226146358614114988444338767607370529972443432762056723355412014818413359758533894010829816380996931409136716572396990538773275750459085751647799299686743029739389324120791907775424334541966372901562358441229790779983815872877577111708548355032397661700832814240256454741065353652618317355244351437327924856434997949990497272086397007826557763113495785992334434996013212106563351821012639e-01), SC_(7.56966564008628816064935109195378426911911472438595933112354357748505074207024354053911829385588364448207071677852917245130645012968655730226513657764473316710014319131523151887741595944009634322876870833038475238389767311902965604104789419520464629484339752652742222247350707958785496125375295437037990398818672449792045553554805101541785038921513194543317116169605636216403146997656048107702306109440921721516258305004378318430714899908536008728011634964756998246216104383496283612208246712707809890e-01) },
+ { SC_(7.28063344955444335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.65425239549281551387975096958780375858851892612581018364517691550986625053067200927521434055711311934858303843505620795647699094991167962072952782940273782031412754829044154523685627551088516306144183410064210956927323855949328679639013060157012524469106990066776143600831038975143469374685791501211129515334810687858924199124184919832544720039523738772834549979678896244138923880641120598453180075472233453229563256798121518710091633983273444804638251096554147694798885058914196854535864381045701914e-01), SC_(7.46464500542913469550304482427483604981998295473097001834850867024888391361681154549551085476420379252215393733043723887519290343750467446615492574133174914266424284911131646002469252866740075071221424899571812395871594617919523849326962762794240599720695713605778048623064419305383185861913597186339664175665315128235844322682700305036708590451177189730578210863235483538381358838871934839801769986818109659779590737181465381969746699020808152545779451579969426999507214595377575535319512818498620621e-01) },
+ { SC_(7.31353282928466796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.67877455849328415313685511252407361475290664944847974694748374470430525820546311711633036068027917655119375109669456363780879204022992271472046839476884364877059886387610485425570541910060468422158698050147164337450261912118083547208431050535457571356039548539993621937778735874494935537604478209586817246415426357876117341987602497257974902619453111772426625634362317200865655014604545340689911403283456936384775676107431194675840774229025714882598541659398348276336357516196404102890789080014278310e-01), SC_(7.44271256981101194346209628134504606702099618005331278155702255569736794611306017252420167649556829316737944208883220062940525982827062319833178706198085721874692819642620284994022263051778498810953118700480764998742939090561601606284588646002048877898161498445470978169991315741359253391616577330147012226863384211221768778133768652882840183361127105099183092604737447476797351760900482923533200976293883182732697626771002910636171758241902951875407238841238780899997688911332446119841029304425479636e-01) },
+ { SC_(7.34646558761596679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.70324920178083436441069471678009876567531608055824879276071736344347039103770036213432254310241283901574175309710833116509980678094724076935940860412925232677469144438445914009770303026253831951547428328761003164748593055572657816784981748333393830149829036752582048673452037841744030077018127966629362072622320459806895246918774521500257936723572715328716560257228806009962495784185008529474473181791809299845667764302386566655812206124328554962989512463916225593807471830263098536186790040787445839e-01), SC_(7.42067720217128208561458295260588188538883703614529506403332866542499686401570844168065379119686678412121172275197281466837025752106843152727749804130330019398565607006458973651927655708121078756327411774608433581084836662172963084466807457891491110306028947765023619026441420363688723939400112648843886687616294780578466440795163986186190618677996846555348224767261142760875403983928512707788875476531712495126954048108942578212434188855740383855884084742323564540464861291379994368969288540451950217e-01) },
+ { SC_(7.35883474349975585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.71242282289650784432824894888486151838207425243821064872578816539245485349169907081030400639140122480003746277774671981965140905966502055045096267484016861019863714535857263392580875083896637853022773890639463141139601546619280185776793076302947369731239294025987092087696578758868930952282914246773195675160183965633100755161279046846470580227563479309239991478236819173709358267985579481202693451305809572478116921859856167569426408004912947211637308584527298655605280783744732163905380489214924919e-01), SC_(7.41238017418548742413842257768684553615834706641899661393734845623817313321543239084972374770481917354445618824230060053347683515049801885699977994522189688560444826046327608254570779006944178830055126966799122232990289767677705366215827296184520130230453169104436487644749130788789590578134797523361818202371818815713878405573658388136437453814494911814556871777282812555049415325042882677170454923162907543967764711047796723580024692887761925274834178826463996678615559173056991061779677528918102368e-01) },
+ { SC_(7.47545957565307617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.79841113768607340695944112185623754809736842484299646727916304809581417691228956969140207251779386697691577741546714860663854566118219588035062264502499883762054739905424569936729908546433662571248273931646831354089850605147738721655208493575116647047591590318581469421315162634504195730838974528986962257992624940001258430180986204021942332453689279121755873712801504797017002558955812865200707831055953451811123671205439221790845442267042379316447624253844858919397067431005597259087018747582178424e-01), SC_(7.33359434404344109336395962586828145328170625700473318543788063807067543247262286190805164830755305055267618419943813198649946951834556772016494519206476727461835185579311139486423232373044374013136769637717868251379282837922690752383578796965266903327115596677790452452974648347092046946474286910607295726282964624682284028852420742519914706578260046372907466723896662431770421690941601880002968886771614517398489952077636798547497165680848712519474408905758365283290126582236138958173021236321161885e-01) },
+ { SC_(7.55493879318237304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.85648263319370343052834907809005875626191651889287119446755435146659758692147853953563788614131230147518332897413407029130680747659427336204146141672902830333767903465293143774579343702237822978154183397763786037274035612370601549591566046393421688340945541811271244446471992893685816844422290107339474582031600707672053506093570991627232277511247616242319229764885571613405065990151195420213966833530643133441081048453151568306471387731353145348084761549276605935431818127669747470731171948853979945e-01), SC_(7.27933004477150623008809972442600651954692477743538333356621001503195937504667719700541942845670031454624830343728389907907347912403665447373766506340758222717919268080026986771138260024517905388101442952981872598882504479570588596424852623521866672390156090453185231458894061499369931924249576747238446542346316663662331729519738390267757834504744290361928534954604379267936758410254241823802609817231482104502777287124391370444319867894433306323868979969521772048460043626033860564960537038095938656e-01) },
+ { SC_(7.58935451507568359375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(6.88149431809074292039011479636345409272821159878239199063155901100467548853254258110502008140002376113188676528706129709315448525290898431272202561536901596271344648580137727722677193046008709171376549247548169720757097475212932378765873167576807240071876899865667566027161620638408264083007728986171521870542890063333655118712811809103286225117916161550631677504773924185458526354318750799710662777478042439728309044909159664046364148985809812258610769136628334650773734441115032126818377546249320163e-01), SC_(7.25568990173124895338125876594655020996196799336506719347548207108773241573013361988843912380042967173319980848965347758554096264013024360802944654983722000331612085095493975827321189492026812256223514482673900792147489176478762598983238564011300475061164502341735461598546965603251492600505243119182301013494029540587474258886399189520179110749622455444080841081454890362686228212962087454598613627230870475322625762519069603723940374929932243553431361246951367793348636809564558449766920116867744525e-01) },
+ { SC_(7.91057109832763671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.11096917179776834302812515833728935272468647127939295351299971149188833687056624942448454512139136992529960373902017326874914774749603887673330321423898880605971457130146157359406951110300162856514767402201313562337065970349644312236506562094236677034639384877728912352270003473603967918428645637947206690444105732593825279836711281992638418344858231107764502007142454975430695021477350271536707626622731305396784131486382334375539297869210070416933438023276579520520390765443097807298713622715115891e-01), SC_(7.03094001096167514247452987566287284250780249387962704875473628545617541774686956469062454651828607591249279271245274397135059565688145447752251614500578532608639894834789582982265370817785925338408376851087909205953300730678570975044663837957505742441580929432734796231676920571015992517126640510826168319087313544058187812809896079863947088018101287123002496421080180476087162715986713471824224540590420685566491565864250397615116860667256579933004489120091376491629218063464801507664268777067724241e-01) },
+ { SC_(7.96196222305297851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.14700790241734210718720054373475547331770418031912502525123458538003032746062328257741114689875158887248192521669534885392619195512740041442251588903822310441251190280244808295176115039576094740370089122366345937461478223639891454003139173543796840935464808976223093898587054390970330087960689894004259716945839339645236791663447552549659390532864608528110443354882079183588236749335885717305759587003809538258581826336560351673467159629498055049188564719726195933822175304136939283243967908242494550e-01), SC_(6.99430325642119007199077599804338282359678696992845283199385067785523316357497003279755601846574384248393159269985358143471633926612287125404225155548044445499184262453697237728665071432512161845503412031823157453310693426644414151689312780774754757744034146765706240859362206302826721474463009388112171549014346332567224941063583183938496276118915668883695302262651276382992275711085438741067375802053372839441984732848254301369814425503989712195275586467060144295441465488922768796892003329447608649e-01) },
+ { SC_(8.20322275161743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.31365654704142739846905019584696358036047306428180059429371468748059482991110982535801827867051266821311376439714397817455993576620879096008137068230869436717130513368495882562650856370559340685959779025910012852712707473599834793447097591460733637138441028399795427998853135945798003850175043219913393539806928792759611776050133706181971114194824150248235517135756254418435225438771834830422404958975726823719539265915396582983003903333187901189190376044100155608302909472752013179273050165726134671e-01), SC_(6.81985541722975717095534445767819481908864976076961739056180221697736132141265585566999326647245602003551277294117508416627907538030876733016883885497005656713622185232867964646776021117768267034928283519921750560161271484197621123938042103057877171133153181306536200901947837955079582005567762647046471690332827928980954613232524604877387625737395340351244820721198289997787185454105134445968462217536369610202581676650929417732788588715743220458135214003687206783391270487189498386364945123860360356e-01) },
+ { SC_(8.20823192596435546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.31707181381410700775852413944623256358279362863429082318176094644074345198934818511604497924306255057761372148290611474872724768056233841633053057759269625564484451756172360890862732976965251435126007770329830159323039601468508914547084883261046412490538012690073602709905862777673769760539824714203891758844099506177024515786538294725856183082907027976942601097128886158840072184464238575694374237570771730277620705978363177030311651969394642265696664888395046181793221822925825553797830022216861812e-01), SC_(6.81619102369403480554305225830589669749496286393568170235405441280278381355502071404131720011170133029142899451867504224912313601433029599167624590909710073729960213379239331488260793038841494500357027141640185106376120026704091104273895547141376917874461252188333037699289790582218493452933614232800683564196166644334061074582102278060215612103232488660156166325779181387963741004387571863137929241835769518810981154518776634995901657416266901576969346164884723744461577404233270130572283559282001269e-01) },
+ { SC_(8.20830821990966796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.31712381701167181235940405073972015213017639680082667356112029205671139034521852374354906548574117997188054771119114790417352101300580820315150401962599864229711663045499725615624769701732815805881838686006938070145575222297658526345767913189362679305898973467899416346980968752255458435026841646196804679932576337820885098573186877489399993520726005939470747793237899520526853009339508138223853067623106893392596935713790281374384104322060460403415407546619022310768214665068143293181570925173506030e-01), SC_(6.81613519866797700233561078830285348868909728015824467996873436863083948946792713662365645207291667275891590707518243675662095426503292274413226380893079787669115620493220926707096054723242308983595288942728615386528125187163599085233693989737313878754308845546547871603235046915011224509231019712012001921675566002620394997684099906522793791517970792998530561520243658709327233522695971109704887254996024093751518624146215852953903992457981183041783974253387011361571840065767392160436127405910006494e-01) },
+ { SC_(8.24585437774658203125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.34266415048580601601171614328189945485523348339167684552882817358872463794947236136970813327323639342718055615553899792751868468349220589184493975245756465487196821811241807511777442736289719722639891858859935335651084759033715948897509352669673287794523647621937969176476233408092160097961004199695909264152719287052279829589065558997590492898837638209347034503953069034794972138475844603380815379547139569854568998577295466205187088165937309792617517840630419328308859176681506271893863528789248027e-01), SC_(6.78861423069322423142287792579947877264054945218311760117309756513802596452752265941644672458371639416650177013219274176072434763072510338862834134080437379766218972620884833863128184168443684900967637836984797742269511801017789421153124594757787251028286436667001509092732247658107436228355788096082272539774666132684178084465292359871687041227303291674144130444761955366487836773097705032915931079300488532047764679474318554807323227573756378123678236220609152577882604414124351048800037673338910072e-01) },
+ { SC_(8.42336177825927734375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.46200398377393459649680826081175427868749016777479391656946615357401168769244488163885501440054564764625884632208092536154327477843944291217071640186792695307439200754180218113370133302122271947648219228033925537331803886856486078614193043394452297264214446820642087443784861194790324615980733184632898468451644948907519394191384802169154937632223335637190099490677170800235666162943855162453645700761176168292376053760435303585758309036258034104340588553649940846104238991034056185825466741067882072e-01), SC_(6.65721387264536737199053622485047036959155178470601890364581116448749188037417941827507890537685995449185191055999932249913339748939836149314270084339122677529396816057499007557737481859203418779490782222223935147785268990135438875913775527887167257753754804880001533585490387945085868364708189831954961379748257097179336872008456812624559823103794451262576155877557164818892518890148246723174790434123610728214709486034014405859537649796728092585200795147670242992510582392423063209695060045435639049e-01) },
+ { SC_(8.51732254028320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.52422535846828634329763573162467783775835226181279002075499246862952798511615086223852170067031422097672291727362551514602515232858650334266117329374278299553738913137263989569552544670658051509333142548737955765721640897185016235302271826229961834507496959699946522065996334471687240277709484606165787709519654824887215013969427685512023892851687430587576049452204426229183023498749375591705872255297982552737172334378319347460973591687233240652609574815157682893428262843430032255662299652114089879e-01), SC_(6.58680747820845207658025673099654398208410800146063243277102180468596975359125822183693199476973064425685212001483520724112988866317082004563755687487431948863912142895176713746527538414153195153195902886992468372105263034943619928953111637060748803014031715925157205650185348194095196433146735511127968345957898334184182275252020868195423853786179773905957452209444524740405316126300170571443431668967442839329584782366429851699443487772336859741150158436052721645009323345331192414931319025563193732e-01) },
+ { SC_(8.53235483169555664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.53411833445184158836140163572064590294752166376711614137854911687483379705773538984310687352928737777394594541765815710911439334046554940997735934546678121569321606032983208295786707007964249587180529897328468589036869105558173786011112106628817264554495698575451649354701607098355116981968314044614012968784188544167980927924327829203173902544581781617093304811705073341251715042320605762563751570423820183200736572716105436344306462925279390306546438823958050135189736037104122213194340265159200889e-01), SC_(6.57548940554819907573257528419300834282085959566971485261554488964967201945618235849231884529358874985523899727532768461452843522892545956567443976145556104320240537755297697336571583884606812992554738345823881726286988930443989691129940518355496639636521178039189177831792417756204567633195849709348605779519669211602867459041809898937701383112387501471360860974137298579481666185065773825441102462503880766351019703882097283156754140486193325603364399157977161246057275078823715656758124740769286135e-01) },
+ { SC_(8.60631942749023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.58254714672202734054245631300777236683159096097036356652865208302350109743073684152410962467600654933745740571894780398991815718735737674465828290725494858194989836534553160399551271476918168363229478652799066322950631488733954033725999111904414202705936578537002784526606704859598219316245631357166193113310254529311587598217265788825906764456617882297267525625811076294767454761426589134159107671204802876644719093564206549129870218372256457669807937656025972129347553750818546756113960841751027002e-01), SC_(6.51958424807423145724681352366893044913213138350124776252984208258289594390333618059154128345089870962156493775277533940863780236374174323722886635230257339343144735789204877774178934520266472338942566719658189212879424410842064912899039411532389426668819500380572357870722896319650296336689216304697183340394099481481510010815179251484525103064808750250346301956674840478464617935466799014788108180458727627901714888446114618457583761783239371051182986228026484951181476347027474567524391889783918188e-01) },
+ { SC_(8.71434926986694335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.65253428839936597894596123688310569090389685861623807747906998309584979498111611756491021760688758158177280261057414612992774369589196951533402853137262845408946611167107061628964817744786033131644642061511740789926408393663344035662239704331526547276660565514311115240209165188348550085117827815853949524900086802577414033834083707418722164713516489527969642212160278115195142344168107122012981297994117386544179420772588506796664759651956790125837907264670178332084628624287193563546028447376088112e-01), SC_(6.43729127544124799494617385424141789231958756626700658813041071428586618072421618554123624352683471102337219690582915815457570760436788158308993420812005608224926825196281977060682929608339080881610829922835036163838266204844465833776530324738412004194818792577411893967126443956831812385983415880848530409188330707192180880606478355189200581927593129330039998521115777958744436380095343335367391348225109459340647897714560715485246371205710624833126032500096010272581171199733945341054993950174852275e-01) },
+ { SC_(8.77896070480346679687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.69396652942502806680163137716408274193626505179261027990589455104514099654445891686820536957953425257143644049015207376709302919117653628962899300992652165756263697434031175190503438476983170969534318764637916846678576909260931266642525950222240920446950471376533409258600518379609175823729377664566681171424703748226617477150106440828466552604008804711774039970531971579418161768254301575392735582891812001284274165621905938490443628338710303566279299515235154679302470794188934092169362981251949139e-01), SC_(6.38771313101076798184916637234037591631630476518693506025388154191480127015986530208615984654102066160223638744973935483082365448593055470002327507056651767849014396832146717236805375433305757070883314307096701064579347870155982807280470443786167533770758312379604707343782359552342226011090633160077523578145167810262263830014035520208938934257324947353709830917635397437518132188605070760628344358879794443634580776390332446040995026564847535658561531518738815456137767206748819904544534640439838368e-01) },
+ { SC_(8.77901554107666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.69400155714758174751463956320581356413411030184997329885336980347356484417649575163611155974682960990074706177152082869084220135289675660713031854544651588961152487309343341711683624026191125452489208799790205351785787809081119847466237333627648354936014479460242198409063587836547650641254553229247595634761404167667528762434341974636313629726961805413262922094769725972157142384658932879933860014161454297080776720852052747460337256898405341811175351699528039330897784979131765307939727592470639742e-01), SC_(6.38767094006967357656721511247182362249968335273513367163289737234015746407858671691537030222365046724074960371995585209481034408116108478891455599216861380391587550923462076145935873889833750036290480159091501120762411644650573651648384896795839250531931008594162378543229267022201252857767447467217098240469413303271704255149771366309687473842534080354893076656855938206360596197074473714118186747774946181365116197433273399245150535866789495922270957506694650891577421983522076341204063582668149071e-01) },
+ { SC_(8.89235734939575195312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.76590483008918075828123704043379132878468331801967725591605673654298358001840206326684419987926629893734512865726422938146342620014396972255648966508116762790571194859893171810810344158133433256238149661062529161655687364822434788153154601343256287361124721577752182527927513604966699736996393440773466561767934321328287581238024121937064696839131096415250977881879528957788874895432846673943989658776895612535263832944224934599638742571023523788882394130859758332145929080625534666910077534518151665e-01), SC_(6.30005731481845588273036576846426690914673384479600856701742059324050612829369196434797628379175419804925394509968380629103231661724961641777260194329213816053275791498400614982137324243094565751574074781317228207243051532251035366786012453342678640581014349843567477661892513532630021150492274687780375569033734871201459611566752431721742424256015626449576318661533280124185966359039977200045726794752617623916091606371771736962437251873603911510569433817985133372013360763397076481029831695401715002e-01) },
+ { SC_(8.91755342483520507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.78175383462325163583674655043042202728281242225366935117157325225181476656067514837038925992809175658530368266776381307490548251307103630774046387484632672266242289311664765547821562848972071577684296851290420415760629271943958285077554346928275950835563328463912933949018430611596894649981846914368661843356689295600898585202254923488212519552327802028131150621466419842782435111397756440608545404660325234025515092577789467351085455750696722955121922226534931082782879468607373923807792631205949763e-01), SC_(6.28047030542508964660984155843210515427976913195341299397416880066259097497362083346900049795444015853644951521277472704361379055931891605371832291636618616517177726378221958317024446964676152999346744441923607521882244531629771088311460630752446686692856778162970446447509534204791120267039919827654922453565156209163873599425863243716981444860656074593325137604592825588655286932687854692292092466450735118048208393976096856497466171234771756357427282306123858046816566008416672777532403900088297464e-01) },
+ { SC_(9.24067020416259765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(7.98058916312735347801439586114492791247504356700035350372617300035491325642498738425410757498463680839749405041855752082386106968476536443619420502774520054342166910929880836624789313581722880090984918986108537736057001903701343412875769073471137982084510071548308674144125832580017798601321260141766392193897611981849608390621570191349383770802898779074210023525381294056774082554327936599442711681328763257690606803631608191012883656486022173621194670860849528550383855769646670248938050891350939424e-01), SC_(6.02579427207519654945448773493218643267792147248371754581363473609795758074173708675888611453910760118715338469247983915920902988424878326449772922846334087438143568846425397712506600724800259903626436144750040497543988786284363660844256167811788822919038705711937971087151329191225800553441192050916599960240802588789035166708012627077407281815309268388481235738834736964636229043914244433488779816191329214444784311750898666557245872423964610573173614007380193002623880636557775872455442732077202276e-01) },
+ { SC_(9.48538780212402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.12564669864108740704526484207757833147196145725851301659425236068573275909234403133443871501638477787527174514236271369871077558250470471388812341752831884260599506119037378762442877644976065538329194428099200524865474042001514134742196903704060954707513545904884464229614830486230226988888294221877802021182915074325369718722295726897572934557026431305430687003882383920835240558050143374898263910116302593489183653819757258655043164740050711216449209244822863602113590113477874407887852238592732150e-01), SC_(5.82871046877979668715013686472506038570335511014029685667146599013044671091360805600736750567377723257295386279133021341229729624564952052341881681745532136732380301253980032056794607614053910168194823631388805229025653111289051579838992739177878645806958792467024000124031374521011702353300856519556067014730143575223461653982478513321149281707480959361188721812110134045643590586089099302264567372058785685184102186595081293450343022216284635973331409511742034734523393411078859037050754025652927233e-01) },
+ { SC_(9.59645032882690429687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.18987935959352073875614350221457438487323685041914389690448592513530220519239651037978269508161267490945154670166534406063138841144746365313742048742546862828773094010795667607517794334441680608184241612401077775499508697509903758691830768580413170834939208002045427587221365787355404791692261389870945221206227169987866104028291835384398330045112454088191868853133231019091108422846986286460028278842813913496964587302041301009065202916611122849688878484886520224028920980574386384102219209722855994e-01), SC_(5.73810736003641035253230826727130176962684890290455248696750116766827303422983360120185965011205954543173332229412154060647120027510300901757548306117034351503130130202085092968416847247811715273727937511806279023862537563748813367037827626060355844175390548989122146048668943889392616278176867772582425831898960286338108240256596607770829334879298832455356563498708453483619048063771908372595407532180041349800539325399287092471638125266915313546537055155682234714560615363056319665309958777686371598e-01) },
+ { SC_(9.65941429138183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.22584617683364992207229334003659891480399795460992886887186049774917024807741696479772302621685034469544288146545476789343680790813545029298766875601266418608150059915090250070496220181822089491578848816421876519641947266567872130828556654782426700108153109976120084697153230120698732412766844108655477561974029439822155046861812169807144463116359326576613037164120983818549053652688252257188181444212785010666711648974487686167965608784209332436955384462327442388935187075011633997680936530506621554e-01), SC_(5.68642723290039340463788908562022024375903444433579040809686968815987000773842985996083775322299516895433513241758088005769979020979884462820837775199929822542884367476097461845417648807912438092370123891315698660843301159976154405357298789332468698532196213669597486274889313498220406935743400370789951032049095520369775978550650161707155538699612971113574623040689344171208145873292268193066088579319566948787164894940602613163719118941837781698170157843766742315044243719982001719645953102362474957e-01) },
+ { SC_(9.69469547271728515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.24585732620709848369504663267842802945713140931526055303694584350216444781433131159335710298075509928061921295637330893161700738598008958933088727135651320082618894171378062680988313516773413479819875937871239017735048917366136188501496487009707095259269151030532083054070871581776644960270094028919341405032530725113303670443168536633275168354421263536701825456258624838606154540730225508037857427911887076941147694286382203323300676505455315912478482796722391610090650659648499187906577186157737056e-01), SC_(5.65737014484970044778411229540371735847367473436622430603910050048311316724172043446931327368976907852993925629246318655379949415439703717508354184841540236193001008856676979113360314219485181368297328528332958098894637359296941591426628297169297310200339047343894978498011481344298400110679380143795548248514001432340911565558270373397329312435370958143775911560520015023284874302778208115584385775213841761140000781186422079463643822755044052498499982835998207187441782548557791825513942412399991580e-01) },
+ { SC_(9.82646942138671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.31968865865227323980817588534012145072956918174739347526060110784347496214243249811021514168456208338095803368211236101872863267851708520299886585558448598513907571648992356284386513455055507433219573905646545209558087301617308485028877164795043620893577991875789384432613469220875874237363555058119846748704662987579870821230396167878044611649792961253689446672029168473841797727920174931715223197252628290994681792926108830975273333625101578331152586580555117601990196126397627574074208787189349152e-01), SC_(5.54822319514029090084729982333587114741858196394685335721946904277279159971925853766398940004554450358130664133950870452817706012609815744578631545675150846874896545586299851385016742044321351006651189895571335493578725988267159464590787613441298510791278188261138742850430318264030952823330623956793112834295928275420379877586093404930828104809080519247793234083735911543819805565871096192190064772523384701149841800290179816133071704715005293923596635924030624539013903890347671661902299554760202174e-01) },
+ { SC_(9.83216762542724609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.32284879858217969591237255043980110006686133815776202922271852776856771350332101339010324703843517116138866856908257614411748552627016061940281028219127825108284681787939022381958904898149444831010716290354011402876628197127433048291019572067903577899308097770420413212420988463826311822629338611686362193199071281878095764288618770356886283660840885566136277968760899908196602739182766462957125144855460241264414889900241225376090029495445808532222733058272682759974286930523604972591541938462082738e-01), SC_(5.54348156630282013522625791463277163031019039811554196308380824695427495715350261849345006396636896908970353963418749516078472471112962527026429006539719950884742421763042926231859443073464873027715096369578135064095865745463520613858465435926855006544338822632391199100108760066906871869656435735978048783045865402206282833748844644409629233161318525829336270222617930815810267936525385743714996362448897523286654136619104074977496801222450463284538962297449469961368377755944588348099574260345963541e-01) },
+ { SC_(9.83610868453979492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.32503287102961641288101560354377842367104556567230972911622477903374953912355915245242240712849108712975196498653679010031326983813457851132151662065430308536699354126045252973333911068809938765074862248868066248950183496391766060621564702255421080483036262188122479946139341381880799016446714332666959121998488663346116132867751565190150997298130863357142937821950846814913958715497586314656834866185822964252264867773407658286314197967136187153405146257556907174702384339683351878110201477329379447e-01), SC_(5.54020105197242658130588336922487025506504893915583522168469404039255366646111382241684933345969643188484322454205747301489360618730048950013527222210645916151377608244930275389952630297948885962678803933526584267017432976830694495613544874392202201421177634556433257628036811829533377199654511854934046963490441917900799491948518218492351408077283977664676923257870328730978442918374816705738155924294226672938193936714425640217827125527711078010078149888140743747761531647128525612808314747478972570e-01) },
+ { SC_(9.95408296585083007812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-01), SC_(8.38981214920497704717899373418671446928483890855060284799740971304882745920908935736943939704589267941989830244373551895255783588073679113590173973114584988190155699825108410121360686195883747719007007893468921218727274807297991363217466038664657137367654723084973463290946256650626836794264683004278211513899268551920312342756266515826259259726512189757872712853305609667619002475912833361518495511938047440818339505567676937465864214207573785916885844608123312547589207580716363920365861285143764375e-01), SC_(5.44160381698746642203232743195166366078139632851608169818655383956057684555190540842709659974600662215781778550742641804821634170960591630073806891722462368887780189280469596950221091518334725610368627400853243854101015413430763147562200343691917920252378433090596199174851325731237602783897610447664865875066758800548339826233645876541728305686639074840192077219628286646161024241998090709536557554219707070398247151276149197837163311776708081751732490183361938952600699049554602049842531852153831782e-01) },
+ { SC_(1.01810264587402343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.51113478224340112819769419406668343296997137852125085026627601033695221027221680739759228450519239906763483813641409205221569907017649544939651124070200567253311923725255685394557115288147651330781854842724082858086345305489388659275201553064204666324384134840442724180538877542570522337742275387903182943487865040150306562753008760418606812138537167402919354824803373463154562471658910999723607611347855634475155110992237162274694333736177499745794536149613151318943582648699966229652005358496444489e-01), SC_(5.24981758906788806720321221493041546046536853101112224546068011604066251428211928527397002568495685344162019857040043384725024419519787535508177503109959734124106406089378362511958029320766868127672972643210490560131971265057069410667058521515850110288642291074881668261518014868103948599442592327439087184092477973618634763995106587135252254198900232994974891591691575540357713853493587106149036294617662585229941327315258402172912132653620060621681600736287201723171700062195198507667762376876900942e-01) },
+ { SC_(1.01955366134643554687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.51874338625406898751796376082414397227826831688945988367360783686017719569653498679495095886999187714603428524281489702697040739076723012974936631879646188087684388206213784841749240905322462492964708867774769042085311978421900563215780430747642719614466282351813971497903235599082563973431089320745714074712238730503082382330756857672861429927076360205779930674044202676173396435454508624742394250617203698465375200572249600589644541811730973102448523982739402019880822845906443454298948632220496623e-01), SC_(5.23746227854220998683713255684654580420349623900629957727586767135312869229549505909978296996917115078905829360331882501779993750493598375098975060336863081613594923694881885705251788938200175364653283701562862904858617940803729599936402634714305971022089877816493348526312968794620717565655039815357858048838314590763290686976255039108541835565430327578529839018553312044777610181376111606345346520328973885384006538597494774490276543810336811350585911692458465560280443001411399885568556041662167070e-01) },
+ { SC_(1.01972961425781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.51966480111774361399069328701995935071372020219143309997787113638393919403968136915121861175835538754600834423963514889305138630433731608710603652954069400606286560468407767107107087190487293833952663977007675506578323630239713581324373245904026958212213991969335770230236066364556367455390182358766586599976713221737360674982019306470673766163584861978662023566581366437871005356906184711866434214164772764320131703274870131106914060711534591606757951979026327161823156723675231577861333842318394569e-01), SC_(5.23596329977544420065144742862516506591535240888055421546339421107981141699964339304232991065563646931999786376875813624393033637311422887716774299128151274880500637675282113944004049643846577609752770470220724898109324739773136018960486589825495016797038063092491896424124930201343699338944844182394014862004848223072687172743460980013255184854002963549706263053554276115375457613032065224733557244235021560239945266210789382637676232772997067729369831317445346394982926087240786066756007065976865199e-01) },
+ { SC_(1.02203893661499023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.53173359993275510769201141067594417476315071144690812595653997191597262071373310668427274018706715816875602616981734686623449274232164965016889022072766227485090158582077532768757553401295445893372500614520712981163822507310326564305951524928590439452755277457928064464061417996375315127154980021397765697409923057256186808780046527978929918652502064643686968787899776711539456339228100446563066687648856212511031491366882500584309071946065416129844562857212623798449390581588562607486228411763200912e-01), SC_(5.21627470325120732269813404010316165592480428238754867261218888469888255657619814460908558032950507230122405786726087773136456927684474035194236890972080578053974577567271612823522403564086609541956175796055431451651302515819459184551928562294838939499804848508446524019874020648005304158480870967982703639307838393841009588105053700130042111134661167777802421383209221609204503819802214845033946879099849476229349151407266021771468544538449977330323950620579696088984722405789899241692475022421773349e-01) },
+ { SC_(1.04224300384521484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.63537510869255626006639649621175598735538216049096047128314622918130121205771750109554598476295766551959430732465946275217523612600471370041572597995781971371139574821411627966947779135063872049262142250252738667498080540864312933810890040892588107753549143469963815055751855843122150785220518063256317064976725772586961349152769650156149724984037410207678280018005860017259990329083346957046556900359716959229695808387355551627553590335378265769145941947762744207681462479232274858383582258321146682e-01), SC_(5.04284609443645644137677327061934533419774433045359305110392458573885056024777806215829688978846281239767920668722056849722240308192065029841912755982623384774057517123723890362492952826228273224806621806848022766917062904511082784603260842696460679290869901569222629711739587027262051175653556877760863288406690317492056664849858221206006338415521392424645862165044887535133202678928311297187596359205254783280406914115226610484936105009423715924949584882457354022994692793854393523665552395861099271e-01) },
+ { SC_(1.04284906387329101562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.63842979002663238449435204701296774479655826106967229981922424457731096065820930075780015601998055141776673434896407704894969355059239868184948033405937550873032643388663428811900936276062506481301207786612350255430669990490729215226235121222349700973545475451464817766888760629083810292716211070263259927244982625803510694487567162546304875630668045246698992365147563968339464619497746621408196495203376801750617431925118103653718805521676962134971750239373249604163366941443887767002203983420837004e-01), SC_(5.03761161293528383227164965192425790682824545017807701791943125349294184971304713651260221666354091350373720273671239823498548250306546674281103764298601227442025581335391701007457061014636915234497930895368532401260152887354212476227233684348573925252957161208187722137191234610043021535983693195925363819124150968863527869550047518806715597667180909668244768170869617482829743029747976901530078386044099961964993287601498583919304961877326655570710119819762322404343568305105919239287745118584466384e-01) },
+ { SC_(1.04861497879028320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.66733247377868951447252165296997103275902323306825603286025420811951433197464955740899002646743162306607094455479834727516163691620584323734800820553232230642057166947959008797122645834292278918957085530137883249125718201191981410765862667238291809157525861398511128998302707821659666786785287395993637713049198043239268120875487982735366514430906588661471270367651330814997354583032200750284247290948390741087239847195715009409917156323220163532420782083677592580985013545912022698903528995514045046e-01), SC_(4.98771969831719617656313296373814635897071682918217378300535179362133842502217650129347096266351936125121723618551438325664026121428000063243627791654072553877437816025406826832329511867150127042335149389897303965017841207076047913283061462035024660008951807614818673627574045268003412329001964254784115734537224971653343491403923664649208156711189624863323988440483604190657287900352131068098389460854483492037204020251328926921040829359333356258262691810836937317931035145533664735541511268437477996e-01) },
+ { SC_(1.05866098403930664062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.71700092969493626279546693696551397493991446149794302485855185071559252304129808957656534322985619215530703595370148231144605038244762601499558086066253298201721452458139800924319525215992700207631408178644067538811094757639672162883610186864783317216938583320140927245396624100839223782524205485345890430722933364461184266302104566922918644561789891784216336399824110016096325069780392799828712360498692723629518772477904562878551087979153180016119660661629714428171152595134549244921669357637378530e-01), SC_(4.90039741160832963536753160205593132037374376582430495044622014080102593330940543147968970516476557812862892251484558355747279918010270824195900052852345758671435269294213984729937106474238759954744443173560342611126375754001378758626835355417533327367416358134292679789559890041569110407731964541608547658013533427986766123173276022255728761713441308385331757886687513503928228738633573577685286548823375042623755093322781458210089213265443292059658113438004651530124637994621070590528663737218059825e-01) },
+ { SC_(1.05906915664672851562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.71900041148086937973555321604330213985140886896008582336879680485951801838536757137680147227689999055281146908629782633626208197037156626351590838519938227644843232798799151269867730701592257371390578792620045627497869615806106292625144081738038149002249083747141778533295159439332365548240034531265935825458152081675135035228276014616438214653329840956584196924947186240548057375341023247779001645921678513017568431415395475877280675923689817306500303008012021121811240038724856466165513133102993682e-01), SC_(4.89683896249370553462585077764343079070425471970774934269762429179697954755140596970515332881771953730866664093747597682883770922465296585756705379891189164474550828309710536478687378551749125798283750925804320256316131484501216766671168200003672179899082617391804064193590636351604598132301058797388847653654852045763239641614760898092478871627214104974166613633239197560113865348299157056473943881709690798686908910527770066800305622871129681295792885174909899848762633358144516547914334749398063424e-01) },
+ { SC_(1.06404685974121093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.74326730386322818165403183829980231220704758664528761387420793318199623988188287228562182015131457264237017227064746614998591399611548349871711291795824419164529165313313021083410212942383334148070717204428133348646343376310245442559551132343333788773189360881220499349668657349467625660011112074882591775033745941184779921679182973842931373979727864745558701879046424084626658938114080386064766769338228176043903994613285122403749373739641206790074751532744011064257881235735911936010463427099612510e-01), SC_(4.85337788073381287161887688374158104787121431696676269420939153194208236780343659176489818915243470660478303445022418521038772374464737790940191013779627823755948639551012033500994958158596241638089706174311771559123609136179569130774973500169818848750983070485708416951959646979887204315285378894267769462886898693434976876822042800157209311826110363162979732940360749999711522340809800368388340892598573711896105070909259272401472483472934643092264455000104919075952371469577743222764107855405023035e-01) },
+ { SC_(1.06605577468872070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.75299967790800326957579466517206035726317102716369270128391908288135911852195765828650872928533486235396733613840588300344811474626458612175989430336995298154686296235044268747799901895709710805420255341939263059476701352744184930828290106559184325681355173874783483292064401232914578814995682806788689043618503855229338630525795134718154627642954761554611143112771548418565760470236546269560167412033082374631027328722837121253712518795218699823558584473298010514761381916663250079831145927637145512e-01), SC_(4.83580361869073329096825498101204074277486615445135909310168681314825584186657157743805083975295683484952524011405934900340956505003827546459728857790961378812777211919246155282298673275109441911741584594258370232586494882599141950379291167180634978982484743769885908842514792665575851154827558487433305869590301423981877540440377311878647101784216763854546447711696835968416389178865142487352325329510548680565244359142338882708937974756485549426742727485384836573096307146944816997897987974865088132e-01) },
+ { SC_(1.08875846862792968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.86052041181556804420157853003809295509020381003159632678330031926155613313697651928224454553461236532769947500220261165833194050244017463159967219713343190888940872924004769898668054614960612067768163625708922335854525564217293571956099993449125025760275399724646641465279235965514468163044857266824825421011134068746859211431142030482654092389788984448661655175218265916522966248599635107890290516032595136634978232855673202716459245381925484723476080448943336886986452613547709008515545495817569844e-01), SC_(4.63585785284662028256719823759376681906286982074268964315510196265728231707894853818039426659059071662329061671114028654510223558493226539111242214193138182512619106471156301700943201023981145277827931214941828831485183952462840898818541019222917041622101466393157750959830184099117253138133262959308462031622066276723882938564922305305898089637006609621812072121630293042477785161605023273181599435075615845484386493659177045916992081830224540648958182405308981792762102370113493840942771604418998517e-01) },
+ { SC_(1.09043169021606445312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.86826482236921672447449179706708485375043355553691440273593327420168239477132277214344720793711699844640227035419019043695996177843752980965659507636733114075792621556684339379870175681850993461559212924371482017360541975449665834411762915368590952833725617100522956368600899475337046764478577981743840414752227942784520893184527669100141833554190941821310082665045546591131096732242366404075879568232822588962816549825770535262047406532220397884349718398351351345631146467329904338988277781412388604e-01), SC_(4.62102575629358345358193278220239912943762914155557091630440688880915027260681567495686384307691236098241669002192609522100608971538797481822468296643338310413267745080338888521763724449703721181525711685961754882823506150496638839603163061168716786433832063182624298206059756860545859311345810189175501383844100673642551575982167724888306813123033872261489745668071968509975782852008866634876883678069222670357529286372112832471386556313264785227932452858751012982478420628900495737432680259485050530e-01) },
+ { SC_(1.09919786453247070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.90843227852636417754078023670181836726969888550715979569761582421788842009811166075357104409373200529353797356296194747329117633898284595748884928377534387104217962809520596709461075749050442194320744109543038360303571206655530254972549509191577835061385645662404364751070825063866314122891742192255538291420008446512683265515675475498267033791336724727715086534695038766636105394307515824333179209863613528055367464822768969790970366968860100398720098161704801349229024135958102907283928389323224690e-01), SC_(4.54310844454648379873120607006670548106504273936308344713803781953816202878153053648467912295067031642609621240314406106159323935686078031887375872538432773046877998973015349829044676649690256098999812181013898252995101567265319895403366026693535145332532873655206578590173815426496998031760122181314810388522458497891773842101978471976657558938033312291904330254393742169054653345552739972745892889286687291515486452550371590537891653627022141132791592981991782894148906882988273880648621145756781087e-01) },
+ { SC_(1.11097049713134765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.96129806525277931549746940258054038497901485655442462001193167615553899642423376679625380957006925609116439219224858033789799075021311265199475814709599907351541682459655081479100637148446800988291544390650139527246523980147599760194178750523378433869006158214829518372397604307862131909717684083204284241198398231089136180930422436840921141120636985652941816392179823567868504597525864700725317377642228825193551884085524027677622962577073184463809485907517350000538374062310077315366255920874398518e-01), SC_(4.43792034467686161435066158920582937499712557756861035727252976848950110688968604315912228708353790253735179591661368667429164980481829903835715257840075598064072824002764782072845168539256496422996300665292347918368805696122560306744840297116277600434841582751477611680800989873578927424627380500046081155735784608784217047984558403352197070648965620223868221536453713383650286042124390749422283505134734861735393518918432668799277981357022864234465981498457298557827308215729393447123815324719923535e-01) },
+ { SC_(1.11469841003417968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(8.97777993844069867883061833880911622006887326593247884434663254193661888734281508879280574938201245602083449732573669531783925291848639988968125196704553953589366990918944695638753782313321323890118010922221573802474698070006163298230204972483445936716816168920988970067182809681992444702281259138298123085231327090324810628911830766277370721641182158714867679521918526123129893316247010190359472609851512168378609591714336295574522133017233668001470928320744807364031893909492535780311537114396397383e-01), SC_(4.40448264577483885910375157946717295915588861882827699636627088893229732284307726315707187475199224348391643359726102261524390968202594593840733279233687652418354013586574979551135946054471473954056758870692267774395976316275443998231016071492822598582945261015440379122802477725712247192982519270953451354709602577554144286980143085436853223623449058582287231933171646155624518683292834351505770838921143886420194465409487151334011900040856783736776989060019468666458059591569074292685623764135347602e-01) },
+ { SC_(1.12690067291259765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.03085489385391432138253648320136584881972783327890236915413986443801167844516547603415075150516829537723847711483356329411026561303437978341538137836146631530839907060578165484607455219737967202426787288065430192025756314405129316124792600634387383385213813622327788968426536841277494211116731173272141847162651617309944529541815581022123818705107038152033099618846122887043326857140151945222693743782852899700635161577334205006395214456985256802054905416422768196408511772953988605995576812240623264e-01), SC_(4.29460823430435921006266197584528037733748764494732686246717505687114122156436032393588509554223958375815536774890597205754201803789763800242662124185976046398574571942282147255557615032964621564822171042288133276038438233227333630273947706974237786924602656504453943651543681466245760446369633159753930120725421033471338114511183990802815831071292367895473665758738680222262438292573638438829073833666408315924246288193759142668342008705805569331144834511547498169751495542450410208917334083742163910e-01) },
+ { SC_(1.13059329986572265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.04665167392049319620345534586690601564567126821677157288179146201232502224038422158590894129258427636693774374991718538331797402862317721599358645680187066039483561196211510383540514756783626943025645617696737318571080217935639578670283051167364957232392205621360119928029038386868026301033816567702186916413945026858945898884444539133885745012029762371205009252452353561358454635292174982169882365306944417833571913181192416199936541473351685186213596148125902968967370404530630558777459028074348239e-01), SC_(4.26123145237987963991613880409153775051796291409747115768848883186503992232882078065961622999098345555682662519292123005912710960263209200406429824415675430100909189286037738185934817050387012187711110624651352320496017247435142334638833769478198107500195021860665003684853075795687835166282633358049322641609672922147273478139866808881821932563138904972039419343160457702042396592530159562619762244687437043963692192588118989577505084607997788618215259359936094268526404135820006637208410406899687037e-01) },
+ { SC_(1.13203001022338867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.05276449041733672010394121707986473647650308154796820988450667995371427742162893489759701441144972742607911598724960388654184134870687320510532723658273849388688349217111452962357294546426666306484813458191847624209008230503933128657901248687587385339974502942770548704446490212953058721298608200351499874587139421433041834508501966339870189580806151431280630166068971566970973089984628295633880739897314610369766087638070821803684483176989819772942985455660825311309235876553237536013668065305000950e-01), SC_(4.24822964080791397836406140553655164285290555828753133654215241349128224504862552665142530358947448313244621905569067742835864871849030965039778594300582077897713292134045831590878909923650003553010034665210041549470686252200567670421755471525246662755775220033654481207248039696872143349607384217082384877921659747747396282196454772408193679787802467785949018949574031801864194180099340272507112889456095629725679569306278784200415308809374685045388176886359807464124186606204017335800042421388130291e-01) },
+ { SC_(1.13580036163330078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.06871742614826080426544902188552969097848459806253841312178726501739938755516444211826915772979090536127855767525899082662224114622182815815612343465831726391255607929734082143238153402639236649734531393050939975703605497311019419494134459261321131507417008707207443899646798810350452119841213643499629620414211030084093961027440802732600831753935826276420335421569830325731475827414663734255422792908765523351937064535216247075985814083775165914030572741504380395913744298728644899410010274648288436e-01), SC_(4.21406742289143540056935238939259708541056211496750699572410089673639210208041539522174047279155199117564705822879329351588563719453367242375358674638504791410169798932363623003826047711618787025951475619627355652425326365677533816876071542203043388625599667790949286920973946005101230035741719273016087443767907768947724151049369977302480232422549185276584371407614838897669352323162936830603087635485697835568603231651771815134621466815124052893383759994838547910992828230478070297904246533640163446e-01) },
+ { SC_(1.13661003112792968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.07212645505078336592546993342034347346036166526424106862079138801101414155005079700969208442578490897700209424599475522246377249297244777909388623975719805155716971165782231768203899326560121668452919809859133801211211307056050647136579966629695848877926282267609793465571254118252280752501521262130777941983150143901874832113135335072344383270934369371992512277950310350747740418237558480525688444233353187647739164143786205662610152386867031750885707697735306042808487292463725715483452131810554418e-01), SC_(4.20672337854151122457419922618285571400958915669271978123671381721041860797076368560676678098491061900075566981882144330319995537031854242613255071424533255100142882239789654494110694602824957866149242812165087773509386357927168585463500271966119408996321033682473168219447765947440866337522704235078470443456337386648514305992195750299860401351353849013577922401633224537989546041958482707453618435788414778552015740127056056170683492826198507074529366220355468791722411059343918696159230187827135461e-01) },
+ { SC_(1.14259672164916992187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.09714808146786766049489801864942071290026582230688936968489304005176787639966209570341529348132301981885321475662528144306433593266804841044918666299859575282004116334525253416639794749732738787181737628768536940208576836168894664020460269602393048737409067475417277994778388667822250928151297675111015356641185595052735384019315307485456414477227270612916643720272064123936491452009884098169679777105872945543297292672597846182275840226359997441848714050871056195110241872729791036625621656486350379e-01), SC_(4.15233630428045828571165282003422139712498001317957511686008534131679635859864183538546177185653594374218335784773172740834926166657981604452038659779134984969519272193556311849431489541170367150843629073886554832945321793115321801590597547238379687982261245564993552355427076728293723743931166369926846082988125088930254643258317503216425767257590624560371522928955957185570513735646894542449058513305304736526991548661282952311223031495252853637632912517195447976026206965381611747994754319121271858e-01) },
+ { SC_(1.14562463760375976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.10967928505449442477081422038075435262620844535733183630539949040639580246047111782396326632112072770317601862316282853591194195128025559773450972473683112248038698411251861789551926493885241718374958549513870960222836015685629450659124563614658835942746664146199112693866059530862118589459649124320556609092325828809814480862988576538019654266897227975463670711733609274726111254449385800639664475604251535601588720621597744311853100014972643463460221171955634192568653477510794182842549976291195423e-01), SC_(4.12477191168784935397589542884325027388357689085498131947537129681766142724657274514830840400491483690289714355599661512898778855332753696947337182311118846864698871919209941904729470689913124105484612422836802503073421988240018713959679754944896616022088589357690960812847247905388912400965711338977743333908776275515778687477194087747920739357278304117980029841210676526164619193233342273088978741163549949119443274091275889686142390637733620167209522300374444339487273724884402412259930353569845255e-01) },
+ { SC_(1.14827489852905273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.12057900143872218067970982922192214668187795116948511672998654720440343998088259815687165872732371544982085414715899103659438900521194591600181946583254530683253869914773758817729876505766650911981273294394246385317544914009845972530946264882254929676362709065143411714714374056356926303562018956394533704359647326639327814904124978641240051251497949310161132673465026917592081480819229359101746014566898516905814766805157596467983977225181854087666156217397312415244373301335833103871561007079773134e-01), SC_(4.10061442695055656241592053545077071469873703766913194109513704590498736621005492180749270920350467016099189629802475477376987392515014862532685086320893762312509118905916882348513232369480296518941886810485931101681991846575827285414850722852677268262077026358236462435033082529712139434835674072710092042900091838274521865048762682145068651151230083599431929738579885687009093402528423886269652027467895932317073488434254279724863916498024223536756341449912881006114760096653887317577800794879031173e-01) },
+ { SC_(1.16087532043457031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.17152307556783010082604234062507416168862222322805868126512908874350444391624031476519790127724286350630918661654825182157230692102809969014735976181937839485822838860652846031092583424633641391644860770801491068731915330548036706668019531194768932514193867386550118051090351625465136521387253167298769484099254783855080887282648257670532689477740287568441339407697982292779708547695743644950283477211098450598616887397228591108140780640496617665200172077741439182065274301575092569036291761425872831e-01), SC_(3.98536880029023294278086460148693023952159542068516426102352744170696664558788735125994072124366919705847446617560472546619823569017866513210849521064383900291761216761561162785231326739724126611432626880545467591218595745274715036559709822417247333109223675317648292898183991722665201709066965713530805920987744018060213090984936415190464295866173245814907161799185414469513053299582009503693771539080362564920256173007163387568260952162357027452986740446686993641840055667439013164437546688199957800e-01) },
+ { SC_(1.16834640502929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.20104186328135298496957248515380925598682445083418972994271507128899677334354024738351143080520758708488667415355312255775785270232662089553577967970873736421981804100263026490020568371888346518033676923936168299859080948491538582930383269106320961933704101394993022866629525312057629214437325611043108130115817888749357539683062625350003630331806028055668105891089090457634237162817066604589680759760697303496357583924370788467666847648455530619909598563666998753300878386929067426913186736757889555e-01), SC_(3.91673698761405321464513321854133469209236441434776579154828431768579035949142740619365697318411018051757099441576277596809431746185297594423424182048115058393371137639111683011078346738805323243265590930585823423972969974096869859395067920268358674806993929141535131498160046100298751958510732699978972390385447219959583475405359231842797831501966566056834990709022102530031667881663532298096407254848006625574985191288563471602091514320519928910561533915950755452343557100085313807737796666507723692e-01) },
+ { SC_(1.16875076293945312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.20262487461150275570854849780709403747997606590129256273406002091397926362725679700314769011519619363170611596478988430829966031422891691220439160070374308583783549778149771561058934629067954429785992714463951215361015537223308002891453548856025459451393659632361923622571301382221566318474633889106056646792104013701242038510237198194757991668351095063614184302113070108687939723485895001025253995763922338162059728474300489054051672986171154008325483425037217675490894835207039218324736935888548623e-01), SC_(3.91301615345268197670216410259475825479249814948784542097263382780490667222684759025749178892955351123015057685619256664176699053210800289407983698386813767660647021867504064472580409883400638687828026689981725185305365366518569508764730815075227525401705234916938878520111673256164342830245867994075805093498516476012702512020012631774741281921364755873559668935956266229855973637764179253709544696893649654956630131135234060288014322494402701900781641804665327126095941387136867878734833794824793014e-01) },
+ { SC_(1.18831062316894531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.27739769191142907630112261054672408433827074235085526421482402528633827895944923714163948862685153260396240262340145527560063155405527940607146981993573266564290150967731878595488727269617050804601144969687367169963627158725306967711203122929341189833054178990422555120382808115008410479562507472567225958915506070205471388127086879938312382037849559206758820928332307712139310928957998804194412914452576847112033346093713837229781543082521999039397303555891581773141822238740680677363969056621960270e-01), SC_(3.73227706181045574613892029421809688445117154458049890104744406554689644882750279997054135059574163615307509496387105911854259028657360416931236569295709228060537679801566224951288390179021321788619702625697075265845040508785342707672119147499611162773659507482557860755116539100333611957562095234456233834164399613991535254524932170807619064048654686289232544975838193264702607218242419552506465332505750536654755302782459301575073829888035473070859898459854288592606628531015905515215328965859623271e-01) },
+ { SC_(1.19039630889892578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.28516186454902422464142063253245617835831993322076364693117226547496030344560233063981553692632197906206457496888066502992250708601341632026473576675604009580382753778104608967714567825230081216174626717466594925097943661283821261104432382946816906642439643088433343511790123173750311956101253560175744184353523795540070855594196730896187778475843109146032220509648721592227300000668194085625224264770046743164904530985803854668382032903091457367068937360346739058382131029700969766599027553880587035e-01), SC_(3.71291922200369017368204717159193337291160314265581751304430097275815657042961764795772603591106890014199979261611780010990427181966397890965023529008555433311859263133002971046765531291467046041422198778207159128153061796218688191455896913293767037947336850496541997112417482121395773838067935117340279113670753379915713771543247146237271051406985023946047916102811069959567507384501135518817887548474039934107670070502429665488964979540037453791016826388783962172031111105650673657315136169550774260e-01) },
+ { SC_(1.19096231460571289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.28726191059670008805902334584454239548550218003865918387783274515713982271365456721907937011819322308247639769464524642436387203203810279099134490238994363363782132621188175076050990311114605791787695124584795868845460986309932894230042170346685242336929156221469507049469718315497437836489677855006366723074385513946845372946221747502328157358391353990910345204305499847252456480752480911497808889323910234417398714462949933866979576468447248893856074487655468996673069831674808380773383597169728443e-01), SC_(3.70766317294056957066417833495763491113348627015635672702274459845001395617942727417604473158835895034446078418116146503438699088887013640040997993396866348083748879658746047274170403869051444308176371618684989522258324871577825963013946350547476759792863601524048307707490592682701522755101838488421372094179515294608847143712947490367777105233444576897531662349328883091349236022669451957605736146691710067849435432231268480058722914653984610289840504861644546434752499763108252506066044223619930146e-01) },
+ { SC_(1.19279956817626953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.29405814959228531972281872115577848744241330476539424322207732928371094987223836641781173065764693421962834615341501910662796428871653547176129657230584464001961420818793097252905233960596169032065469878813696966372914938789591824236632930918109243800393676264317247373859532812738037382380071974856343972472688501422232135472880038578042720155517847610051178510453262581202097816409643920956443406712243536414770069769104615562719796933834376565411943382368723980627719029012450807053347412219704017e-01), SC_(3.69059386982599663479268899014918242058146304796244059493852041445394639969033313487963675689101031682048803705239313832756670076420320497105412508794711632075221423978497396573301682338629221725782129504408874038643623931958659624156623372278817482189559731742170140152759634226143222489507613263475147517846822391485630459802157747193534639725043070387657299498871201980115247626547063665279931867790323452576604332369833960637356251333916740127183701321319256002780080402637694714766766303212334787e-01) },
+ { SC_(1.19591951370239257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.30552734832125840052974015459491503538231284518030644709405832601114655819786012336846100936680207777126596479633402462155688943661893846904345931371744036668113498108437433881236484618382378315472957245446601780294109805337925926459035813330580701717675021695222169203288405159988537677776806482266518848385138258917056294589703550831979726470477115328896554634634025613709309896598964607474308036025472101068437690489908562630928075259302077592097964344717678590374147915076540975888821010858519035e-01), SC_(3.66157899950897266341204379353537798419054654796604975177391472417424105792604912894740645390003868771294538477949014951205228558913570580253857432999788735617990786196602185473100952466926540228987836275968822023067591944084939010810167083511169035277797744091307218205228104199829296100195491260033447590647463764333346476157327673006815488595244083055259415907488611696454882856572283242204473890087698344001008271889415271602016935370350130295114514382937056980246894560606589697741512051296983056e-01) },
+ { SC_(1.19689273834228515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.30908647972181035306415717863675078910016730211025242842074951415346666558517182530606465652617602590503103135667675401127384688452760685047951125160893347618897936414760230294770147124404072822817308689665138567492587093786105929151601743217783170480962687630249977962066929583403767936082548393140331559208424623662293131882909285270562319002202662931897538475959477582192591513214623911397240402575108754598773509233723284574310101952889917315026274370157180256653172508219677050914615205659980002e-01), SC_(3.65252089837424373938727945032862259240929210684074233581248975290379302867642149838224468303772701597352111309102217895680362856214434627802079638333831135765550971400956355746825337558988814224935287422777362046821445133407585196406260734897665635734430246512236439325599322156781662484035732365087377434537435860795506489448259273991060211231949210335294264543504144693688588523172409424441977492672322754209085937265193527550849457330550424215617614405156231791817612582999509373290207256377986403e-01) },
+ { SC_(1.19715881347656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.31005799517589437870242196814333217476995807649499693529011070735117435783018891960654522070935542030690361671439020630259187276793080845112359698698329519869008736053654931150687543898355294413242013599585226095076607506277217378010263042670261524175168832644995554677688260009151311954304087058469724641996779642466187883365404506690773461791353735112562733576254065327574996637781135584728439660654962080740806431927665418870924715565205976970614881780948820952724574977216025534368393095717906537e-01), SC_(3.65004385267648616527954865992296715275029468728197283298369369930031821727862070318709641875550598883423006447077958239050946694834283128158044911447498221867204751900599261516784488761688784555629755762916704867361218920515635517453763245342455078305608967286538908919851124430404639267094726214081305999445008172503091250993696611411571069568706856976299567635700760301194898486438742662857713008686781080202029537398830440958546777053699027918966553421725537665837567022045705930444634954470244354e-01) },
+ { SC_(1.20042037963867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.32191331430111339261449895086549029541470003741228205646821040804686851621146871816651400894443737177018463008240204638830453840674110125623289812708169644095629325065149010200905012268466419912209994111447231809810189231643566978559554114551916902520362624563910880568441884854356628502594736765571672265089892468311580935293611112366583177210281808378715470173722388206625207952034210304617334678964865106150827253512547516634051558951374863846101108535417490465431614432426061074316072852256048091e-01), SC_(3.61965912216269772828200120428024811920456259669546381965248128788391743437600116259321455141954281630073977684422263911816649717453219170684896869008765512815585782466216706979121600952302690882562786945071216712298460527846953632063971663355824055031885453974118933514177156551266644969344183771388988187700954591832948468792829626512593460301367220285789086705214738415671060717347435359215246280542287945602204254892492098886152245370062298214430839126574533251827355360921125829063528873727247319e-01) },
+ { SC_(1.21129655838012695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.36072925273237052589741354103374154582179542921990534420565853190994871061359180376574053467333730868088721976674265695000194820004662799610349094846048824061780209573454597704080611299528119256577646763302585376602803450230153550952519196349901875966598992633061265243075394277854693043396843989237317378406228134060736859005383861136196908476811762891497452579890884383358628813653439329111984377402837232792697651409263740599186857664307725963774301386350428715153756030172114179091681771359927544e-01), SC_(3.51806024067816042923452710343957815012239304381787658203322727361903081924558982395548437902680194552661545970996952914544963432766599983263188021061667602696823019854633628005351974297646059178922893378662728758461925073548375986644842575266392632793345025076736067246775258211147285299896097131511715201194597912854700786474397178696076586495453199254850554056748961865026453531107999621927404659841430395128647175395965884488845322038120983810672480041843000599942586757533592915075486458021630309e-01) },
+ { SC_(1.21226310729980468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.36412525705292113005181122991624028179942861503165469987226035896376047466885319902303883839379741451140394259347926363975217804886369110016553611927193486731484198489088957178930815051931109152472621108575791931072217293637835723737313994641590019638899944999808902113847285921266332195762292416864655779343136099559172332963707123208361372838218978908059128893432339110061768503598206594598946807980130546308223430908284488119931468633860015472526279070073415117353762389835727974307845340200613643e-01), SC_(3.50901099602488617933961662609194577832551303168379986695120681175473236287005062080455575167049970587669429800258767273667243277503972476292879911386422017336420102780155154909666335311881195241771041240308554984076113094352112043029341814955976936909466185721106124354719414139265857104084452167918558350056175176101945356049631972945089068579910004816914095211003946675102731776786465580977726763772219149762094975256571732700846263127621206586182138024859732939097232892050622642147713701363141822e-01) },
+ { SC_(1.21460151672363281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.37230515170665959085324305435816580824334060759925311235095988583363681210882971361015639915500438790623872866050950396566896332921324713253658675617981474109530663758689150181212482116443395967805522361320173948366777777549194083587765101013923132282405066334922427013881735709518698558177470965263274689926317431180375953081525097608464790961485003864050369654033804129195503199592098281100081388796893319774893910509480688105560424395937634005187859987536277387268150181832415882844731264499687596e-01), SC_(3.48710426332405618132227540555903517056786716385788196839483490850475902035868776849242484073475814113679351593802158471206518252887259870568005759089726021896451567470580888732652672079444087984700684961404157116233065933905865181127124685548895000573634425733126645685362196697441178043026624272299059779697880380488364435795548619600267324209181423660077472428253880775703087620032376724562736076779072125401913269088489020843657385728969803849312555076792481699941332776210312751607467030287676880e-01) },
+ { SC_(1.22142696380615234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.39588770085819691865847010275003682328490704428234580843509362105491428163438448710042684284109797054096472724012751496536528244522738064907879573912386102664587700021103931492196502634778712822226419769182878104076466423635618060502830320299773502938148601794567184867686070187290681996430307341965745352810807762976757865055833978860122338848801972274049557920720539604317776324957070543307660085092806429545140437522026377782954574391713807786920755303595104855319858899110269382668643762661454669e-01), SC_(3.42305336108884902887927320575279559613447444606461224929617092896182369164661070824620337813821007909772304866662213350426972631574890823317729042350306113005691776633881243301450523125297179600210819849955453532967854941727134365115369864028598198604524465184765997818343891127520544365161238551649752264818554220850963710321530446994420439978205574105707505176591332458227716523834711613291351686308332571358688396721775880721873257679162552336092352441386034121556519027449256660873800382080061980e-01) },
+ { SC_(1.22208547592163085937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.39813978559762047755322455989924734422740736531083873105168806262703082104006400399243451104269319997589950335686316330935313067840719316152982821117636452214516953937745633986997164220794471996103513775628249098109014694914685001253018949349415846758651766091317887446106708184940528230682632778052559685259330436735642221324661352012902839478691454369461241349713438471782232386917837439816471075185081605028486721931552758494782311573639335087551525116851545075348233789520484671443269682756137400e-01), SC_(3.41686531346600084300401784614799893004757161767735513566812293919164675411857921077427802420771871729690257003944133859117661387568350609422772611494688750011640503072888589321701691855742721189777588064092740430186592868077940180336134880261857041689621936378609096903010378220341856304235083749800120130002770246847233159418787899794883146762692009200694121724147112767760692147537325878164475152361287321256285655447786743373896368939341494404532390842764544084149054784203820907870728211517025269e-01) },
+ { SC_(1.23126077651977539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.42909451828498508606474709375264723308842078821339777686217320508975455062300122709369552657428197799104481963400540519817121209533671060192044819654074230269737951307056021548224854806022284259103862348124304810034465177910057295938738114519751420463405272341889617811534402988525056538384348037656428758340675621634449278436308125862620745919116602430281338222697346377191632713614962700759746388254996582791040894490980209916664531339155045033869279801435861516973847175864623025517486143969820319e-01), SC_(3.33049194042682605175241363784040240910285245708277205252748368685755534290141711394993998500991014686784430027546221468679903420140548619407963172914406334035263949612686570761312298281247646711316376182219248163711930542803235076769721715931348363633226871451602492708928131518862713071147775206684552059843068760118425994684230685879647854670292765541806378318880699327264466824963254196260044211725225547447464973750115240147306146083186263336647077159866504141860017716353241263363657015139726553e-01) },
+ { SC_(1.23186874389648437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.43111760599709541035588926901094997566502718811144427478325174481620111845861591297173944398313017102652417632855534696066465013105557184226146279067590494633440907772328572170475398014172118282965409195033028893604787232003194956847056575653399955047984495654919094634481779204010157424719276038743419254660219469258610283432010853914432281178805639955141819568197338491600326973895231948028123781044473735801311915011507832384237593541506995096256938240840412181938542889141117184710113419161088416e-01), SC_(3.32475874340554457877202447234475014625989155433126288392599830437752954563599902656557040540286535124631296551395636307213098940140603482531580069603155304081711132781783110299772832553357145878218145112077910478105454877237161308232045592413393717909447388261991731950085718673812733427205738145139181209503016951452142299343473400624768159762695213151270652676435125559371142019981631428959629983259386047734915266850184479686836227393801237648335275044395133503637188941980982471598895745239031016e-01) },
+ { SC_(1.23285484313964843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.43439156217638164611436012930228382689755438982293909056748709765218557125176035116803710034077451195147383026645041830589413044047646236397156773656436176560487896613910491818283697348760063758826608457400150535252854890989562986838851695706325895734051254961720112330923499814106800806774483808233423741414105583491907454466356027291514010057864404870966322389372113571153221924917442689876389650652168380703427394113468793521455108081660048558837404953698699159745637539714086892947033196599689263e-01), SC_(3.31545711049548839257000706395881987887544852335637955820041950634792349777877146091793726646581794280066231025664093730708988019858153187826134750956235714639167905729537868470957660612761971312259990996222427866783399658798385953978906208383850722176584774703718987266959132557807629489026453894218196169262461930928017614227977721723176068755996006303058069652596783549031021267218301715854961427011462057088981815919420755933964243770657110629374546019598030758679903822363458102609871773705474429e-01) },
+ { SC_(1.23518657684326171875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.44209667096123697921582138669326176918529476690320250447678223598946323362005245879411974799045920762058832832985133487447485408509583010708288946546618259451679406538212487653483826636128540529638916310113140319036693842701353614311952050475953080822080569346027859301545516626493224857004408304854843429296425792156637522761688106782567403043835154816696955555753046698752637657160792857902429886164915472067084443361250512545205817736097253824127751766134380610996601846700392801742914543911037926e-01), SC_(3.29344962861476388149406913998441912009230904653412583399999352256824561235741071049429170589583463558327490064123206934737081606018173969087932126027338556221875098517159871251691922634325098784219711062126107609916963680928323227478737529546256658245101678834691028532302311092045323468689356548157944765823909411811533495497374371282141490365239488023630772933241701929407601305723704383237378697819408791569514437882779120717260032221738642842405948248710800015826687135545568410720727074739930280e-01) },
+ { SC_(1.24624252319335937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.47793106505864155710372335631845478492346645144628703595395965467239858524618751432955399079998713862118814340871316979430436352804054698096345310731993977194557526214858749942483204958723187668936619789545938232937082744239886585206968488048066729179235203027526167144649855034638305660874263285668201906999849721073117980803930530336641270842753565877517211243948658335212510450677017982023517654094004127185898571544639567951870938504467089485132320187321443995300412459166829074977205069854128167e-01), SC_(3.18885915744116307991824460697936149035981956507037394874207203343766845897008716157201515632181715607046169386224158869719338499493357779326841073732915200544938143073386213701049092950004898330773411106540232117579844388237617549128045386552657145803158607454717496911937874697588703219813472297898156220846861451173907218251333262291730714466252844502243144054267530253758685787092879456557743676371047799961459103016257328082697210759446844885660824574319820570419954670583966584126272686255168088e-01) },
+ { SC_(1.25251245498657226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.49773856565935007970549344512699526547923968348365818675525781601959843817621732366867203995655385937951745643136104129868291132508462687598553162794100451077120644951475808579961073311184381003686892179651005302578996007940600397705098474530493933204289689666095106701306420249614061152905549589374731140175838517402015869865999694639591169784678467636104934359422200801913233216502687786281067467908895843320108471480144038611249749161387634157417449327368632565706141541919713135041484839611347573e-01), SC_(3.12937088539966310827617816863542443537540805689998483350331382819275180168620190928606558064685917571580731924251185390060638335515562473056747532029126629589310820045526353157641807788806385485857586135006880770118838965302001129873513923219007500039161812961582202391858173636142000187506046696434678802335539416687869723789979833360079132724807635630965800159606622528573160421322491440022849488963828968641231754471167254476401435600251010890399418114639079564829480566160639228869800176144301207e-01) },
+ { SC_(1.26107549667358398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.52418695956686480941850006541690930239761325232741626838515846936884406383023802081370469754681074804545915353145563398074640428884079797524360775772596192826878326965373666553059294324922147137549306798969863433593411183534403373204507899175938685742339242571442474706314723892564187399965843300144380287591834727003669115250840682958587379968031653433460770442328081770634773759114952115757110000204146434560295139713438946949932003331265057495416454532719341146715168794305719687927911827605620710e-01), SC_(3.04792761712224384443187440326485521277019541458374687178938884329401562377594129973298941372783852531469542452088127625467352152764900393544352757876910877738043333639268176601041834046867143684929017539126542262643786563076751353073667362561187662421509245109958895360976584080168450328548225498844675255271705276714092191942776847386252873452858675899976559091285901770662612613531069332059711175867315451004429558937196248454798368082613262854234614462702461791856600415426502994212521285961939653e-01) },
+ { SC_(1.27270126342773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.55897702698394019729304962915783339726149744494967774619631929617070997603359304132004967665208808726981185438434988592804380773810408457710481407880665329100751305932132573383322495994314169335167702811247724242084676106663770075572223167737313811281221336916721200692951939588598623738309294942523017778375982939758937559540634496752120663904522086416198205632120656934830706622226108996378750114163976746954239093448542669711432898214610113927075962020141106214972505729115311860914979288804790829e-01), SC_(2.93699816097887127043847639571997202640909304251711570871621466393972194728942985403745669049952639981112592351372429654141213093184117782687405526804809341776471067929090431550971880375019669575265668215408329474561215692609890091928351019813993747087345436206926066191226700264499898302760789705916368784748646787652939680945907860790073813947944118519002614505565558758391723561571904176502747834651484436309420341412474883573808977804315917279383947293912390846411905449890347664818172102427869171e-01) },
+ { SC_(1.27369403839111328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.56188809407302140382519114161585931061089096133538031388986746812799011766912214432553468991963837135206882860816542245983053233993094277539431446743357262977008827009374763284827895016421564230457917470211305717579021833893032138958039974074703001877337239390215038737106172458129186974741460670394259661415574457285603388199508619494741444619649181349790189072222296731305345037121134600074660767206690937687887307524014164116679464591387661354610259197146582254580550754314222778854512940941975451e-01), SC_(2.92750680211414746770844834430161658350022817838677528204616418770016411973049638712003593524209894044712330474774636787107110946674545326257267713468777492693895483352299710997078212274344324361670663764821113729265765705273387211601224326658092724978157805173109712835197097971977685009294324466709071461279772808181639695341825295953726444706286165065694230687880410120205268008012484510459176080990941425970128533715782135699234119402304189387675442401836055216754433030476408800736483624398815316e-01) },
+ { SC_(1.30864286422729492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.65834124448968758372373106440044548226231466537435973276539535442152788754757669023365222845168257027951609639462431742264781036338666497665199597024074054375228032559150094452571866604853409863786616373043000523609661967136561191379693746836366992799858653529442457581064828032990400456134462903027511889608735806202396605802508740621722399330444196254992207913243456966683022884751737196688975606995192636674990845283225951184164377590119512424796579386202619458608939451290244931218394255282524872e-01), SC_(2.59161038834725172326566408046635655484407996683812930425596593331321052560858900104499556422763595724745722744888885012081379301273496392545730800427206859277815623633316107868525096561220315385068440356778513672994616088760741224012707881466960081026623434606955678671397521489157762162852500111882453963438629697190599563321621932651961872959107980463673537799267563006925080070818207097906067384521865616370172042193402833078119193467872189984306913742687629125585377205706386812697845482831875212e-01) },
+ { SC_(1.31513595581054687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.67496509157828201912503630642992815986208380087219453489786887511179651968481635751257483296845739295085326766167034119259758101256282104848357585266183737568700627901779263861176788050184045731923724812808611848830295658768104434977347403943462075868578161953644447327877542025293961158175558534004721039058111728107455651102584979006718701806015009635716357761745543071562343687493685180873927341511807385763241403614761872459414672368709060179385863095127929719194061127988356635866834884782068660e-01), SC_(2.52884370350198689836509793238736044053809213320990655336570043176388019869051847476197344301598145790010542007186953761020434865510582748749159053480789974879901690784775151251388330020872601298672488507661166060231571603598086759786500882133991853156299415642748708141774922447253154306852506112676846419230056649032959277813296664662686618019664034010059955597878723714332427869130132431251976307122761466400368086425708093504776300178852667386689097710596288656596635943810817886346084363546615387e-01) },
+ { SC_(1.31764602661132812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.68128218332560022849151062862300290002816382002147406561122634954071252385092499593221939459869865873066337189640214979139161323980903390581209894104049320132006144228121983278855133934081123751398423334417586315867558772265879539165555345783090329019848075276239846426043655137159253374607313204375273679398119955419857249062342836994545408747733385348346736928923198076278906695111754630162410275969412267739639630188845066288458590745754843970182123421421688608657347772943092724923457373537413777e-01), SC_(2.50455091519863080006567737617454851596080837568745079926261175080989570659578673726466242881105045890267567542084835065570433112497594501436101662253622732503676986129627532303613101872288751267994782026817808674381109734346995384829715512131218462764261510046662595323365526025933703952987521614147369983649867368067869287418530494000899105489059330421493859551233237215950932397638169156132750140846519250994070230478406360849077447064427738507497094901597123294713837766393265188840396610325242108e-01) },
+ { SC_(1.33635473251342773437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.72644210557293654073542060086406625986306398124088406711769491620100790420760540376060363403161717387226272332636849641619930464925339803944531929266603507465706542065108113136867046044362596304173454484263029807116355953708147595143804202867331365545502212705865645907773286493184357361549950316863558913715091890954079746952857204650313515355050936769164887155762123877636283908302073199934412972530605773747022445848422608312918511410963171951321236003915112872694863002674706748808090242394674013e-01), SC_(2.32299891668892105578430805968784557325686629203513649173751412362396164213323697012298385908705298284670606095798077758105179389153786963623253782758621229155164273749408854178705238465846547675503227965043919867632856632606716985862406879880250070563911690782986211180882566400301852287461686831670836491595633263904306560640539575748724784015673555715408431433094224299347067526371844509941381534872980427669628158743417929463652365941992113826691670812353814751524843826719411056502918081890211682e-01) },
+ { SC_(1.35868787765502929687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.77589214007614615935359180562771861203166061718965339152265847612694400557778882424825354726559526679131378190463366614157230082908624532353686825552961134847897731092392578220212878039351536459454543880630234224638675041433017159708614328391485993736084563916512754386563384570120566452752959876512351316136595224175505892099231154074614562104731051732156166147422341586213471542961144619498740979806752418525675494902597419595759347605843233173004190642974259705891490524545835711058060322698924180e-01), SC_(2.10521563399035850846293344058639880547734577421953544992592199451531878600608929560334781406775399358068856520818402473362854370439100435712010515124940674627273883774342975022165663149085933054914512215716969149912131601383737072603210633382998215613080762106302730395977878722923513835555432768182548632737981806045024087070109825978918059855411453037534752326280434726068704208466819871376329820900372129902093122395293491407971401671172806094740549791747150107306999208279058576893941933708045083e-01) },
+ { SC_(1.36104679107666015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.78083095805601987454573074803943470621757804524696784103098140449005639638284361358083062934010737831830783063312546836042296335609289925732230060233333451407917686529015877187030416793493427654808030710998148092926731919176988787289326234540198018431288569972368827591092955147419949536865952244750483357798197466999667993829746941833181764203465732330156288972592614004040835500793593364074829607037302415716045363105826526873673616003512747621072743109454493646420480930668081089526755822913748283e-01), SC_(2.08214931499471487580527212737500656418746457639132995511351210615068938343848506033358245359661394041703442281266292810884445455040891225931387155913258751438141035226449517065251786763225847298217846143225641509156212605618483988613037250889126356687450506812452058374859588919863830693505452777076935690791833854447391737572849335367943607136147722227750905412690739098366592762468180904934634565064553997996536850602898143403118093286692072145247502224184666689326027284268178665916305253016113414e-01) },
+ { SC_(1.37006378173828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.79920780655323574325048032290553442923802914302042449959517032217948051940150581020868536605314435386459203898708604722427631202543713090326644807022874911720884509405045011880194820377740065707611794602426514158781758693026900421398037712389268280235218067448311153013979648678838706874169795220643677990190870933642180225407599463343126098376439581164242726050065349453834012003763877617586777474403726187072521595310016909539569424640310905288009934114205082383526315485778184708537009526195176275e-01), SC_(1.99387220352411812643706162721391972243201742242193475787958496815486029474907430687983391246649586894127152003306028679128609931296024818616213480432671358196302228903498401651517092937484268824835198862075776807808683194099912324765269446453036769957409467627861694009583964690786001732389779565429776808515515017736450229078368649763370096373452237377053728657912280976882682351106748213592796547048629363878065867407923229520949463360810455413121016679444030724292708102255182692318351645333863659e-01) },
+ { SC_(1.37360334396362304687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.80620384192341085280818940390688592996930713605209325865795280353167597318617674789286503206624638647024427810492949762186006468639432931548924921990375287718613180115266058663420054121130510011093500432590233907644752304593295495326263164317713133789687740999996186308542015177315380533224932052581739319510053805587922178754568124801554813628698943853009281775953423476421434190241967808449688959898443562854457700532916910942532208670140823364856647585716850899032174120857753436343560437861952422e-01), SC_(1.95917488005704498796109337839462311020563464533356224712944059814078278920561867832819886450214797187489939587085888526835962063802556392807082653670784036934320396748454552006182311130900790213674388500137041259099662844726092679222947491447396027724230508542332716957208884897294938245847990852513593101461664259719909071166581138742150607442617905593170491086391650790888740658301124572273285141285519435831995534059396058973595699379902139733254076628925801545908839520914611947748889644366689804e-01) },
+ { SC_(1.37579011917114257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.81046466700929950246668718727336319603422607523486257737752177468390505792022504803078733499622336237569514186945730764657819229620157949505190809705402556212976287179933461585472651303039684488150298524723737283620337889897920345569054449457671306492176333362444469978214852108745968215759045161643806570983234462686298094463645317631449549682235915973343298000368089574358566062623971987254220397400720855377779653358609132128526401680980996939106354687468832044201823937757703711290958140670326488e-01), SC_(1.93772624933505873954526307542792857908119793419071306140786180506660673347469214081509951677829702334822528190190251019855050074377834646317392219744580866160361489259089532138847887047287371437920827424743971700527942058451956937430528654494731672514873731486172998987543330286127627257355443896756851760672491599793182135160951137115300143519605652789579329580837860650478529356618782397844974277048622432233205547812026760264071970210071830565819625688558008931106124303619620049393235119593562032e-01) },
+ { SC_(1.38131189346313476562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.82101473951433113616030058028945882827700529777659399626299791888315472122893848203122995186993249918138656191198348734122598050722371471038505795184682249083561762735866757721714072734782810762657563932528073571155752961737106346405934750501112839406941959325824904467073234302652189813381035175894782823019339402643440169650165761026339375821668333766483902789516971596613319142475601840957903445030084283730515297138803998334696043029278369165801886898644339520146169940327705952108934099184965051e-01), SC_(1.88352581247039312796004784885792696475588661060726147078352536060782866764818512994083123827030945328076367388613370055013885867405072819276681817228272086206013317353664827033343035360983767879057064569076498155542057096622655089221516370992457224624603085336876933342215313240050182855613227752921675497848476243136725589964476896553566468837178670329761618580278911807843375144698871715377420530960628384366594660855642419370115116659211832265632273031077713314597591180856207916233946464612619948e-01) },
+ { SC_(1.39389514923095703125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.84393748984697599494255913228519356500443797238149851639494732303698059390316473854670305205991023687197405840363981298453269251894181637148434103534542073081782734924644439718021321689020417889028131238320809491247476894902458941394325539956411459525912507857369660076279292066105700446665056353874479050722766877388177176029874265985210046842349030812087425559726948928409641894759402387263491889699421786524411665629018248250590827981422167551410817277634443200384399289098727342057754944559471253e-01), SC_(1.75979961813418330463246015346785922996793666199283524740663794915720273003795539409709892289424553224094002289191965889297876634196707865043091465457965056322032412992884309526153698834410862154379415726686609410706343428724975862198717229665810504104156779671263630038970686942846971450207400214891909970201246410306632949413399102387736446279872852586166870223903033833049605211179096732670493723266210161088674326547975842093333122402384746965183213793318184772815360336300118983377180563926983678e-01) },
+ { SC_(1.40098953247070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.85617435504275879052838351473422384140194868085037483863671989201067225619425571115767482271215770496859292537044150740107974152029149839011472238269874887036032939699625000971850206897702187973275492769390535345807412515353236530010768540682551390483886603019487960710475971398347149061935832649656222349711037952773450481944849281665638872163332303576583218021159726525048956435930017186229181305861378734868720812113308950238852844213779810697871054524548057515433074620560538926975013561664615709e-01), SC_(1.68991925339569339604661496424208240093498383477146418615565299727998626345325844611994811159257205982575484035326636993024412027870667349093871119983265587745698136494573535119564056284191038785903655082458002571428229328620639699045804331852797555083547720368648689121007274958950735582630052300967992220928569101056869705451681433318191980600098912075548588729718304540582582836247993674752298538944618403645465934491911133294241205561058621342699438071895927728838513098621388908181305166539103073e-01) },
+ { SC_(1.40101575851440429687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.85621867154937990161355741456501379427686529270485157224862649254966022362110443495973438200525536463242664277447890348935691893273536099906456638207162825126576843366652617955303374416503841499587078828970436237045163374727430933757606723294288110511877325710820014268639975529400467350328864739151245994094157058478899664410923370270816718688905971514087797141858843595803287066985538914148795677452085190268952123648657706491750188162484814691673998674800424899515850946008080603852145559474897554e-01), SC_(1.68966076435519353962481075898958477545026123896902065690890676310569504798562202400982815531169410784648901144018478477101528696727403731035179515876213449880962005156426103688847976760828487626389281701587312839145657572681155558686983505422848380769701057226774703457564482651992554580738823901756265324815389555165826073908210955723185833731466146611384227971387719800158982983339977621693099935688345979958646148525722384424484338569211001385904777013357253104499183168338276670653879474853213746e-01) },
+ { SC_(1.41011095046997070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.87117858586820775624965696236564943727361512341866183156650482788896380417914897793279124473515322346483600167082027894761850185430736258876861651247601475778439302962028949350765397163734219392424137650555626708780329712724024737895212969230465645942701271933175672679085979373625902742228817342906406414815750958280697847446219322689649467627772417102771255292832906277996968684852203671520607993434988730178276813572827981795425969341197977862776742515868746300221678580739692370360137716379880437e-01), SC_(1.59994791349497692096310940926922433291994198883744468744005470409078245893996153539802601598737060687483733389757045235896095957400266180075500992364021539221917108997307230046574125251952304461637030186471062562619523234193692618585774925525419040975961516212188872188853608468781398148788251249659314242448691451141375364682157224189761502490697285106725955016342688708103583146450318454637473677756848148946111691551396903396081866701675441083001752543398185132497315372365608059051895513314949579e-01) },
+ { SC_(1.42533302307128906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.89438855795183886998786581200513329076368840639634376361595786937211016205369393880525718435864806301335301282401183701106479251675469255403508578069217193848364943684508111845954935570776509998533134936283124529539828304501881046070786528700113675273503484680453633403668330643191207048485739965410736246347483019206275407836155671132435908585093633309518491565179092602495042637961696521026914991832196243209106071985665397845319941148355665755209958322775690891457420342651185239844150245596327947e-01), SC_(1.44950855957173654196257134824365513134133201450079523719697853158105525996193537681649106974620513605006455769791009116959886538550266029282692875824056064287247623191024923923550064333536271085049062725464192365631526069063550184078248236006479591026443959058514786355465785459602357875413912538891346259989738066918341767850367928358981037418135328507988540823626368932440669322691107028465730644797892733370773348508342557416764628129238249741504704236947393363136868043895800163017362575013961290e-01) },
+ { SC_(1.43252611160278320312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.90455894212278646682286952361698360750484925762077663955915415425200092204173679261660060857165366316201501332320971411870372367383031067911179925113944816094496441312871796921361407697738122633941915991825088653087265030078891572812182705223138859284267087996754061967690677246219005138926423479120522417515704205304515586665318577648865337189846259000229102696099755825093328193052696327092303622758297319344389570129955773532709225183232222424041153368966111478547808896921857325177982548718771158e-01), SC_(1.37830046144356675250872410437156137418445970379445568874986063770412578264945685021936472202077012022182697513678356960442192390943674941380077529122281760664567764993131196070130465793335691254056246930897428264833632852315773233778709341455031931560142964240737564638602823711734409767185825071947764997918950296406844128918029320519728667997040516955426962206122258344354400413540432792749979019261016751931226200374985412506207323213643522455191228802651442335019461635933485240885233775534028203e-01) },
+ { SC_(1.43575048446655273437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.90895160230121997702288446855581405901760081230384889585645562104421752177021923047531084568450326893227703184655477128300485696702546084083636117118819135371141893757016403129691943032247687888381242423926955796509656359721022387715707166150977984559307365089946156361069068208284576434164645941608103890018860366873703274312413864716472668931881280938821103122161489441182439131879713935704611483556687225869596341238675045956872266915280113063921753191332747400724156543076912116754374874750054973e-01), SC_(1.34635736090091818094528204085818356101807997017845390670155478403606606771620855953189545331098032529074637876125914631803457218671363025531396769111554517612885738927295369006431968049166339715409645435369564404672125253442906034702151099344922917418994177825002810347017671706373141382337224796583178154615455960082217078332717493653904158690181583515356788176235405991881547549149452753027065371587653125663516719462714534171084475796198006533859917606833628107186105787809101967470779035305450920e-01) },
+ { SC_(1.43626022338867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.90963660568134094400971901498988905319554266361075315281949278115893947953256979043383147606632955045753627672782128846852191033978891970221149746867578886482678747387800642996493640522219736150214876489388752111581525484145661461989583738801301682758872224572425127995699599203450570258361503179471293916821074295053494693378034402025673654196231274987906991244583192913828304407994756526024395389425156962038699675288302931357316631745952940420722432935854198084810119889611812838202854327047087633e-01), SC_(1.34130620789601643297435177545524001954141391748474759563452684046937170171124919131936400073282912787645653259241880684313416126416211409025645824655684246053734081280628162746192535860988794701161895027084056830536993050641113632462258021194830151178607327486814897660784369677235245490434876385754524750500204601522349690543772219788636263128283700192373357633279535557585911804179534914355347076739942876595712160644569672695775037899587969833017668537631078189945084691339552998027255384326844140e-01) },
+ { SC_(1.43893671035766601562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.91319109575353827009524291495439092992609811853229821159166159151103901148532756099292375393658980856687146260362406220995470141661061317103167670220098478568248794744003136334741272352694999145446914008031920389605991216195136102162640563302102813627231858860137114375389133133397415527784515231042189322930600081954067068979704162550063898754530920501246869992971165629667699438110645545498170415962658239563515234890345521891246987256466209364284808469885035281015898704958784193974691004150021440e-01), SC_(1.31477842204409608143481604778289471096989432741883764052857915784986484318032634024067139351793577350976858922540277282623045875976061356613691647950469635616570216317069615463470059393814873032370292336786402935014974684094100738552918070641543653862350399204902298268031885011842932620245754790505398283832018177439959836755940979102516771954166434909998171784510426184975048758424286402781599100148540714546447711769856438806916702480649813828940835784901933444901276957152379932153447509228696137e-01) },
+ { SC_(1.43923854827880859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.91358749415694718375338446318520938245933399170216515550162277117477391720337296530042486538615494659392608853197762294151718033779623260069710976312896628717586901774481690096841376459649622902116531379807543817349138434425583628639937086422980602415256616704269488506418530308517347564085682123911519216119823363516075742620608973853091856105663492745369073548016404817781648983470056148620342542897508768583078218568602415975758720531150787539258203631976055122050762021258847803225815586413983594e-01), SC_(1.31178618520511210932639613646562667970910211143447525041763259377225077944033963198139901656474403253313311900854623885170093549689579895346253603161951404971637347127491269985682548787839965097189544180076866803717837988248791973444620625374673968739089275753356956276391050058192244847228373681483681343061322393838820468731882412707831450554284369063204798723878265096994905601911657910504170961317716023507473626505888920988030515505601969581368230219763312001217408116589019985350643427759453027e-01) },
+ { SC_(1.43961572647094726562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.91408156611675707296664656058223080152485128775574649173021236987320160261145962178762573763867204348773339812210608561100661146497081024184848594028960145235706699880715910562953861200253810695797510258001811213168246891397479444794767683027181509397456942656840768865307567123173491515632186886152415447993081560133963732169955082791633660308902637129969728163244325298495434764536351360777449422859214749223257906073184866030661311732376603554906787343524537507972606605117568102379976898997387556e-01), SC_(1.30804690297554290504989423846664214343871971288892730248455107330480322598111478527291294656586536354347060079501463191824637278899579789830724823242348033342333742371700916702509134210059650531852817443296827350488198919145626370767974551816464494406170646945206485942489762762056106891367852891043967425985347102892606683294114815073381752131566806564187749932742216915803605939012920924230774615714791230728265624437944193225253025470901610417643068522722728430878240416873384568643829313305535027e-01) },
+ { SC_(1.44733238220214843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.92388003924177313140090027971915918584257628279020219474834338435924744461556664826937218895846315344351959435620232974461413412660625327718605557450020435740353207685195892183491583378240589992265493490175020140561282535656023176931718779705642570303800362770035646009247080796429678251537352734587121374533778369237837973021704239350832647444669642055605296497584322482667084736622674001731471182384738548849145026540595340207684378319043448448375976983562094694763759141523233441297963867807173230e-01), SC_(1.23150516309867875989569500091859949538209314932271743672937839136536501764869171434751888595099441665884508703820137465595390996452770295560950163144838266096299820229745872851223264952301951583171652940286501789832523596307854150203819900567360148429999324024127583351335571985879527474760460123624195719269010080647337703374150788251690634185963743503086320018503677388753932389411896123706087229183305362380691808334014583261378865654194061555906317934047697173152604178316357472971054644931431007e-01) },
+ { SC_(1.44744920730590820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.92402384223882789932261167425343450246956345459586286370336167352566852171621116458593647705802173528121507646228587446217386261770854494486472079130461840033751569077191235116879649490897128782846926355137884452312288880211033422612152460072911482530288128569393084939527997746297498300862428618077679314338568003724382747131398401869970818675030832582905678960788419233415037831678397997028491476723422057386731673921794812002654045501668179874746043063590611649424932881749747850199999649458980332e-01), SC_(1.23034579638217625029872282272402437662093252013182327996821295956822978452419259217048913138605637521619464291253863182650817791682056273134695984571528196607840573470807701589977902167891230627949542905867599039057826790021360258199521140849548290900785404111420099350972186162756949436658730757354190824081339428667944721803530652607059601295242664233649552435918280060710052841718723858516493198074231988111624685499136821860174842545366428551676343529394855788994773464430657466696951765655081137e-01) },
+ { SC_(1.45154237747192382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.92897670924410531455308403067195670028166438299545559217547024316039582474703048515572995385737263658775525140179896272492682727904755237837950242303032893320399392340524679763156054755798499200503708258833780300903783645433313620255464751916379090634079587697883676031786033937972412617753201880865592252516901165029948342610525988212251655766536877387133775131843264659894018569911003548054019687818715867363301061741589797231839706403520055095055989644698443913520699876764791371583654897816260752e-01), SC_(1.18971488487288304308425699210614719866878259676804804262846896571022601257545817282175995659728561527339387857587830788109332577117011986425932901344366978967352649545020809657624889841948708848929261420409010627364470837074847218316673600693253526576654165766705835056357817622597952581949808041989979706804283927703846598812892491431255024889245682296352331155850394323676087358406346137369111543419082047067595620398532071247556766820276593583587556123889897153525352863626314107635487884572998426e-01) },
+ { SC_(1.45330142974853515625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.93105411740343505979941692065212954734817555914074650281588114038233678075276394011281531825927323565721676809068049180242769051762192574807268658746464170597014860395374014702172519273733548176632886082595693891351425720343131787988496468579795432317171238483180139422234210372749213206588283534233831908394582654231750575686783875745511809042593129988278841999995524050769441525637738892576778838033277871692659550467516595634343802643379683228631743812937611330519329616827468576341825528132052336e-01), SC_(1.17224746414922113394680459621138654141515011468565470547501509905431672693738276955358228769564509462137569555299014927161641678112156176912374444048091919642849459540872135016797222796525448414106745029017241368167842038210883973473987358596838846975718240227122399101468532167473154373896203436806908913091121947162452896071564092737961908660984482393247148789843287711178022307994232547371668339453767902590820307947458700379454535785143261333718503831510741892113212862974188905351819040231571308e-01) },
+ { SC_(1.45588922500610351562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.93405439789757141275202601364355779502679848734651978182155130072168276482638826307412791668860025733070999061755033321901886773799227371917222595289420747085427784871438532344797731199223428339013161791677570085265437560296083277340845904465956638418345392999864987861028929290148714050330685270670948455026609008733297837390643273232248915759554146794901132364794027334453505635161634851655441841286677285556554929761224110017992819251284010541747937525942378738773667656679523684139733660561250454e-01), SC_(1.14654403300175083648655241424713554876591410670899082802706257994408600890374804156744972009245333224858858840058865138728143319116190374735741716940083629338564479621306357085959924901450353848857626798452776676039763227965830495379918013430493486371677347432381790712020223595336542260879737099747022574632060518401383064409905884124848180841992448644395615313940886011062062975865185967646280984788987330078321682531189251440331206378939892631509660362968636990584420084242504975617656278628117103e-01) },
+ { SC_(1.47166442871093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.95090455929404666006154823168144087189140053255522339316806520598490841109867383633977530535018659423876097071858161130203706649002027525940404478895698367390354260462433431675488818940998152329248038804193093807009906773861589081969360477762624353775906996639062265252175967961550873009581733911335420867297760020697540822045266366770530036973389680212375467050585559942092343814379574239413774425890235854531425676118483749702011351971360190721833433641572164265515387155347107711295271352712743920e-01), SC_(9.89696141156948746533779105739509719701859485070413706167484933115112066336174440361597142496460529005477561627345324008350535949128391226579786599207708363053074301827988346459788334279429737675780235245888898300686596905930790877873637403683928778470682731019204053504784430768910655143803501705308467894729067255148499639765331390047487792750517217890381326189053380138858456505067986074977471820348175139209916889960977991394445595370464003745273811411030937898173471905892363724061478289793119348e-02) },
+ { SC_(1.48118925094604492187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.95987971581469849835212192761387433880948032799743403113405841762301737272660663272771126085311509092947080459948251558013435279217583393463811660766402644800234944489251699740786371879736855583038422681603128446143622034878159613520219538075200024898473039195144740678733899601210689307500632218154184430050627947647985952105033868309795151096435214211084770689499068527480958647335117598393401054903120640089430217860460804499994297927249386845726766898814799195449319720578659538420256997308211025e-01), SC_(8.94872083877310745992995729453189430370374216494843644464203198739023378590658969785214597002302119076433271051158949450602535037208901054605904460051131565768944344714994340047575313236362345896146244898245040780545731961335279415963661509788420847604974741441811091560365159585870007428861114817117469981394171402847618853548699252957873293345224676542413493010857730777156556972874471318434497632251719969283577188808589709859828953081848004422162716626512357272747440738023351312980295536798316922e-02) },
+ { SC_(1.48278236389160156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.96129270838430119300051168101128018381711663975084689464093791562764752253731121972874715487882382751179770152493027118683467727036964708520634542103501485669757146226438488081878080926649554606187846378195600014774584360969390987124603322695895627803222154125777080064227842041901715773894330691637378759131986041012989252185848914840073182305921568081447589877312031877944980532384362610432698158884417534261275444275397015596380868316425733585342742440883714085896222445321624407650811982586296636e-01), SC_(8.79003741681315821251280686027308782114586877469765715995387548225892541129646634622181193716483073221684877664769071763743258458728042536681305436365814040903460426066931360249824421763839424383563759428429066149167258244393099606620797760427563923085307430292326673397490669016001630596625436022406452453276617767081117940821836317631747493227941287539612890181193545073004560915169680617098938412078376539261936819313380292445951887013297284686257609312633392205252300434267806647195017089621710655e-02) },
+ { SC_(1.48932170867919921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.96682778918135881536275990842605733339523038813167252150321614421595525838928211021490885982758765990951313520268744178158346030034831122597669741414660123131649499595170494000918804089933602318505074023337014767210419674606196522230870351450346722685462669386186899171200820043924773724372012377225749522475547961748742969344987224598725348359245989549214445144233239343849591742100654576204916431612729728023490540829084798820588062343315674262313864097725179428828982666540343368732780105039454552e-01), SC_(8.13845084031492640613386104575625537797314524719600723400961398682265346258342553800702435865044529994514493269349360241716452021150170976184564475930349320327294213744778471680231255567737036617811154621323506663548592662785646800499829866106486293702489790533055529549635178889628268927391706714202367178496631902276183977618547547514283224465880040875138298723442763757980830113435205370560834162520016704500157651115626101042762031082967251945734212875798186029500136459910061696644610683824984172e-02) },
+ { SC_(1.49110269546508789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.96826142879974523863831045963884109600409432642463162064145662688965036053042311506387703651817442121009205293172616437818555258112251730073632334612968938357736365937318953971797778938245108123188897428261195201653763029717278994009284610609918683798387178776970008741366601835926335083641809206050796411321487406184056687220549994528554465293966740994858430339601520279341278775826310640952951225475713531037110335618328239225533137083081585843611982466861028545104133721132301207113669094208158152e-01), SC_(7.96093014102787857311853897169714896003178997833084509746261920212282904923245728708338229611953838785802609515963050682205601178649541846223606669995712553087046533525243208438038611435636700879519384389078441175165514979582616566905525683674375742838422423588917802839236707296641241280017877960271241566981191179744385341858916524101345194801390243168621344421220012275921118083354308199733352187061121123492182523906644632947523518443805234926530481306985017526225224799204564632165926385889633624e-02) },
+ { SC_(1.49469184875488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e+00), SC_(9.97105451691637836980566977886191495470310625478984302514468734081978317004712365179572388160094873766545892259684126612171730371334431713402903857531243843855031719141960805464286066705907297221591074259625271788178601626673326754719816154765918422856170761025895221537060495081964634143881365727528637573199554544101393148199185537988251924073321046398397270592899501388280072694753480150196648362062195285790390273399747995245778399713979670854796624214784952767383795902013605892666997263955330095e-01), SC_(7.60310344978606994311454252807960986535803469428379193529425796476644344334413001865738243975566508261589698713562091901145249736705485695273728137391377751615494502695150924195446763383201607951069471691560757133118887684442353070862022248337360915742210326532477359739395822627983312298986859616214217003217070111399151039551118513567199164797534425187953687276545896053419230138261452230491054544837629498576689887971671483487696900902095055042924520918068327882892863731988941436799798706418513466e-02) }
+ }};
+//#undef SC_
+
diff --git a/libs/multiprecision/test/string_data.ipp b/libs/multiprecision/test/string_data.ipp
new file mode 100644
index 0000000000..2676149a42
--- /dev/null
+++ b/libs/multiprecision/test/string_data.ipp
@@ -0,0 +1,45 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright 2011 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)
+
+ {{ "1e+08", "1.e+08", "+1e+08", "1.2e+08", "+1.2e+08", "1.2e+08", "123456789.0", "123456789.0", "+123456789.0", "1.2e+08", "1.2e+08", "+1.2e+08", "1.23e+08", "+1.23e+08", "1.23e+08", "123456789.00", "123456789.00", "+123456789.00", "1.23e+08", "1.23e+08", "+1.23e+08", "1.235e+08", "+1.235e+08", "1.235e+08", "123456789.000", "123456789.000", "+123456789.000", "1.235e+08", "1.235e+08", "+1.235e+08", "1.2346e+08", "+1.2346e+08", "1.2346e+08", "123456789.0000", "123456789.0000", "+123456789.0000", "1.2346e+08", "1.2346e+08", "+1.2346e+08", "1.23457e+08", "+1.23457e+08", "1.23457e+08", "123456789.00000", "123456789.00000", "+123456789.00000", "1.23457e+08", "1.23457e+08", "+1.23457e+08", "1.234568e+08", "+1.234568e+08", "1.234568e+08", "123456789.000000", "123456789.000000", "+123456789.000000", "1.234568e+08", "1.234568e+08", "+1.234568e+08", "1.2345679e+08", "+1.2345679e+08", "1.2345679e+08", "123456789.0000000", "123456789.0000000", "+123456789.0000000", "1.2345679e+08", "1.2345679e+08", "+1.2345679e+08", "1.23456789e+08", "+1.23456789e+08", "1.23456789e+08", "123456789.00000000", "123456789.00000000", "+123456789.00000000", "123456789", "123456789.", "+123456789", "1.234567890e+08", "+1.234567890e+08", "1.234567890e+08", "123456789.000000000", "123456789.000000000", "+123456789.000000000", "123456789", "123456789.0", "+123456789", "1.2345678900e+08", "+1.2345678900e+08", "1.2345678900e+08", "123456789.0000000000", "123456789.0000000000", "+123456789.0000000000", "123456789", "123456789.00", "+123456789", "1.23456789000e+08", "+1.23456789000e+08", "1.23456789000e+08", "123456789.00000000000", "123456789.00000000000", "+123456789.00000000000", "123456789", "123456789.000", "+123456789", "1.234567890000e+08", "+1.234567890000e+08", "1.234567890000e+08", "123456789.000000000000", "123456789.000000000000", "+123456789.000000000000", "123456789", "123456789.0000", "+123456789", "1.2345678900000e+08", "+1.2345678900000e+08", "1.2345678900000e+08", "123456789.0000000000000", "123456789.0000000000000", "+123456789.0000000000000", }},
+ {{ "-1e+08", "-1.e+08", "-1e+08", "-1.2e+08", "-1.2e+08", "-1.2e+08", "-123456789.0", "-123456789.0", "-123456789.0", "-1.2e+08", "-1.2e+08", "-1.2e+08", "-1.23e+08", "-1.23e+08", "-1.23e+08", "-123456789.00", "-123456789.00", "-123456789.00", "-1.23e+08", "-1.23e+08", "-1.23e+08", "-1.235e+08", "-1.235e+08", "-1.235e+08", "-123456789.000", "-123456789.000", "-123456789.000", "-1.235e+08", "-1.235e+08", "-1.235e+08", "-1.2346e+08", "-1.2346e+08", "-1.2346e+08", "-123456789.0000", "-123456789.0000", "-123456789.0000", "-1.2346e+08", "-1.2346e+08", "-1.2346e+08", "-1.23457e+08", "-1.23457e+08", "-1.23457e+08", "-123456789.00000", "-123456789.00000", "-123456789.00000", "-1.23457e+08", "-1.23457e+08", "-1.23457e+08", "-1.234568e+08", "-1.234568e+08", "-1.234568e+08", "-123456789.000000", "-123456789.000000", "-123456789.000000", "-1.234568e+08", "-1.234568e+08", "-1.234568e+08", "-1.2345679e+08", "-1.2345679e+08", "-1.2345679e+08", "-123456789.0000000", "-123456789.0000000", "-123456789.0000000", "-1.2345679e+08", "-1.2345679e+08", "-1.2345679e+08", "-1.23456789e+08", "-1.23456789e+08", "-1.23456789e+08", "-123456789.00000000", "-123456789.00000000", "-123456789.00000000", "-123456789", "-123456789.", "-123456789", "-1.234567890e+08", "-1.234567890e+08", "-1.234567890e+08", "-123456789.000000000", "-123456789.000000000", "-123456789.000000000", "-123456789", "-123456789.0", "-123456789", "-1.2345678900e+08", "-1.2345678900e+08", "-1.2345678900e+08", "-123456789.0000000000", "-123456789.0000000000", "-123456789.0000000000", "-123456789", "-123456789.00", "-123456789", "-1.23456789000e+08", "-1.23456789000e+08", "-1.23456789000e+08", "-123456789.00000000000", "-123456789.00000000000", "-123456789.00000000000", "-123456789", "-123456789.000", "-123456789", "-1.234567890000e+08", "-1.234567890000e+08", "-1.234567890000e+08", "-123456789.000000000000", "-123456789.000000000000", "-123456789.000000000000", "-123456789", "-123456789.0000", "-123456789", "-1.2345678900000e+08", "-1.2345678900000e+08", "-1.2345678900000e+08", "-123456789.0000000000000", "-123456789.0000000000000", "-123456789.0000000000000", }},
+ {{ "2e+07", "2.e+07", "+2e+07", "1.5e+07", "+1.5e+07", "1.5e+07", "15432098.6", "15432098.6", "+15432098.6", "1.5e+07", "1.5e+07", "+1.5e+07", "1.54e+07", "+1.54e+07", "1.54e+07", "15432098.62", "15432098.62", "+15432098.62", "1.54e+07", "1.54e+07", "+1.54e+07", "1.543e+07", "+1.543e+07", "1.543e+07", "15432098.625", "15432098.625", "+15432098.625", "1.543e+07", "1.543e+07", "+1.543e+07", "1.5432e+07", "+1.5432e+07", "1.5432e+07", "15432098.6250", "15432098.6250", "+15432098.6250", "1.5432e+07", "1.5432e+07", "+1.5432e+07", "1.54321e+07", "+1.54321e+07", "1.54321e+07", "15432098.62500", "15432098.62500", "+15432098.62500", "1.54321e+07", "1.54321e+07", "+1.54321e+07", "1.543210e+07", "+1.543210e+07", "1.543210e+07", "15432098.625000", "15432098.625000", "+15432098.625000", "1.54321e+07", "1.543210e+07", "+1.54321e+07", "1.5432099e+07", "+1.5432099e+07", "1.5432099e+07", "15432098.6250000", "15432098.6250000", "+15432098.6250000", "15432099", "15432099.", "+15432099", "1.54320986e+07", "+1.54320986e+07", "1.54320986e+07", "15432098.62500000", "15432098.62500000", "+15432098.62500000", "15432098.6", "15432098.6", "+15432098.6", "1.543209862e+07", "+1.543209862e+07", "1.543209862e+07", "15432098.625000000", "15432098.625000000", "+15432098.625000000", "15432098.62", "15432098.62", "+15432098.62", "1.5432098625e+07", "+1.5432098625e+07", "1.5432098625e+07", "15432098.6250000000", "15432098.6250000000", "+15432098.6250000000", "15432098.625", "15432098.625", "+15432098.625", "1.54320986250e+07", "+1.54320986250e+07", "1.54320986250e+07", "15432098.62500000000", "15432098.62500000000", "+15432098.62500000000", "15432098.625", "15432098.6250", "+15432098.625", "1.543209862500e+07", "+1.543209862500e+07", "1.543209862500e+07", "15432098.625000000000", "15432098.625000000000", "+15432098.625000000000", "15432098.625", "15432098.62500", "+15432098.625", "1.5432098625000e+07", "+1.5432098625000e+07", "1.5432098625000e+07", "15432098.6250000000000", "15432098.6250000000000", "+15432098.6250000000000", }},
+ {{ "-2e+07", "-2.e+07", "-2e+07", "-1.5e+07", "-1.5e+07", "-1.5e+07", "-15432098.6", "-15432098.6", "-15432098.6", "-1.5e+07", "-1.5e+07", "-1.5e+07", "-1.54e+07", "-1.54e+07", "-1.54e+07", "-15432098.62", "-15432098.62", "-15432098.62", "-1.54e+07", "-1.54e+07", "-1.54e+07", "-1.543e+07", "-1.543e+07", "-1.543e+07", "-15432098.625", "-15432098.625", "-15432098.625", "-1.543e+07", "-1.543e+07", "-1.543e+07", "-1.5432e+07", "-1.5432e+07", "-1.5432e+07", "-15432098.6250", "-15432098.6250", "-15432098.6250", "-1.5432e+07", "-1.5432e+07", "-1.5432e+07", "-1.54321e+07", "-1.54321e+07", "-1.54321e+07", "-15432098.62500", "-15432098.62500", "-15432098.62500", "-1.54321e+07", "-1.54321e+07", "-1.54321e+07", "-1.543210e+07", "-1.543210e+07", "-1.543210e+07", "-15432098.625000", "-15432098.625000", "-15432098.625000", "-1.54321e+07", "-1.543210e+07", "-1.54321e+07", "-1.5432099e+07", "-1.5432099e+07", "-1.5432099e+07", "-15432098.6250000", "-15432098.6250000", "-15432098.6250000", "-15432099", "-15432099.", "-15432099", "-1.54320986e+07", "-1.54320986e+07", "-1.54320986e+07", "-15432098.62500000", "-15432098.62500000", "-15432098.62500000", "-15432098.6", "-15432098.6", "-15432098.6", "-1.543209862e+07", "-1.543209862e+07", "-1.543209862e+07", "-15432098.625000000", "-15432098.625000000", "-15432098.625000000", "-15432098.62", "-15432098.62", "-15432098.62", "-1.5432098625e+07", "-1.5432098625e+07", "-1.5432098625e+07", "-15432098.6250000000", "-15432098.6250000000", "-15432098.6250000000", "-15432098.625", "-15432098.625", "-15432098.625", "-1.54320986250e+07", "-1.54320986250e+07", "-1.54320986250e+07", "-15432098.62500000000", "-15432098.62500000000", "-15432098.62500000000", "-15432098.625", "-15432098.6250", "-15432098.625", "-1.543209862500e+07", "-1.543209862500e+07", "-1.543209862500e+07", "-15432098.625000000000", "-15432098.625000000000", "-15432098.625000000000", "-15432098.625", "-15432098.62500", "-15432098.625", "-1.5432098625000e+07", "-1.5432098625000e+07", "-1.5432098625000e+07", "-15432098.6250000000000", "-15432098.6250000000000", "-15432098.6250000000000", }},
+ {{ "2e+06", "2.e+06", "+2e+06", "1.9e+06", "+1.9e+06", "1.9e+06", "1929012.3", "1929012.3", "+1929012.3", "1.9e+06", "1.9e+06", "+1.9e+06", "1.93e+06", "+1.93e+06", "1.93e+06", "1929012.33", "1929012.33", "+1929012.33", "1.93e+06", "1.93e+06", "+1.93e+06", "1.929e+06", "+1.929e+06", "1.929e+06", "1929012.328", "1929012.328", "+1929012.328", "1.929e+06", "1.929e+06", "+1.929e+06", "1.9290e+06", "+1.9290e+06", "1.9290e+06", "1929012.3281", "1929012.3281", "+1929012.3281", "1.929e+06", "1.9290e+06", "+1.929e+06", "1.92901e+06", "+1.92901e+06", "1.92901e+06", "1929012.32812", "1929012.32812", "+1929012.32812", "1.92901e+06", "1.92901e+06", "+1.92901e+06", "1.929012e+06", "+1.929012e+06", "1.929012e+06", "1929012.328125", "1929012.328125", "+1929012.328125", "1929012", "1929012.", "+1929012", "1.9290123e+06", "+1.9290123e+06", "1.9290123e+06", "1929012.3281250", "1929012.3281250", "+1929012.3281250", "1929012.3", "1929012.3", "+1929012.3", "1.92901233e+06", "+1.92901233e+06", "1.92901233e+06", "1929012.32812500", "1929012.32812500", "+1929012.32812500", "1929012.33", "1929012.33", "+1929012.33", "1.929012328e+06", "+1.929012328e+06", "1.929012328e+06", "1929012.328125000", "1929012.328125000", "+1929012.328125000", "1929012.328", "1929012.328", "+1929012.328", "1.9290123281e+06", "+1.9290123281e+06", "1.9290123281e+06", "1929012.3281250000", "1929012.3281250000", "+1929012.3281250000", "1929012.3281", "1929012.3281", "+1929012.3281", "1.92901232812e+06", "+1.92901232812e+06", "1.92901232812e+06", "1929012.32812500000", "1929012.32812500000", "+1929012.32812500000", "1929012.32812", "1929012.32812", "+1929012.32812", "1.929012328125e+06", "+1.929012328125e+06", "1.929012328125e+06", "1929012.328125000000", "1929012.328125000000", "+1929012.328125000000", "1929012.328125", "1929012.328125", "+1929012.328125", "1.9290123281250e+06", "+1.9290123281250e+06", "1.9290123281250e+06", "1929012.3281250000000", "1929012.3281250000000", "+1929012.3281250000000", }},
+ {{ "-2e+06", "-2.e+06", "-2e+06", "-1.9e+06", "-1.9e+06", "-1.9e+06", "-1929012.3", "-1929012.3", "-1929012.3", "-1.9e+06", "-1.9e+06", "-1.9e+06", "-1.93e+06", "-1.93e+06", "-1.93e+06", "-1929012.33", "-1929012.33", "-1929012.33", "-1.93e+06", "-1.93e+06", "-1.93e+06", "-1.929e+06", "-1.929e+06", "-1.929e+06", "-1929012.328", "-1929012.328", "-1929012.328", "-1.929e+06", "-1.929e+06", "-1.929e+06", "-1.9290e+06", "-1.9290e+06", "-1.9290e+06", "-1929012.3281", "-1929012.3281", "-1929012.3281", "-1.929e+06", "-1.9290e+06", "-1.929e+06", "-1.92901e+06", "-1.92901e+06", "-1.92901e+06", "-1929012.32812", "-1929012.32812", "-1929012.32812", "-1.92901e+06", "-1.92901e+06", "-1.92901e+06", "-1.929012e+06", "-1.929012e+06", "-1.929012e+06", "-1929012.328125", "-1929012.328125", "-1929012.328125", "-1929012", "-1929012.", "-1929012", "-1.9290123e+06", "-1.9290123e+06", "-1.9290123e+06", "-1929012.3281250", "-1929012.3281250", "-1929012.3281250", "-1929012.3", "-1929012.3", "-1929012.3", "-1.92901233e+06", "-1.92901233e+06", "-1.92901233e+06", "-1929012.32812500", "-1929012.32812500", "-1929012.32812500", "-1929012.33", "-1929012.33", "-1929012.33", "-1.929012328e+06", "-1.929012328e+06", "-1.929012328e+06", "-1929012.328125000", "-1929012.328125000", "-1929012.328125000", "-1929012.328", "-1929012.328", "-1929012.328", "-1.9290123281e+06", "-1.9290123281e+06", "-1.9290123281e+06", "-1929012.3281250000", "-1929012.3281250000", "-1929012.3281250000", "-1929012.3281", "-1929012.3281", "-1929012.3281", "-1.92901232812e+06", "-1.92901232812e+06", "-1.92901232812e+06", "-1929012.32812500000", "-1929012.32812500000", "-1929012.32812500000", "-1929012.32812", "-1929012.32812", "-1929012.32812", "-1.929012328125e+06", "-1.929012328125e+06", "-1.929012328125e+06", "-1929012.328125000000", "-1929012.328125000000", "-1929012.328125000000", "-1929012.328125", "-1929012.328125", "-1929012.328125", "-1.9290123281250e+06", "-1.9290123281250e+06", "-1.9290123281250e+06", "-1929012.3281250000000", "-1929012.3281250000000", "-1929012.3281250000000", }},
+ {{ "2e+05", "2.e+05", "+2e+05", "2.4e+05", "+2.4e+05", "2.4e+05", "241126.5", "241126.5", "+241126.5", "2.4e+05", "2.4e+05", "+2.4e+05", "2.41e+05", "+2.41e+05", "2.41e+05", "241126.54", "241126.54", "+241126.54", "2.41e+05", "2.41e+05", "+2.41e+05", "2.411e+05", "+2.411e+05", "2.411e+05", "241126.541", "241126.541", "+241126.541", "2.411e+05", "2.411e+05", "+2.411e+05", "2.4113e+05", "+2.4113e+05", "2.4113e+05", "241126.5410", "241126.5410", "+241126.5410", "2.4113e+05", "2.4113e+05", "+2.4113e+05", "2.41127e+05", "+2.41127e+05", "2.41127e+05", "241126.54102", "241126.54102", "+241126.54102", "241127", "241127.", "+241127", "2.411265e+05", "+2.411265e+05", "2.411265e+05", "241126.541016", "241126.541016", "+241126.541016", "241126.5", "241126.5", "+241126.5", "2.4112654e+05", "+2.4112654e+05", "2.4112654e+05", "241126.5410156", "241126.5410156", "+241126.5410156", "241126.54", "241126.54", "+241126.54", "2.41126541e+05", "+2.41126541e+05", "2.41126541e+05", "241126.54101562", "241126.54101562", "+241126.54101562", "241126.541", "241126.541", "+241126.541", "2.411265410e+05", "+2.411265410e+05", "2.411265410e+05", "241126.541015625", "241126.541015625", "+241126.541015625", "241126.541", "241126.5410", "+241126.541", "2.4112654102e+05", "+2.4112654102e+05", "2.4112654102e+05", "241126.5410156250", "241126.5410156250", "+241126.5410156250", "241126.54102", "241126.54102", "+241126.54102", "2.41126541016e+05", "+2.41126541016e+05", "2.41126541016e+05", "241126.54101562500", "241126.54101562500", "+241126.54101562500", "241126.541016", "241126.541016", "+241126.541016", "2.411265410156e+05", "+2.411265410156e+05", "2.411265410156e+05", "241126.541015625000", "241126.541015625000", "+241126.541015625000", "241126.5410156", "241126.5410156", "+241126.5410156", "2.4112654101562e+05", "+2.4112654101562e+05", "2.4112654101562e+05", "241126.5410156250000", "241126.5410156250000", "+241126.5410156250000", }},
+ {{ "-2e+05", "-2.e+05", "-2e+05", "-2.4e+05", "-2.4e+05", "-2.4e+05", "-241126.5", "-241126.5", "-241126.5", "-2.4e+05", "-2.4e+05", "-2.4e+05", "-2.41e+05", "-2.41e+05", "-2.41e+05", "-241126.54", "-241126.54", "-241126.54", "-2.41e+05", "-2.41e+05", "-2.41e+05", "-2.411e+05", "-2.411e+05", "-2.411e+05", "-241126.541", "-241126.541", "-241126.541", "-2.411e+05", "-2.411e+05", "-2.411e+05", "-2.4113e+05", "-2.4113e+05", "-2.4113e+05", "-241126.5410", "-241126.5410", "-241126.5410", "-2.4113e+05", "-2.4113e+05", "-2.4113e+05", "-2.41127e+05", "-2.41127e+05", "-2.41127e+05", "-241126.54102", "-241126.54102", "-241126.54102", "-241127", "-241127.", "-241127", "-2.411265e+05", "-2.411265e+05", "-2.411265e+05", "-241126.541016", "-241126.541016", "-241126.541016", "-241126.5", "-241126.5", "-241126.5", "-2.4112654e+05", "-2.4112654e+05", "-2.4112654e+05", "-241126.5410156", "-241126.5410156", "-241126.5410156", "-241126.54", "-241126.54", "-241126.54", "-2.41126541e+05", "-2.41126541e+05", "-2.41126541e+05", "-241126.54101562", "-241126.54101562", "-241126.54101562", "-241126.541", "-241126.541", "-241126.541", "-2.411265410e+05", "-2.411265410e+05", "-2.411265410e+05", "-241126.541015625", "-241126.541015625", "-241126.541015625", "-241126.541", "-241126.5410", "-241126.541", "-2.4112654102e+05", "-2.4112654102e+05", "-2.4112654102e+05", "-241126.5410156250", "-241126.5410156250", "-241126.5410156250", "-241126.54102", "-241126.54102", "-241126.54102", "-2.41126541016e+05", "-2.41126541016e+05", "-2.41126541016e+05", "-241126.54101562500", "-241126.54101562500", "-241126.54101562500", "-241126.541016", "-241126.541016", "-241126.541016", "-2.411265410156e+05", "-2.411265410156e+05", "-2.411265410156e+05", "-241126.541015625000", "-241126.541015625000", "-241126.541015625000", "-241126.5410156", "-241126.5410156", "-241126.5410156", "-2.4112654101562e+05", "-2.4112654101562e+05", "-2.4112654101562e+05", "-241126.5410156250000", "-241126.5410156250000", "-241126.5410156250000", }},
+ {{ "3e+04", "3.e+04", "+3e+04", "3.0e+04", "+3.0e+04", "3.0e+04", "30140.8", "30140.8", "+30140.8", "3e+04", "3.0e+04", "+3e+04", "3.01e+04", "+3.01e+04", "3.01e+04", "30140.82", "30140.82", "+30140.82", "3.01e+04", "3.01e+04", "+3.01e+04", "3.014e+04", "+3.014e+04", "3.014e+04", "30140.818", "30140.818", "+30140.818", "3.014e+04", "3.014e+04", "+3.014e+04", "3.0141e+04", "+3.0141e+04", "3.0141e+04", "30140.8176", "30140.8176", "+30140.8176", "30141", "30141.", "+30141", "3.01408e+04", "+3.01408e+04", "3.01408e+04", "30140.81763", "30140.81763", "+30140.81763", "30140.8", "30140.8", "+30140.8", "3.014082e+04", "+3.014082e+04", "3.014082e+04", "30140.817627", "30140.817627", "+30140.817627", "30140.82", "30140.82", "+30140.82", "3.0140818e+04", "+3.0140818e+04", "3.0140818e+04", "30140.8176270", "30140.8176270", "+30140.8176270", "30140.818", "30140.818", "+30140.818", "3.01408176e+04", "+3.01408176e+04", "3.01408176e+04", "30140.81762695", "30140.81762695", "+30140.81762695", "30140.8176", "30140.8176", "+30140.8176", "3.014081763e+04", "+3.014081763e+04", "3.014081763e+04", "30140.817626953", "30140.817626953", "+30140.817626953", "30140.81763", "30140.81763", "+30140.81763", "3.0140817627e+04", "+3.0140817627e+04", "3.0140817627e+04", "30140.8176269531", "30140.8176269531", "+30140.8176269531", "30140.817627", "30140.817627", "+30140.817627", "3.01408176270e+04", "+3.01408176270e+04", "3.01408176270e+04", "30140.81762695312", "30140.81762695312", "+30140.81762695312", "30140.817627", "30140.8176270", "+30140.817627", "3.014081762695e+04", "+3.014081762695e+04", "3.014081762695e+04", "30140.817626953125", "30140.817626953125", "+30140.817626953125", "30140.81762695", "30140.81762695", "+30140.81762695", "3.0140817626953e+04", "+3.0140817626953e+04", "3.0140817626953e+04", "30140.8176269531250", "30140.8176269531250", "+30140.8176269531250", }},
+ {{ "-3e+04", "-3.e+04", "-3e+04", "-3.0e+04", "-3.0e+04", "-3.0e+04", "-30140.8", "-30140.8", "-30140.8", "-3e+04", "-3.0e+04", "-3e+04", "-3.01e+04", "-3.01e+04", "-3.01e+04", "-30140.82", "-30140.82", "-30140.82", "-3.01e+04", "-3.01e+04", "-3.01e+04", "-3.014e+04", "-3.014e+04", "-3.014e+04", "-30140.818", "-30140.818", "-30140.818", "-3.014e+04", "-3.014e+04", "-3.014e+04", "-3.0141e+04", "-3.0141e+04", "-3.0141e+04", "-30140.8176", "-30140.8176", "-30140.8176", "-30141", "-30141.", "-30141", "-3.01408e+04", "-3.01408e+04", "-3.01408e+04", "-30140.81763", "-30140.81763", "-30140.81763", "-30140.8", "-30140.8", "-30140.8", "-3.014082e+04", "-3.014082e+04", "-3.014082e+04", "-30140.817627", "-30140.817627", "-30140.817627", "-30140.82", "-30140.82", "-30140.82", "-3.0140818e+04", "-3.0140818e+04", "-3.0140818e+04", "-30140.8176270", "-30140.8176270", "-30140.8176270", "-30140.818", "-30140.818", "-30140.818", "-3.01408176e+04", "-3.01408176e+04", "-3.01408176e+04", "-30140.81762695", "-30140.81762695", "-30140.81762695", "-30140.8176", "-30140.8176", "-30140.8176", "-3.014081763e+04", "-3.014081763e+04", "-3.014081763e+04", "-30140.817626953", "-30140.817626953", "-30140.817626953", "-30140.81763", "-30140.81763", "-30140.81763", "-3.0140817627e+04", "-3.0140817627e+04", "-3.0140817627e+04", "-30140.8176269531", "-30140.8176269531", "-30140.8176269531", "-30140.817627", "-30140.817627", "-30140.817627", "-3.01408176270e+04", "-3.01408176270e+04", "-3.01408176270e+04", "-30140.81762695312", "-30140.81762695312", "-30140.81762695312", "-30140.817627", "-30140.8176270", "-30140.817627", "-3.014081762695e+04", "-3.014081762695e+04", "-3.014081762695e+04", "-30140.817626953125", "-30140.817626953125", "-30140.817626953125", "-30140.81762695", "-30140.81762695", "-30140.81762695", "-3.0140817626953e+04", "-3.0140817626953e+04", "-3.0140817626953e+04", "-30140.8176269531250", "-30140.8176269531250", "-30140.8176269531250", }},
+ {{ "4e+03", "4.e+03", "+4e+03", "3.8e+03", "+3.8e+03", "3.8e+03", "3767.6", "3767.6", "+3767.6", "3.8e+03", "3.8e+03", "+3.8e+03", "3.77e+03", "+3.77e+03", "3.77e+03", "3767.60", "3767.60", "+3767.60", "3.77e+03", "3.77e+03", "+3.77e+03", "3.768e+03", "+3.768e+03", "3.768e+03", "3767.602", "3767.602", "+3767.602", "3768", "3768.", "+3768", "3.7676e+03", "+3.7676e+03", "3.7676e+03", "3767.6022", "3767.6022", "+3767.6022", "3767.6", "3767.6", "+3767.6", "3.76760e+03", "+3.76760e+03", "3.76760e+03", "3767.60220", "3767.60220", "+3767.60220", "3767.6", "3767.60", "+3767.6", "3.767602e+03", "+3.767602e+03", "3.767602e+03", "3767.602203", "3767.602203", "+3767.602203", "3767.602", "3767.602", "+3767.602", "3.7676022e+03", "+3.7676022e+03", "3.7676022e+03", "3767.6022034", "3767.6022034", "+3767.6022034", "3767.6022", "3767.6022", "+3767.6022", "3.76760220e+03", "+3.76760220e+03", "3.76760220e+03", "3767.60220337", "3767.60220337", "+3767.60220337", "3767.6022", "3767.60220", "+3767.6022", "3.767602203e+03", "+3.767602203e+03", "3.767602203e+03", "3767.602203369", "3767.602203369", "+3767.602203369", "3767.602203", "3767.602203", "+3767.602203", "3.7676022034e+03", "+3.7676022034e+03", "3.7676022034e+03", "3767.6022033691", "3767.6022033691", "+3767.6022033691", "3767.6022034", "3767.6022034", "+3767.6022034", "3.76760220337e+03", "+3.76760220337e+03", "3.76760220337e+03", "3767.60220336914", "3767.60220336914", "+3767.60220336914", "3767.60220337", "3767.60220337", "+3767.60220337", "3.767602203369e+03", "+3.767602203369e+03", "3.767602203369e+03", "3767.602203369141", "3767.602203369141", "+3767.602203369141", "3767.602203369", "3767.602203369", "+3767.602203369", "3.7676022033691e+03", "+3.7676022033691e+03", "3.7676022033691e+03", "3767.6022033691406", "3767.6022033691406", "+3767.6022033691406", }},
+ {{ "-4e+03", "-4.e+03", "-4e+03", "-3.8e+03", "-3.8e+03", "-3.8e+03", "-3767.6", "-3767.6", "-3767.6", "-3.8e+03", "-3.8e+03", "-3.8e+03", "-3.77e+03", "-3.77e+03", "-3.77e+03", "-3767.60", "-3767.60", "-3767.60", "-3.77e+03", "-3.77e+03", "-3.77e+03", "-3.768e+03", "-3.768e+03", "-3.768e+03", "-3767.602", "-3767.602", "-3767.602", "-3768", "-3768.", "-3768", "-3.7676e+03", "-3.7676e+03", "-3.7676e+03", "-3767.6022", "-3767.6022", "-3767.6022", "-3767.6", "-3767.6", "-3767.6", "-3.76760e+03", "-3.76760e+03", "-3.76760e+03", "-3767.60220", "-3767.60220", "-3767.60220", "-3767.6", "-3767.60", "-3767.6", "-3.767602e+03", "-3.767602e+03", "-3.767602e+03", "-3767.602203", "-3767.602203", "-3767.602203", "-3767.602", "-3767.602", "-3767.602", "-3.7676022e+03", "-3.7676022e+03", "-3.7676022e+03", "-3767.6022034", "-3767.6022034", "-3767.6022034", "-3767.6022", "-3767.6022", "-3767.6022", "-3.76760220e+03", "-3.76760220e+03", "-3.76760220e+03", "-3767.60220337", "-3767.60220337", "-3767.60220337", "-3767.6022", "-3767.60220", "-3767.6022", "-3.767602203e+03", "-3.767602203e+03", "-3.767602203e+03", "-3767.602203369", "-3767.602203369", "-3767.602203369", "-3767.602203", "-3767.602203", "-3767.602203", "-3.7676022034e+03", "-3.7676022034e+03", "-3.7676022034e+03", "-3767.6022033691", "-3767.6022033691", "-3767.6022033691", "-3767.6022034", "-3767.6022034", "-3767.6022034", "-3.76760220337e+03", "-3.76760220337e+03", "-3.76760220337e+03", "-3767.60220336914", "-3767.60220336914", "-3767.60220336914", "-3767.60220337", "-3767.60220337", "-3767.60220337", "-3.767602203369e+03", "-3.767602203369e+03", "-3.767602203369e+03", "-3767.602203369141", "-3767.602203369141", "-3767.602203369141", "-3767.602203369", "-3767.602203369", "-3767.602203369", "-3.7676022033691e+03", "-3.7676022033691e+03", "-3.7676022033691e+03", "-3767.6022033691406", "-3767.6022033691406", "-3767.6022033691406", }},
+ {{ "5e+02", "5.e+02", "+5e+02", "4.7e+02", "+4.7e+02", "4.7e+02", "471.0", "471.0", "+471.0", "4.7e+02", "4.7e+02", "+4.7e+02", "4.71e+02", "+4.71e+02", "4.71e+02", "470.95", "470.95", "+470.95", "471", "471.", "+471", "4.710e+02", "+4.710e+02", "4.710e+02", "470.950", "470.950", "+470.950", "471", "471.0", "+471", "4.7095e+02", "+4.7095e+02", "4.7095e+02", "470.9503", "470.9503", "+470.9503", "470.95", "470.95", "+470.95", "4.70950e+02", "+4.70950e+02", "4.70950e+02", "470.95028", "470.95028", "+470.95028", "470.95", "470.950", "+470.95", "4.709503e+02", "+4.709503e+02", "4.709503e+02", "470.950275", "470.950275", "+470.950275", "470.9503", "470.9503", "+470.9503", "4.7095028e+02", "+4.7095028e+02", "4.7095028e+02", "470.9502754", "470.9502754", "+470.9502754", "470.95028", "470.95028", "+470.95028", "4.70950275e+02", "+4.70950275e+02", "4.70950275e+02", "470.95027542", "470.95027542", "+470.95027542", "470.950275", "470.950275", "+470.950275", "4.709502754e+02", "+4.709502754e+02", "4.709502754e+02", "470.950275421", "470.950275421", "+470.950275421", "470.9502754", "470.9502754", "+470.9502754", "4.7095027542e+02", "+4.7095027542e+02", "4.7095027542e+02", "470.9502754211", "470.9502754211", "+470.9502754211", "470.95027542", "470.95027542", "+470.95027542", "4.70950275421e+02", "+4.70950275421e+02", "4.70950275421e+02", "470.95027542114", "470.95027542114", "+470.95027542114", "470.950275421", "470.950275421", "+470.950275421", "4.709502754211e+02", "+4.709502754211e+02", "4.709502754211e+02", "470.950275421143", "470.950275421143", "+470.950275421143", "470.9502754211", "470.9502754211", "+470.9502754211", "4.7095027542114e+02", "+4.7095027542114e+02", "4.7095027542114e+02", "470.9502754211426", "470.9502754211426", "+470.9502754211426", }},
+ {{ "-5e+02", "-5.e+02", "-5e+02", "-4.7e+02", "-4.7e+02", "-4.7e+02", "-471.0", "-471.0", "-471.0", "-4.7e+02", "-4.7e+02", "-4.7e+02", "-4.71e+02", "-4.71e+02", "-4.71e+02", "-470.95", "-470.95", "-470.95", "-471", "-471.", "-471", "-4.710e+02", "-4.710e+02", "-4.710e+02", "-470.950", "-470.950", "-470.950", "-471", "-471.0", "-471", "-4.7095e+02", "-4.7095e+02", "-4.7095e+02", "-470.9503", "-470.9503", "-470.9503", "-470.95", "-470.95", "-470.95", "-4.70950e+02", "-4.70950e+02", "-4.70950e+02", "-470.95028", "-470.95028", "-470.95028", "-470.95", "-470.950", "-470.95", "-4.709503e+02", "-4.709503e+02", "-4.709503e+02", "-470.950275", "-470.950275", "-470.950275", "-470.9503", "-470.9503", "-470.9503", "-4.7095028e+02", "-4.7095028e+02", "-4.7095028e+02", "-470.9502754", "-470.9502754", "-470.9502754", "-470.95028", "-470.95028", "-470.95028", "-4.70950275e+02", "-4.70950275e+02", "-4.70950275e+02", "-470.95027542", "-470.95027542", "-470.95027542", "-470.950275", "-470.950275", "-470.950275", "-4.709502754e+02", "-4.709502754e+02", "-4.709502754e+02", "-470.950275421", "-470.950275421", "-470.950275421", "-470.9502754", "-470.9502754", "-470.9502754", "-4.7095027542e+02", "-4.7095027542e+02", "-4.7095027542e+02", "-470.9502754211", "-470.9502754211", "-470.9502754211", "-470.95027542", "-470.95027542", "-470.95027542", "-4.70950275421e+02", "-4.70950275421e+02", "-4.70950275421e+02", "-470.95027542114", "-470.95027542114", "-470.95027542114", "-470.950275421", "-470.950275421", "-470.950275421", "-4.709502754211e+02", "-4.709502754211e+02", "-4.709502754211e+02", "-470.950275421143", "-470.950275421143", "-470.950275421143", "-470.9502754211", "-470.9502754211", "-470.9502754211", "-4.7095027542114e+02", "-4.7095027542114e+02", "-4.7095027542114e+02", "-470.9502754211426", "-470.9502754211426", "-470.9502754211426", }},
+ {{ "6e+01", "6.e+01", "+6e+01", "5.9e+01", "+5.9e+01", "5.9e+01", "58.9", "58.9", "+58.9", "59", "59.", "+59", "5.89e+01", "+5.89e+01", "5.89e+01", "58.87", "58.87", "+58.87", "58.9", "58.9", "+58.9", "5.887e+01", "+5.887e+01", "5.887e+01", "58.869", "58.869", "+58.869", "58.87", "58.87", "+58.87", "5.8869e+01", "+5.8869e+01", "5.8869e+01", "58.8688", "58.8688", "+58.8688", "58.869", "58.869", "+58.869", "5.88688e+01", "+5.88688e+01", "5.88688e+01", "58.86878", "58.86878", "+58.86878", "58.8688", "58.8688", "+58.8688", "5.886878e+01", "+5.886878e+01", "5.886878e+01", "58.868784", "58.868784", "+58.868784", "58.86878", "58.86878", "+58.86878", "5.8868784e+01", "+5.8868784e+01", "5.8868784e+01", "58.8687844", "58.8687844", "+58.8687844", "58.868784", "58.868784", "+58.868784", "5.88687844e+01", "+5.88687844e+01", "5.88687844e+01", "58.86878443", "58.86878443", "+58.86878443", "58.8687844", "58.8687844", "+58.8687844", "5.886878443e+01", "+5.886878443e+01", "5.886878443e+01", "58.868784428", "58.868784428", "+58.868784428", "58.86878443", "58.86878443", "+58.86878443", "5.8868784428e+01", "+5.8868784428e+01", "5.8868784428e+01", "58.8687844276", "58.8687844276", "+58.8687844276", "58.868784428", "58.868784428", "+58.868784428", "5.88687844276e+01", "+5.88687844276e+01", "5.88687844276e+01", "58.86878442764", "58.86878442764", "+58.86878442764", "58.8687844276", "58.8687844276", "+58.8687844276", "5.886878442764e+01", "+5.886878442764e+01", "5.886878442764e+01", "58.868784427643", "58.868784427643", "+58.868784427643", "58.86878442764", "58.86878442764", "+58.86878442764", "5.8868784427643e+01", "+5.8868784427643e+01", "5.8868784427643e+01", "58.8687844276428", "58.8687844276428", "+58.8687844276428", }},
+ {{ "-6e+01", "-6.e+01", "-6e+01", "-5.9e+01", "-5.9e+01", "-5.9e+01", "-58.9", "-58.9", "-58.9", "-59", "-59.", "-59", "-5.89e+01", "-5.89e+01", "-5.89e+01", "-58.87", "-58.87", "-58.87", "-58.9", "-58.9", "-58.9", "-5.887e+01", "-5.887e+01", "-5.887e+01", "-58.869", "-58.869", "-58.869", "-58.87", "-58.87", "-58.87", "-5.8869e+01", "-5.8869e+01", "-5.8869e+01", "-58.8688", "-58.8688", "-58.8688", "-58.869", "-58.869", "-58.869", "-5.88688e+01", "-5.88688e+01", "-5.88688e+01", "-58.86878", "-58.86878", "-58.86878", "-58.8688", "-58.8688", "-58.8688", "-5.886878e+01", "-5.886878e+01", "-5.886878e+01", "-58.868784", "-58.868784", "-58.868784", "-58.86878", "-58.86878", "-58.86878", "-5.8868784e+01", "-5.8868784e+01", "-5.8868784e+01", "-58.8687844", "-58.8687844", "-58.8687844", "-58.868784", "-58.868784", "-58.868784", "-5.88687844e+01", "-5.88687844e+01", "-5.88687844e+01", "-58.86878443", "-58.86878443", "-58.86878443", "-58.8687844", "-58.8687844", "-58.8687844", "-5.886878443e+01", "-5.886878443e+01", "-5.886878443e+01", "-58.868784428", "-58.868784428", "-58.868784428", "-58.86878443", "-58.86878443", "-58.86878443", "-5.8868784428e+01", "-5.8868784428e+01", "-5.8868784428e+01", "-58.8687844276", "-58.8687844276", "-58.8687844276", "-58.868784428", "-58.868784428", "-58.868784428", "-5.88687844276e+01", "-5.88687844276e+01", "-5.88687844276e+01", "-58.86878442764", "-58.86878442764", "-58.86878442764", "-58.8687844276", "-58.8687844276", "-58.8687844276", "-5.886878442764e+01", "-5.886878442764e+01", "-5.886878442764e+01", "-58.868784427643", "-58.868784427643", "-58.868784427643", "-58.86878442764", "-58.86878442764", "-58.86878442764", "-5.8868784427643e+01", "-5.8868784427643e+01", "-5.8868784427643e+01", "-58.8687844276428", "-58.8687844276428", "-58.8687844276428", }},
+ {{ "7", "7.", "+7", "7.4e+00", "+7.4e+00", "7.4e+00", "7.4", "7.4", "+7.4", "7.4", "7.4", "+7.4", "7.36e+00", "+7.36e+00", "7.36e+00", "7.36", "7.36", "+7.36", "7.36", "7.36", "+7.36", "7.359e+00", "+7.359e+00", "7.359e+00", "7.359", "7.359", "+7.359", "7.359", "7.359", "+7.359", "7.3586e+00", "+7.3586e+00", "7.3586e+00", "7.3586", "7.3586", "+7.3586", "7.3586", "7.3586", "+7.3586", "7.35860e+00", "+7.35860e+00", "7.35860e+00", "7.35860", "7.35860", "+7.35860", "7.3586", "7.35860", "+7.3586", "7.358598e+00", "+7.358598e+00", "7.358598e+00", "7.358598", "7.358598", "+7.358598", "7.358598", "7.358598", "+7.358598", "7.3585981e+00", "+7.3585981e+00", "7.3585981e+00", "7.3585981", "7.3585981", "+7.3585981", "7.3585981", "7.3585981", "+7.3585981", "7.35859805e+00", "+7.35859805e+00", "7.35859805e+00", "7.35859805", "7.35859805", "+7.35859805", "7.35859805", "7.35859805", "+7.35859805", "7.358598053e+00", "+7.358598053e+00", "7.358598053e+00", "7.358598053", "7.358598053", "+7.358598053", "7.358598053", "7.358598053", "+7.358598053", "7.3585980535e+00", "+7.3585980535e+00", "7.3585980535e+00", "7.3585980535", "7.3585980535", "+7.3585980535", "7.3585980535", "7.3585980535", "+7.3585980535", "7.35859805346e+00", "+7.35859805346e+00", "7.35859805346e+00", "7.35859805346", "7.35859805346", "+7.35859805346", "7.35859805346", "7.35859805346", "+7.35859805346", "7.358598053455e+00", "+7.358598053455e+00", "7.358598053455e+00", "7.358598053455", "7.358598053455", "+7.358598053455", "7.358598053455", "7.358598053455", "+7.358598053455", "7.3585980534554e+00", "+7.3585980534554e+00", "7.3585980534554e+00", "7.3585980534554", "7.3585980534554", "+7.3585980534554", }},
+ {{ "-7", "-7.", "-7", "-7.4e+00", "-7.4e+00", "-7.4e+00", "-7.4", "-7.4", "-7.4", "-7.4", "-7.4", "-7.4", "-7.36e+00", "-7.36e+00", "-7.36e+00", "-7.36", "-7.36", "-7.36", "-7.36", "-7.36", "-7.36", "-7.359e+00", "-7.359e+00", "-7.359e+00", "-7.359", "-7.359", "-7.359", "-7.359", "-7.359", "-7.359", "-7.3586e+00", "-7.3586e+00", "-7.3586e+00", "-7.3586", "-7.3586", "-7.3586", "-7.3586", "-7.3586", "-7.3586", "-7.35860e+00", "-7.35860e+00", "-7.35860e+00", "-7.35860", "-7.35860", "-7.35860", "-7.3586", "-7.35860", "-7.3586", "-7.358598e+00", "-7.358598e+00", "-7.358598e+00", "-7.358598", "-7.358598", "-7.358598", "-7.358598", "-7.358598", "-7.358598", "-7.3585981e+00", "-7.3585981e+00", "-7.3585981e+00", "-7.3585981", "-7.3585981", "-7.3585981", "-7.3585981", "-7.3585981", "-7.3585981", "-7.35859805e+00", "-7.35859805e+00", "-7.35859805e+00", "-7.35859805", "-7.35859805", "-7.35859805", "-7.35859805", "-7.35859805", "-7.35859805", "-7.358598053e+00", "-7.358598053e+00", "-7.358598053e+00", "-7.358598053", "-7.358598053", "-7.358598053", "-7.358598053", "-7.358598053", "-7.358598053", "-7.3585980535e+00", "-7.3585980535e+00", "-7.3585980535e+00", "-7.3585980535", "-7.3585980535", "-7.3585980535", "-7.3585980535", "-7.3585980535", "-7.3585980535", "-7.35859805346e+00", "-7.35859805346e+00", "-7.35859805346e+00", "-7.35859805346", "-7.35859805346", "-7.35859805346", "-7.35859805346", "-7.35859805346", "-7.35859805346", "-7.358598053455e+00", "-7.358598053455e+00", "-7.358598053455e+00", "-7.358598053455", "-7.358598053455", "-7.358598053455", "-7.358598053455", "-7.358598053455", "-7.358598053455", "-7.3585980534554e+00", "-7.3585980534554e+00", "-7.3585980534554e+00", "-7.3585980534554", "-7.3585980534554", "-7.3585980534554", }},
+ {{ "0.9", "0.9", "+0.9", "9.2e-01", "+9.2e-01", "9.2e-01", "0.9", "0.9", "+0.9", "0.92", "0.92", "+0.92", "9.20e-01", "+9.20e-01", "9.20e-01", "0.92", "0.92", "+0.92", "0.92", "0.920", "+0.92", "9.198e-01", "+9.198e-01", "9.198e-01", "0.920", "0.920", "+0.920", "0.9198", "0.9198", "+0.9198", "9.1982e-01", "+9.1982e-01", "9.1982e-01", "0.9198", "0.9198", "+0.9198", "0.91982", "0.91982", "+0.91982", "9.19825e-01", "+9.19825e-01", "9.19825e-01", "0.91982", "0.91982", "+0.91982", "0.919825", "0.919825", "+0.919825", "9.198248e-01", "+9.198248e-01", "9.198248e-01", "0.919825", "0.919825", "+0.919825", "0.9198248", "0.9198248", "+0.9198248", "9.1982476e-01", "+9.1982476e-01", "9.1982476e-01", "0.9198248", "0.9198248", "+0.9198248", "0.91982476", "0.91982476", "+0.91982476", "9.19824757e-01", "+9.19824757e-01", "9.19824757e-01", "0.91982476", "0.91982476", "+0.91982476", "0.919824757", "0.919824757", "+0.919824757", "9.198247567e-01", "+9.198247567e-01", "9.198247567e-01", "0.919824757", "0.919824757", "+0.919824757", "0.9198247567", "0.9198247567", "+0.9198247567", "9.1982475668e-01", "+9.1982475668e-01", "9.1982475668e-01", "0.9198247567", "0.9198247567", "+0.9198247567", "0.91982475668", "0.91982475668", "+0.91982475668", "9.19824756682e-01", "+9.19824756682e-01", "9.19824756682e-01", "0.91982475668", "0.91982475668", "+0.91982475668", "0.919824756682", "0.919824756682", "+0.919824756682", "9.198247566819e-01", "+9.198247566819e-01", "9.198247566819e-01", "0.919824756682", "0.919824756682", "+0.919824756682", "0.9198247566819", "0.9198247566819", "+0.9198247566819", "9.1982475668192e-01", "+9.1982475668192e-01", "9.1982475668192e-01", "0.9198247566819", "0.9198247566819", "+0.9198247566819", }},
+ {{ "-0.9", "-0.9", "-0.9", "-9.2e-01", "-9.2e-01", "-9.2e-01", "-0.9", "-0.9", "-0.9", "-0.92", "-0.92", "-0.92", "-9.20e-01", "-9.20e-01", "-9.20e-01", "-0.92", "-0.92", "-0.92", "-0.92", "-0.920", "-0.92", "-9.198e-01", "-9.198e-01", "-9.198e-01", "-0.920", "-0.920", "-0.920", "-0.9198", "-0.9198", "-0.9198", "-9.1982e-01", "-9.1982e-01", "-9.1982e-01", "-0.9198", "-0.9198", "-0.9198", "-0.91982", "-0.91982", "-0.91982", "-9.19825e-01", "-9.19825e-01", "-9.19825e-01", "-0.91982", "-0.91982", "-0.91982", "-0.919825", "-0.919825", "-0.919825", "-9.198248e-01", "-9.198248e-01", "-9.198248e-01", "-0.919825", "-0.919825", "-0.919825", "-0.9198248", "-0.9198248", "-0.9198248", "-9.1982476e-01", "-9.1982476e-01", "-9.1982476e-01", "-0.9198248", "-0.9198248", "-0.9198248", "-0.91982476", "-0.91982476", "-0.91982476", "-9.19824757e-01", "-9.19824757e-01", "-9.19824757e-01", "-0.91982476", "-0.91982476", "-0.91982476", "-0.919824757", "-0.919824757", "-0.919824757", "-9.198247567e-01", "-9.198247567e-01", "-9.198247567e-01", "-0.919824757", "-0.919824757", "-0.919824757", "-0.9198247567", "-0.9198247567", "-0.9198247567", "-9.1982475668e-01", "-9.1982475668e-01", "-9.1982475668e-01", "-0.9198247567", "-0.9198247567", "-0.9198247567", "-0.91982475668", "-0.91982475668", "-0.91982475668", "-9.19824756682e-01", "-9.19824756682e-01", "-9.19824756682e-01", "-0.91982475668", "-0.91982475668", "-0.91982475668", "-0.919824756682", "-0.919824756682", "-0.919824756682", "-9.198247566819e-01", "-9.198247566819e-01", "-9.198247566819e-01", "-0.919824756682", "-0.919824756682", "-0.919824756682", "-0.9198247566819", "-0.9198247566819", "-0.9198247566819", "-9.1982475668192e-01", "-9.1982475668192e-01", "-9.1982475668192e-01", "-0.9198247566819", "-0.9198247566819", "-0.9198247566819", }},
+ {{ "0.1", "0.1", "+0.1", "1.1e-01", "+1.1e-01", "1.1e-01", "0.1", "0.1", "+0.1", "0.11", "0.11", "+0.11", "1.15e-01", "+1.15e-01", "1.15e-01", "0.11", "0.11", "+0.11", "0.115", "0.115", "+0.115", "1.150e-01", "+1.150e-01", "1.150e-01", "0.115", "0.115", "+0.115", "0.115", "0.1150", "+0.115", "1.1498e-01", "+1.1498e-01", "1.1498e-01", "0.1150", "0.1150", "+0.1150", "0.11498", "0.11498", "+0.11498", "1.14978e-01", "+1.14978e-01", "1.14978e-01", "0.11498", "0.11498", "+0.11498", "0.114978", "0.114978", "+0.114978", "1.149781e-01", "+1.149781e-01", "1.149781e-01", "0.114978", "0.114978", "+0.114978", "0.1149781", "0.1149781", "+0.1149781", "1.1497809e-01", "+1.1497809e-01", "1.1497809e-01", "0.1149781", "0.1149781", "+0.1149781", "0.11497809", "0.11497809", "+0.11497809", "1.14978095e-01", "+1.14978095e-01", "1.14978095e-01", "0.11497809", "0.11497809", "+0.11497809", "0.114978095", "0.114978095", "+0.114978095", "1.149780946e-01", "+1.149780946e-01", "1.149780946e-01", "0.114978095", "0.114978095", "+0.114978095", "0.1149780946", "0.1149780946", "+0.1149780946", "1.1497809459e-01", "+1.1497809459e-01", "1.1497809459e-01", "0.1149780946", "0.1149780946", "+0.1149780946", "0.11497809459", "0.11497809459", "+0.11497809459", "1.14978094585e-01", "+1.14978094585e-01", "1.14978094585e-01", "0.11497809459", "0.11497809459", "+0.11497809459", "0.114978094585", "0.114978094585", "+0.114978094585", "1.149780945852e-01", "+1.149780945852e-01", "1.149780945852e-01", "0.114978094585", "0.114978094585", "+0.114978094585", "0.1149780945852", "0.1149780945852", "+0.1149780945852", "1.1497809458524e-01", "+1.1497809458524e-01", "1.1497809458524e-01", "0.1149780945852", "0.1149780945852", "+0.1149780945852", }},
+ {{ "-0.1", "-0.1", "-0.1", "-1.1e-01", "-1.1e-01", "-1.1e-01", "-0.1", "-0.1", "-0.1", "-0.11", "-0.11", "-0.11", "-1.15e-01", "-1.15e-01", "-1.15e-01", "-0.11", "-0.11", "-0.11", "-0.115", "-0.115", "-0.115", "-1.150e-01", "-1.150e-01", "-1.150e-01", "-0.115", "-0.115", "-0.115", "-0.115", "-0.1150", "-0.115", "-1.1498e-01", "-1.1498e-01", "-1.1498e-01", "-0.1150", "-0.1150", "-0.1150", "-0.11498", "-0.11498", "-0.11498", "-1.14978e-01", "-1.14978e-01", "-1.14978e-01", "-0.11498", "-0.11498", "-0.11498", "-0.114978", "-0.114978", "-0.114978", "-1.149781e-01", "-1.149781e-01", "-1.149781e-01", "-0.114978", "-0.114978", "-0.114978", "-0.1149781", "-0.1149781", "-0.1149781", "-1.1497809e-01", "-1.1497809e-01", "-1.1497809e-01", "-0.1149781", "-0.1149781", "-0.1149781", "-0.11497809", "-0.11497809", "-0.11497809", "-1.14978095e-01", "-1.14978095e-01", "-1.14978095e-01", "-0.11497809", "-0.11497809", "-0.11497809", "-0.114978095", "-0.114978095", "-0.114978095", "-1.149780946e-01", "-1.149780946e-01", "-1.149780946e-01", "-0.114978095", "-0.114978095", "-0.114978095", "-0.1149780946", "-0.1149780946", "-0.1149780946", "-1.1497809459e-01", "-1.1497809459e-01", "-1.1497809459e-01", "-0.1149780946", "-0.1149780946", "-0.1149780946", "-0.11497809459", "-0.11497809459", "-0.11497809459", "-1.14978094585e-01", "-1.14978094585e-01", "-1.14978094585e-01", "-0.11497809459", "-0.11497809459", "-0.11497809459", "-0.114978094585", "-0.114978094585", "-0.114978094585", "-1.149780945852e-01", "-1.149780945852e-01", "-1.149780945852e-01", "-0.114978094585", "-0.114978094585", "-0.114978094585", "-0.1149780945852", "-0.1149780945852", "-0.1149780945852", "-1.1497809458524e-01", "-1.1497809458524e-01", "-1.1497809458524e-01", "-0.1149780945852", "-0.1149780945852", "-0.1149780945852", }},
+ {{ "0.01", "0.01", "+0.01", "1.4e-02", "+1.4e-02", "1.4e-02", "0.0", "0.0", "+0.0", "0.014", "0.014", "+0.014", "1.44e-02", "+1.44e-02", "1.44e-02", "0.01", "0.01", "+0.01", "0.0144", "0.0144", "+0.0144", "1.437e-02", "+1.437e-02", "1.437e-02", "0.014", "0.014", "+0.014", "0.01437", "0.01437", "+0.01437", "1.4372e-02", "+1.4372e-02", "1.4372e-02", "0.0144", "0.0144", "+0.0144", "0.014372", "0.014372", "+0.014372", "1.43723e-02", "+1.43723e-02", "1.43723e-02", "0.01437", "0.01437", "+0.01437", "0.0143723", "0.0143723", "+0.0143723", "1.437226e-02", "+1.437226e-02", "1.437226e-02", "0.014372", "0.014372", "+0.014372", "0.01437226", "0.01437226", "+0.01437226", "1.4372262e-02", "+1.4372262e-02", "1.4372262e-02", "0.0143723", "0.0143723", "+0.0143723", "0.014372262", "0.014372262", "+0.014372262", "1.43722618e-02", "+1.43722618e-02", "1.43722618e-02", "0.01437226", "0.01437226", "+0.01437226", "0.0143722618", "0.0143722618", "+0.0143722618", "1.437226182e-02", "+1.437226182e-02", "1.437226182e-02", "0.014372262", "0.014372262", "+0.014372262", "0.01437226182", "0.01437226182", "+0.01437226182", "1.4372261823e-02", "+1.4372261823e-02", "1.4372261823e-02", "0.0143722618", "0.0143722618", "+0.0143722618", "0.014372261823", "0.014372261823", "+0.014372261823", "1.43722618232e-02", "+1.43722618232e-02", "1.43722618232e-02", "0.01437226182", "0.01437226182", "+0.01437226182", "0.0143722618232", "0.0143722618232", "+0.0143722618232", "1.437226182315e-02", "+1.437226182315e-02", "1.437226182315e-02", "0.014372261823", "0.014372261823", "+0.014372261823", "0.01437226182315", "0.01437226182315", "+0.01437226182315", "1.4372261823155e-02", "+1.4372261823155e-02", "1.4372261823155e-02", "0.0143722618232", "0.0143722618232", "+0.0143722618232", }},
+ {{ "-0.01", "-0.01", "-0.01", "-1.4e-02", "-1.4e-02", "-1.4e-02", "-0.0", "-0.0", "-0.0", "-0.014", "-0.014", "-0.014", "-1.44e-02", "-1.44e-02", "-1.44e-02", "-0.01", "-0.01", "-0.01", "-0.0144", "-0.0144", "-0.0144", "-1.437e-02", "-1.437e-02", "-1.437e-02", "-0.014", "-0.014", "-0.014", "-0.01437", "-0.01437", "-0.01437", "-1.4372e-02", "-1.4372e-02", "-1.4372e-02", "-0.0144", "-0.0144", "-0.0144", "-0.014372", "-0.014372", "-0.014372", "-1.43723e-02", "-1.43723e-02", "-1.43723e-02", "-0.01437", "-0.01437", "-0.01437", "-0.0143723", "-0.0143723", "-0.0143723", "-1.437226e-02", "-1.437226e-02", "-1.437226e-02", "-0.014372", "-0.014372", "-0.014372", "-0.01437226", "-0.01437226", "-0.01437226", "-1.4372262e-02", "-1.4372262e-02", "-1.4372262e-02", "-0.0143723", "-0.0143723", "-0.0143723", "-0.014372262", "-0.014372262", "-0.014372262", "-1.43722618e-02", "-1.43722618e-02", "-1.43722618e-02", "-0.01437226", "-0.01437226", "-0.01437226", "-0.0143722618", "-0.0143722618", "-0.0143722618", "-1.437226182e-02", "-1.437226182e-02", "-1.437226182e-02", "-0.014372262", "-0.014372262", "-0.014372262", "-0.01437226182", "-0.01437226182", "-0.01437226182", "-1.4372261823e-02", "-1.4372261823e-02", "-1.4372261823e-02", "-0.0143722618", "-0.0143722618", "-0.0143722618", "-0.014372261823", "-0.014372261823", "-0.014372261823", "-1.43722618232e-02", "-1.43722618232e-02", "-1.43722618232e-02", "-0.01437226182", "-0.01437226182", "-0.01437226182", "-0.0143722618232", "-0.0143722618232", "-0.0143722618232", "-1.437226182315e-02", "-1.437226182315e-02", "-1.437226182315e-02", "-0.014372261823", "-0.014372261823", "-0.014372261823", "-0.01437226182315", "-0.01437226182315", "-0.01437226182315", "-1.4372261823155e-02", "-1.4372261823155e-02", "-1.4372261823155e-02", "-0.0143722618232", "-0.0143722618232", "-0.0143722618232", }},
+ {{ "0.002", "0.002", "+0.002", "1.8e-03", "+1.8e-03", "1.8e-03", "0.0", "0.0", "+0.0", "0.0018", "0.0018", "+0.0018", "1.80e-03", "+1.80e-03", "1.80e-03", "0.00", "0.00", "+0.00", "0.0018", "0.00180", "+0.0018", "1.797e-03", "+1.797e-03", "1.797e-03", "0.002", "0.002", "+0.002", "0.001797", "0.001797", "+0.001797", "1.7965e-03", "+1.7965e-03", "1.7965e-03", "0.0018", "0.0018", "+0.0018", "0.0017965", "0.0017965", "+0.0017965", "1.79653e-03", "+1.79653e-03", "1.79653e-03", "0.00180", "0.00180", "+0.00180", "0.00179653", "0.00179653", "+0.00179653", "1.796533e-03", "+1.796533e-03", "1.796533e-03", "0.001797", "0.001797", "+0.001797", "0.001796533", "0.001796533", "+0.001796533", "1.7965327e-03", "+1.7965327e-03", "1.7965327e-03", "0.0017965", "0.0017965", "+0.0017965", "0.0017965327", "0.0017965327", "+0.0017965327", "1.79653273e-03", "+1.79653273e-03", "1.79653273e-03", "0.00179653", "0.00179653", "+0.00179653", "0.00179653273", "0.00179653273", "+0.00179653273", "1.796532728e-03", "+1.796532728e-03", "1.796532728e-03", "0.001796533", "0.001796533", "+0.001796533", "0.001796532728", "0.001796532728", "+0.001796532728", "1.7965327279e-03", "+1.7965327279e-03", "1.7965327279e-03", "0.0017965327", "0.0017965327", "+0.0017965327", "0.0017965327279", "0.0017965327279", "+0.0017965327279", "1.79653272789e-03", "+1.79653272789e-03", "1.79653272789e-03", "0.00179653273", "0.00179653273", "+0.00179653273", "0.00179653272789", "0.00179653272789", "+0.00179653272789", "1.796532727894e-03", "+1.796532727894e-03", "1.796532727894e-03", "0.001796532728", "0.001796532728", "+0.001796532728", "0.001796532727894", "0.001796532727894", "+0.001796532727894", "1.7965327278944e-03", "+1.7965327278944e-03", "1.7965327278944e-03", "0.0017965327279", "0.0017965327279", "+0.0017965327279", }},
+ {{ "-0.002", "-0.002", "-0.002", "-1.8e-03", "-1.8e-03", "-1.8e-03", "-0.0", "-0.0", "-0.0", "-0.0018", "-0.0018", "-0.0018", "-1.80e-03", "-1.80e-03", "-1.80e-03", "-0.00", "-0.00", "-0.00", "-0.0018", "-0.00180", "-0.0018", "-1.797e-03", "-1.797e-03", "-1.797e-03", "-0.002", "-0.002", "-0.002", "-0.001797", "-0.001797", "-0.001797", "-1.7965e-03", "-1.7965e-03", "-1.7965e-03", "-0.0018", "-0.0018", "-0.0018", "-0.0017965", "-0.0017965", "-0.0017965", "-1.79653e-03", "-1.79653e-03", "-1.79653e-03", "-0.00180", "-0.00180", "-0.00180", "-0.00179653", "-0.00179653", "-0.00179653", "-1.796533e-03", "-1.796533e-03", "-1.796533e-03", "-0.001797", "-0.001797", "-0.001797", "-0.001796533", "-0.001796533", "-0.001796533", "-1.7965327e-03", "-1.7965327e-03", "-1.7965327e-03", "-0.0017965", "-0.0017965", "-0.0017965", "-0.0017965327", "-0.0017965327", "-0.0017965327", "-1.79653273e-03", "-1.79653273e-03", "-1.79653273e-03", "-0.00179653", "-0.00179653", "-0.00179653", "-0.00179653273", "-0.00179653273", "-0.00179653273", "-1.796532728e-03", "-1.796532728e-03", "-1.796532728e-03", "-0.001796533", "-0.001796533", "-0.001796533", "-0.001796532728", "-0.001796532728", "-0.001796532728", "-1.7965327279e-03", "-1.7965327279e-03", "-1.7965327279e-03", "-0.0017965327", "-0.0017965327", "-0.0017965327", "-0.0017965327279", "-0.0017965327279", "-0.0017965327279", "-1.79653272789e-03", "-1.79653272789e-03", "-1.79653272789e-03", "-0.00179653273", "-0.00179653273", "-0.00179653273", "-0.00179653272789", "-0.00179653272789", "-0.00179653272789", "-1.796532727894e-03", "-1.796532727894e-03", "-1.796532727894e-03", "-0.001796532728", "-0.001796532728", "-0.001796532728", "-0.001796532727894", "-0.001796532727894", "-0.001796532727894", "-1.7965327278944e-03", "-1.7965327278944e-03", "-1.7965327278944e-03", "-0.0017965327279", "-0.0017965327279", "-0.0017965327279", }},
+ {{ "0.0002", "0.0002", "+0.0002", "2.2e-04", "+2.2e-04", "2.2e-04", "0.0", "0.0", "+0.0", "0.00022", "0.00022", "+0.00022", "2.25e-04", "+2.25e-04", "2.25e-04", "0.00", "0.00", "+0.00", "0.000225", "0.000225", "+0.000225", "2.246e-04", "+2.246e-04", "2.246e-04", "0.000", "0.000", "+0.000", "0.0002246", "0.0002246", "+0.0002246", "2.2457e-04", "+2.2457e-04", "2.2457e-04", "0.0002", "0.0002", "+0.0002", "0.00022457", "0.00022457", "+0.00022457", "2.24567e-04", "+2.24567e-04", "2.24567e-04", "0.00022", "0.00022", "+0.00022", "0.000224567", "0.000224567", "+0.000224567", "2.245666e-04", "+2.245666e-04", "2.245666e-04", "0.000225", "0.000225", "+0.000225", "0.0002245666", "0.0002245666", "+0.0002245666", "2.2456659e-04", "+2.2456659e-04", "2.2456659e-04", "0.0002246", "0.0002246", "+0.0002246", "0.00022456659", "0.00022456659", "+0.00022456659", "2.24566591e-04", "+2.24566591e-04", "2.24566591e-04", "0.00022457", "0.00022457", "+0.00022457", "0.000224566591", "0.000224566591", "+0.000224566591", "2.245665910e-04", "+2.245665910e-04", "2.245665910e-04", "0.000224567", "0.000224567", "+0.000224567", "0.000224566591", "0.0002245665910", "+0.000224566591", "2.2456659099e-04", "+2.2456659099e-04", "2.2456659099e-04", "0.0002245666", "0.0002245666", "+0.0002245666", "0.00022456659099", "0.00022456659099", "+0.00022456659099", "2.24566590987e-04", "+2.24566590987e-04", "2.24566590987e-04", "0.00022456659", "0.00022456659", "+0.00022456659", "0.000224566590987", "0.000224566590987", "+0.000224566590987", "2.245665909868e-04", "+2.245665909868e-04", "2.245665909868e-04", "0.000224566591", "0.000224566591", "+0.000224566591", "0.0002245665909868", "0.0002245665909868", "+0.0002245665909868", "2.2456659098680e-04", "+2.2456659098680e-04", "2.2456659098680e-04", "0.0002245665910", "0.0002245665910", "+0.0002245665910", }},
+ {{ "-0.0002", "-0.0002", "-0.0002", "-2.2e-04", "-2.2e-04", "-2.2e-04", "-0.0", "-0.0", "-0.0", "-0.00022", "-0.00022", "-0.00022", "-2.25e-04", "-2.25e-04", "-2.25e-04", "-0.00", "-0.00", "-0.00", "-0.000225", "-0.000225", "-0.000225", "-2.246e-04", "-2.246e-04", "-2.246e-04", "-0.000", "-0.000", "-0.000", "-0.0002246", "-0.0002246", "-0.0002246", "-2.2457e-04", "-2.2457e-04", "-2.2457e-04", "-0.0002", "-0.0002", "-0.0002", "-0.00022457", "-0.00022457", "-0.00022457", "-2.24567e-04", "-2.24567e-04", "-2.24567e-04", "-0.00022", "-0.00022", "-0.00022", "-0.000224567", "-0.000224567", "-0.000224567", "-2.245666e-04", "-2.245666e-04", "-2.245666e-04", "-0.000225", "-0.000225", "-0.000225", "-0.0002245666", "-0.0002245666", "-0.0002245666", "-2.2456659e-04", "-2.2456659e-04", "-2.2456659e-04", "-0.0002246", "-0.0002246", "-0.0002246", "-0.00022456659", "-0.00022456659", "-0.00022456659", "-2.24566591e-04", "-2.24566591e-04", "-2.24566591e-04", "-0.00022457", "-0.00022457", "-0.00022457", "-0.000224566591", "-0.000224566591", "-0.000224566591", "-2.245665910e-04", "-2.245665910e-04", "-2.245665910e-04", "-0.000224567", "-0.000224567", "-0.000224567", "-0.000224566591", "-0.0002245665910", "-0.000224566591", "-2.2456659099e-04", "-2.2456659099e-04", "-2.2456659099e-04", "-0.0002245666", "-0.0002245666", "-0.0002245666", "-0.00022456659099", "-0.00022456659099", "-0.00022456659099", "-2.24566590987e-04", "-2.24566590987e-04", "-2.24566590987e-04", "-0.00022456659", "-0.00022456659", "-0.00022456659", "-0.000224566590987", "-0.000224566590987", "-0.000224566590987", "-2.245665909868e-04", "-2.245665909868e-04", "-2.245665909868e-04", "-0.000224566591", "-0.000224566591", "-0.000224566591", "-0.0002245665909868", "-0.0002245665909868", "-0.0002245665909868", "-2.2456659098680e-04", "-2.2456659098680e-04", "-2.2456659098680e-04", "-0.0002245665910", "-0.0002245665910", "-0.0002245665910", }},
+ {{ "3e-05", "3.e-05", "+3e-05", "2.8e-05", "+2.8e-05", "2.8e-05", "0.0", "0.0", "+0.0", "2.8e-05", "2.8e-05", "+2.8e-05", "2.81e-05", "+2.81e-05", "2.81e-05", "0.00", "0.00", "+0.00", "2.81e-05", "2.81e-05", "+2.81e-05", "2.807e-05", "+2.807e-05", "2.807e-05", "0.000", "0.000", "+0.000", "2.807e-05", "2.807e-05", "+2.807e-05", "2.8071e-05", "+2.8071e-05", "2.8071e-05", "0.0000", "0.0000", "+0.0000", "2.8071e-05", "2.8071e-05", "+2.8071e-05", "2.80708e-05", "+2.80708e-05", "2.80708e-05", "0.00003", "0.00003", "+0.00003", "2.80708e-05", "2.80708e-05", "+2.80708e-05", "2.807082e-05", "+2.807082e-05", "2.807082e-05", "0.000028", "0.000028", "+0.000028", "2.807082e-05", "2.807082e-05", "+2.807082e-05", "2.8070824e-05", "+2.8070824e-05", "2.8070824e-05", "0.0000281", "0.0000281", "+0.0000281", "2.8070824e-05", "2.8070824e-05", "+2.8070824e-05", "2.80708239e-05", "+2.80708239e-05", "2.80708239e-05", "0.00002807", "0.00002807", "+0.00002807", "2.80708239e-05", "2.80708239e-05", "+2.80708239e-05", "2.807082387e-05", "+2.807082387e-05", "2.807082387e-05", "0.000028071", "0.000028071", "+0.000028071", "2.807082387e-05", "2.807082387e-05", "+2.807082387e-05", "2.8070823873e-05", "+2.8070823873e-05", "2.8070823873e-05", "0.0000280708", "0.0000280708", "+0.0000280708", "2.8070823873e-05", "2.8070823873e-05", "+2.8070823873e-05", "2.80708238733e-05", "+2.80708238733e-05", "2.80708238733e-05", "0.00002807082", "0.00002807082", "+0.00002807082", "2.80708238733e-05", "2.80708238733e-05", "+2.80708238733e-05", "2.807082387335e-05", "+2.807082387335e-05", "2.807082387335e-05", "0.000028070824", "0.000028070824", "+0.000028070824", "2.807082387335e-05", "2.807082387335e-05", "+2.807082387335e-05", "2.8070823873350e-05", "+2.8070823873350e-05", "2.8070823873350e-05", "0.0000280708239", "0.0000280708239", "+0.0000280708239", }},
+ {{ "-3e-05", "-3.e-05", "-3e-05", "-2.8e-05", "-2.8e-05", "-2.8e-05", "-0.0", "-0.0", "-0.0", "-2.8e-05", "-2.8e-05", "-2.8e-05", "-2.81e-05", "-2.81e-05", "-2.81e-05", "-0.00", "-0.00", "-0.00", "-2.81e-05", "-2.81e-05", "-2.81e-05", "-2.807e-05", "-2.807e-05", "-2.807e-05", "-0.000", "-0.000", "-0.000", "-2.807e-05", "-2.807e-05", "-2.807e-05", "-2.8071e-05", "-2.8071e-05", "-2.8071e-05", "-0.0000", "-0.0000", "-0.0000", "-2.8071e-05", "-2.8071e-05", "-2.8071e-05", "-2.80708e-05", "-2.80708e-05", "-2.80708e-05", "-0.00003", "-0.00003", "-0.00003", "-2.80708e-05", "-2.80708e-05", "-2.80708e-05", "-2.807082e-05", "-2.807082e-05", "-2.807082e-05", "-0.000028", "-0.000028", "-0.000028", "-2.807082e-05", "-2.807082e-05", "-2.807082e-05", "-2.8070824e-05", "-2.8070824e-05", "-2.8070824e-05", "-0.0000281", "-0.0000281", "-0.0000281", "-2.8070824e-05", "-2.8070824e-05", "-2.8070824e-05", "-2.80708239e-05", "-2.80708239e-05", "-2.80708239e-05", "-0.00002807", "-0.00002807", "-0.00002807", "-2.80708239e-05", "-2.80708239e-05", "-2.80708239e-05", "-2.807082387e-05", "-2.807082387e-05", "-2.807082387e-05", "-0.000028071", "-0.000028071", "-0.000028071", "-2.807082387e-05", "-2.807082387e-05", "-2.807082387e-05", "-2.8070823873e-05", "-2.8070823873e-05", "-2.8070823873e-05", "-0.0000280708", "-0.0000280708", "-0.0000280708", "-2.8070823873e-05", "-2.8070823873e-05", "-2.8070823873e-05", "-2.80708238733e-05", "-2.80708238733e-05", "-2.80708238733e-05", "-0.00002807082", "-0.00002807082", "-0.00002807082", "-2.80708238733e-05", "-2.80708238733e-05", "-2.80708238733e-05", "-2.807082387335e-05", "-2.807082387335e-05", "-2.807082387335e-05", "-0.000028070824", "-0.000028070824", "-0.000028070824", "-2.807082387335e-05", "-2.807082387335e-05", "-2.807082387335e-05", "-2.8070823873350e-05", "-2.8070823873350e-05", "-2.8070823873350e-05", "-0.0000280708239", "-0.0000280708239", "-0.0000280708239", }},
+ {{ "4e-06", "4.e-06", "+4e-06", "3.5e-06", "+3.5e-06", "3.5e-06", "0.0", "0.0", "+0.0", "3.5e-06", "3.5e-06", "+3.5e-06", "3.51e-06", "+3.51e-06", "3.51e-06", "0.00", "0.00", "+0.00", "3.51e-06", "3.51e-06", "+3.51e-06", "3.509e-06", "+3.509e-06", "3.509e-06", "0.000", "0.000", "+0.000", "3.509e-06", "3.509e-06", "+3.509e-06", "3.5089e-06", "+3.5089e-06", "3.5089e-06", "0.0000", "0.0000", "+0.0000", "3.5089e-06", "3.5089e-06", "+3.5089e-06", "3.50885e-06", "+3.50885e-06", "3.50885e-06", "0.00000", "0.00000", "+0.00000", "3.50885e-06", "3.50885e-06", "+3.50885e-06", "3.508853e-06", "+3.508853e-06", "3.508853e-06", "0.000004", "0.000004", "+0.000004", "3.508853e-06", "3.508853e-06", "+3.508853e-06", "3.5088530e-06", "+3.5088530e-06", "3.5088530e-06", "0.0000035", "0.0000035", "+0.0000035", "3.508853e-06", "3.5088530e-06", "+3.508853e-06", "3.50885298e-06", "+3.50885298e-06", "3.50885298e-06", "0.00000351", "0.00000351", "+0.00000351", "3.50885298e-06", "3.50885298e-06", "+3.50885298e-06", "3.508852984e-06", "+3.508852984e-06", "3.508852984e-06", "0.000003509", "0.000003509", "+0.000003509", "3.508852984e-06", "3.508852984e-06", "+3.508852984e-06", "3.5088529842e-06", "+3.5088529842e-06", "3.5088529842e-06", "0.0000035089", "0.0000035089", "+0.0000035089", "3.5088529842e-06", "3.5088529842e-06", "+3.5088529842e-06", "3.50885298417e-06", "+3.50885298417e-06", "3.50885298417e-06", "0.00000350885", "0.00000350885", "+0.00000350885", "3.50885298417e-06", "3.50885298417e-06", "+3.50885298417e-06", "3.508852984169e-06", "+3.508852984169e-06", "3.508852984169e-06", "0.000003508853", "0.000003508853", "+0.000003508853", "3.508852984169e-06", "3.508852984169e-06", "+3.508852984169e-06", "3.5088529841687e-06", "+3.5088529841687e-06", "3.5088529841687e-06", "0.0000035088530", "0.0000035088530", "+0.0000035088530", }},
+ {{ "-4e-06", "-4.e-06", "-4e-06", "-3.5e-06", "-3.5e-06", "-3.5e-06", "-0.0", "-0.0", "-0.0", "-3.5e-06", "-3.5e-06", "-3.5e-06", "-3.51e-06", "-3.51e-06", "-3.51e-06", "-0.00", "-0.00", "-0.00", "-3.51e-06", "-3.51e-06", "-3.51e-06", "-3.509e-06", "-3.509e-06", "-3.509e-06", "-0.000", "-0.000", "-0.000", "-3.509e-06", "-3.509e-06", "-3.509e-06", "-3.5089e-06", "-3.5089e-06", "-3.5089e-06", "-0.0000", "-0.0000", "-0.0000", "-3.5089e-06", "-3.5089e-06", "-3.5089e-06", "-3.50885e-06", "-3.50885e-06", "-3.50885e-06", "-0.00000", "-0.00000", "-0.00000", "-3.50885e-06", "-3.50885e-06", "-3.50885e-06", "-3.508853e-06", "-3.508853e-06", "-3.508853e-06", "-0.000004", "-0.000004", "-0.000004", "-3.508853e-06", "-3.508853e-06", "-3.508853e-06", "-3.5088530e-06", "-3.5088530e-06", "-3.5088530e-06", "-0.0000035", "-0.0000035", "-0.0000035", "-3.508853e-06", "-3.5088530e-06", "-3.508853e-06", "-3.50885298e-06", "-3.50885298e-06", "-3.50885298e-06", "-0.00000351", "-0.00000351", "-0.00000351", "-3.50885298e-06", "-3.50885298e-06", "-3.50885298e-06", "-3.508852984e-06", "-3.508852984e-06", "-3.508852984e-06", "-0.000003509", "-0.000003509", "-0.000003509", "-3.508852984e-06", "-3.508852984e-06", "-3.508852984e-06", "-3.5088529842e-06", "-3.5088529842e-06", "-3.5088529842e-06", "-0.0000035089", "-0.0000035089", "-0.0000035089", "-3.5088529842e-06", "-3.5088529842e-06", "-3.5088529842e-06", "-3.50885298417e-06", "-3.50885298417e-06", "-3.50885298417e-06", "-0.00000350885", "-0.00000350885", "-0.00000350885", "-3.50885298417e-06", "-3.50885298417e-06", "-3.50885298417e-06", "-3.508852984169e-06", "-3.508852984169e-06", "-3.508852984169e-06", "-0.000003508853", "-0.000003508853", "-0.000003508853", "-3.508852984169e-06", "-3.508852984169e-06", "-3.508852984169e-06", "-3.5088529841687e-06", "-3.5088529841687e-06", "-3.5088529841687e-06", "-0.0000035088530", "-0.0000035088530", "-0.0000035088530", }},
+ {{ "4e-07", "4.e-07", "+4e-07", "4.4e-07", "+4.4e-07", "4.4e-07", "0.0", "0.0", "+0.0", "4.4e-07", "4.4e-07", "+4.4e-07", "4.39e-07", "+4.39e-07", "4.39e-07", "0.00", "0.00", "+0.00", "4.39e-07", "4.39e-07", "+4.39e-07", "4.386e-07", "+4.386e-07", "4.386e-07", "0.000", "0.000", "+0.000", "4.386e-07", "4.386e-07", "+4.386e-07", "4.3861e-07", "+4.3861e-07", "4.3861e-07", "0.0000", "0.0000", "+0.0000", "4.3861e-07", "4.3861e-07", "+4.3861e-07", "4.38607e-07", "+4.38607e-07", "4.38607e-07", "0.00000", "0.00000", "+0.00000", "4.38607e-07", "4.38607e-07", "+4.38607e-07", "4.386066e-07", "+4.386066e-07", "4.386066e-07", "0.000000", "0.000000", "+0.000000", "4.386066e-07", "4.386066e-07", "+4.386066e-07", "4.3860662e-07", "+4.3860662e-07", "4.3860662e-07", "0.0000004", "0.0000004", "+0.0000004", "4.3860662e-07", "4.3860662e-07", "+4.3860662e-07", "4.38606623e-07", "+4.38606623e-07", "4.38606623e-07", "0.00000044", "0.00000044", "+0.00000044", "4.38606623e-07", "4.38606623e-07", "+4.38606623e-07", "4.386066230e-07", "+4.386066230e-07", "4.386066230e-07", "0.000000439", "0.000000439", "+0.000000439", "4.38606623e-07", "4.386066230e-07", "+4.38606623e-07", "4.3860662302e-07", "+4.3860662302e-07", "4.3860662302e-07", "0.0000004386", "0.0000004386", "+0.0000004386", "4.3860662302e-07", "4.3860662302e-07", "+4.3860662302e-07", "4.38606623021e-07", "+4.38606623021e-07", "4.38606623021e-07", "0.00000043861", "0.00000043861", "+0.00000043861", "4.38606623021e-07", "4.38606623021e-07", "+4.38606623021e-07", "4.386066230211e-07", "+4.386066230211e-07", "4.386066230211e-07", "0.000000438607", "0.000000438607", "+0.000000438607", "4.386066230211e-07", "4.386066230211e-07", "+4.386066230211e-07", "4.3860662302109e-07", "+4.3860662302109e-07", "4.3860662302109e-07", "0.0000004386066", "0.0000004386066", "+0.0000004386066", }},
+ {{ "-4e-07", "-4.e-07", "-4e-07", "-4.4e-07", "-4.4e-07", "-4.4e-07", "-0.0", "-0.0", "-0.0", "-4.4e-07", "-4.4e-07", "-4.4e-07", "-4.39e-07", "-4.39e-07", "-4.39e-07", "-0.00", "-0.00", "-0.00", "-4.39e-07", "-4.39e-07", "-4.39e-07", "-4.386e-07", "-4.386e-07", "-4.386e-07", "-0.000", "-0.000", "-0.000", "-4.386e-07", "-4.386e-07", "-4.386e-07", "-4.3861e-07", "-4.3861e-07", "-4.3861e-07", "-0.0000", "-0.0000", "-0.0000", "-4.3861e-07", "-4.3861e-07", "-4.3861e-07", "-4.38607e-07", "-4.38607e-07", "-4.38607e-07", "-0.00000", "-0.00000", "-0.00000", "-4.38607e-07", "-4.38607e-07", "-4.38607e-07", "-4.386066e-07", "-4.386066e-07", "-4.386066e-07", "-0.000000", "-0.000000", "-0.000000", "-4.386066e-07", "-4.386066e-07", "-4.386066e-07", "-4.3860662e-07", "-4.3860662e-07", "-4.3860662e-07", "-0.0000004", "-0.0000004", "-0.0000004", "-4.3860662e-07", "-4.3860662e-07", "-4.3860662e-07", "-4.38606623e-07", "-4.38606623e-07", "-4.38606623e-07", "-0.00000044", "-0.00000044", "-0.00000044", "-4.38606623e-07", "-4.38606623e-07", "-4.38606623e-07", "-4.386066230e-07", "-4.386066230e-07", "-4.386066230e-07", "-0.000000439", "-0.000000439", "-0.000000439", "-4.38606623e-07", "-4.386066230e-07", "-4.38606623e-07", "-4.3860662302e-07", "-4.3860662302e-07", "-4.3860662302e-07", "-0.0000004386", "-0.0000004386", "-0.0000004386", "-4.3860662302e-07", "-4.3860662302e-07", "-4.3860662302e-07", "-4.38606623021e-07", "-4.38606623021e-07", "-4.38606623021e-07", "-0.00000043861", "-0.00000043861", "-0.00000043861", "-4.38606623021e-07", "-4.38606623021e-07", "-4.38606623021e-07", "-4.386066230211e-07", "-4.386066230211e-07", "-4.386066230211e-07", "-0.000000438607", "-0.000000438607", "-0.000000438607", "-4.386066230211e-07", "-4.386066230211e-07", "-4.386066230211e-07", "-4.3860662302109e-07", "-4.3860662302109e-07", "-4.3860662302109e-07", "-0.0000004386066", "-0.0000004386066", "-0.0000004386066", }},
+ {{ "5e-08", "5.e-08", "+5e-08", "5.5e-08", "+5.5e-08", "5.5e-08", "0.0", "0.0", "+0.0", "5.5e-08", "5.5e-08", "+5.5e-08", "5.48e-08", "+5.48e-08", "5.48e-08", "0.00", "0.00", "+0.00", "5.48e-08", "5.48e-08", "+5.48e-08", "5.483e-08", "+5.483e-08", "5.483e-08", "0.000", "0.000", "+0.000", "5.483e-08", "5.483e-08", "+5.483e-08", "5.4826e-08", "+5.4826e-08", "5.4826e-08", "0.0000", "0.0000", "+0.0000", "5.4826e-08", "5.4826e-08", "+5.4826e-08", "5.48258e-08", "+5.48258e-08", "5.48258e-08", "0.00000", "0.00000", "+0.00000", "5.48258e-08", "5.48258e-08", "+5.48258e-08", "5.482583e-08", "+5.482583e-08", "5.482583e-08", "0.000000", "0.000000", "+0.000000", "5.482583e-08", "5.482583e-08", "+5.482583e-08", "5.4825828e-08", "+5.4825828e-08", "5.4825828e-08", "0.0000001", "0.0000001", "+0.0000001", "5.4825828e-08", "5.4825828e-08", "+5.4825828e-08", "5.48258279e-08", "+5.48258279e-08", "5.48258279e-08", "0.00000005", "0.00000005", "+0.00000005", "5.48258279e-08", "5.48258279e-08", "+5.48258279e-08", "5.482582788e-08", "+5.482582788e-08", "5.482582788e-08", "0.000000055", "0.000000055", "+0.000000055", "5.482582788e-08", "5.482582788e-08", "+5.482582788e-08", "5.4825827878e-08", "+5.4825827878e-08", "5.4825827878e-08", "0.0000000548", "0.0000000548", "+0.0000000548", "5.4825827878e-08", "5.4825827878e-08", "+5.4825827878e-08", "5.48258278776e-08", "+5.48258278776e-08", "5.48258278776e-08", "0.00000005483", "0.00000005483", "+0.00000005483", "5.48258278776e-08", "5.48258278776e-08", "+5.48258278776e-08", "5.482582787764e-08", "+5.482582787764e-08", "5.482582787764e-08", "0.000000054826", "0.000000054826", "+0.000000054826", "5.482582787764e-08", "5.482582787764e-08", "+5.482582787764e-08", "5.4825827877636e-08", "+5.4825827877636e-08", "5.4825827877636e-08", "0.0000000548258", "0.0000000548258", "+0.0000000548258", }},
+ {{ "-5e-08", "-5.e-08", "-5e-08", "-5.5e-08", "-5.5e-08", "-5.5e-08", "-0.0", "-0.0", "-0.0", "-5.5e-08", "-5.5e-08", "-5.5e-08", "-5.48e-08", "-5.48e-08", "-5.48e-08", "-0.00", "-0.00", "-0.00", "-5.48e-08", "-5.48e-08", "-5.48e-08", "-5.483e-08", "-5.483e-08", "-5.483e-08", "-0.000", "-0.000", "-0.000", "-5.483e-08", "-5.483e-08", "-5.483e-08", "-5.4826e-08", "-5.4826e-08", "-5.4826e-08", "-0.0000", "-0.0000", "-0.0000", "-5.4826e-08", "-5.4826e-08", "-5.4826e-08", "-5.48258e-08", "-5.48258e-08", "-5.48258e-08", "-0.00000", "-0.00000", "-0.00000", "-5.48258e-08", "-5.48258e-08", "-5.48258e-08", "-5.482583e-08", "-5.482583e-08", "-5.482583e-08", "-0.000000", "-0.000000", "-0.000000", "-5.482583e-08", "-5.482583e-08", "-5.482583e-08", "-5.4825828e-08", "-5.4825828e-08", "-5.4825828e-08", "-0.0000001", "-0.0000001", "-0.0000001", "-5.4825828e-08", "-5.4825828e-08", "-5.4825828e-08", "-5.48258279e-08", "-5.48258279e-08", "-5.48258279e-08", "-0.00000005", "-0.00000005", "-0.00000005", "-5.48258279e-08", "-5.48258279e-08", "-5.48258279e-08", "-5.482582788e-08", "-5.482582788e-08", "-5.482582788e-08", "-0.000000055", "-0.000000055", "-0.000000055", "-5.482582788e-08", "-5.482582788e-08", "-5.482582788e-08", "-5.4825827878e-08", "-5.4825827878e-08", "-5.4825827878e-08", "-0.0000000548", "-0.0000000548", "-0.0000000548", "-5.4825827878e-08", "-5.4825827878e-08", "-5.4825827878e-08", "-5.48258278776e-08", "-5.48258278776e-08", "-5.48258278776e-08", "-0.00000005483", "-0.00000005483", "-0.00000005483", "-5.48258278776e-08", "-5.48258278776e-08", "-5.48258278776e-08", "-5.482582787764e-08", "-5.482582787764e-08", "-5.482582787764e-08", "-0.000000054826", "-0.000000054826", "-0.000000054826", "-5.482582787764e-08", "-5.482582787764e-08", "-5.482582787764e-08", "-5.4825827877636e-08", "-5.4825827877636e-08", "-5.4825827877636e-08", "-0.0000000548258", "-0.0000000548258", "-0.0000000548258", }},
+ {{ "7e-09", "7.e-09", "+7e-09", "6.9e-09", "+6.9e-09", "6.9e-09", "0.0", "0.0", "+0.0", "6.9e-09", "6.9e-09", "+6.9e-09", "6.85e-09", "+6.85e-09", "6.85e-09", "0.00", "0.00", "+0.00", "6.85e-09", "6.85e-09", "+6.85e-09", "6.853e-09", "+6.853e-09", "6.853e-09", "0.000", "0.000", "+0.000", "6.853e-09", "6.853e-09", "+6.853e-09", "6.8532e-09", "+6.8532e-09", "6.8532e-09", "0.0000", "0.0000", "+0.0000", "6.8532e-09", "6.8532e-09", "+6.8532e-09", "6.85323e-09", "+6.85323e-09", "6.85323e-09", "0.00000", "0.00000", "+0.00000", "6.85323e-09", "6.85323e-09", "+6.85323e-09", "6.853228e-09", "+6.853228e-09", "6.853228e-09", "0.000000", "0.000000", "+0.000000", "6.853228e-09", "6.853228e-09", "+6.853228e-09", "6.8532285e-09", "+6.8532285e-09", "6.8532285e-09", "0.0000000", "0.0000000", "+0.0000000", "6.8532285e-09", "6.8532285e-09", "+6.8532285e-09", "6.85322848e-09", "+6.85322848e-09", "6.85322848e-09", "0.00000001", "0.00000001", "+0.00000001", "6.85322848e-09", "6.85322848e-09", "+6.85322848e-09", "6.853228485e-09", "+6.853228485e-09", "6.853228485e-09", "0.000000007", "0.000000007", "+0.000000007", "6.853228485e-09", "6.853228485e-09", "+6.853228485e-09", "6.8532284847e-09", "+6.8532284847e-09", "6.8532284847e-09", "0.0000000069", "0.0000000069", "+0.0000000069", "6.8532284847e-09", "6.8532284847e-09", "+6.8532284847e-09", "6.85322848470e-09", "+6.85322848470e-09", "6.85322848470e-09", "0.00000000685", "0.00000000685", "+0.00000000685", "6.8532284847e-09", "6.85322848470e-09", "+6.8532284847e-09", "6.853228484704e-09", "+6.853228484704e-09", "6.853228484704e-09", "0.000000006853", "0.000000006853", "+0.000000006853", "6.853228484704e-09", "6.853228484704e-09", "+6.853228484704e-09", "6.8532284847045e-09", "+6.8532284847045e-09", "6.8532284847045e-09", "0.0000000068532", "0.0000000068532", "+0.0000000068532", }},
+ {{ "-7e-09", "-7.e-09", "-7e-09", "-6.9e-09", "-6.9e-09", "-6.9e-09", "-0.0", "-0.0", "-0.0", "-6.9e-09", "-6.9e-09", "-6.9e-09", "-6.85e-09", "-6.85e-09", "-6.85e-09", "-0.00", "-0.00", "-0.00", "-6.85e-09", "-6.85e-09", "-6.85e-09", "-6.853e-09", "-6.853e-09", "-6.853e-09", "-0.000", "-0.000", "-0.000", "-6.853e-09", "-6.853e-09", "-6.853e-09", "-6.8532e-09", "-6.8532e-09", "-6.8532e-09", "-0.0000", "-0.0000", "-0.0000", "-6.8532e-09", "-6.8532e-09", "-6.8532e-09", "-6.85323e-09", "-6.85323e-09", "-6.85323e-09", "-0.00000", "-0.00000", "-0.00000", "-6.85323e-09", "-6.85323e-09", "-6.85323e-09", "-6.853228e-09", "-6.853228e-09", "-6.853228e-09", "-0.000000", "-0.000000", "-0.000000", "-6.853228e-09", "-6.853228e-09", "-6.853228e-09", "-6.8532285e-09", "-6.8532285e-09", "-6.8532285e-09", "-0.0000000", "-0.0000000", "-0.0000000", "-6.8532285e-09", "-6.8532285e-09", "-6.8532285e-09", "-6.85322848e-09", "-6.85322848e-09", "-6.85322848e-09", "-0.00000001", "-0.00000001", "-0.00000001", "-6.85322848e-09", "-6.85322848e-09", "-6.85322848e-09", "-6.853228485e-09", "-6.853228485e-09", "-6.853228485e-09", "-0.000000007", "-0.000000007", "-0.000000007", "-6.853228485e-09", "-6.853228485e-09", "-6.853228485e-09", "-6.8532284847e-09", "-6.8532284847e-09", "-6.8532284847e-09", "-0.0000000069", "-0.0000000069", "-0.0000000069", "-6.8532284847e-09", "-6.8532284847e-09", "-6.8532284847e-09", "-6.85322848470e-09", "-6.85322848470e-09", "-6.85322848470e-09", "-0.00000000685", "-0.00000000685", "-0.00000000685", "-6.8532284847e-09", "-6.85322848470e-09", "-6.8532284847e-09", "-6.853228484704e-09", "-6.853228484704e-09", "-6.853228484704e-09", "-0.000000006853", "-0.000000006853", "-0.000000006853", "-6.853228484704e-09", "-6.853228484704e-09", "-6.853228484704e-09", "-6.8532284847045e-09", "-6.8532284847045e-09", "-6.8532284847045e-09", "-0.0000000068532", "-0.0000000068532", "-0.0000000068532", }},
+ {{ "9e-10", "9.e-10", "+9e-10", "8.6e-10", "+8.6e-10", "8.6e-10", "0.0", "0.0", "+0.0", "8.6e-10", "8.6e-10", "+8.6e-10", "8.57e-10", "+8.57e-10", "8.57e-10", "0.00", "0.00", "+0.00", "8.57e-10", "8.57e-10", "+8.57e-10", "8.567e-10", "+8.567e-10", "8.567e-10", "0.000", "0.000", "+0.000", "8.567e-10", "8.567e-10", "+8.567e-10", "8.5665e-10", "+8.5665e-10", "8.5665e-10", "0.0000", "0.0000", "+0.0000", "8.5665e-10", "8.5665e-10", "+8.5665e-10", "8.56654e-10", "+8.56654e-10", "8.56654e-10", "0.00000", "0.00000", "+0.00000", "8.56654e-10", "8.56654e-10", "+8.56654e-10", "8.566536e-10", "+8.566536e-10", "8.566536e-10", "0.000000", "0.000000", "+0.000000", "8.566536e-10", "8.566536e-10", "+8.566536e-10", "8.5665356e-10", "+8.5665356e-10", "8.5665356e-10", "0.0000000", "0.0000000", "+0.0000000", "8.5665356e-10", "8.5665356e-10", "+8.5665356e-10", "8.56653561e-10", "+8.56653561e-10", "8.56653561e-10", "0.00000000", "0.00000000", "+0.00000000", "8.56653561e-10", "8.56653561e-10", "+8.56653561e-10", "8.566535606e-10", "+8.566535606e-10", "8.566535606e-10", "0.000000001", "0.000000001", "+0.000000001", "8.566535606e-10", "8.566535606e-10", "+8.566535606e-10", "8.5665356059e-10", "+8.5665356059e-10", "8.5665356059e-10", "0.0000000009", "0.0000000009", "+0.0000000009", "8.5665356059e-10", "8.5665356059e-10", "+8.5665356059e-10", "8.56653560588e-10", "+8.56653560588e-10", "8.56653560588e-10", "0.00000000086", "0.00000000086", "+0.00000000086", "8.56653560588e-10", "8.56653560588e-10", "+8.56653560588e-10", "8.566535605881e-10", "+8.566535605881e-10", "8.566535605881e-10", "0.000000000857", "0.000000000857", "+0.000000000857", "8.566535605881e-10", "8.566535605881e-10", "+8.566535605881e-10", "8.5665356058806e-10", "+8.5665356058806e-10", "8.5665356058806e-10", "0.0000000008567", "0.0000000008567", "+0.0000000008567", }},
+ {{ "-9e-10", "-9.e-10", "-9e-10", "-8.6e-10", "-8.6e-10", "-8.6e-10", "-0.0", "-0.0", "-0.0", "-8.6e-10", "-8.6e-10", "-8.6e-10", "-8.57e-10", "-8.57e-10", "-8.57e-10", "-0.00", "-0.00", "-0.00", "-8.57e-10", "-8.57e-10", "-8.57e-10", "-8.567e-10", "-8.567e-10", "-8.567e-10", "-0.000", "-0.000", "-0.000", "-8.567e-10", "-8.567e-10", "-8.567e-10", "-8.5665e-10", "-8.5665e-10", "-8.5665e-10", "-0.0000", "-0.0000", "-0.0000", "-8.5665e-10", "-8.5665e-10", "-8.5665e-10", "-8.56654e-10", "-8.56654e-10", "-8.56654e-10", "-0.00000", "-0.00000", "-0.00000", "-8.56654e-10", "-8.56654e-10", "-8.56654e-10", "-8.566536e-10", "-8.566536e-10", "-8.566536e-10", "-0.000000", "-0.000000", "-0.000000", "-8.566536e-10", "-8.566536e-10", "-8.566536e-10", "-8.5665356e-10", "-8.5665356e-10", "-8.5665356e-10", "-0.0000000", "-0.0000000", "-0.0000000", "-8.5665356e-10", "-8.5665356e-10", "-8.5665356e-10", "-8.56653561e-10", "-8.56653561e-10", "-8.56653561e-10", "-0.00000000", "-0.00000000", "-0.00000000", "-8.56653561e-10", "-8.56653561e-10", "-8.56653561e-10", "-8.566535606e-10", "-8.566535606e-10", "-8.566535606e-10", "-0.000000001", "-0.000000001", "-0.000000001", "-8.566535606e-10", "-8.566535606e-10", "-8.566535606e-10", "-8.5665356059e-10", "-8.5665356059e-10", "-8.5665356059e-10", "-0.0000000009", "-0.0000000009", "-0.0000000009", "-8.5665356059e-10", "-8.5665356059e-10", "-8.5665356059e-10", "-8.56653560588e-10", "-8.56653560588e-10", "-8.56653560588e-10", "-0.00000000086", "-0.00000000086", "-0.00000000086", "-8.56653560588e-10", "-8.56653560588e-10", "-8.56653560588e-10", "-8.566535605881e-10", "-8.566535605881e-10", "-8.566535605881e-10", "-0.000000000857", "-0.000000000857", "-0.000000000857", "-8.566535605881e-10", "-8.566535605881e-10", "-8.566535605881e-10", "-8.5665356058806e-10", "-8.5665356058806e-10", "-8.5665356058806e-10", "-0.0000000008567", "-0.0000000008567", "-0.0000000008567", }},
diff --git a/libs/multiprecision/test/test.hpp b/libs/multiprecision/test/test.hpp
new file mode 100644
index 0000000000..983005b05e
--- /dev/null
+++ b/libs/multiprecision/test/test.hpp
@@ -0,0 +1,299 @@
+///////////////////////////////////////////////////////////////
+// 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_
+//
+
+#ifndef BOOST_MULTIPRECISION_TEST_HPP
+#define BOOST_MULTIPRECISION_TEST_HPP
+
+#include <limits>
+#include <cmath>
+#include <typeinfo>
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/current_function.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_unsigned.hpp>
+#include <boost/multiprecision/number.hpp>
+
+namespace detail{
+
+template <class T>
+inline typename boost::disable_if_c<boost::is_unsigned<T>::value || boost::multiprecision::is_unsigned_number<T>::value, T>::type
+ abs(const T& a)
+{
+ return a < 0 ? -a : a;
+}
+
+template <class T>
+inline typename boost::enable_if_c<boost::is_unsigned<T>::value || boost::multiprecision::is_unsigned_number<T>::value, T>::type
+ abs(const T& a)
+{
+ return a;
+}
+
+}
+
+template <class T>
+typename boost::enable_if_c<boost::multiprecision::number_category<T>::value == boost::multiprecision::number_kind_integer, T>::type relative_error(T a, T b)
+{
+ return a > b ? a - b : b - a;
+}
+
+template <class T>
+typename boost::disable_if_c<(boost::multiprecision::number_category<T>::value == boost::multiprecision::number_kind_integer) || boost::multiprecision::is_interval_number<T>::value, T>::type relative_error(T a, T b)
+{
+ using std::abs;
+ using detail::abs;
+
+ T min_val = (std::numeric_limits<T>::min)();
+ T max_val = (std::numeric_limits<T>::max)();
+
+ if((a != 0) && (b != 0))
+ {
+ if(a == b)
+ return 0;
+
+ // TODO: use isfinite:
+ if(abs(b) >= max_val)
+ {
+ if(abs(a) >= max_val)
+ return 0; // one infinity is as good as another!
+ }
+ // If the result is denormalised, treat all denorms as equivalent:
+ if((a < min_val) && (a > 0))
+ a = min_val;
+ else if((a > -min_val) && (a < 0))
+ a = -min_val;
+ if((b < min_val) && (b > 0))
+ b = min_val;
+ else if((b > -min_val) && (b < 0))
+ b = -min_val;
+
+ return (std::max)(abs(T((a-b)/a)), abs(T((a-b)/b))) / std::numeric_limits<T>::epsilon();
+ }
+
+ // Handle special case where one or both are zero:
+ if(min_val == 0)
+ return abs(T(a-b));
+ if(abs(a) < min_val)
+ a = min_val;
+ if(abs(b) < min_val)
+ b = min_val;
+
+ return (std::max)(abs(T((a-b)/a)), abs(T((a-b)/b))) / std::numeric_limits<T>::epsilon();
+}
+
+template <class T, class U>
+typename boost::mpl::if_c<boost::is_convertible<T, U>::value, U, T>::type
+ relative_error(T a, U b)
+{
+ typedef typename boost::mpl::if_c<boost::is_convertible<T, U>::value, U, T>::type cast_type;
+ return relative_error<cast_type>(static_cast<cast_type>(a), static_cast<cast_type>(b));
+}
+
+template <class T>
+typename boost::enable_if_c<boost::multiprecision::is_interval_number<T>::value, T>::type relative_error(T a, T b)
+{
+ typename boost::multiprecision::component_type<T>::type am = median(a);
+ typename boost::multiprecision::component_type<T>::type bm = median(b);
+ return relative_error<typename boost::multiprecision::component_type<T>::type>(am, bm);
+}
+
+
+enum
+{
+ warn_on_fail,
+ error_on_fail,
+ abort_on_fail
+};
+
+template <class T>
+inline T epsilon_of(const T&)
+{
+ BOOST_STATIC_ASSERT(std::numeric_limits<T>::is_specialized);
+ return std::numeric_limits<T>::is_integer ? 1 : std::numeric_limits<T>::epsilon();
+}
+
+template <class T>
+inline int digits_of(const T&)
+{
+ return std::numeric_limits<T>::is_specialized ? std::numeric_limits<T>::digits10 + 2 : std::numeric_limits<long double>::digits10 + 2;
+}
+
+inline std::ostream& report_where(const char* file, int line, const char* function)
+{
+ if(function)
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM << "In function: "<< function << std::endl;
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM << file << ":" << line;
+ return BOOST_LIGHTWEIGHT_TEST_OSTREAM;
+}
+
+#define BOOST_MP_REPORT_WHERE report_where(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION)
+
+inline void report_severity(int severity)
+{
+ if(severity == error_on_fail)
+ ++boost::detail::test_errors();
+ else if(severity == abort_on_fail)
+ {
+ ++boost::detail::test_errors();
+ abort();
+ }
+}
+
+#define BOOST_MP_REPORT_SEVERITY(severity) report_severity(severity)
+
+template <class E>
+void report_unexpected_exception(const E& e, int severity, const char* file, int line, const char* function)
+{
+ report_where(file, line, function) << " Unexpected exception of type " << typeid(e).name() << std::endl;
+ BOOST_LIGHTWEIGHT_TEST_OSTREAM << "Errot message was: " << e.what() << std::endl;
+ BOOST_MP_REPORT_SEVERITY(severity);
+}
+
+#define BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity) \
+ catch(const std::exception& e) \
+ { report_unexpected_exception(e, severity, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION); }\
+ catch(...)\
+ { std::cout << "Exception of unknown type was thrown" << std::endl; report_severity(severity); }
+
+
+#define BOOST_CHECK_IMP(x, severity)\
+ try{ if(x){}else{\
+ BOOST_MP_REPORT_WHERE << " Failed predicate: " << BOOST_STRINGIZE(x) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_CHECK(x) BOOST_CHECK_IMP(x, error_on_fail)
+#define BOOST_WARN(x) BOOST_CHECK_IMP(x, warn_on_fail)
+#define BOOST_REQUIRE(x) BOOST_CHECK_IMP(x, abort_on_fail)
+
+#define BOOST_CLOSE_IMP(x, y, tol, severity)\
+ try{ if(relative_error(x, y) > tol){\
+ BOOST_MP_REPORT_WHERE << " Failed check for closeness: \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << x << "\n"\
+ << "Value of RHS was: " << y << "\n"\
+ << std::setprecision(5) << std::fixed\
+ << "Relative error was: " << relative_error(x, y) << "eps\n"\
+ << "Tolerance was: " << tol << "eps" << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_EQUAL_IMP(x, y, severity)\
+ try{ if(!((x) == (y))){\
+ BOOST_MP_REPORT_WHERE << " Failed check for equality: \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << (x) << "\n"\
+ << "Value of RHS was: " << (y) << "\n"\
+ << std::setprecision(3) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_NE_IMP(x, y, severity)\
+ try{ if(!(x != y)){\
+ BOOST_MP_REPORT_WHERE << " Failed check for non-equality: \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << x << "\n"\
+ << "Value of RHS was: " << y << "\n"\
+ << std::setprecision(3) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_LT_IMP(x, y, severity)\
+ try{ if(!(x < y)){\
+ BOOST_MP_REPORT_WHERE << " Failed check for less than: \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << x << "\n"\
+ << "Value of RHS was: " << y << "\n"\
+ << std::setprecision(3) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_GT_IMP(x, y, severity)\
+ try{ if(!(x > y)){\
+ BOOST_MP_REPORT_WHERE << " Failed check for greater than: \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << x << "\n"\
+ << "Value of RHS was: " << y << "\n"\
+ << std::setprecision(3) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_LE_IMP(x, y, severity)\
+ try{ if(!(x <= y)){\
+ BOOST_MP_REPORT_WHERE << " Failed check for less-than-equal-to: \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << x << "\n"\
+ << "Value of RHS was: " << y << "\n"\
+ << std::setprecision(3) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_GE_IMP(x, y, severity)\
+ try{ if(!(x >= y)){\
+ BOOST_MP_REPORT_WHERE << " Failed check for greater-than-equal-to \n" \
+ << std::setprecision(digits_of(x)) << std::scientific\
+ << "Value of LHS was: " << x << "\n"\
+ << "Value of RHS was: " << y << "\n"\
+ << std::setprecision(3) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ }BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_MT_CHECK_THROW_IMP(x, E, severity)\
+ try{ \
+ x;\
+ BOOST_MP_REPORT_WHERE << " Expected exception not thrown in expression " << BOOST_STRINGIZE(x) << std::endl;\
+ BOOST_MP_REPORT_SEVERITY(severity);\
+ }\
+ catch(const E&){}\
+ BOOST_MP_UNEXPECTED_EXCEPTION_CHECK(severity)
+
+#define BOOST_CHECK_CLOSE(x, y, tol) BOOST_CLOSE_IMP(x, y, ((tol / (100 * epsilon_of(x)))), error_on_fail)
+#define BOOST_WARN_CLOSE(x, y, tol) BOOST_CLOSE_IMP(x, y, (tol / (100 * epsilon_of(x))), warn_on_fail)
+#define BOOST_REQUIRE_CLOSE(x, y, tol) BOOST_CLOSE_IMP(x, y, (tol / (100 * epsilon_of(x))), abort_on_fail)
+
+#define BOOST_CHECK_CLOSE_FRACTION(x, y, tol) BOOST_CLOSE_IMP(x, y, ((tol / (epsilon_of(x)))), error_on_fail)
+#define BOOST_WARN_CLOSE_FRACTION(x, y, tol) BOOST_CLOSE_IMP(x, y, (tol / (epsilon_of(x))), warn_on_fail)
+#define BOOST_REQUIRE_CLOSE_FRACTION(x, y, tol) BOOST_CLOSE_IMP(x, y, (tol / (epsilon_of(x))), abort_on_fail)
+
+#define BOOST_CHECK_EQUAL(x, y) BOOST_EQUAL_IMP(x, y, error_on_fail)
+#define BOOST_WARN_EQUAL(x, y) BOOST_EQUAL_IMP(x, y, warn_on_fail)
+#define BOOST_REQUIRE_EQUAL(x, y) BOOST_EQUAL_IMP(x, y, abort_on_fail)
+
+#define BOOST_CHECK_NE(x, y) BOOST_NE_IMP(x, y, error_on_fail)
+#define BOOST_WARN_NE(x, y) BOOST_NE_IMP(x, y, warn_on_fail)
+#define BOOST_REQUIRE_NE(x, y) BOOST_NE_IMP(x, y, abort_on_fail)
+
+#define BOOST_CHECK_LT(x, y) BOOST_LT_IMP(x, y, error_on_fail)
+#define BOOST_WARN_LT(x, y) BOOST_LT_IMP(x, y, warn_on_fail)
+#define BOOST_REQUIRE_LT(x, y) BOOST_LT_IMP(x, y, abort_on_fail)
+
+#define BOOST_CHECK_GT(x, y) BOOST_GT_IMP(x, y, error_on_fail)
+#define BOOST_WARN_GT(x, y) BOOST_GT_IMP(x, y, warn_on_fail)
+#define BOOST_REQUIRE_GT(x, y) BOOST_GT_IMP(x, y, abort_on_fail)
+
+#define BOOST_CHECK_LE(x, y) BOOST_LE_IMP(x, y, error_on_fail)
+#define BOOST_WARN_LE(x, y) BOOST_LE_IMP(x, y, warn_on_fail)
+#define BOOST_REQUIRE_LE(x, y) BOOST_LE_IMP(x, y, abort_on_fail)
+
+#define BOOST_CHECK_GE(x, y) BOOST_GE_IMP(x, y, error_on_fail)
+#define BOOST_WARN_GE(x, y) BOOST_GE_IMP(x, y, warn_on_fail)
+#define BOOST_REQUIRE_GE(x, y) BOOST_GE_IMP(x, y, abort_on_fail)
+
+#define BOOST_CHECK_THROW(x, E) BOOST_MT_CHECK_THROW_IMP(x, E, error_on_fail)
+#define BOOST_WARN_THROW(x, E) BOOST_MT_CHECK_THROW_IMP(x, E, warn_on_fail)
+#define BOOST_REQUIRE_THROW(x, E) BOOST_MT_CHECK_THROW_IMP(x, E, abort_on_fail)
+
+#endif
diff --git a/libs/multiprecision/test/test_acos.cpp b/libs/multiprecision/test/test_acos.cpp
new file mode 100644
index 0000000000..2881121264
--- /dev/null
+++ b/libs/multiprecision/test/test_acos.cpp
@@ -0,0 +1,148 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ //
+ // Test with some exact binary values as input - this tests our code
+ // rather than the test data:
+ //
+ static const boost::array<boost::array<T, 2>, 13> exact_data =
+ {{
+ {{ 0.5, static_cast<T>("1.04719755119659774615421446109316762806572313312503527365831486410260546876206966620934494178070568932738269550442743555") }},
+ {{ 0.25, static_cast<T>("1.31811607165281796574566425464604046984639096659071471685354851741333314266208327690226867044304393238598144034722708676") }},
+ {{0.75, static_cast<T>("0.722734247813415611178377352641333362025218486424440267626754132583707381914630264964827610939101303690078815991333621490") }},
+ {{1 - std::ldexp(1.0, -20), static_cast<T>("0.00138106804176241718210883847756746694048570648553426714212025111150044290934710742282266738617709904634187850607042604204") }},
+ {{std::ldexp(1.0, -20), static_cast<T>("1.57079537312058021283676140197495835299636605165647561806789944133748780804448843729970624018104090863783682329820313127") }},
+ {{1, static_cast<T>("0") }},
+
+ {{0, static_cast<T>("1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404325664115332") }},
+
+ {{ -0.5, static_cast<T>("2.09439510239319549230842892218633525613144626625007054731662972820521093752413933241868988356141137865476539100885487110") }},
+ {{ -0.25, static_cast<T>("1.82347658193697527271697912863346241435077843278439110412139607489448326362412572172576615489907313559616664616605521989") }},
+ {{-0.75, static_cast<T>("2.41885840577637762728426603063816952217195091295066555334819045972410902437157873366320721440301576429206927052194868516") }},
+ {{-1 + std::ldexp(1.0, -20), static_cast<T>("3.14021158554803082128053454480193541725668369288957155383282434119631596337686189120521215795593996893580620800721188061") }},
+ {{-std::ldexp(1.0, -20), static_cast<T>("1.57079728046921302562588198130454453120080334771863020290704515097032859824172056132832858516107615934431126321507917538") }},
+ {{-1, static_cast<T>("3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230665") }},
+ }};
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = acos(exact_data[k][0]);
+ T e = relative_error(val, exact_data[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;
+#ifdef TEST_CPP_BIN_FLOAT
+ BOOST_TEST(max_err < 120);
+#else
+ BOOST_TEST(max_err < 60);
+#endif
+ BOOST_TEST(asin(T(0)) == 0);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_adapt_serial.cpp b/libs/multiprecision/test/test_adapt_serial.cpp
new file mode 100644
index 0000000000..33c04a3d0d
--- /dev/null
+++ b/libs/multiprecision/test/test_adapt_serial.cpp
@@ -0,0 +1,163 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/logged_adaptor.hpp>
+#include <boost/multiprecision/debug_adaptor.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/timer.hpp>
+#include "test.hpp"
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/exception/all.hpp>
+
+template <class T>
+T generate_random(unsigned bits_wanted)
+{
+ static boost::random::mt19937 gen;
+ typedef boost::random::mt19937::result_type random_type;
+
+ T max_val;
+ unsigned digits;
+ if(std::numeric_limits<T>::is_bounded && (bits_wanted == (unsigned)std::numeric_limits<T>::digits))
+ {
+ max_val = (std::numeric_limits<T>::max)();
+ digits = std::numeric_limits<T>::digits;
+ }
+ else
+ {
+ max_val = T(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ T val = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ val %= max_val;
+ return val;
+}
+
+template <class T>
+void test_neg(const T& x, const boost::mpl::true_&)
+{
+ T val = -x;
+ try
+ {
+ std::stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+
+ ss.clear();
+ boost::archive::binary_oarchive ob(ss);
+ ob << static_cast<const T&>(val);
+ boost::archive::binary_iarchive ib(ss);
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+}
+template <class T>
+void test_neg(const T& , const boost::mpl::false_&){}
+
+template <class T>
+void test()
+{
+ using namespace boost::multiprecision;
+
+ boost::random::mt19937 gen;
+ boost::uniform_int<> d(3, std::numeric_limits<T>::is_bounded ? std::numeric_limits<T>::digits : 3000);
+ boost::timer tim;
+
+ while(true)
+ {
+ T val = generate_random<T>(d(gen));
+ try
+ {
+ std::stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+
+ ss.clear();
+ boost::archive::binary_oarchive ob(ss);
+ ob << static_cast<const T&>(val);
+ boost::archive::binary_iarchive ib(ss);
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+
+ test_neg(val, boost::mpl::bool_<std::numeric_limits<T>::is_signed>());
+ //
+ // Check to see if test is taking too long.
+ // Tests run on the compiler farm time out after 300 seconds,
+ // so don't get too close to that:
+ //
+ if(tim.elapsed() > 30)
+ {
+ std::cout << "Timeout reached, aborting tests now....\n";
+ break;
+ }
+ }
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+ test<number<logged_adaptor<cpp_int_backend<> > > >();
+ test<number<debug_adaptor<cpp_int_backend<> > > >();
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_arithmetic.hpp b/libs/multiprecision/test/test_arithmetic.hpp
new file mode 100644
index 0000000000..d787f938db
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic.hpp
@@ -0,0 +1,1844 @@
+///////////////////////////////////////////////////////////////
+// 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 TEST_VLD
+#include <vld.h>
+#endif
+
+#include <boost/math/special_functions/pow.hpp>
+#include <boost/math/common_factor_rt.hpp>
+#include "test.hpp"
+
+template <class T>
+struct is_boost_rational : public boost::mpl::false_{};
+
+#ifdef BOOST_MSVC
+// warning C4127: conditional expression is constant
+#pragma warning(disable:4127)
+#endif
+
+template <class Target, class Source>
+Target checked_lexical_cast(const Source& val)
+{
+ try
+ {
+ return boost::lexical_cast<Target>(val);
+ }
+ catch(...)
+ {
+ std::cerr << "Error in lexical cast\nSource type = " << typeid(Source).name() << " \"" << val << "\"\n";
+ std::cerr << "Target type = " << typeid(Target).name() << std::endl;
+ throw;
+ }
+}
+
+
+bool isfloat(float){ return true; }
+bool isfloat(double){ return true; }
+bool isfloat(long double){ return true; }
+template <class T> bool isfloat(T){ return false; }
+
+namespace detail{
+
+template<class tag, class Arg1, class Arg2, class Arg3, class Arg4>
+typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type
+ abs(boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4> const& v)
+{
+ typedef typename boost::multiprecision::detail::expression<tag, Arg1, Arg2, Arg3, Arg4>::result_type result_type;
+ return v < 0 ? result_type(-v) : result_type(v);
+}
+
+}
+
+template <class T>
+struct is_twos_complement_integer : public boost::mpl::true_ {};
+
+template <class T>
+struct related_type
+{
+ typedef T type;
+};
+
+template <class Real, class Val>
+void test_comparisons(Val, Val, const boost::mpl::false_)
+{}
+
+int normalize_compare_result(int r)
+{
+ return r > 0 ? 1 : r < 0 ? -1 : 0;
+}
+
+template <class Real, class Val>
+void test_comparisons(Val a, Val b, const boost::mpl::true_)
+{
+ Real r1(a);
+ Real r2(b);
+ Real z(1);
+
+ int cr = a < b ? -1 : a > b ? 1 : 0;
+
+ BOOST_CHECK_EQUAL(r1 == r2, a == b);
+ BOOST_CHECK_EQUAL(r1 != r2, a != b);
+ BOOST_CHECK_EQUAL(r1 <= r2, a <= b);
+ BOOST_CHECK_EQUAL(r1 < r2, a < b);
+ BOOST_CHECK_EQUAL(r1 >= r2, a >= b);
+ BOOST_CHECK_EQUAL(r1 > r2, a > b);
+
+ BOOST_CHECK_EQUAL(r1 == b, a == b);
+ BOOST_CHECK_EQUAL(r1 != b, a != b);
+ BOOST_CHECK_EQUAL(r1 <= b, a <= b);
+ BOOST_CHECK_EQUAL(r1 < b, a < b);
+ BOOST_CHECK_EQUAL(r1 >= b, a >= b);
+ BOOST_CHECK_EQUAL(r1 > b, a > b);
+
+ BOOST_CHECK_EQUAL(a == r2, a == b);
+ BOOST_CHECK_EQUAL(a != r2, a != b);
+ BOOST_CHECK_EQUAL(a <= r2, a <= b);
+ BOOST_CHECK_EQUAL(a < r2, a < b);
+ BOOST_CHECK_EQUAL(a >= r2, a >= b);
+ BOOST_CHECK_EQUAL(a > r2, a > b);
+
+ BOOST_CHECK_EQUAL(r1*z == r2, a == b);
+ BOOST_CHECK_EQUAL(r1*z != r2, a != b);
+ BOOST_CHECK_EQUAL(r1*z <= r2, a <= b);
+ BOOST_CHECK_EQUAL(r1*z < r2, a < b);
+ BOOST_CHECK_EQUAL(r1*z >= r2, a >= b);
+ BOOST_CHECK_EQUAL(r1*z > r2, a > b);
+
+ BOOST_CHECK_EQUAL(r1 == r2*z, a == b);
+ BOOST_CHECK_EQUAL(r1 != r2*z, a != b);
+ BOOST_CHECK_EQUAL(r1 <= r2*z, a <= b);
+ BOOST_CHECK_EQUAL(r1 < r2*z, a < b);
+ BOOST_CHECK_EQUAL(r1 >= r2*z, a >= b);
+ BOOST_CHECK_EQUAL(r1 > r2*z, a > b);
+
+ BOOST_CHECK_EQUAL(r1*z == r2*z, a == b);
+ BOOST_CHECK_EQUAL(r1*z != r2*z, a != b);
+ BOOST_CHECK_EQUAL(r1*z <= r2*z, a <= b);
+ BOOST_CHECK_EQUAL(r1*z < r2*z, a < b);
+ BOOST_CHECK_EQUAL(r1*z >= r2*z, a >= b);
+ BOOST_CHECK_EQUAL(r1*z > r2*z, a > b);
+
+ BOOST_CHECK_EQUAL(r1*z == b, a == b);
+ BOOST_CHECK_EQUAL(r1*z != b, a != b);
+ BOOST_CHECK_EQUAL(r1*z <= b, a <= b);
+ BOOST_CHECK_EQUAL(r1*z < b, a < b);
+ BOOST_CHECK_EQUAL(r1*z >= b, a >= b);
+ BOOST_CHECK_EQUAL(r1*z > b, a > b);
+
+ BOOST_CHECK_EQUAL(a == r2*z, a == b);
+ BOOST_CHECK_EQUAL(a != r2*z, a != b);
+ BOOST_CHECK_EQUAL(a <= r2*z, a <= b);
+ BOOST_CHECK_EQUAL(a < r2*z, a < b);
+ BOOST_CHECK_EQUAL(a >= r2*z, a >= b);
+ BOOST_CHECK_EQUAL(a > r2*z, a > b);
+
+ BOOST_CHECK_EQUAL(normalize_compare_result(r1.compare(r2)), cr);
+ BOOST_CHECK_EQUAL(normalize_compare_result(r2.compare(r1)), -cr);
+ BOOST_CHECK_EQUAL(normalize_compare_result(r1.compare(b)), cr);
+ BOOST_CHECK_EQUAL(normalize_compare_result(r2.compare(a)), -cr);
+}
+
+template <class Real, class Exp>
+void test_conditional(Real v, Exp e)
+{
+ //
+ // Verify that Exp is usable in Boolean contexts, and has the same value as v:
+ //
+ if(e)
+ {
+ BOOST_CHECK(v);
+ }
+ else
+ {
+ BOOST_CHECK(!v);
+ }
+ if(!e)
+ {
+ BOOST_CHECK(!v);
+ }
+ else
+ {
+ BOOST_CHECK(v);
+ }
+}
+
+template <class Real>
+void test_complement(Real a, Real b, Real c, const boost::mpl::true_&)
+{
+ int i = 1020304;
+ int j = 56789123;
+ int sign_mask = ~0;
+ if(std::numeric_limits<Real>::is_signed)
+ {
+ BOOST_CHECK_EQUAL(~a , (~i & sign_mask));
+ c = a & ~b;
+ BOOST_CHECK_EQUAL(c , (i & (~j & sign_mask)));
+ c = ~(a | b);
+ BOOST_CHECK_EQUAL(c , (~(i | j) & sign_mask));
+ }
+ else
+ {
+ BOOST_CHECK_EQUAL((~a & a) , 0);
+ }
+}
+
+template <class Real>
+void test_complement(Real, Real, Real, const boost::mpl::false_&)
+{
+}
+
+template <class Real, class T>
+void test_integer_ops(const T&){}
+
+template <class Real>
+void test_rational(const boost::mpl::true_&)
+{
+ Real a(2);
+ a /= 3;
+ BOOST_CHECK_EQUAL(numerator(a) , 2);
+ BOOST_CHECK_EQUAL(denominator(a) , 3);
+ Real b(4);
+ b /= 6;
+ BOOST_CHECK_EQUAL(a , b);
+
+ //
+ // Check IO code:
+ //
+ std::stringstream ss;
+ ss << a;
+ ss >> b;
+ BOOST_CHECK_EQUAL(a, b);
+}
+
+template <class Real>
+void test_rational(const boost::mpl::false_&)
+{
+ Real a(2);
+ a /= 3;
+ BOOST_CHECK_EQUAL(numerator(a) , 2);
+ BOOST_CHECK_EQUAL(denominator(a) , 3);
+ Real b(4);
+ b /= 6;
+ BOOST_CHECK_EQUAL(a , b);
+
+ BOOST_CHECK_THROW(Real(a / 0), std::overflow_error);
+ BOOST_CHECK_THROW(Real("3.14"), std::runtime_error);
+ b = Real("2/3");
+ BOOST_CHECK_EQUAL(a, b);
+ //
+ // Check IO code:
+ //
+ std::stringstream ss;
+ ss << a;
+ ss >> b;
+ BOOST_CHECK_EQUAL(a, b);
+}
+
+template <class Real>
+void test_integer_ops(const boost::mpl::int_<boost::multiprecision::number_kind_rational>&)
+{
+ test_rational<Real>(is_boost_rational<Real>());
+}
+
+template <class Real>
+void test_signed_integer_ops(const boost::mpl::true_&)
+{
+ Real a(20);
+ Real b(7);
+ Real c(5);
+ BOOST_CHECK_EQUAL(-a % c , 0);
+ BOOST_CHECK_EQUAL(-a % b , -20 % 7);
+ BOOST_CHECK_EQUAL(-a % -b , -20 % -7);
+ BOOST_CHECK_EQUAL(a % -b , 20 % -7);
+ BOOST_CHECK_EQUAL(-a % 7 , -20 % 7);
+ BOOST_CHECK_EQUAL(-a % -7 , -20 % -7);
+ BOOST_CHECK_EQUAL(a % -7 , 20 % -7);
+ BOOST_CHECK_EQUAL(-a % 7u , -20 % 7);
+ BOOST_CHECK_EQUAL(-a % a , 0);
+ BOOST_CHECK_EQUAL(-a % 5 , 0);
+ BOOST_CHECK_EQUAL(-a % -5 , 0);
+ BOOST_CHECK_EQUAL(a % -5 , 0);
+
+ b = -b;
+ BOOST_CHECK_EQUAL(a % b , 20 % -7);
+ a = -a;
+ BOOST_CHECK_EQUAL(a % b , -20 % -7);
+ BOOST_CHECK_EQUAL(a % -7 , -20 % -7);
+ b = 7;
+ BOOST_CHECK_EQUAL(a % b , -20 % 7);
+ BOOST_CHECK_EQUAL(a % 7 , -20 % 7);
+ BOOST_CHECK_EQUAL(a % 7u , -20 % 7);
+
+ a = 20;
+ a %= b;
+ BOOST_CHECK_EQUAL(a , 20 % 7);
+ a = -20;
+ a %= b;
+ BOOST_CHECK_EQUAL(a , -20 % 7);
+ a = 20;
+ a %= -b;
+ BOOST_CHECK_EQUAL(a , 20 % -7);
+ a = -20;
+ a %= -b;
+ BOOST_CHECK_EQUAL(a , -20 % -7);
+ a = 5;
+ a %= b - a;
+ BOOST_CHECK_EQUAL(a , 5 % (7-5));
+ a = -20;
+ a %= 7;
+ BOOST_CHECK_EQUAL(a , -20 % 7);
+ a = 20;
+ a %= -7;
+ BOOST_CHECK_EQUAL(a , 20 % -7);
+ a = -20;
+ a %= -7;
+ BOOST_CHECK_EQUAL(a , -20 % -7);
+#ifndef BOOST_NO_LONG_LONG
+ a = -20;
+ a %= 7uLL;
+ BOOST_CHECK_EQUAL(a , -20 % 7);
+ a = 20;
+ a %= -7LL;
+ BOOST_CHECK_EQUAL(a , 20 % -7);
+ a = -20;
+ a %= -7LL;
+ BOOST_CHECK_EQUAL(a , -20 % -7);
+#endif
+ a = 400;
+ b = 45;
+ BOOST_CHECK_EQUAL(gcd(a, -45) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(a, -45) , boost::math::lcm(400, 45));
+ BOOST_CHECK_EQUAL(gcd(-400, b) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(-400, b) , boost::math::lcm(400, 45));
+ a = -20;
+ BOOST_CHECK_EQUAL(abs(a) , 20);
+ BOOST_CHECK_EQUAL(abs(-a) , 20);
+ BOOST_CHECK_EQUAL(abs(+a) , 20);
+ a = 20;
+ BOOST_CHECK_EQUAL(abs(a) , 20);
+ BOOST_CHECK_EQUAL(abs(-a) , 20);
+ BOOST_CHECK_EQUAL(abs(+a) , 20);
+ a = -400;
+ b = 45;
+ BOOST_CHECK_EQUAL(gcd(a, b) , boost::math::gcd(-400, 45));
+ BOOST_CHECK_EQUAL(lcm(a, b) , boost::math::lcm(-400, 45));
+ BOOST_CHECK_EQUAL(gcd(a, 45) , boost::math::gcd(-400, 45));
+ BOOST_CHECK_EQUAL(lcm(a, 45) , boost::math::lcm(-400, 45));
+ BOOST_CHECK_EQUAL(gcd(-400, b) , boost::math::gcd(-400, 45));
+ BOOST_CHECK_EQUAL(lcm(-400, b) , boost::math::lcm(-400, 45));
+ Real r;
+ divide_qr(a, b, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ BOOST_CHECK_EQUAL(integer_modulus(a, 57) , abs(a % 57));
+ b = -57;
+ divide_qr(a, b, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ BOOST_CHECK_EQUAL(integer_modulus(a, -57) , abs(a % -57));
+ a = 458;
+ divide_qr(a, b, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ BOOST_CHECK_EQUAL(integer_modulus(a, -57) , abs(a % -57));
+}
+template <class Real>
+void test_signed_integer_ops(const boost::mpl::false_&)
+{
+}
+
+template <class Real>
+void test_integer_ops(const boost::mpl::int_<boost::multiprecision::number_kind_integer>&)
+{
+ test_signed_integer_ops<Real>(boost::mpl::bool_<std::numeric_limits<Real>::is_signed>());
+
+ Real a(20);
+ Real b(7);
+ Real c(5);
+ BOOST_CHECK_EQUAL(a % b , 20 % 7);
+ BOOST_CHECK_EQUAL(a % 7 , 20 % 7);
+ BOOST_CHECK_EQUAL(a % 7u , 20 % 7);
+ BOOST_CHECK_EQUAL(a % a , 0);
+ BOOST_CHECK_EQUAL(a % c , 0);
+ BOOST_CHECK_EQUAL(a % 5 , 0);
+ a = a % (b + 0);
+ BOOST_CHECK_EQUAL(a , 20 % 7);
+ a = 20;
+ c = (a + 2) % (a - 1);
+ BOOST_CHECK_EQUAL(c , 22 % 19);
+ c = 5;
+ a = b % (a - 15);
+ BOOST_CHECK_EQUAL(a , 7 % 5);
+ a = 20;
+
+ a = 20;
+ a %= 7;
+ BOOST_CHECK_EQUAL(a , 20 % 7);
+#ifndef BOOST_NO_LONG_LONG
+ a = 20;
+ a %= 7uLL;
+ BOOST_CHECK_EQUAL(a , 20 % 7);
+#endif
+ a = 20;
+ BOOST_CHECK_EQUAL(++a , 21);
+ BOOST_CHECK_EQUAL(--a , 20);
+ BOOST_CHECK_EQUAL(a++ , 20);
+ BOOST_CHECK_EQUAL(a , 21);
+ BOOST_CHECK_EQUAL(a-- , 21);
+ BOOST_CHECK_EQUAL(a , 20);
+ a = 2000;
+ a <<= 20;
+ BOOST_CHECK_EQUAL(a , 2000L << 20);
+ a >>= 20;
+ BOOST_CHECK_EQUAL(a , 2000);
+ a <<= 20u;
+ BOOST_CHECK_EQUAL(a , 2000L << 20);
+ a >>= 20u;
+ BOOST_CHECK_EQUAL(a , 2000);
+ BOOST_CHECK_THROW(a <<= -20, std::out_of_range);
+ BOOST_CHECK_THROW(a >>= -20, std::out_of_range);
+ BOOST_CHECK_THROW(Real(a << -20), std::out_of_range);
+ BOOST_CHECK_THROW(Real(a >> -20), std::out_of_range);
+#ifndef BOOST_NO_LONG_LONG
+ if(sizeof(long long) > sizeof(std::size_t))
+ {
+ // extreme values should trigger an exception:
+ BOOST_CHECK_THROW(a >>= (1uLL << (sizeof(long long) * CHAR_BIT - 2)), std::out_of_range);
+ BOOST_CHECK_THROW(a <<= (1uLL << (sizeof(long long) * CHAR_BIT - 2)), std::out_of_range);
+ BOOST_CHECK_THROW(a >>= -(1LL << (sizeof(long long) * CHAR_BIT - 2)), std::out_of_range);
+ BOOST_CHECK_THROW(a <<= -(1LL << (sizeof(long long) * CHAR_BIT - 2)), std::out_of_range);
+ BOOST_CHECK_THROW(a >>= (1LL << (sizeof(long long) * CHAR_BIT - 2)), std::out_of_range);
+ BOOST_CHECK_THROW(a <<= (1LL << (sizeof(long long) * CHAR_BIT - 2)), std::out_of_range);
+ // Unless they fit within range:
+ a = 2000L;
+ BOOST_CHECK_EQUAL((a <<= 20uLL) , (2000L << 20));
+ a = 2000;
+ BOOST_CHECK_EQUAL((a <<= 20LL) , (2000L << 20));
+
+ BOOST_CHECK_THROW(Real(a >> (1uLL << (sizeof(long long) * CHAR_BIT - 2))), std::out_of_range);
+ BOOST_CHECK_THROW(Real(a <<= (1uLL << (sizeof(long long) * CHAR_BIT - 2))), std::out_of_range);
+ BOOST_CHECK_THROW(Real(a >>= -(1LL << (sizeof(long long) * CHAR_BIT - 2))), std::out_of_range);
+ BOOST_CHECK_THROW(Real(a <<= -(1LL << (sizeof(long long) * CHAR_BIT - 2))), std::out_of_range);
+ BOOST_CHECK_THROW(Real(a >>= (1LL << (sizeof(long long) * CHAR_BIT - 2))), std::out_of_range);
+ BOOST_CHECK_THROW(Real(a <<= (1LL << (sizeof(long long) * CHAR_BIT - 2))), std::out_of_range);
+ // Unless they fit within range:
+ a = 2000L;
+ BOOST_CHECK_EQUAL(Real(a << 20uLL) , (2000L << 20));
+ a = 2000;
+ BOOST_CHECK_EQUAL(Real(a << 20LL) , (2000L << 20));
+ }
+#endif
+ a = 20;
+ b = a << 20;
+ BOOST_CHECK_EQUAL(b , (20 << 20));
+ b = a >> 2;
+ BOOST_CHECK_EQUAL(b , (20 >> 2));
+ b = (a + 2) << 10;
+ BOOST_CHECK_EQUAL(b , (22 << 10));
+ b = (a + 3) >> 3;
+ BOOST_CHECK_EQUAL(b , (23 >> 3));
+ //
+ // Bit fiddling:
+ //
+ int i = 1020304;
+ int j = 56789123;
+ int k = 4523187;
+ a = i;
+ b = j;
+ c = a;
+ c &= b;
+ BOOST_CHECK_EQUAL(c , (i & j));
+ c = a;
+ c &= j;
+ BOOST_CHECK_EQUAL(c , (i & j));
+ c = a;
+ c &= a + b;
+ BOOST_CHECK_EQUAL(c , (i & (i + j)));
+ BOOST_CHECK_EQUAL((a & b) , (i & j));
+ c = k;
+ a = a & (b + k);
+ BOOST_CHECK_EQUAL(a , (i & (j + k)));
+ a = i;
+ a = (b + k) & a;
+ BOOST_CHECK_EQUAL(a , (i & (j + k)));
+ a = i;
+ c = a & b & k;
+ BOOST_CHECK_EQUAL(c , (i&j&k));
+ c = a;
+ c &= (c+b);
+ BOOST_CHECK_EQUAL(c , (i & (i+j)));
+ c = a & (b | 1);
+ BOOST_CHECK_EQUAL(c , (i & (j | 1)));
+
+ test_complement<Real>(a, b, c, typename is_twos_complement_integer<Real>::type());
+
+ a = i;
+ b = j;
+ c = a;
+ c |= b;
+ BOOST_CHECK_EQUAL(c , (i | j));
+ c = a;
+ c |= j;
+ BOOST_CHECK_EQUAL(c , (i | j));
+ c = a;
+ c |= a + b;
+ BOOST_CHECK_EQUAL(c , (i | (i + j)));
+ BOOST_CHECK_EQUAL((a | b) , (i | j));
+ c = k;
+ a = a | (b + k);
+ BOOST_CHECK_EQUAL(a , (i | (j + k)));
+ a = i;
+ a = (b + k) | a;
+ BOOST_CHECK_EQUAL(a , (i | (j + k)));
+ a = i;
+ c = a | b | k;
+ BOOST_CHECK_EQUAL(c , (i|j|k));
+ c = a;
+ c |= (c + b);
+ BOOST_CHECK_EQUAL(c , (i | (i+j)));
+ c = a | (b | 1);
+ BOOST_CHECK_EQUAL(c , (i | (j | 1)));
+
+ a = i;
+ b = j;
+ c = a;
+ c ^= b;
+ BOOST_CHECK_EQUAL(c , (i ^ j));
+ c = a;
+ c ^= j;
+ BOOST_CHECK_EQUAL(c , (i ^ j));
+ c = a;
+ c ^= a + b;
+ BOOST_CHECK_EQUAL(c , (i ^ (i + j)));
+ BOOST_CHECK_EQUAL((a ^ b) , (i ^ j));
+ c = k;
+ a = a ^ (b + k);
+ BOOST_CHECK_EQUAL(a , (i ^ (j + k)));
+ a = i;
+ a = (b + k) ^ a;
+ BOOST_CHECK_EQUAL(a , (i ^ (j + k)));
+ a = i;
+ c = a ^ b ^ k;
+ BOOST_CHECK_EQUAL(c , (i^j^k));
+ c = a;
+ c ^= (c + b);
+ BOOST_CHECK_EQUAL(c , (i ^ (i+j)));
+ c = a ^ (b | 1);
+ BOOST_CHECK_EQUAL(c , (i ^ (j | 1)));
+
+ a = i;
+ b = j;
+ c = k;
+ //
+ // Non-member functions:
+ //
+ a = 400;
+ b = 45;
+ BOOST_CHECK_EQUAL(gcd(a, b) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(a, b) , boost::math::lcm(400, 45));
+ BOOST_CHECK_EQUAL(gcd(a, 45) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(a, 45) , boost::math::lcm(400, 45));
+ BOOST_CHECK_EQUAL(gcd(a, 45u) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(a, 45u) , boost::math::lcm(400, 45));
+ BOOST_CHECK_EQUAL(gcd(400, b) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(400, b) , boost::math::lcm(400, 45));
+ BOOST_CHECK_EQUAL(gcd(400u, b) , boost::math::gcd(400, 45));
+ BOOST_CHECK_EQUAL(lcm(400u, b) , boost::math::lcm(400, 45));
+
+ //
+ // Conditionals involving 2 arg functions:
+ //
+ test_conditional(Real(gcd(a, b)), gcd(a, b));
+
+ Real r;
+ divide_qr(a, b, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ divide_qr(a + 0, b, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ divide_qr(a, b+0, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ divide_qr(a+0, b+0, c, r);
+ BOOST_CHECK_EQUAL(c , a / b);
+ BOOST_CHECK_EQUAL(r , a % b);
+ BOOST_CHECK_EQUAL(integer_modulus(a, 57) , a % 57);
+ for(unsigned i = 0; i < 20; ++i)
+ {
+ if(std::numeric_limits<Real>::is_specialized && (!std::numeric_limits<Real>::is_bounded || ((int)i * 17 < std::numeric_limits<Real>::digits)))
+ {
+ BOOST_CHECK_EQUAL(lsb(Real(1) << (i * 17)) , i * 17);
+ BOOST_CHECK_EQUAL(msb(Real(1) << (i * 17)) , i * 17);
+ BOOST_CHECK(bit_test(Real(1) << (i * 17), i * 17));
+ BOOST_CHECK(!bit_test(Real(1) << (i * 17), i * 17 + 1));
+ if(i)
+ {
+ BOOST_CHECK(!bit_test(Real(1) << (i * 17), i * 17 - 1));
+ }
+ Real zero(0);
+ BOOST_CHECK(bit_test(bit_set(zero, i * 17), i * 17));
+ zero = 0;
+ BOOST_CHECK_EQUAL(bit_flip(zero, i*17) , Real(1) << i * 17);
+ zero = Real(1) << i * 17;
+ BOOST_CHECK_EQUAL(bit_flip(zero, i * 17) , 0);
+ zero = Real(1) << i * 17;
+ BOOST_CHECK_EQUAL(bit_unset(zero, i * 17) , 0);
+ }
+ }
+ //
+ // pow, powm:
+ //
+ BOOST_CHECK_EQUAL(pow(Real(3), 4) , 81);
+ BOOST_CHECK_EQUAL(pow(Real(3) + Real(0), 4) , 81);
+ BOOST_CHECK_EQUAL(powm(Real(3), Real(4), Real(13)) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), Real(4), 13) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), Real(4), Real(13) + 0) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), Real(4) + 0, Real(13)) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), Real(4) + 0, 13) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), Real(4) + 0, Real(13) + 0) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), 4 + 0, Real(13)) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), 4 + 0, 13) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3), 4 + 0, Real(13) + 0) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, Real(4), Real(13)) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, Real(4), 13) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, Real(4), Real(13) + 0) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, Real(4) + 0, Real(13)) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, Real(4) + 0, 13) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, Real(4) + 0, Real(13) + 0) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, 4 + 0, Real(13)) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, 4 + 0, 13) , 81 % 13);
+ BOOST_CHECK_EQUAL(powm(Real(3) + 0, 4 + 0, Real(13) + 0) , 81 % 13);
+ //
+ // Conditionals involving 3 arg functions:
+ //
+ test_conditional(Real(powm(Real(3), Real(4), Real(13))), powm(Real(3), Real(4), Real(13)));
+
+ //
+ // Things that are expected errors:
+ //
+ BOOST_CHECK_THROW(Real("3.14"), std::runtime_error);
+ BOOST_CHECK_THROW(Real("3L"), std::runtime_error);
+ BOOST_CHECK_THROW(Real(Real(20) / 0u), std::overflow_error);
+ //
+ // Extra tests added for full coverage:
+ //
+ a = 20;
+ b = 7;
+ c = 20 % b;
+ BOOST_CHECK_EQUAL(c , (20 % 7));
+ c = 20 % (b + 0);
+ BOOST_CHECK_EQUAL(c , (20 % 7));
+ c = a & 10;
+ BOOST_CHECK_EQUAL(c , (20 & 10));
+ c = 10 & a;
+ BOOST_CHECK_EQUAL(c , (20 & 10));
+ c = (a + 0) & (b + 0);
+ BOOST_CHECK_EQUAL(c , (20 & 7));
+ c = 10 & (a + 0);
+ BOOST_CHECK_EQUAL(c , (20 & 10));
+ c = 10 | a;
+ BOOST_CHECK_EQUAL(c , (20 | 10));
+ c = (a + 0) | (b + 0);
+ BOOST_CHECK(c == (20 | 7))
+ c = 20 | (b + 0);
+ BOOST_CHECK_EQUAL(c , (20 | 7));
+ c = a ^ 7;
+ BOOST_CHECK_EQUAL(c , (20 ^ 7));
+ c = 20 ^ b;
+ BOOST_CHECK_EQUAL(c , (20 ^ 7));
+ c = (a + 0) ^ (b + 0);
+ BOOST_CHECK_EQUAL(c , (20 ^ 7));
+ c = 20 ^ (b + 0);
+ BOOST_CHECK_EQUAL(c , (20 ^ 7));
+}
+
+template <class Real, class T>
+void test_float_funcs(const T&){}
+
+template <class Real>
+void test_float_funcs(const boost::mpl::true_&)
+{
+ if(boost::multiprecision::is_interval_number<Real>::value)
+ return;
+ //
+ // Test variable reuse in function calls, see https://svn.boost.org/trac/boost/ticket/8326
+ //
+ Real a(2), b(10);
+ a = pow(a, b);
+ BOOST_CHECK_EQUAL(a, 1024);
+ a = 2;
+ b = pow(a, b);
+ BOOST_CHECK_EQUAL(b, 1024);
+ b = 10;
+ a = pow(a, 10);
+ BOOST_CHECK_EQUAL(a, 1024);
+ a = -2;
+ a = abs(a);
+ BOOST_CHECK_EQUAL(a, 2);
+ a = -2;
+ a = fabs(a);
+ BOOST_CHECK_EQUAL(a, 2);
+ a = 2.5;
+ a = floor(a);
+ BOOST_CHECK_EQUAL(a, 2);
+ a = 2.5;
+ a = ceil(a);
+ BOOST_CHECK_EQUAL(a, 3);
+ a = 2.5;
+ a = trunc(a);
+ BOOST_CHECK_EQUAL(a, 2);
+ a = 2.25;
+ a = round(a);
+ BOOST_CHECK_EQUAL(a, 2);
+ a = 2;
+ a = ldexp(a, 1);
+ BOOST_CHECK_EQUAL(a, 4);
+ int i;
+ a = frexp(a, &i);
+ BOOST_CHECK_EQUAL(a, 0.5);
+
+ Real tol = std::numeric_limits<Real>::epsilon() * 3;
+ a = 4;
+ a = sqrt(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, 2, tol);
+ a = 3;
+ a = exp(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(exp(Real(3))), tol);
+ a = 3;
+ a = log(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(log(Real(3))), tol);
+ a = 3;
+ a = log10(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(log10(Real(3))), tol);
+
+ a = 0.5;
+ a = sin(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(sin(Real(0.5))), tol);
+ a = 0.5;
+ a = cos(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(cos(Real(0.5))), tol);
+ a = 0.5;
+ a = tan(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(tan(Real(0.5))), tol);
+ a = 0.5;
+ a = asin(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(asin(Real(0.5))), tol);
+ a = 0.5;
+ a = acos(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(acos(Real(0.5))), tol);
+ a = 0.5;
+ a = atan(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(atan(Real(0.5))), tol);
+ a = 0.5;
+ a = sinh(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(sinh(Real(0.5))), tol);
+ a = 0.5;
+ a = cosh(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(cosh(Real(0.5))), tol);
+ a = 0.5;
+ a = tanh(a);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(tanh(Real(0.5))), tol);
+ a = 4;
+ b = 2;
+ a = fmod(a, b);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(fmod(Real(4), Real(2))), tol);
+ a = 4;
+ b = fmod(a, b);
+ BOOST_CHECK_CLOSE_FRACTION(b, Real(fmod(Real(4), Real(2))), tol);
+ b = 2;
+ a = atan2(a, b);
+ BOOST_CHECK_CLOSE_FRACTION(a, Real(atan2(Real(4), Real(2))), tol);
+ a = 4;
+ b = atan2(a, b);
+ BOOST_CHECK_CLOSE_FRACTION(b, Real(atan2(Real(4), Real(2))), tol);
+}
+
+template <class Real, class T>
+void test_float_ops(const T&){}
+
+template <class Real>
+void test_float_ops(const boost::mpl::int_<boost::multiprecision::number_kind_floating_point>&)
+{
+ BOOST_CHECK_EQUAL(abs(Real(2)) , 2);
+ BOOST_CHECK_EQUAL(abs(Real(-2)) , 2);
+ BOOST_CHECK_EQUAL(fabs(Real(2)) , 2);
+ BOOST_CHECK_EQUAL(fabs(Real(-2)) , 2);
+ BOOST_CHECK_EQUAL(floor(Real(5) / 2) , 2);
+ BOOST_CHECK_EQUAL(ceil(Real(5) / 2) , 3);
+ BOOST_CHECK_EQUAL(floor(Real(-5) / 2) , -3);
+ BOOST_CHECK_EQUAL(ceil(Real(-5) / 2) , -2);
+ BOOST_CHECK_EQUAL(trunc(Real(5) / 2) , 2);
+ BOOST_CHECK_EQUAL(trunc(Real(-5) / 2) , -2);
+ //
+ // ldexp and frexp, these pretty much have to be implemented by each backend:
+ //
+ BOOST_CHECK_EQUAL(ldexp(Real(2), 5) , 64);
+ BOOST_CHECK_EQUAL(ldexp(Real(2), -5) , Real(2) / 32);
+ Real v(512);
+ int exponent;
+ Real r = frexp(v, &exponent);
+ BOOST_CHECK_EQUAL(r , 0.5);
+ BOOST_CHECK_EQUAL(exponent , 10);
+ BOOST_CHECK_EQUAL(v , 512);
+ v = 1 / v;
+ r = frexp(v, &exponent);
+ BOOST_CHECK_EQUAL(r , 0.5);
+ BOOST_CHECK_EQUAL(exponent , -8);
+ typedef typename Real::backend_type::exponent_type e_type;
+ BOOST_CHECK_EQUAL(ldexp(Real(2), e_type(5)) , 64);
+ BOOST_CHECK_EQUAL(ldexp(Real(2), e_type(-5)) , Real(2) / 32);
+ v = 512;
+ e_type exp2;
+ r = frexp(v, &exp2);
+ BOOST_CHECK_EQUAL(r , 0.5);
+ BOOST_CHECK_EQUAL(exp2 , 10);
+ BOOST_CHECK_EQUAL(v , 512);
+ v = 1 / v;
+ r = frexp(v, &exp2);
+ BOOST_CHECK_EQUAL(r , 0.5);
+ BOOST_CHECK_EQUAL(exp2 , -8);
+ //
+ // scalbn and logb, these are the same as ldexp and frexp unless the radix is
+ // something other than 2:
+ //
+ if(std::numeric_limits<Real>::is_specialized && std::numeric_limits<Real>::radix)
+ {
+ BOOST_CHECK_EQUAL(scalbn(Real(2), 5), 2 * pow(double(std::numeric_limits<Real>::radix), 5));
+ BOOST_CHECK_EQUAL(scalbn(Real(2), -5), Real(2) / pow(double(std::numeric_limits<Real>::radix), 5));
+ Real v(512);
+ int exponent;
+ Real r;
+ exponent = ilogb(v);
+ r = scalbn(v, -exponent);
+ BOOST_CHECK(r >= 1);
+ BOOST_CHECK(r < std::numeric_limits<Real>::radix);
+ BOOST_CHECK_EQUAL(exponent, logb(v));
+ BOOST_CHECK_EQUAL(v, scalbn(r, exponent));
+ v = 1 / v;
+ exponent = ilogb(v);
+ r = scalbn(v, -exponent);
+ BOOST_CHECK(r >= 1);
+ BOOST_CHECK(r < std::numeric_limits<Real>::radix);
+ BOOST_CHECK_EQUAL(exponent, logb(v));
+ BOOST_CHECK_EQUAL(v, scalbn(r, exponent));
+ }
+ //
+ // pow and exponent:
+ //
+ v = 3.25;
+ r = pow(v, 0);
+ BOOST_CHECK_EQUAL(r , 1);
+ r = pow(v, 1);
+ BOOST_CHECK_EQUAL(r , 3.25);
+ r = pow(v, 2);
+ BOOST_CHECK_EQUAL(r , boost::math::pow<2>(3.25));
+ r = pow(v, 3);
+ BOOST_CHECK_EQUAL(r , boost::math::pow<3>(3.25));
+ r = pow(v, 4);
+ BOOST_CHECK_EQUAL(r , boost::math::pow<4>(3.25));
+ r = pow(v, 5);
+ BOOST_CHECK_EQUAL(r , boost::math::pow<5>(3.25));
+ r = pow(v, 6);
+ BOOST_CHECK_EQUAL(r , boost::math::pow<6>(3.25));
+ r = pow(v, 25);
+ BOOST_CHECK_EQUAL(r , boost::math::pow<25>(Real(3.25)));
+ //
+ // Things that are expected errors:
+ //
+ BOOST_CHECK_THROW(Real("3.14L"), std::runtime_error);
+ if(std::numeric_limits<Real>::is_specialized)
+ {
+ if(std::numeric_limits<Real>::has_infinity)
+ {
+ BOOST_CHECK((boost::math::isinf)(Real(20) / 0u));
+ }
+ else
+ {
+ BOOST_CHECK_THROW(Real(Real(20) / 0u), std::overflow_error);
+ }
+ }
+
+ test_float_funcs<Real>(boost::mpl::bool_<std::numeric_limits<Real>::is_specialized>());
+}
+
+template <class T>
+struct lexical_cast_target_type
+{
+ typedef typename boost::mpl::if_<
+ boost::is_signed<T>,
+ boost::intmax_t,
+ typename boost::mpl::if_<
+ boost::is_unsigned<T>,
+ boost::uintmax_t,
+ T
+ >::type
+ >::type type;
+};
+
+template <class Real, class Num>
+void test_negative_mixed_minmax(boost::mpl::true_ const&)
+{
+ if(!std::numeric_limits<Real>::is_bounded || (std::numeric_limits<Real>::digits >= std::numeric_limits<Num>::digits))
+ {
+ Real mx1((std::numeric_limits<Num>::max)() - 1);
+ ++mx1;
+ Real mx2((std::numeric_limits<Num>::max)());
+ BOOST_CHECK_EQUAL(mx1, mx2);
+ mx1 = (std::numeric_limits<Num>::max)() - 1;
+ ++mx1;
+ mx2 = (std::numeric_limits<Num>::max)();
+ BOOST_CHECK_EQUAL(mx1, mx2);
+
+ if(!std::numeric_limits<Real>::is_bounded || (std::numeric_limits<Real>::digits > std::numeric_limits<Num>::digits))
+ {
+ Real mx3((std::numeric_limits<Num>::min)() + 1);
+ --mx3;
+ Real mx4((std::numeric_limits<Num>::min)());
+ BOOST_CHECK_EQUAL(mx3, mx4);
+ mx3 = (std::numeric_limits<Num>::min)() + 1;
+ --mx3;
+ mx4 = (std::numeric_limits<Num>::min)();
+ BOOST_CHECK_EQUAL(mx3, mx4);
+ }
+ }
+}
+template <class Real, class Num>
+void test_negative_mixed_minmax(boost::mpl::false_ const&)
+{
+}
+
+template <class Real, class Num>
+void test_negative_mixed(boost::mpl::true_ const&)
+{
+ typedef typename lexical_cast_target_type<Num>::type target_type;
+ typedef typename boost::mpl::if_<
+ boost::is_convertible<Num, Real>,
+ typename boost::mpl::if_c<boost::is_integral<Num>::value && (sizeof(Num) < sizeof(int)), int, Num>::type,
+ Real
+ >::type cast_type;
+ typedef typename boost::mpl::if_<
+ boost::is_convertible<Num, Real>,
+ Num,
+ Real
+ >::type simple_cast_type;
+ std::cout << "Testing mixed arithmetic with type: " << typeid(Real).name() << " and " << typeid(Num).name() << std::endl;
+ static const int left_shift = std::numeric_limits<Num>::digits - 1;
+ Num n1 = -static_cast<Num>(1uLL << ((left_shift < 63) && (left_shift > 0) ? left_shift : 10));
+ Num n2 = -1;
+ Num n3 = 0;
+ Num n4 = -20;
+ Num n5 = -8;
+
+ test_comparisons<Real>(n1, n2, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n1, n3, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n3, n1, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n2, n1, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n1, n1, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n3, n3, boost::is_convertible<Num, Real>());
+
+ // Default construct:
+ BOOST_CHECK_EQUAL(Real(n1) , static_cast<cast_type>(n1));
+ BOOST_CHECK_EQUAL(Real(n2) , static_cast<cast_type>(n2));
+ BOOST_CHECK_EQUAL(Real(n3) , static_cast<cast_type>(n3));
+ BOOST_CHECK_EQUAL(Real(n4) , static_cast<cast_type>(n4));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n1) , Real(n1));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n2) , Real(n2));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n3) , Real(n3));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n4) , Real(n4));
+ BOOST_CHECK_EQUAL(Real(n1).template convert_to<Num>() , n1);
+ BOOST_CHECK_EQUAL(Real(n2).template convert_to<Num>() , n2);
+ BOOST_CHECK_EQUAL(Real(n3).template convert_to<Num>() , n3);
+ BOOST_CHECK_EQUAL(Real(n4).template convert_to<Num>() , n4);
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n1)) , n1);
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n2)) , n2);
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n3)) , n3);
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n4)) , n4);
+#endif
+#if defined(TEST_MPFR)
+ Num tol = 10 * std::numeric_limits<Num>::epsilon();
+#else
+ Num tol = 0;
+#endif
+ std::ios_base::fmtflags f = boost::is_floating_point<Num>::value ? std::ios_base::scientific : std::ios_base::fmtflags(0);
+ int digits_to_print = boost::is_floating_point<Num>::value && std::numeric_limits<Num>::is_specialized
+ ? std::numeric_limits<Num>::digits10 + 5 : 0;
+ if(std::numeric_limits<target_type>::digits <= std::numeric_limits<Real>::digits)
+ {
+ BOOST_CHECK_CLOSE(n1, checked_lexical_cast<target_type>(Real(n1).str(digits_to_print, f)), tol);
+ }
+ BOOST_CHECK_CLOSE(n2, checked_lexical_cast<target_type>(Real(n2).str(digits_to_print, f)), 0);
+ BOOST_CHECK_CLOSE(n3, checked_lexical_cast<target_type>(Real(n3).str(digits_to_print, f)), 0);
+ BOOST_CHECK_CLOSE(n4, checked_lexical_cast<target_type>(Real(n4).str(digits_to_print, f)), 0);
+ // Assignment:
+ Real r(0);
+ BOOST_CHECK(r != static_cast<cast_type>(n1));
+ r = static_cast<simple_cast_type>(n1);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n1));
+ r = static_cast<simple_cast_type>(n2);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n2));
+ r = static_cast<simple_cast_type>(n3);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n3));
+ r = static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4));
+ // Addition:
+ r = static_cast<simple_cast_type>(n2);
+ BOOST_CHECK_EQUAL(r + static_cast<simple_cast_type>(n4) , static_cast<cast_type>(n2 + n4));
+ BOOST_CHECK_EQUAL(Real(r + static_cast<simple_cast_type>(n4)) , static_cast<cast_type>(n2 + n4));
+ r += static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n2 + n4));
+ // subtraction:
+ r = static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r - static_cast<simple_cast_type>(n5) , static_cast<cast_type>(n4 - n5));
+ BOOST_CHECK_EQUAL(Real(r - static_cast<simple_cast_type>(n5)) , static_cast<cast_type>(n4 - n5));
+ r -= static_cast<simple_cast_type>(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 - n5));
+ // Multiplication:
+ r = static_cast<simple_cast_type>(n2);
+ BOOST_CHECK_EQUAL(r * static_cast<simple_cast_type>(n4) , static_cast<cast_type>(n2 * n4));
+ BOOST_CHECK_EQUAL(Real(r * static_cast<simple_cast_type>(n4)) , static_cast<cast_type>(n2 * n4));
+ r *= static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n2 * n4));
+ // Division:
+ r = static_cast<simple_cast_type>(n1);
+ BOOST_CHECK_EQUAL(r / static_cast<simple_cast_type>(n5) , static_cast<cast_type>(n1 / n5));
+ BOOST_CHECK_EQUAL(Real(r / static_cast<simple_cast_type>(n5)) , static_cast<cast_type>(n1 / n5));
+ r /= static_cast<simple_cast_type>(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n1 / n5));
+ //
+ // Extra cases for full coverage:
+ //
+ r = Real(n4) + static_cast<simple_cast_type>(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 + n5));
+ r = static_cast<simple_cast_type>(n4) + Real(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 + n5));
+ r = Real(n4) - static_cast<simple_cast_type>(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 - n5));
+ r = static_cast<simple_cast_type>(n4) - Real(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 - n5));
+ r = static_cast<simple_cast_type>(n4) * Real(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 * n5));
+ r = static_cast<cast_type>(4 * n4) / Real(4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4));
+
+ Real a, b, c;
+ a = 20;
+ b = 30;
+ c = -a + b;
+ BOOST_CHECK_EQUAL(c , 10);
+ c = b + -a;
+ BOOST_CHECK_EQUAL(c , 10);
+ n4 = 30;
+ c = -a + static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , 10);
+ c = static_cast<cast_type>(n4) + -a;
+ BOOST_CHECK_EQUAL(c , 10);
+ c = -a + -b;
+ BOOST_CHECK_EQUAL(c , -50);
+ n4 = 4;
+ c = -(a + b) + static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , -50+4);
+ n4 = 50;
+ c = (a + b) - static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , 0);
+ c = (a + b) - static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , 0);
+ c = a - -(b + static_cast<cast_type>(n4));
+ BOOST_CHECK_EQUAL(c , 20 - -(30 + 50));
+ c = -(b + static_cast<cast_type>(n4)) - a;
+ BOOST_CHECK_EQUAL(c , -(30 + 50) - 20);
+ c = a - -b;
+ BOOST_CHECK_EQUAL(c , 50);
+ c = -a - b;
+ BOOST_CHECK_EQUAL(c , -50);
+ c = -a - static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , -20 - 50);
+ c = static_cast<cast_type>(n4) - -a;
+ BOOST_CHECK_EQUAL(c , 50 + 20);
+ c = -(a + b) - Real(n4);
+ BOOST_CHECK_EQUAL(c , -(20 + 30) - 50);
+ c = static_cast<cast_type>(n4) - (a + b);
+ BOOST_CHECK_EQUAL(c , 0);
+ c = (a + b) * static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , 50 * 50);
+ c = static_cast<cast_type>(n4) * (a + b);
+ BOOST_CHECK_EQUAL(c , 50 * 50);
+ c = a * -(b + static_cast<cast_type>(n4));
+ BOOST_CHECK_EQUAL(c , 20 * -(30 + 50));
+ c = -(b + static_cast<cast_type>(n4)) * a;
+ BOOST_CHECK_EQUAL(c , 20 * -(30 + 50));
+ c = a * -b;
+ BOOST_CHECK_EQUAL(c , 20 * -30);
+ c = -a * b;
+ BOOST_CHECK_EQUAL(c , 20 * -30);
+ c = -a * static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , -20 * 50);
+ c = static_cast<cast_type>(n4) * -a;
+ BOOST_CHECK_EQUAL(c , -20 * 50);
+ c = -(a + b) + a;
+ BOOST_CHECK(-50 + 20);
+ c = static_cast<cast_type>(n4) - (a + b);
+ BOOST_CHECK_EQUAL(c , 0);
+ Real d = 10;
+ c = (a + b) / d;
+ BOOST_CHECK_EQUAL(c , 5);
+ c = (a + b) / (d + 0);
+ BOOST_CHECK_EQUAL(c , 5);
+ c = (a + b) / static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , 1);
+ c = static_cast<cast_type>(n4) / (a + b);
+ BOOST_CHECK_EQUAL(c , 1);
+ d = 50;
+ c = d / -(a + b);
+ BOOST_CHECK_EQUAL(c , -1);
+ c = -(a + b) / d;
+ BOOST_CHECK_EQUAL(c , -1);
+ d = 2;
+ c = a / -d;
+ BOOST_CHECK_EQUAL(c , 20 / -2);
+ c = -a / d;
+ BOOST_CHECK_EQUAL(c , 20 / -2);
+ d = 50;
+ c = -d / static_cast<cast_type>(n4);
+ BOOST_CHECK_EQUAL(c , -1);
+ c = static_cast<cast_type>(n4) / -d;
+ BOOST_CHECK_EQUAL(c , -1);
+ c = static_cast<cast_type>(n4) + a;
+ BOOST_CHECK_EQUAL(c , 70);
+ c = static_cast<cast_type>(n4) - a;
+ BOOST_CHECK_EQUAL(c , 30);
+ c = static_cast<cast_type>(n4) * a;
+ BOOST_CHECK_EQUAL(c , 50 * 20);
+
+ n1 = -2;
+ n2 = -3;
+ n3 = -4;
+ a = static_cast<cast_type>(n1);
+ b = static_cast<cast_type>(n2);
+ c = static_cast<cast_type>(n3);
+ d = a + b * c;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = static_cast<cast_type>(n1) + b * c;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = a + static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = a + b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = static_cast<cast_type>(n1) + static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = static_cast<cast_type>(n1) + b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ a += static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(a , -2 + -3 * -4);
+ a = static_cast<cast_type>(n1);
+ a += b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(a , -2 + -3 * -4);
+ a = static_cast<cast_type>(n1);
+
+ d = b * c + a;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = b * c + static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = static_cast<cast_type>(n2) * c + a;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = b * static_cast<cast_type>(n3) + a;
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = static_cast<cast_type>(n2) * c + static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+ d = b * static_cast<cast_type>(n3) + static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , -2 + -3 * -4);
+
+ a = -20;
+ d = a - b * c;
+ BOOST_CHECK_EQUAL(d , -20 - -3 * -4);
+ n1 = -20;
+ d = static_cast<cast_type>(n1) - b * c;
+ BOOST_CHECK_EQUAL(d , -20 - -3 * -4);
+ d = a - static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , -20 - -3 * -4);
+ d = a - b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , -20 - -3 * -4);
+ d = static_cast<cast_type>(n1) - static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , -20 - -3 * -4);
+ d = static_cast<cast_type>(n1) - b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , -20 - -3 * -4);
+ a -= static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(a , -20 - -3 * -4);
+ a = static_cast<cast_type>(n1);
+ a -= b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(a , -20 - -3 * -4);
+
+ a = -2;
+ d = b * c - a;
+ BOOST_CHECK_EQUAL(d , -3 * -4 - -2);
+ n1 = -2;
+ d = b * c - static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , -3 * -4 - -2);
+ d = static_cast<cast_type>(n2) * c - a;
+ BOOST_CHECK_EQUAL(d , -3 * -4 - -2);
+ d = b * static_cast<cast_type>(n3) - a;
+ BOOST_CHECK_EQUAL(d , -3 * -4 - -2);
+ d = static_cast<cast_type>(n2) * c - static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , -3 * -4 - -2);
+ d = b * static_cast<cast_type>(n3) - static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , -3 * -4 - -2);
+ //
+ // Conversion from min and max values:
+ //
+ test_negative_mixed_minmax<Real, Num>(boost::mpl::bool_<std::numeric_limits<Real>::is_integer && std::numeric_limits<Num>::is_integer>());
+}
+
+template <class Real, class Num>
+void test_negative_mixed(boost::mpl::false_ const&)
+{
+}
+
+template <class Real, class Num>
+void test_mixed(const boost::mpl::false_&)
+{
+}
+
+template <class Real, class Num>
+void test_mixed(const boost::mpl::true_&)
+{
+ typedef typename lexical_cast_target_type<Num>::type target_type;
+ typedef typename boost::mpl::if_<
+ boost::is_convertible<Num, Real>,
+ typename boost::mpl::if_c<boost::is_integral<Num>::value && (sizeof(Num) < sizeof(int)), int, Num>::type,
+ Real
+ >::type cast_type;
+ typedef typename boost::mpl::if_<
+ boost::is_convertible<Num, Real>,
+ Num,
+ Real
+ >::type simple_cast_type;
+
+ if(std::numeric_limits<Real>::is_specialized && std::numeric_limits<Real>::is_bounded && std::numeric_limits<Real>::digits < std::numeric_limits<Num>::digits)
+ return;
+
+ std::cout << "Testing mixed arithmetic with type: " << typeid(Real).name() << " and " << typeid(Num).name() << std::endl;
+ static const int left_shift = std::numeric_limits<Num>::digits - 1;
+ Num n1 = static_cast<Num>(1uLL << ((left_shift < 63) && (left_shift > 0) ? left_shift : 10));
+ Num n2 = 1;
+ Num n3 = 0;
+ Num n4 = 20;
+ Num n5 = 8;
+
+ test_comparisons<Real>(n1, n2, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n1, n3, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n1, n1, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n3, n1, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n2, n1, boost::is_convertible<Num, Real>());
+ test_comparisons<Real>(n3, n3, boost::is_convertible<Num, Real>());
+
+ // Default construct:
+ BOOST_CHECK_EQUAL(Real(n1) , static_cast<cast_type>(n1));
+ BOOST_CHECK_EQUAL(Real(n2) , static_cast<cast_type>(n2));
+ BOOST_CHECK_EQUAL(Real(n3) , static_cast<cast_type>(n3));
+ BOOST_CHECK_EQUAL(Real(n4) , static_cast<cast_type>(n4));
+ BOOST_CHECK_EQUAL(Real(n1).template convert_to<Num>() , n1);
+ BOOST_CHECK_EQUAL(Real(n2).template convert_to<Num>() , n2);
+ BOOST_CHECK_EQUAL(Real(n3).template convert_to<Num>() , n3);
+ BOOST_CHECK_EQUAL(Real(n4).template convert_to<Num>() , n4);
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n1)) , n1);
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n2)) , n2);
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n3)) , n3);
+ BOOST_CHECK_EQUAL(static_cast<Num>(Real(n4)) , n4);
+#endif
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n1) , Real(n1));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n2) , Real(n2));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n3) , Real(n3));
+ BOOST_CHECK_EQUAL(static_cast<cast_type>(n4) , Real(n4));
+#if defined(TEST_MPFR)
+ Num tol = 10 * std::numeric_limits<Num>::epsilon();
+#else
+ Num tol = 0;
+#endif
+ std::ios_base::fmtflags f = boost::is_floating_point<Num>::value ? std::ios_base::scientific : std::ios_base::fmtflags(0);
+ int digits_to_print = boost::is_floating_point<Num>::value && std::numeric_limits<Num>::is_specialized
+ ? std::numeric_limits<Num>::digits10 + 5 : 0;
+ if(std::numeric_limits<target_type>::digits <= std::numeric_limits<Real>::digits)
+ {
+ BOOST_CHECK_CLOSE(n1, checked_lexical_cast<target_type>(Real(n1).str(digits_to_print, f)), tol);
+ }
+ BOOST_CHECK_CLOSE(n2, checked_lexical_cast<target_type>(Real(n2).str(digits_to_print, f)), 0);
+ BOOST_CHECK_CLOSE(n3, checked_lexical_cast<target_type>(Real(n3).str(digits_to_print, f)), 0);
+ BOOST_CHECK_CLOSE(n4, checked_lexical_cast<target_type>(Real(n4).str(digits_to_print, f)), 0);
+ // Assignment:
+ Real r(0);
+ BOOST_CHECK(r != static_cast<cast_type>(n1));
+ r = static_cast<simple_cast_type>(n1);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n1));
+ r = static_cast<simple_cast_type>(n2);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n2));
+ r = static_cast<simple_cast_type>(n3);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n3));
+ r = static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4));
+ // Addition:
+ r = static_cast<simple_cast_type>(n2);
+ BOOST_CHECK_EQUAL(r + static_cast<simple_cast_type>(n4) , static_cast<cast_type>(n2 + n4));
+ BOOST_CHECK_EQUAL(Real(r + static_cast<simple_cast_type>(n4)) , static_cast<cast_type>(n2 + n4));
+ r += static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n2 + n4));
+ // subtraction:
+ r = static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r - static_cast<simple_cast_type>(n5) , static_cast<cast_type>(n4 - n5));
+ BOOST_CHECK_EQUAL(Real(r - static_cast<simple_cast_type>(n5)) , static_cast<cast_type>(n4 - n5));
+ r -= static_cast<simple_cast_type>(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 - n5));
+ // Multiplication:
+ r = static_cast<simple_cast_type>(n2);
+ BOOST_CHECK_EQUAL(r * static_cast<simple_cast_type>(n4) , static_cast<cast_type>(n2 * n4));
+ BOOST_CHECK_EQUAL(Real(r * static_cast<simple_cast_type>(n4)) , static_cast<cast_type>(n2 * n4));
+ r *= static_cast<simple_cast_type>(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n2 * n4));
+ // Division:
+ r = static_cast<simple_cast_type>(n1);
+ BOOST_CHECK_EQUAL(r / static_cast<simple_cast_type>(n5) , static_cast<cast_type>(n1 / n5));
+ BOOST_CHECK_EQUAL(Real(r / static_cast<simple_cast_type>(n5)) , static_cast<cast_type>(n1 / n5));
+ r /= static_cast<simple_cast_type>(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n1 / n5));
+ //
+ // special cases for full coverage:
+ //
+ r = static_cast<simple_cast_type>(n5) + Real(n4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 + n5));
+ r = static_cast<simple_cast_type>(n4) - Real(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 - n5));
+ r = static_cast<simple_cast_type>(n4) * Real(n5);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4 * n5));
+ r = static_cast<cast_type>(4 * n4) / Real(4);
+ BOOST_CHECK_EQUAL(r , static_cast<cast_type>(n4));
+
+ typedef boost::mpl::bool_<
+ (!std::numeric_limits<Num>::is_specialized || std::numeric_limits<Num>::is_signed)
+ && (!std::numeric_limits<Real>::is_specialized || std::numeric_limits<Real>::is_signed)> signed_tag;
+
+ test_negative_mixed<Real, Num>(signed_tag());
+
+ n1 = 2;
+ n2 = 3;
+ n3 = 4;
+ Real a(n1), b(n2), c(n3), d;
+ d = a + b * c;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = static_cast<cast_type>(n1) + b * c;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = a + static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = a + b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = static_cast<cast_type>(n1) + static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = static_cast<cast_type>(n1) + b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ a += static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(a , 2 + 3 * 4);
+ a = static_cast<cast_type>(n1);
+ a += b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(a , 2 + 3 * 4);
+ a = static_cast<cast_type>(n1);
+
+ d = b * c + a;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = b * c + static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = static_cast<cast_type>(n2) * c + a;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = b * static_cast<cast_type>(n3) + a;
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = static_cast<cast_type>(n2) * c + static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+ d = b * static_cast<cast_type>(n3) + static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , 2 + 3 * 4);
+
+ a = 20;
+ d = a - b * c;
+ BOOST_CHECK_EQUAL(d , 20 - 3 * 4);
+ n1 = 20;
+ d = static_cast<cast_type>(n1) - b * c;
+ BOOST_CHECK_EQUAL(d , 20 - 3 * 4);
+ d = a - static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , 20 - 3 * 4);
+ d = a - b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , 20 - 3 * 4);
+ d = static_cast<cast_type>(n1) - static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(d , 20 - 3 * 4);
+ d = static_cast<cast_type>(n1) - b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(d , 20 - 3 * 4);
+ a -= static_cast<cast_type>(n2) * c;
+ BOOST_CHECK_EQUAL(a , 20 - 3 * 4);
+ a = static_cast<cast_type>(n1);
+ a -= b * static_cast<cast_type>(n3);
+ BOOST_CHECK_EQUAL(a , 20 - 3 * 4);
+
+ a = 2;
+ d = b * c - a;
+ BOOST_CHECK_EQUAL(d , 3 * 4 - 2);
+ n1 = 2;
+ d = b * c - static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , 3 * 4 - 2);
+ d = static_cast<cast_type>(n2) * c - a;
+ BOOST_CHECK_EQUAL(d , 3 * 4 - 2);
+ d = b * static_cast<cast_type>(n3) - a;
+ BOOST_CHECK_EQUAL(d , 3 * 4 - a);
+ d = static_cast<cast_type>(n2) * c - static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , 3 * 4 - 2);
+ d = b * static_cast<cast_type>(n3) - static_cast<cast_type>(n1);
+ BOOST_CHECK_EQUAL(d , 3 * 4 - 2);
+}
+
+template <class Real>
+void test_members(Real)
+{
+ //
+ // Test sign and zero functions:
+ //
+ Real a = 20;
+ Real b = 30;
+ BOOST_CHECK(a.sign() > 0);
+ BOOST_CHECK(!a.is_zero());
+ if(std::numeric_limits<Real>::is_signed)
+ {
+ a = -20;
+ BOOST_CHECK(a.sign() < 0);
+ BOOST_CHECK(!a.is_zero());
+ }
+ a = 0;
+ BOOST_CHECK_EQUAL(a.sign() , 0);
+ BOOST_CHECK(a.is_zero());
+
+ a = 20;
+ b = 30;
+ a.swap(b);
+ BOOST_CHECK_EQUAL(a , 30);
+ BOOST_CHECK_EQUAL(b , 20);
+}
+
+template <class Real>
+void test_members(boost::rational<Real>)
+{
+}
+
+template <class Real>
+void test_signed_ops(const boost::mpl::true_&)
+{
+ Real a(8);
+ Real b(64);
+ Real c(500);
+ Real d(1024);
+ Real ac;
+ BOOST_CHECK_EQUAL(-a , -8);
+ ac = a;
+ ac = ac - b;
+ BOOST_CHECK_EQUAL(ac , 8 - 64);
+ ac = a;
+ ac -= a + b;
+ BOOST_CHECK_EQUAL(ac , -64);
+ ac = a;
+ ac -= b - a;
+ BOOST_CHECK_EQUAL(ac , 16 - 64);
+ ac = -a;
+ BOOST_CHECK_EQUAL(ac , -8);
+ ac = a;
+ ac -= -a;
+ BOOST_CHECK_EQUAL(ac , 16);
+ ac = a;
+ ac += -a;
+ BOOST_CHECK_EQUAL(ac , 0);
+ ac = b;
+ ac /= -a;
+ BOOST_CHECK_EQUAL(ac , -8);
+ ac = a;
+ ac *= -a;
+ BOOST_CHECK_EQUAL(ac , -64);
+ ac = a + -b;
+ BOOST_CHECK_EQUAL(ac , 8 - 64);
+ ac = -a + b;
+ BOOST_CHECK_EQUAL(ac , -8+64);
+ ac = -a + -b;
+ BOOST_CHECK_EQUAL(ac , -72);
+ ac = a + - + -b; // lots of unary operators!!
+ BOOST_CHECK_EQUAL(ac , 72);
+ test_conditional(Real(-a), -a);
+}
+template <class Real>
+void test_signed_ops(const boost::mpl::false_&)
+{
+}
+
+template <class Real>
+void test()
+{
+#if !defined(NO_MIXED_OPS) && !defined(SLOW_COMPILER)
+ boost::multiprecision::is_number<Real> tag;
+ test_mixed<Real, unsigned char>(tag);
+ test_mixed<Real, signed char>(tag);
+ test_mixed<Real, char>(tag);
+ test_mixed<Real, short>(tag);
+ test_mixed<Real, unsigned short>(tag);
+ test_mixed<Real, int>(tag);
+ test_mixed<Real, unsigned int>(tag);
+ test_mixed<Real, long>(tag);
+ test_mixed<Real, unsigned long>(tag);
+#ifdef BOOST_HAS_LONG_LONG
+ test_mixed<Real, long long>(tag);
+ test_mixed<Real, unsigned long long>(tag);
+#endif
+ test_mixed<Real, float>(tag);
+ test_mixed<Real, double>(tag);
+ test_mixed<Real, long double>(tag);
+
+ typedef typename related_type<Real>::type related_type;
+ boost::mpl::bool_<boost::multiprecision::is_number<Real>::value && !boost::is_same<related_type, Real>::value> tag2;
+
+ test_mixed<Real, related_type>(tag2);
+
+#endif
+ //
+ // Integer only functions:
+ //
+ test_integer_ops<Real>(typename boost::multiprecision::number_category<Real>::type());
+ //
+ // Real number only functions:
+ //
+ test_float_ops<Real>(typename boost::multiprecision::number_category<Real>::type());
+ //
+ // Test basic arithmetic:
+ //
+ Real a(8);
+ Real b(64);
+ Real c(500);
+ Real d(1024);
+ BOOST_CHECK_EQUAL(a + b , 72);
+ a += b;
+ BOOST_CHECK_EQUAL(a , 72);
+ BOOST_CHECK_EQUAL(a - b , 8);
+ a -= b;
+ BOOST_CHECK_EQUAL(a , 8);
+ BOOST_CHECK_EQUAL(a * b , 8*64L);
+ a *= b;
+ BOOST_CHECK_EQUAL(a , 8*64L);
+ BOOST_CHECK_EQUAL(a / b , 8);
+ a /= b;
+ BOOST_CHECK_EQUAL(a , 8);
+ Real ac(a);
+ BOOST_CHECK_EQUAL(ac , a);
+ ac = a * c;
+ BOOST_CHECK_EQUAL(ac , 8*500L);
+ ac = 8*500L;
+ ac = ac + b + c;
+ BOOST_CHECK_EQUAL(ac , 8*500L+64+500);
+ ac = a;
+ ac = b + c + ac;
+ BOOST_CHECK_EQUAL(ac , 8+64+500);
+ ac = ac - b + c;
+ BOOST_CHECK_EQUAL(ac , 8+64+500-64+500);
+ ac = a;
+ ac = b + c - ac;
+ BOOST_CHECK_EQUAL(ac , -8+64+500);
+ ac = a;
+ ac = ac * b;
+ BOOST_CHECK_EQUAL(ac , 8*64);
+ ac = a;
+ ac *= b * ac;
+ BOOST_CHECK_EQUAL(ac , 8*8*64);
+ ac = b;
+ ac = ac / a;
+ BOOST_CHECK_EQUAL(ac , 64/8);
+ ac = b;
+ ac /= ac / a;
+ BOOST_CHECK_EQUAL(ac , 64 / (64/8));
+ ac = a;
+ ac = b + ac * a;
+ BOOST_CHECK_EQUAL(ac , 64 * 2);
+ ac = a;
+ ac = b - ac * a;
+ BOOST_CHECK_EQUAL(ac , 0);
+ ac = a;
+ ac = b * (ac + a);
+ BOOST_CHECK_EQUAL(ac , 64 * (16));
+ ac = a;
+ ac = b / (ac * 1);
+ BOOST_CHECK_EQUAL(ac , 64 / 8);
+ ac = a;
+ ac = ac + b;
+ BOOST_CHECK_EQUAL(ac , 8 + 64);
+ ac = a;
+ ac = a + ac;
+ BOOST_CHECK_EQUAL(ac , 16);
+ ac = a;
+ ac = a - ac;
+ BOOST_CHECK_EQUAL(ac , 0);
+ ac = a;
+ ac += a + b;
+ BOOST_CHECK_EQUAL(ac , 80);
+ ac = a;
+ ac += b + a;
+ BOOST_CHECK_EQUAL(ac , 80);
+ ac = +a;
+ BOOST_CHECK_EQUAL(ac , 8);
+ ac = 8;
+ ac = a * ac;
+ BOOST_CHECK_EQUAL(ac , 8*8);
+ ac = a;
+ ac = a;
+ ac += +a;
+ BOOST_CHECK_EQUAL(ac , 16);
+ ac = a;
+ ac += b - a;
+ BOOST_CHECK_EQUAL(ac , 8 + 64-8);
+ ac = a;
+ ac += b*c;
+ BOOST_CHECK_EQUAL(ac , 8 + 64 * 500);
+ ac = a;
+ ac = a;
+ ac -= +a;
+ BOOST_CHECK_EQUAL(ac , 0);
+ ac = a;
+ if(std::numeric_limits<Real>::is_signed || is_twos_complement_integer<Real>::value)
+ {
+ ac = a;
+ ac -= c - b;
+ BOOST_CHECK_EQUAL(ac , 8 - (500-64));
+ ac = a;
+ ac -= b*c;
+ BOOST_CHECK_EQUAL(ac , 8 - 500*64);
+ }
+ ac = a;
+ ac += ac * b;
+ BOOST_CHECK_EQUAL(ac , 8 + 8 * 64);
+ if(std::numeric_limits<Real>::is_signed || is_twos_complement_integer<Real>::value)
+ {
+ ac = a;
+ ac -= ac * b;
+ BOOST_CHECK_EQUAL(ac , 8 - 8 * 64);
+ }
+ ac = a * 8;
+ ac *= +a;
+ BOOST_CHECK_EQUAL(ac , 64 * 8);
+ ac = a;
+ ac *= b * c;
+ BOOST_CHECK_EQUAL(ac , 8 * 64 * 500);
+ ac = a;
+ ac *= b / a;
+ BOOST_CHECK_EQUAL(ac , 8 * 64 / 8);
+ ac = a;
+ ac *= b + c;
+ BOOST_CHECK_EQUAL(ac , 8 * (64 + 500));
+ ac = b;
+ ac /= +a;
+ BOOST_CHECK_EQUAL(ac , 8);
+ ac = b;
+ ac /= b / a;
+ BOOST_CHECK_EQUAL(ac , 64 / (64/8));
+ ac = b;
+ ac /= a + Real(0);
+ BOOST_CHECK_EQUAL(ac , 8);
+ //
+ // simple tests with immediate values, these calls can be optimised in many backends:
+ //
+ ac = a + b;
+ BOOST_CHECK_EQUAL(ac , 72);
+ ac = a + +b;
+ BOOST_CHECK_EQUAL(ac , 72);
+ ac = +a + b;
+ BOOST_CHECK_EQUAL(ac , 72);
+ ac = +a + +b;
+ BOOST_CHECK_EQUAL(ac , 72);
+ ac = a;
+ ac = b / ac;
+ BOOST_CHECK_EQUAL(ac , b / a);
+ //
+ // Comparisons:
+ //
+ BOOST_CHECK_EQUAL((a == b) , false);
+ BOOST_CHECK_EQUAL((a != b) , true);
+ BOOST_CHECK_EQUAL((a <= b) , true);
+ BOOST_CHECK_EQUAL((a < b) , true);
+ BOOST_CHECK_EQUAL((a >= b) , false);
+ BOOST_CHECK_EQUAL((a > b) , false);
+
+ BOOST_CHECK_EQUAL((a+b == b) , false);
+ BOOST_CHECK_EQUAL((a+b != b) , true);
+ BOOST_CHECK_EQUAL((a+b >= b) , true);
+ BOOST_CHECK_EQUAL((a+b > b) , true);
+ BOOST_CHECK_EQUAL((a+b <= b) , false);
+ BOOST_CHECK_EQUAL((a+b < b) , false);
+
+ BOOST_CHECK_EQUAL((a == b+a) , false);
+ BOOST_CHECK_EQUAL((a != b+a) , true);
+ BOOST_CHECK_EQUAL((a <= b+a) , true);
+ BOOST_CHECK_EQUAL((a < b+a) , true);
+ BOOST_CHECK_EQUAL((a >= b+a) , false);
+ BOOST_CHECK_EQUAL((a > b+a) , false);
+
+ BOOST_CHECK_EQUAL((a+b == b+a) , true);
+ BOOST_CHECK_EQUAL((a+b != b+a) , false);
+ BOOST_CHECK_EQUAL((a+b <= b+a) , true);
+ BOOST_CHECK_EQUAL((a+b < b+a) , false);
+ BOOST_CHECK_EQUAL((a+b >= b+a) , true);
+ BOOST_CHECK_EQUAL((a+b > b+a) , false);
+
+ BOOST_CHECK_EQUAL((8 == b+a) , false);
+ BOOST_CHECK_EQUAL((8 != b+a) , true);
+ BOOST_CHECK_EQUAL((8 <= b+a) , true);
+ BOOST_CHECK_EQUAL((8 < b+a) , true);
+ BOOST_CHECK_EQUAL((8 >= b+a) , false);
+ BOOST_CHECK_EQUAL((8 > b+a) , false);
+ BOOST_CHECK_EQUAL((800 == b+a) , false);
+ BOOST_CHECK_EQUAL((800 != b+a) , true);
+ BOOST_CHECK_EQUAL((800 >= b+a) , true);
+ BOOST_CHECK_EQUAL((800 > b+a) , true);
+ BOOST_CHECK_EQUAL((800 <= b+a) , false);
+ BOOST_CHECK_EQUAL((800 < b+a) , false);
+ BOOST_CHECK_EQUAL((72 == b+a) , true);
+ BOOST_CHECK_EQUAL((72 != b+a) , false);
+ BOOST_CHECK_EQUAL((72 <= b+a) , true);
+ BOOST_CHECK_EQUAL((72 < b+a) , false);
+ BOOST_CHECK_EQUAL((72 >= b+a) , true);
+ BOOST_CHECK_EQUAL((72 > b+a) , false);
+
+ test_members(a);
+ //
+ // Use in Boolean context:
+ //
+ a = 0;
+ if(a)
+ {
+ BOOST_ERROR("Unexpected non-zero result");
+ }
+ if(!a){}
+ else
+ {
+ BOOST_ERROR("Unexpected zero result");
+ }
+ b = 2;
+ if(!b)
+ {
+ BOOST_ERROR("Unexpected zero result");
+ }
+ if(b){}
+ else
+ {
+ BOOST_ERROR("Unexpected non-zero result");
+ }
+ if(a && b)
+ {
+ BOOST_ERROR("Unexpected zero result");
+ }
+ if(!(a || b))
+ {
+ BOOST_ERROR("Unexpected zero result");
+ }
+ if(a + b){}
+ else
+ {
+ BOOST_ERROR("Unexpected zero result");
+ }
+ if(b - 2)
+ {
+ BOOST_ERROR("Unexpected non-zero result");
+ }
+ //
+ // Test iostreams:
+ //
+ std::stringstream ss;
+ a = 20;
+ b = 2;
+ ss << a;
+ ss >> c;
+ BOOST_CHECK_EQUAL(a , c);
+ ss.clear();
+ ss << a + b;
+ ss >> c;
+ BOOST_CHECK_EQUAL(c , 22);
+ BOOST_CHECK_EQUAL(c , a + b);
+ //
+ // More cases for complete code coverage:
+ //
+ a = 20;
+ b = 30;
+ swap(a, b);
+ BOOST_CHECK_EQUAL(a , 30);
+ BOOST_CHECK_EQUAL(b , 20);
+ a = 20;
+ b = 30;
+ std::swap(a, b);
+ BOOST_CHECK_EQUAL(a , 30);
+ BOOST_CHECK_EQUAL(b , 20);
+ a = 20;
+ b = 30;
+ a = a + b * 2;
+ BOOST_CHECK_EQUAL(a , 20 + 30 * 2);
+ a = 100;
+ a = a - b * 2;
+ BOOST_CHECK_EQUAL(a , 100 - 30 * 2);
+ a = 20;
+ a = a * (b + 2);
+ BOOST_CHECK_EQUAL(a , 20 * (32));
+ a = 20;
+ a = (b + 2) * a;
+ BOOST_CHECK_EQUAL(a , 20 * (32));
+ a = 90;
+ b = 2;
+ a = a / (b + 0);
+ BOOST_CHECK_EQUAL(a , 45);
+ a = 20;
+ b = 30;
+ c = (a * b) + 22;
+ BOOST_CHECK_EQUAL(c , 20 * 30 + 22);
+ c = 22 + (a * b);
+ BOOST_CHECK_EQUAL(c , 20 * 30 + 22);
+ c = 10;
+ ac = a + b * c;
+ BOOST_CHECK_EQUAL(ac , 20 + 30 * 10);
+ ac = b * c + a;
+ BOOST_CHECK_EQUAL(ac , 20 + 30 * 10);
+ a = a + b * c;
+ BOOST_CHECK_EQUAL(a , 20 + 30 * 10);
+ a = 20;
+ b = a + b * c;
+ BOOST_CHECK_EQUAL(b , 20 + 30 * 10);
+ b = 30;
+ c = a + b * c;
+ BOOST_CHECK_EQUAL(c , 20 + 30 * 10);
+ c = 10;
+ c = a + b / c;
+ BOOST_CHECK_EQUAL(c , 20 + 30 / 10);
+
+ //
+ // Test conditionals:
+ //
+ a = 20;
+ test_conditional(a, +a);
+ test_conditional(a, (a + 0));
+
+ test_signed_ops<Real>(boost::mpl::bool_<std::numeric_limits<Real>::is_signed>());
+ //
+ // Test move:
+ //
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+ Real m(static_cast<Real&&>(a));
+ BOOST_CHECK_EQUAL(m, 20);
+ // Move from already moved from object:
+ Real m2(static_cast<Real&&>(a));
+ // assign from moved from object
+ // (may result in "a" being left in valid state as implementation artifact):
+ c = static_cast<Real&&>(a);
+ // assignment to moved-from objects:
+ c = static_cast<Real&&>(m);
+ BOOST_CHECK_EQUAL(c, 20);
+ m2 = c;
+ BOOST_CHECK_EQUAL(c, 20);
+ // Destructor of "a" checks destruction of moved-from-object...
+ Real m3(static_cast<Real&&>(a));
+#endif
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_ab_1.cpp b/libs/multiprecision/test/test_arithmetic_ab_1.cpp
new file mode 100644
index 0000000000..140d3a190e
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_ab_1.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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 "../performance/arithmetic_backend.hpp"
+
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<double> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_ab_2.cpp b/libs/multiprecision/test/test_arithmetic_ab_2.cpp
new file mode 100644
index 0000000000..883adecca5
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_ab_2.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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 "../performance/arithmetic_backend.hpp"
+
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<int> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_ab_3.cpp b/libs/multiprecision/test/test_arithmetic_ab_3.cpp
new file mode 100644
index 0000000000..78bc4cca5b
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_ab_3.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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 "../performance/arithmetic_backend.hpp"
+
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::arithmetic_backend<unsigned int> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_backend_concept.cpp b/libs/multiprecision/test/test_arithmetic_backend_concept.cpp
new file mode 100644
index 0000000000..680e2edc4c
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_backend_concept.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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/concepts/mp_number_archetypes.hpp>
+
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp b/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp
new file mode 100644
index 0000000000..75f6b77485
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_bin_float_1.cpp
@@ -0,0 +1,29 @@
+///////////////////////////////////////////////////////////////
+// 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 Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinExponent, Exponent MaxExponent, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> number_type;
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<((std::numeric_limits<number_type>::digits / 2) > std::numeric_limits<long double>::digits ? Digits / 2 : Digits), DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> 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();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp b/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp
new file mode 100644
index 0000000000..a511b8a310
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_bin_float_2.cpp
@@ -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 Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinExponent, Exponent MaxExponent, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> number_type;
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<((std::numeric_limits<number_type>::digits / 2) > std::numeric_limits<long double>::digits ? Digits / 2 : Digits), DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> 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();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp b/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp
new file mode 100644
index 0000000000..544bf46488
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_bin_float_3.cpp
@@ -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 Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinExponent, Exponent MaxExponent, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> number_type;
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_bin_float<((std::numeric_limits<number_type>::digits / 2) > std::numeric_limits<long double>::digits ? Digits / 2 : Digits), DigitBase, Allocator, Exponent, MinExponent, MaxExponent>, ET> 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();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_dec_float_1.cpp b/libs/multiprecision/test/test_arithmetic_cpp_dec_float_1.cpp
new file mode 100644
index 0000000000..49e095f9a2
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_dec_float_1.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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_dec_float.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_dec_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_dec_float<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::cpp_dec_float_50>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_dec_float_2.cpp b/libs/multiprecision/test/test_arithmetic_cpp_dec_float_2.cpp
new file mode 100644
index 0000000000..dae6fe2ca7
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_dec_float_2.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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_dec_float.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_dec_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_dec_float<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100, long long>, boost::multiprecision::et_off> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_dec_float_3.cpp b/libs/multiprecision/test/test_arithmetic_cpp_dec_float_3.cpp
new file mode 100644
index 0000000000..d1878a94c0
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_dec_float_3.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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_dec_float.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::cpp_dec_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::cpp_dec_float<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<100, long long, std::allocator<void> >, boost::multiprecision::et_on> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp
new file mode 100644
index 0000000000..3cd1a30b9b
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_1.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::cpp_int>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp
new file mode 100644
index 0000000000..ff44210e02
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_10.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::checked_cpp_rational>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp
new file mode 100644
index 0000000000..de413be8b1
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_11.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<0, 0, boost::multiprecision::signed_magnitude, boost::multiprecision::checked>, boost::multiprecision::et_off> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp
new file mode 100644
index 0000000000..b132e12f3c
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_12.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<500, 500, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp
new file mode 100644
index 0000000000..d6499133b9
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_13.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp
new file mode 100644
index 0000000000..ac3ae9a7bc
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_14.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp
new file mode 100644
index 0000000000..124d1c8449
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_15.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<31, 31, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp
new file mode 100644
index 0000000000..c15581925b
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_16.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp
new file mode 100644
index 0000000000..f31b1ca40e
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_17.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<64, 64, boost::multiprecision::unsigned_magnitude, boost::multiprecision::checked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp
new file mode 100644
index 0000000000..f04c79bcbb
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_18.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<31, 31, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp
new file mode 100644
index 0000000000..a4e8f9a434
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_2.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::int512_t >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp
new file mode 100644
index 0000000000..3f5d05063b
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_3.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::uint1024_t >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp
new file mode 100644
index 0000000000..776218f331
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_4.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::checked_cpp_int>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp
new file mode 100644
index 0000000000..fb740366a9
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_5.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::checked_int512_t >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp
new file mode 100644
index 0000000000..4ae818c342
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_6.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::checked_uint1024_t >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp
new file mode 100644
index 0000000000..fc93e67515
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_7.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::cpp_rational>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp
new file mode 100644
index 0000000000..894c9f5681
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_8.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<>, boost::multiprecision::et_off> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp
new file mode 100644
index 0000000000..787cf6106c
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_9.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<500, 500, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp b/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp
new file mode 100644
index 0000000000..f08a3395f5
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_cpp_int_br.cpp
@@ -0,0 +1,33 @@
+///////////////////////////////////////////////////////////////
+// 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_int.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct is_twos_complement_integer<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ExpressionTemplates> > : public boost::mpl::false_ {};
+
+template <>
+struct related_type<boost::multiprecision::cpp_int>
+{
+ typedef boost::multiprecision::int256_t type;
+};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ET>
+struct related_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ET> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits/2, MaxBits/2, SignType, Checked, Allocator>, ET> type;
+};
+
+int main()
+{
+ test<boost::rational<boost::multiprecision::cpp_int> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp b/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp
new file mode 100644
index 0000000000..88fdc5aa75
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_dbg_adptr1.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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/debug_adaptor.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::debug_adaptor<boost::multiprecision::cpp_dec_float<50> > > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp b/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp
new file mode 100644
index 0000000000..47b5529aed
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_dbg_adptr2.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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/debug_adaptor.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::debug_adaptor<boost::multiprecision::cpp_int_backend<> > > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_float_128.cpp b/libs/multiprecision/test/test_arithmetic_float_128.cpp
new file mode 100644
index 0000000000..aa99287b61
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_float_128.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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/float128.hpp>
+
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::float128>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_logged_1.cpp b/libs/multiprecision/test/test_arithmetic_logged_1.cpp
new file mode 100644
index 0000000000..4904797194
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_logged_1.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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/logged_adaptor.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_dec_float<50> > > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_logged_2.cpp b/libs/multiprecision/test/test_arithmetic_logged_2.cpp
new file mode 100644
index 0000000000..2ca2be97f4
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_logged_2.cpp
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////
+// 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/logged_adaptor.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::number<boost::multiprecision::logged_adaptor<boost::multiprecision::cpp_int_backend<> > > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpf.cpp b/libs/multiprecision/test/test_arithmetic_mpf.cpp
new file mode 100644
index 0000000000..9f4a9be20e
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpf.cpp
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::gmp_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::gmp_float<D/2> > type;
+};
+template <>
+struct related_type<boost::multiprecision::mpf_float >
+{
+ typedef boost::multiprecision::mpz_int type;
+};
+
+int main()
+{
+ boost::multiprecision::mpf_float::default_precision(1000);
+ BOOST_CHECK_EQUAL(boost::multiprecision::mpf_float::default_precision() , 1000);
+ test<boost::multiprecision::mpf_float>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpf_50.cpp b/libs/multiprecision/test/test_arithmetic_mpf_50.cpp
new file mode 100644
index 0000000000..4d87dd6704
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpf_50.cpp
@@ -0,0 +1,30 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::gmp_float<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::gmp_float<D/2> > type;
+};
+template <>
+struct related_type<boost::multiprecision::mpf_float >
+{
+ typedef boost::multiprecision::mpz_int type;
+};
+
+int main()
+{
+ test<boost::multiprecision::mpf_float_50>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpfi_50.cpp b/libs/multiprecision/test/test_arithmetic_mpfi_50.cpp
new file mode 100644
index 0000000000..7088dd9bbf
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpfi_50.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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/mpfi.hpp>
+#define TEST_MPFR
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::mpfi_float_backend<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::mpfi_float_backend<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::mpfi_float_50>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpfr.cpp b/libs/multiprecision/test/test_arithmetic_mpfr.cpp
new file mode 100644
index 0000000000..8ce8ef39df
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpfr.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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/mpfr.hpp>
+#define TEST_MPFR
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::mpfr_float_backend<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::mpfr_float_backend<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::mpfr_float>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpfr_50.cpp b/libs/multiprecision/test/test_arithmetic_mpfr_50.cpp
new file mode 100644
index 0000000000..cff50b0cf1
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpfr_50.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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/mpfr.hpp>
+#define TEST_MPFR
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::mpfr_float_backend<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::mpfr_float_backend<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::mpfr_float_50>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpfr_50_static.cpp b/libs/multiprecision/test/test_arithmetic_mpfr_50_static.cpp
new file mode 100644
index 0000000000..5928cd4b77
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpfr_50_static.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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/mpfr.hpp>
+#define TEST_MPFR
+#include "test_arithmetic.hpp"
+
+template <unsigned D>
+struct related_type<boost::multiprecision::number< boost::multiprecision::mpfr_float_backend<D> > >
+{
+ typedef boost::multiprecision::number< boost::multiprecision::mpfr_float_backend<D/2> > type;
+};
+
+int main()
+{
+ test<boost::multiprecision::static_mpfr_float_50>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpq.cpp b/libs/multiprecision/test/test_arithmetic_mpq.cpp
new file mode 100644
index 0000000000..9c95177401
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpq.cpp
@@ -0,0 +1,25 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <>
+struct related_type<boost::multiprecision::mpq_rational>
+{
+ typedef boost::multiprecision::mpz_int type;
+};
+
+int main()
+{
+ test<boost::multiprecision::mpq_rational>();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpz.cpp b/libs/multiprecision/test/test_arithmetic_mpz.cpp
new file mode 100644
index 0000000000..b1306d3a01
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpz.cpp
@@ -0,0 +1,21 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+#include <boost/multiprecision/rational_adaptor.hpp>
+
+#include "test_arithmetic.hpp"
+
+int main()
+{
+ test<boost::multiprecision::mpz_int>();
+ test<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::gmp_int> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_mpz_br.cpp b/libs/multiprecision/test/test_arithmetic_mpz_br.cpp
new file mode 100644
index 0000000000..ff153cb6ba
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_mpz_br.cpp
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+
+#define NO_MIXED_OPS
+
+#include "test_arithmetic.hpp"
+#include <boost/rational.hpp>
+
+template <class T>
+struct is_boost_rational<boost::rational<T> > : public boost::mpl::true_{};
+
+namespace boost{ namespace multiprecision{
+
+template<>
+struct number_category<rational<mpz_int> > : public mpl::int_<number_kind_rational> {};
+
+}}
+
+int main()
+{
+ test<boost::rational<boost::multiprecision::mpz_int> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_tommath.cpp b/libs/multiprecision/test/test_arithmetic_tommath.cpp
new file mode 100644
index 0000000000..3207001c00
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_tommath.cpp
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////
+// 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/tommath.hpp>
+
+#include "test_arithmetic.hpp"
+
+template <>
+struct is_twos_complement_integer<boost::multiprecision::tom_int> : public boost::mpl::false_ {};
+
+int main()
+{
+ test<boost::multiprecision::tom_int>();
+ test<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::tommath_int> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_arithmetic_tommath_br.cpp b/libs/multiprecision/test/test_arithmetic_tommath_br.cpp
new file mode 100644
index 0000000000..cd06371d22
--- /dev/null
+++ b/libs/multiprecision/test/test_arithmetic_tommath_br.cpp
@@ -0,0 +1,32 @@
+///////////////////////////////////////////////////////////////
+// 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/tommath.hpp>
+
+#define NO_MIXED_OPS
+#include "test_arithmetic.hpp"
+
+#include <boost/rational.hpp>
+
+template <class T>
+struct is_boost_rational<boost::rational<T> > : public boost::mpl::true_{};
+
+namespace boost{ namespace multiprecision{
+
+template<>
+struct number_category<rational<tom_int> > : public mpl::int_<number_kind_rational> {};
+
+}}
+
+int main()
+{
+ test<boost::rational<boost::multiprecision::tom_int> >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_asin.cpp b/libs/multiprecision/test/test_asin.cpp
new file mode 100644
index 0000000000..5891068421
--- /dev/null
+++ b/libs/multiprecision/test/test_asin.cpp
@@ -0,0 +1,143 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ //
+ // Test with some exact binary values as input - this tests our code
+ // rather than the test data:
+ //
+ static const boost::array<boost::array<T, 2>, 6> exact_data =
+ {{
+ {{ 0.5, static_cast<T>("0.523598775598298873077107230546583814032861566562517636829157432051302734381034833104672470890352844663691347752213717775") }},
+ {{ 0.25, static_cast<T>("0.252680255142078653485657436993710972252193733096838193633923778740575060481021222411748742228014601605092602909414066566") }},
+ {{0.75, static_cast<T>("0.848062078981481008052944338998418080073366213263112642860718163570200821228474234349189801731957230300995227265307531834") }},
+ {{std::ldexp(1.0, -20), static_cast<T>("9.53674316406394560289664793089102218648031077292419572854816420395098616062014311172490017625353237219958438022056661501e-7") }},
+ {{ 1 - std::ldexp(1.0, -20), static_cast<T>("1.56941525875313420204921285316218397515809899320201864334535204504240776023375739189119474528488143494473216475057072728") }},
+ {{ 1, static_cast<T>("1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404325664115332354692230477529111586267970406424055872514205135096926055277982231147447746519098221440548783296672306423782411689339158263560095457282428346173017430522716332410669680363012457064") }},
+ }};
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = asin(exact_data[k][0]);
+ T e = relative_error(val, exact_data[k][1]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = asin(-exact_data[k][0]);
+ e = relative_error(val, T(-exact_data[k][1]));
+ 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);
+ BOOST_TEST(asin(T(0)) == 0);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_atan.cpp b/libs/multiprecision/test/test_atan.cpp
new file mode 100644
index 0000000000..49ab34dce2
--- /dev/null
+++ b/libs/multiprecision/test/test_atan.cpp
@@ -0,0 +1,297 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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)
+#endif
+
+template <class T>
+T atan2_def(T y, T x)
+{
+ T t;
+ t.backend() = boost::multiprecision::default_ops::get_constant_pi<typename T::backend_type>();
+ T t2;
+ if(x)
+ t2 = atan(y / x);
+ else
+ t2 = y.sign() * t / 2;
+ return t2 + (t / 2) * (1 - x.sign()) * T(y.sign() + 0.5).sign();
+}
+
+template <class T>
+struct is_mpfr_type : public boost::mpl::false_ {};
+
+#ifdef TEST_MPFR_50
+template <unsigned Digits10>
+struct is_mpfr_type<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<Digits10> > > : public boost::mpl::true_{};
+#endif
+
+template <class T>
+void test()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 51u> data =
+ {{
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667e-101",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999996666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668666666666666667e-97",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666686666666666666666666666666666667e-93",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666667e-89",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999996666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668666666666666666666666666666666666666666666666666666666666666667e-85",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666686666666666666666666666666666666666666666666666666666666666666666666666666666667e-81",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667e-77",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999996666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667e-73",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666686666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667e-69",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238e-65",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999996666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238e-61",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666686666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095238095238e-57",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095238095238095238095238095238095238e-53",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999996666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666668666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095238095238095238095238095238095238095238096349206349206349e-49",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666666666666666666666666666686666666666666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095238095238095238095238095238095238206349206349206349206349206349206349206349206349e-45",
+ "9.999999999999999999999999999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095238095238095238095238095249206349206349206349206349206349206349206349206349206349206349206349206349206349e-41",
+ "9.99999999999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666666666666666666666666666523809523809523809523809523809523809523809523809523809523809523809523809634920634920634920634920634920634920634920634920634920634920634920634920544011544011544011544011544011544011544e-37",
+ "9.999999999999999999999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666666666666666666686666666666666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095238095238206349206349206349206349206349206349206349206349206349206349206340115440115440115440115440115440115440115440115440115440115440116209346209346209e-33",
+ "9.999999999999999999999999999999999999999999999999999999966666666666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666666666665238095238095238095238095238095238095238095238095238095249206349206349206349206349206349206349206349206349206349115440115440115440115440115440115440115440115440115440116209346209346209346209346209346209346209346209346209346202679543e-29",
+ "9.99999999999999999999999999999999999999999999999666666666666666666666666666666666666666666666666866666666666666666666666666666666666666666666666523809523809523809523809523809523809523809523809634920634920634920634920634920634920634920634920544011544011544011544011544011544011544011544011620934620934620934620934620934620934620934620934554267954267954267954267954267954267954267954268013091483679719e-25",
+ "9.999999999999999999999999999999999999999666666666666666666666666666666666666666686666666666666666666666666666666666666665238095238095238095238095238095238095238206349206349206349206349206349206349206340115440115440115440115440115440115440116209346209346209346209346209346209346209279542679542679542679542679542679542679548561895620719150130914836797189738366208428128459088211410192834341441152586663e-21",
+ "9.999999999999999999999999999999966666666666666666666666666666666866666666666666666666666666666665238095238095238095238095238095249206349206349206349206349206349115440115440115440115440115440116209346209346209346209346209346202679542679542679542679542679542738366208954444248561895620719149604599047323505527839893164970569113274066834438351466215243304983108499463325146458811824271509689681318218133e-17",
+ "9.999999999999999999999996666666666666666666666668666666666666666666666665238095238095238095238096349206349206349206349205440115440115440115440116209346209346209346209345542679542679542679542680130914836797189738366208428128459088211410192834817631628777139613052925311641589740930163598087002528653948764327011735444703713649735994600714288656350334489593033695272837185114343249547095046272603174268e-13",
+ "9.999999999999999666666666666666686666666666666665238095238095238206349206349206340115440115440116209346209346209279542679542679548561895620719149604599047323505575458940784018179051162265592202726621494746410579611835097095566286199717626418813764642659343446728207455753397291482030056516178836684094391777365260695851470017381944166954115569576329193296454393446430574957840819236721213626802085619e-9",
+ "0.00009999999966666666866666665238095249206349115440116209346202679542738366208428128463850116128619335776637836253560167434464812879197215298894881707269927081030999737549925482008672363799937606915962379247584324159094536421375755997513179578610677454920512897850953612762990732913046921088456079984429888220262137400213929962691532176198436788640624698990926490105259050461938357510947570244880435664081",
+ "0.78539816339744830961566084581987572104929234984377645524373614807695410157155224965700870633552926699553702162832057666177346115238764555793133985203212027936257102567548463027638991115573723873259549110720274391648336153211891205844669579131780047728641214173086508715261358166205334840181506228531843114675165157889704372038023024070731352292884109197314759000283263263720511663034603673798537790236",
+ "1.5706963267952299525626550249873704896065212085331517483940102693584808194810202180293789115097723406333076648941055516492022741759833189628737308869915412879148320539754700057326930986734751013960313584219296445913757777000240665569182597868494941800236191544832206381775972559949762275927455637707925634113006817837919481411335451596526426779712759369563859151046126747697908496855825977735219514481",
+ "1.5707963167948966192313220249730847754318980330208862438222342009158129649367552929648110725556184185509578339104318071142673796252326115673007840833450909541260947278453938016119958041324233151995987794877839930865561434524027270213271053829179745357590596408023867275770197075707094053216000680544580256094089113804288267449089904640326828789035666143699659867092108718279796583028512542392495421779",
+ "1.5707963267938966192313216916397514424319180330208862438208054294872415364764378326474936031472490101815502336217205184029120016698547471043186681600526965471042074304163483259318452680435202095109230279463923963492870040904012032740805456738144599352893425202988524603439218707929425378295371082108281620406379082813613862672159901100496534463976107550806601465567059619048829495421806391510160463001",
+ "1.5707963267948965192313216916397514420985846996878862438208056294872415364764378306473507460043918673244073765899887723711659699238229101634817272120007484952330785592874771970616254211570733230640365810600043257395046296021443620234312981206088055277773974880349347475097997796620171523611445056144296707974573126845590321623615288317089359131170138395627805178532322154433252386274406088878525130896",
+ "1.5707963267948966192213216916397514420985846996875529104874726294872415364764378326473507460043918673044073765899744866568802556381086244491974416088261453206299039561128740224575416159622681282588417758651991386266175167241223840014532761425201608391327088433455208280958809539778973505942839152244275827508237604782514078980809178018719474972957865632271450490908284680846718670522639450168825443945",
+ "1.5707963267948966192313206916397514420985846996875529104874722961539082034764378326473507460043918673244073765899744866566802556381086244491960130373975738920584753846844454510289702985019506679413814584048816783091570881436029034819727566620006803196521893628268096302936831517800951527920861130266253182819592915368594665061395258604800061112367475630116742454513973110064559653064241192080164878504",
+ "1.5707963267948966192313216915397514420985846996875529104874722961539082031431044993143507460043918673244073765899744866568802556381086244491940130373975738920584753846843025938861131556448078107985386012620245354520143421118568717359410106302546485736203322199696666822417350998320432047401380610785733702300121487566396862863593060802602258914565277827918940256045031718123167711672299800138772937113",
+ "1.5707963267948966192313216916397414420985846996875529104874722961539082031431044993140174126710588673244073765899744866568802556381086244491960130373975738920584553846843025938861131556448078107985243155477388211663000563975725860216552963445403628593347290453664920790671319252288686015654237753642876559442969539514448810915541112750654206966513329776061797398902251498342947931452519580358553156893",
+ "1.5707963267948966192313216916397514410985846996875529104874722961539082031431044993140174126710585339910740435899744866568802556381086244491960130373975738920584753846843025938861129556448078107985243155477388211663000563975711574502267249159689342879063004739379206504957033538002971729941063150468273384839794936339845636311255398464939921252227615490256602593707446303537753126257714385553358352607",
+ "1.5707963267948966192313216916397514420984846996875529104874722961539082031431044993140174126710585339910740432566411533238802556381086244491960130373975738920584753846843025938861131556448078107985243135477388211663000563975711574502267249159689342879061576167950635076385604966574543158512491721896844813411223507768417064883795081004622460934767298029939142275136017732109181697686285814124786923127",
+ "1.5707963267948966192313216916397514420985846896875529104874722961539082031431044993140174126710585339910740432566411533235469223047756244491960130373975738920584753846843025938861131556448078107985243155477388211663000563775711574502267249159689342879061576167950635076385604966574400301369634579039701956268380650625559922026652223861765318077624440887081999419104271700363149951654539782378755175984",
+ "1.5707963267948966192313216916397514420985846996865529104874722961539082031431044993140174126710585339910740432566411533235469223047752911158626800373975738920584753846843025938861131556448078107985243155477388211663000563975711574502267249157689342879061576167950635076385604966574400301369634579039701956268366364911274207740937938147481032363338726601367713704818557414648864237368825496664469462809",
+ "1.5707963267948966192313216916397514420985846996875528104874722961539082031431044993140174126710585339910740432566411533235469223047752911158626797040642405590584753846843025938861131556448078107985243155477388211663000563975711574502267249159689342879061576167930635076385604966574400301369634579039701956268366364911274207740937938147479603791910155172796285133390128843220292808797396925235898034238",
+ "1.5707963267948966192313216916397514420985846996875529104774722961539082031431044993140174126710585339910740432566411533235469223047752911158626797040642405587251420513513025938861131556448078107985243155477388211663000563975711574502267249159689342879061576167950635076385604966574200301369634579039701956268366364911274207740937938147479603791910155172796285133389985986077435665940254068093055177095",
+ "1.570796326794896619231321691639751442098584699687552910487471296153908203143104499314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552780155644807810798524315547738821166300056397571157450226724915968934287906157616795063507638560496657440030136963457903969995626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296053908203143104499314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477798524315547738821166300056397571157450226724915968934287906157616795063507638560496657440030136963457903970195626836636491127418774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153898203143104499314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214738821166300056397571157450226724915968934287906157616795063507638560496657440030136963457903970195626836636491127420774093793814747960359191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908202143104499314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832967056397571157450226724915968934287906157616795063507638560496657440030136963457903970195626836636491127420774093793814747960379191015517279628513138998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143004499314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824450226724915968934287906157616795063507638560496657440030136963457903970195626836636491127420774093793814747960379191015517279628513338998598607743566592025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104489314017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582968934287906157616795063507638560496657440030136963457903970195626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104499313017412671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582635600954573157616795063507638560496657440030136963457903970195626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104499314017312671058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582635600954572824283461730507638560496657440030136963457903970195626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104499314017412661058533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582635600954572824283461730174305227163657440030136963457903970195626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104499314017412671057533991074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582635600954572824283461730174305227163324106696803963457903970195626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ "1.570796326794896619231321691639751442098584699687552910487472296153908203143104499314017412671058533891074043256641153323546922304775291115862679704064240558725142051350969260552779822311474477465190982214405487832966723064237824116893391582635600954572824283461730174305227163324106696803630124570637195626836636491127420774093793814747960379191015517279628513338998598607743566594025406809304089138",
+ }};
+
+ T arg = static_cast<T>("1e-100");
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = atan(arg);
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = atan(-arg);
+ e = relative_error(val, T(-T(data[k])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ arg *= 10000;
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 10);
+ BOOST_TEST(atan(T(0)) == 0);
+
+ //
+ // And again, but test all the phases of atan2:
+ //
+ arg = static_cast<T>("1e-100");
+ unsigned err;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = atan2(arg, 1);
+ T e = relative_error(val, atan2_def(arg, T(1)));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = atan2(-arg, 1);
+ e = relative_error(val, atan2_def(T(-arg), T(1)));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = atan2(arg, -1);
+ e = relative_error(val, atan2_def(arg, T(-1)));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = atan2(-arg, -1);
+ e = relative_error(val, atan2_def(T(-arg), T(-1)));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ arg *= 10000;
+ }
+ //
+ // special cases:
+ //
+ err = relative_error(T(atan2(T(0), T(1))), atan2_def(T(0), T(1))).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ if(!boost::multiprecision::is_interval_number<T>::value)
+ {
+ // We don't test this with intervals as [-0,0] leads to strange behaviour in atan2...
+ err = relative_error(T(atan2(T(0), T(-1))), atan2_def(T(0), T(-1))).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+
+ T pi;
+ pi.backend() = boost::multiprecision::default_ops::get_constant_pi<typename T::backend_type>();
+
+ err = relative_error(T(atan2(T(1), T(0))), T(pi / 2)).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+
+ err = relative_error(T(atan2(T(-1), T(0))), T(pi / -2)).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+
+ T mv = (std::numeric_limits<T>::max)();
+ err = relative_error(T(atan2(mv, T(1))), T(pi / 2)).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ err = relative_error(T(atan2(-mv, T(1))), T(pi / -2)).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+
+ if(std::numeric_limits<T>::has_infinity)
+ {
+ mv = (std::numeric_limits<T>::infinity)();
+ err = relative_error(T(atan2(mv, T(1))), T(pi / 2)).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ err = relative_error(T(atan2(-mv, T(1))), T(pi / -2)).template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 2000);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_checked_cpp_int.cpp b/libs/multiprecision/test/test_checked_cpp_int.cpp
new file mode 100644
index 0000000000..847760d243
--- /dev/null
+++ b/libs/multiprecision/test/test_checked_cpp_int.cpp
@@ -0,0 +1,116 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test.hpp"
+
+template <class Number>
+void test()
+{
+ using namespace boost::multiprecision;
+ typedef Number test_type;
+
+ if(std::numeric_limits<test_type>::is_bounded)
+ {
+ test_type val = (std::numeric_limits<test_type>::max)();
+ BOOST_CHECK_THROW(++val, std::overflow_error);
+ val = (std::numeric_limits<test_type>::max)();
+ BOOST_CHECK_THROW(test_type(1 + val), std::overflow_error);
+ BOOST_CHECK_THROW(test_type(val + 1), std::overflow_error);
+ BOOST_CHECK_THROW(test_type(2 * val), std::overflow_error);
+ val /= 2;
+ val += 1;
+ BOOST_CHECK_THROW(test_type(2 * val), std::overflow_error);
+
+ if(std::numeric_limits<test_type>::is_signed)
+ {
+ val = (std::numeric_limits<test_type>::min)();
+ BOOST_CHECK_THROW(--val, std::overflow_error);
+ val = (std::numeric_limits<test_type>::min)();
+ BOOST_CHECK_THROW(test_type(val - 1), std::overflow_error);
+ BOOST_CHECK_THROW(test_type(2 * val), std::overflow_error);
+ val /= 2;
+ val -= 1;
+ BOOST_CHECK_THROW(test_type(2 * val), std::overflow_error);
+ }
+ else
+ {
+ val = (std::numeric_limits<test_type>::min)();
+ BOOST_CHECK_THROW(--val, std::range_error);
+ val = (std::numeric_limits<test_type>::min)();
+ BOOST_CHECK_THROW(test_type(val - 1), std::range_error);
+ }
+ }
+
+ if(std::numeric_limits<test_type>::is_signed)
+ {
+ test_type a = -1;
+ test_type b = 1;
+ BOOST_CHECK_THROW(test_type(a | b), std::range_error);
+ BOOST_CHECK_THROW(test_type(a & b), std::range_error);
+ BOOST_CHECK_THROW(test_type(a ^ b), std::range_error);
+ }
+ else
+ {
+ // Constructing from a negative value is not allowed:
+ BOOST_CHECK_THROW(test_type(-2), std::range_error);
+ BOOST_CHECK_THROW(test_type("-2"), std::range_error);
+ }
+ if(std::numeric_limits<test_type>::digits < std::numeric_limits<long long>::digits)
+ {
+ long long llm = (std::numeric_limits<long long>::max)();
+ test_type t;
+ BOOST_CHECK_THROW(t = llm, std::range_error);
+ BOOST_CHECK_THROW(t = static_cast<test_type>(llm), std::range_error);
+ unsigned long long ullm = (std::numeric_limits<unsigned long long>::max)();
+ BOOST_CHECK_THROW(t = ullm, std::range_error);
+ BOOST_CHECK_THROW(t = static_cast<test_type>(ullm), std::range_error);
+
+ static const checked_uint512_t big = (std::numeric_limits<checked_uint512_t>::max)();
+ BOOST_CHECK_THROW(t = static_cast<test_type>(big), std::range_error);
+ }
+ //
+ // String errors:
+ //
+ BOOST_CHECK_THROW(test_type("12A"), std::runtime_error);
+ BOOST_CHECK_THROW(test_type("0658"), std::runtime_error);
+
+ if(std::numeric_limits<test_type>::is_signed)
+ {
+ BOOST_CHECK_THROW(test_type(-2).str(0, std::ios_base::hex), std::runtime_error);
+ BOOST_CHECK_THROW(test_type(-2).str(0, std::ios_base::oct), std::runtime_error);
+ }
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ test<number<cpp_int_backend<0, 0, signed_magnitude, checked> > >();
+ test<checked_int512_t>();
+ test<checked_uint512_t>();
+ test<number<cpp_int_backend<32, 32, signed_magnitude, checked, void> > >();
+ test<number<cpp_int_backend<32, 32, unsigned_magnitude, checked, void> > >();
+
+ //
+ // We also need to test type with "odd" bit counts in order to ensure full code coverage:
+ //
+ test<number<cpp_int_backend<528, 528, signed_magnitude, checked, void> > >();
+ test<number<cpp_int_backend<528, 528, unsigned_magnitude, checked, void> > >();
+ test<number<cpp_int_backend<48, 48, signed_magnitude, checked, void> > >();
+ test<number<cpp_int_backend<48, 48, unsigned_magnitude, checked, void> > >();
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_constants.cpp b/libs/multiprecision/test/test_constants.cpp
new file mode 100644
index 0000000000..b7f6afe91c
--- /dev/null
+++ b/libs/multiprecision/test/test_constants.cpp
@@ -0,0 +1,198 @@
+// Copyright John Maddock 2012.
+
+// 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
+
+#if !defined(TEST_MPF_50) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50)
+# define TEST_MPF_50
+# define TEST_CPP_DEC_FLOAT
+# define TEST_MPFR_50
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+
+#include "test.hpp"
+
+static const char* ln2 =
+"0.693147180559945309417232121458176568075500134360255254120680009493393621969694"
+"71560586332699641868754200148102057068573368552023575813055703267075163507596193"
+"07275708283714351903070386238916734711233501153644979552391204751726815749320651"
+"55524734139525882950453007095326366642654104239157814952043740430385500801944170"
+"64167151864471283996817178454695702627163106454615025720740248163777338963855069"
+"52606683411372738737229289564935470257626520988596932019650585547647033067936544"
+"32547632744951250406069438147104689946506220167720424524529612687946546193165174"
+"68139267250410380254625965686914419287160829380317271436778265487756648508567407"
+"76484514644399404614226031930967354025744460703080960850474866385231381816767514"
+"38667476647890881437141985494231519973548803751658612753529166100071053558249879"
+"41472950929311389715599820565439287170007218085761025236889213244971389320378439"
+"35308877482597017155910708823683627589842589185353024363421436706118923678919237"
+"23146723217205340164925687274778234453534764811494186423867767744060695626573796"
+"00867076257199184734022651462837904883062033061144630073719489002743643965002580"
+"93651944304119115060809487930678651588709006052034684297361938412896525565396860"
+"22194122924207574321757489097706752687115817051137009158942665478595964890653058"
+"46025866838294002283300538207400567705304678700184162404418833232798386349001563"
+"12188956065055315127219939833203075140842609147900126516824344389357247278820548"
+"62715527418772430024897945401961872339808608316648114909306675193393128904316413"
+"70681397776498176974868903887789991296503619270710889264105230924783917373501229"
+"84242049956893599220660220465494151061391878857442455775102068370308666194808964"
+"12186807790208181588580001688115973056186676199187395200766719214592236720602539"
+"59543654165531129517598994005600036651356756905124592682574394648316833262490180"
+"38242408242314523061409638057007025513877026817851630690255137032340538021450190"
+"15374029509942262995779647427138157363801729873940704242179972266962979939312706"
+"93574724049338653087975872169964512944649188377115670167859880498183889678413493"
+"83140140731664727653276359192335112333893387095132090592721854713289754707978913"
+"84445466676192702885533423429899321803769154973340267546758873236778342916191810"
+"43011609169526554785973289176354555674286387746398710191243175425588830120677921"
+"02803412068797591430812833072303008834947057924965910058600123415617574132724659"
+"43068435465211135021544341539955381856522750221424566440006276183303206472725721"
+"97515290827856842132079598863896727711955221881904660395700977470651261950527893"
+"22960889314056254334425523920620303439417773579455921259019925591148440242390125"
+"54259003129537051922061506434583787873002035414421785758013236451660709914383145"
+"00498589668857722214865288216941812704886075897220321666312837832915676307498729"
+"85746389282693735098407780493950049339987626475507031622161390348452994249172483"
+"73406136622638349368111684167056925214751383930638455371862687797328895558871634"
+"429756244755392366369488877823890174981027";
+static const char* pi =
+"3.141592653589793238462643383279502884197169399375105820974944592307816406286208"
+"99862803482534211706798214808651328230664709384460955058223172535940812848111745"
+"02841027019385211055596446229489549303819644288109756659334461284756482337867831"
+"65271201909145648566923460348610454326648213393607260249141273724587006606315588"
+"17488152092096282925409171536436789259036001133053054882046652138414695194151160"
+"94330572703657595919530921861173819326117931051185480744623799627495673518857527"
+"24891227938183011949129833673362440656643086021394946395224737190702179860943702"
+"77053921717629317675238467481846766940513200056812714526356082778577134275778960"
+"91736371787214684409012249534301465495853710507922796892589235420199561121290219"
+"60864034418159813629774771309960518707211349999998372978049951059731732816096318"
+"59502445945534690830264252230825334468503526193118817101000313783875288658753320"
+"83814206171776691473035982534904287554687311595628638823537875937519577818577805"
+"32171226806613001927876611195909216420198938095257201065485863278865936153381827"
+"96823030195203530185296899577362259941389124972177528347913151557485724245415069"
+"59508295331168617278558890750983817546374649393192550604009277016711390098488240"
+"12858361603563707660104710181942955596198946767837449448255379774726847104047534"
+"64620804668425906949129331367702898915210475216205696602405803815019351125338243"
+"00355876402474964732639141992726042699227967823547816360093417216412199245863150"
+"30286182974555706749838505494588586926995690927210797509302955321165344987202755"
+"96023648066549911988183479775356636980742654252786255181841757467289097777279380"
+"00816470600161452491921732172147723501414419735685481613611573525521334757418494"
+"68438523323907394143334547762416862518983569485562099219222184272550254256887671"
+"79049460165346680498862723279178608578438382796797668145410095388378636095068006"
+"42251252051173929848960841284886269456042419652850222106611863067442786220391949"
+"45047123713786960956364371917287467764657573962413890865832645995813390478027590"
+"09946576407895126946839835259570982582262052248940772671947826848260147699090264"
+"01363944374553050682034962524517493996514314298091906592509372216964615157098583"
+"87410597885959772975498930161753928468138268683868942774155991855925245953959431"
+"04997252468084598727364469584865383673622262609912460805124388439045124413654976"
+"27807977156914359977001296160894416948685558484063534220722258284886481584560285"
+"06016842739452267467678895252138522549954666727823986456596116354886230577456498"
+"03559363456817432411251507606947945109659609402522887971089314566913686722874894"
+"05601015033086179286809208747609178249385890097149096759852613655497818931297848"
+"21682998948722658804857564014270477555132379641451523746234364542858444795265867"
+"82105114135473573952311342716610213596953623144295248493718711014576540359027993"
+"44037420073105785390621983874478084784896833214457138687519435064302184531910484"
+"81005370614680674919278191197939952061419663428754440643745123718192179998391015"
+"91956181467514269123974894090718649423196";
+static const char* e =
+"2.718281828459045235360287471352662497757247093699959574966967627724076630353547"
+"59457138217852516642742746639193200305992181741359662904357290033429526059563073"
+"81323286279434907632338298807531952510190115738341879307021540891499348841675092"
+"44761460668082264800168477411853742345442437107539077744992069551702761838606261"
+"33138458300075204493382656029760673711320070932870912744374704723069697720931014"
+"16928368190255151086574637721112523897844250569536967707854499699679468644549059"
+"87931636889230098793127736178215424999229576351482208269895193668033182528869398"
+"49646510582093923982948879332036250944311730123819706841614039701983767932068328"
+"23764648042953118023287825098194558153017567173613320698112509961818815930416903"
+"51598888519345807273866738589422879228499892086805825749279610484198444363463244"
+"96848756023362482704197862320900216099023530436994184914631409343173814364054625"
+"31520961836908887070167683964243781405927145635490613031072085103837505101157477"
+"04171898610687396965521267154688957035035402123407849819334321068170121005627880"
+"23519303322474501585390473041995777709350366041699732972508868769664035557071622"
+"68447162560798826517871341951246652010305921236677194325278675398558944896970964"
+"09754591856956380236370162112047742722836489613422516445078182442352948636372141"
+"74023889344124796357437026375529444833799801612549227850925778256209262264832627"
+"79333865664816277251640191059004916449982893150566047258027786318641551956532442"
+"58698294695930801915298721172556347546396447910145904090586298496791287406870504"
+"89585867174798546677575732056812884592054133405392200011378630094556068816674001"
+"69842055804033637953764520304024322566135278369511778838638744396625322498506549"
+"95886234281899707733276171783928034946501434558897071942586398772754710962953741"
+"52111513683506275260232648472870392076431005958411661205452970302364725492966693"
+"81151373227536450988890313602057248176585118063036442812314965507047510254465011"
+"72721155519486685080036853228183152196003735625279449515828418829478761085263981"
+"39559900673764829224437528718462457803619298197139914756448826260390338144182326"
+"25150974827987779964373089970388867782271383605772978824125611907176639465070633"
+"04527954661855096666185664709711344474016070462621568071748187784437143698821855"
+"96709591025968620023537185887485696522000503117343920732113908032936344797273559"
+"55277349071783793421637012050054513263835440001863239914907054797780566978533580"
+"48966906295119432473099587655236812859041383241160722602998330535370876138939639"
+"17795745401613722361878936526053815584158718692553860616477983402543512843961294"
+"60352913325942794904337299085731580290958631382683291477116396337092400316894586"
+"36060645845925126994655724839186564209752685082307544254599376917041977780085362"
+"73094171016343490769642372229435236612557250881477922315197477806056967253801718"
+"07763603462459278778465850656050780844211529697521890874019660906651803516501792"
+"50461950136658543663271254963990854914420001457476081930221206602433009641270489"
+"43903971771951806990869986066365832322787";
+
+template <class T>
+inline bool is_mpfr(const T&)
+{
+ return false;
+}
+#if defined(TEST_MPFR_50)
+template <unsigned N, boost::multiprecision::expression_template_option ET>
+inline bool is_mpfr(const boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<N>, ET>&)
+{
+ return true;
+}
+#endif
+
+template <class T>
+void test()
+{
+ typedef typename T::backend_type backend_type;
+ T num, expect;
+ num.backend() = boost::multiprecision::default_ops::get_constant_pi<backend_type>();
+ expect = static_cast<T>(pi);
+ BOOST_CHECK_CLOSE_FRACTION(num, expect, std::numeric_limits<T>::epsilon() * (is_mpfr(num) ? 1200 : 2));
+ num.backend() = boost::multiprecision::default_ops::get_constant_ln2<backend_type>();
+ expect = static_cast<T>(ln2);
+ BOOST_CHECK_CLOSE_FRACTION(num, expect, std::numeric_limits<T>::epsilon() * (is_mpfr(num) ? 30 : 1));
+ num.backend() = boost::multiprecision::default_ops::get_constant_e<backend_type>();
+ expect = static_cast<T>(e);
+ BOOST_CHECK_CLOSE_FRACTION(num, expect, std::numeric_limits<T>::epsilon() * (is_mpfr(num) ? 2 : 1));
+}
+
+int main()
+{
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<2000> > >();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<2000> > >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::number<boost::multiprecision::gmp_float<2000> > >();
+#endif
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_constexpr.cpp b/libs/multiprecision/test/test_constexpr.cpp
new file mode 100644
index 0000000000..d90cfe32d3
--- /dev/null
+++ b/libs/multiprecision/test/test_constexpr.cpp
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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_0.txt)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#if defined(HAVE_FLOAT128)
+#include <boost/multiprecision/float128.hpp>
+#endif
+
+#ifndef BOOST_NO_CXX11_CONSTEXPR
+
+template <class T>
+void silence_unused(const T&){}
+
+template <class T>
+void test1()
+{
+ constexpr T i1 = 2u;
+ constexpr T i2;
+ constexpr T i3 = -3;
+ constexpr T i4(i1);
+
+ silence_unused(i1);
+ silence_unused(i2);
+ silence_unused(i3);
+ silence_unused(i4);
+}
+template <class T>
+void test2()
+{
+ constexpr T i1 = 2u;
+ constexpr T i2;
+ constexpr T i3 = -3;
+
+ silence_unused(i1);
+ silence_unused(i2);
+ silence_unused(i3);
+}
+template <class T>
+void test3()
+{
+ constexpr T i1 = 2u;
+ constexpr T i2;
+
+ silence_unused(i1);
+ silence_unused(i2);
+}
+
+using namespace boost::multiprecision;
+
+template void test1<number<cpp_int_backend<64, 64, unsigned_magnitude, unchecked, void>, et_off> >();
+template void test1<number<cpp_int_backend<64, 64, signed_magnitude, unchecked, void>, et_off> >();
+template void test3<number<cpp_int_backend<2048, 2048, unsigned_magnitude, unchecked, void>, et_off> >();
+template void test2<number<cpp_int_backend<2048, 2048, signed_magnitude, unchecked, void>, et_off> >();
+
+#if defined(HAVE_FLOAT128)
+template void test1<float128>();
+#endif
+
+#endif
diff --git a/libs/multiprecision/test/test_cos.cpp b/libs/multiprecision/test/test_cos.cpp
new file mode 100644
index 0000000000..ee48a85cb6
--- /dev/null
+++ b/libs/multiprecision/test/test_cos.cpp
@@ -0,0 +1,361 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 101u> data =
+ {{
+ "-2.37609908807915949996042688873953402912174184373388399043229539427530802169622688886435380890546981798452174137747437590e-1",
+ "8.03406366226813589517543567844755380935198206635917017883860879215939165740799963435747185200486086864198723786516760875e-1",
+ "8.60219386510802105228997694366289682807721120146423711696179175800635220710279361583231346318224971127450760223168489952e-1",
+ "-1.36768951513839774357595871594675554406872039078811749027554673949684004409484639336417431285061889554892096426752261915e-1",
+ "-9.66210139195431691033548069227792927999642647449593184440815029076272297050360196975341458076547426373476590671462150981e-1",
+ "-6.12007278553856790723803948280976098970972124581361775428331444376106018942231526074915731012122426588769327127413045994e-1",
+ "4.91927698740873688392439262912409276430264703350691359723802294639643655296838880236042651349290074585311025856549893171e-1",
+ "9.93232596718899824059271235487971663771012607519717340071654721877802691370866768064059943491135925674950430467047724563e-1",
+ "2.77789911520199551017947550534057049374212876971194676010301098598339529915403722848373365985645657342475739669568931563e-1",
+ "-7.77955945956221239101360662190442739163791527953499629555756394261998892874934847131138921705713935365505245406994428077e-1",
+ "-8.80676278306736581575818642341143682410874043182925227659938804267878718513212454821032629378618345485453587099696563832e-1",
+ "9.54652155963865007116798560589970996367213754762169439269792747771200843006278637115722685610960738675814993576019945344e-2",
+ "9.54658201427917718824191302196929158303422390793460018465335986921801519149657723689322277773550748806000948225466432438e-1",
+ "6.44358700620889799575033272322899136331490664925359198096632560532437137894857803619177106562399406351419810452110265174e-1",
+ "-4.55304635273050571206400777159475409897339683148730716647371922365967582339285347105376503917296765204188604297021364549e-1",
+ "-9.97202532932553753622481171186283382950122646390227670693679248197349800205205290898290539070732778341271049474946533154e-1",
+ "-3.17489525058325500707686194437148362752290391406825231198381521862930317513649081353670386166519524315810546189268634469e-1",
+ "7.51160186640147504067744846462384089742696250681200524524912647858645140367792164416711871535116761744380912486921554617e-1",
+ "8.99610194168373157174515848193119670768490559799348397680196213249921436405001710937402190319584272526657508442591319630e-1",
+ "-5.39963892484342940823660554048696208293700871414984387094529796385334086703752106515008832585578915389731907422242902573e-2",
+ "-9.41455348900839346761557896365239742769987576963330061702397697388879776230596944312519157729410022380228287314835345969e-1",
+ "-6.75595816763857390859268297670835380459024839344154743310231115864242050771191159334664874097564054770066166961642073448e-1",
+ "4.17894201894880415042381733708896725748531223743344790054523182948440843948904650988733732381978194392219295696279423635e-1",
+ "9.99447981389824371458566861195586395552622718284098766856978062347139060489410032781030191080200904443096549587568037683e-1",
+ "3.56640095868759075150409032448421838265699043643228482503057299699740924345262819242042067863780263400092250418388628640e-1",
+ "-7.23065426868134142613141384486526262450487633432466529798821958977732347646832059032382447792655111641456570392189752211e-1",
+ "-9.16988391192434436877664999042786024703848714036221388727578305299843547352325574309860356272561772723624753484063972217e-1",
+ "1.24341855683226931265962750806821531283439413068694552738675989282017066737438591268502070364982899342633928417210588531e-2",
+ "9.26624413643579136646620112107410908114766812511471130116341925013001661546817531064974089666536893346764523464250445838e-1",
+ "7.05664607841658050248613256866289182754229289446384595719719495272020558391145537620968819401219414243210529013148958366e-1",
+ "-3.79761093422301890838671114556341706055562482358183402807224298533060188038450560241345615647754569347252101282386222173e-1",
+ "-9.99965058979463689113370264378210962384824970050865061898892508056811665771886385589295806419278045318841717598003331419e-1",
+ "-3.95173919871548266286836251448043149039940610894391718791244019288314418437411707835924620250473697245151743147215758686e-1",
+ "6.93720251624319621941983929806434090162802383400620564454074825718151625795576680427510026452063593762417421561201654156e-1",
+ "9.32780816819880202610269817418700102084277332259524791943833699964920012022753227823298655560837271746316929623378078695e-1",
+ "2.91495208658083070508005579692813621670878962971611104453227900103973434149303469066898102622556226584993895360896300290e-2",
+ "-9.10191043170480685360743788297835112117551819731152897291272407935139876953384666161532187572493791297095784055525159185e-1",
+ "-7.34513075127503122343910106816656237074878218180284276449954797048122379869002663646507706411949095015624141821039453971e-1",
+ "3.40971254411713599427147477626159847871020791931107106418841144080445813896332252160005593096670674809345703079384115052e-1",
+ "9.98752871506016936810666998588493462933191829230756181478046320353377054175122206889047094521687205093218701141334147081e-1",
+ "4.33024359542714849537532946954507232835434973891665238942502273464321666207117525270650546741831354943253652514490075246e-1",
+ "-6.63175408268187738636594884921931867786416057472876635147295424128144233911929585327601381618059327766986981109409782838e-1",
+ "-9.46960160806563725719808910991708075372282242401645009270517113290439792088443109178772446465191984149998211903724560065e-1",
+ "-7.06828182905581345108929510344440443421290640066613022421187316650733628538705972455891575947230299102119854983197703150e-2",
+ "8.92183656127948379886438402777950080111433733329436790239129260607557296960582455582584117031260710927499215646838011844e-1",
+ "7.62091330231640362984555508176991632755732840163230620595759320390970951235395195394649584713540498911356433919369698423e-1",
+ "-3.01591765120371930643555588643712101466544136366607065361801475091335195383846047491935017919396438040414024941341524187e-1",
+ "-9.95813515236177554177387795413035497724212540625760091518605741283184405719984044075159457509720410668598540884613985023e-1",
+ "-4.70125959152223022135690700550251564040118601846181392455764893020377582359429013073566263451488554529709131439092909247e-1",
+ "6.31483718775865440843182928017874708719203714677143270278178885379757350754752477512514449375355491054871712891789652146e-1",
+ "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "3.87481045630097871028201331640164477694000480353342897357083794605539506785023570062767753819472037935010414476627195076e-1",
+ "-6.99716878554812023132822640034166338740077082416915046841339368979161296335086955803240899441098534898926193252558848693e-1",
+ "-9.29735101124991407032113033015438177585645722877060262785796302722011806301680288369763295777635760805579255008366302180e-1",
+ "-2.07925797310208845709174899248298159909010721767168338004516304026594885686024530923209628704670627250569637267490913462e-2",
+ "9.13621640053945104047985280883096238900189007462190433514805702721127019097915088259906184736442916334750420359005079959e-1",
+ "7.28814716527795995795780587639833705107995825167970668466246348938821997240383021826681253777014938636567626203524137506e-1",
+ "-3.48817863192357573536083313907744269588018702862402502601699983054718835012048372083235768555953613790431700360695537918e-1",
+ "-9.99135337256258278958854200595331742602280601557283993231562055717063052179292021052372510863057206152466386086657442382e-1",
+ "-4.25474147219713305654097901385832164424798803616095278869643928816776198489330071073326518019520590535564717523756486665e-1",
+ "6.69409002349720857726983952566596052122726437391092096671257338244059819036586172017092390651026654050631669646310910927e-1",
+ "9.44240747589054266930136705015787520728797286842746645573763175559132491628984502333043316023599487896169049499868916865e-1",
+ "6.23417820549832676844933182722733277887833220127638406914080428946880981800946578131712749910941183940944526141109771339e-2",
+ "-8.95928229794837090592434136137683839101829890460754766346170956577979909285084363961363023377587044303560652568203578379e-1",
+ "-7.56652196635835430995109388017590459596111729342964992503572530290981857981790620732129221157071082788019187787999930361e-1",
+ "3.09551461133309219674309651201007026752336319933918953736299690287371505733386433918863300129026763968979930342098019300e-1",
+ "9.96542844308353945757715814452637400116215448012622700698887257177706625278927018059066920597035660000571997275705962011e-1",
+ "4.62731465522276407764000677957978862104808823938378826581864482071733508960062598574638347814740748458034065235894523010e-1",
+ "-6.37943500095315456672541800050589670140910744260281868746767523730582697622604545933849801882909439609368258115114388202e-1",
+ "-9.57113494461990955768932962010819183910065445494138937651443249061391692258872250121438832853873660881630205561168895590e-1",
+ "-1.03783175146302830356973378710923690121182237844646430783773333188328606275124873219756415071202025673009660963930966273e-1",
+ "8.76685468012988943166112725030293740012198666616661362437433807594683780986916439696374569274720383546275206733493672834e-1",
+ "7.83181178815072182812568575402104911406191663934571600092749188502783771503475038116599065276589122015600004250624262132e-1",
+ "-2.69749743842835294071354429049113807280228918034124159074991560056663623624511602063409428877143567459307323934051784210e-1",
+ "-9.92227004420417932443416371636723983768124774541445787394585828303853075015733744933294181104002649816119116502663362907e-1",
+ "-4.99188570507651271652464431008309802023236218596632956064119419694573621896525872847587264755853127438644874992889777436e-1",
+ "6.05374785886620830935500306718810628353011877048386199574451402773468315797082901705593423724389976967865835641164117478e-1",
+ "9.68331080574540181354402420018944004334504868848934676984951546671476956051983469715128604348963016773169794077158289730e-1",
+ "1.45045093347669933436797325432376656017480150281100519869038554695618054318368975927557872948037203212941966706926758604e-1",
+ "-8.55926631706799584065153976496431313099942493164544290051315786450857575707615522517293656706329757352795226750189755758e-1",
+ "-8.08355785820466703104647317116964786017731181599256098405978700298563758509572188640629418770593008092680980412866065299e-1",
+ "2.29481541445091823694157468006983283649885473964756916206813927875661041834620526229807744443043682778028709792615798955e-1",
+ "9.86195281084368344446227722442335005500018635181693920385626820970119467136148305491035657795704047666385553672680209923e-1",
+ "5.34782415974986828906369231191245075731384342252264783019973387059318216570499447505623911253042567598873910043381675873e-1",
+ "-5.71759181631212640256161075896307515511612057247572886814941945052483422285718810088660759708176904381865453799197101481e-1",
+ "-9.77874107069129472007009478090869879295520839405452365411822873037906082086100232576241983901051327761231156641104065497e-1",
+ "-1.86056181372276495846711248156316208757691570931906856005697361080864028851991674077024223201008430626166447144444086146e-1",
+ "8.33687619660983803179149188531271900120055171980951416163724579833511897001564116810390933587615557717585362295882429826e-1",
+ "8.32132482562487183916482822112362004641509381783438374175226355792137053285527706239574867923387554339582561002247202518e-1",
+ "-1.88816490768820368180947188938258919466912959009058295775702554895970560887437777994365295452696990115940651570073217522e-1",
+ "-9.78458105113103660973458641126689066610890753079836635611789969774219913050456840122278188955139015473252491612410972950e-1",
+ "-5.69451448580118869157805059117807250106203230622762838051154208713065707949727035884250775206017528612930773233017928006e-1",
+ "5.37154819650306918873973169624898539483418364490295996462663218848771864764982600193558748568095521886456306061269765631e-1",
+ "9.85726070946814004698231423834505649751779161578718404221294527194525251740198034173542003704080544827976936213857653517e-1",
+ "2.26745517700332138489400566746499809209783385009289423848083137846668382711005704387134606000570923556980021574851618566e-1",
+ "-8.10006890365888881023982873786181048364505748637138923322482323010218991062084191379116946709356002103893071903481540337e-1",
+ "-8.54470151393449484710948210543666267680196067632693416660536443330720708402601669617638569732848938319544250428600991723e-1",
+ "1.47824914922605209542648603104533928946885824995208478684499907657728115943168395067575842431291755277452367320596435067e-1",
+ "9.69028856602232134498324179654622883463820270279077886397861028881882684131282848087869087883519707948141915733221980948e-1",
+ "6.03135714281336943093251136556365407562473924416812270469171432809743173719168209727199952532489544254928975940518615351e-1",
+ "-5.01621542149055350065079347615664213658089623368745676779267390227688581807037821041573344917735076902116221444127518632e-1",
+ }};
+
+ boost::uintmax_t max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ static const T euler_gamma = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+ T val = cos(euler_gamma * ((100 * k) - 5000));
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = cos(-euler_gamma * ((100 * k) - 5000));
+ e = relative_error(val, T(data[k]));
+ 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 < 5000000000ULL);
+
+ static const boost::array<const char*, 51u> near_one =
+ {{
+ "0.001103662615143147017601393734232421549156847219973314118949247990939859507971857976111288683988415478257878902917354105871236439563170045857810738102729287303674642020538722348587741395785016549139854168605590336633274890874911975139498047488076101124170425114828336211817830671418321600962996502656221412102902998671173649312277667706874059520046508702908872747388744526457997404065469953155187340837",
+ "0.0030157041572432190019717764776322147049224887913331212054173669461673516770769148735558540290915754514269097799280330158745508542936966046640795712691698490758472574837678659161855207596563250546269614348515005196657786359646020537231301121492728577410212550350070502426482802490452572415879214994201864402901595309726458026672888041860289772080407882673424767232857435141510615538430445535588448032261",
+ "0.0049277346741750694119109616231402901360500185022482787362616412856233338679208830974124749830793778323997684640684587346403570647040211088376986993615001420565608501262335822815041623056442245053684626079448221530207757672939048030945164948521320401574074802966260975904478775314730002799895049652983052125151436511589335123254582883803928373794668948878049089088843407672795237410750365571990834236348",
+ "0.0068397471757112108044544339281399968563253858411528016363900245610068161564091499398024110635089866212789583403491711476788985949178019078796740862827299289838108117219486357027460681238178010067475221327133396780718266880540272936860185783976937569903778160170225166328920201699827472893824363838439627437187765159770262282930293057633886299749088561182830982345936603553661004526800797082995898813903",
+ "0.008751734671690018552720976028788304981263251327799787402847843531098338033456389098956160956160597460869666211569183483587979772678557230743050583975270977754518475970489741156524119378847305446845331098526962579804361960647344836744631465315238254178161716870409320747176674142306881908614436607977326507761331050644035013756409444911127742401762647885817361924274132830920030936589562922803846509607",
+ "0.010663690172041286306192948782895990881227033104763005629047563262531418373465237876680529005058533981010793759446966868628480908709812402179047774888094761104238131843239037167212206469894485599085717216855637620318723457013401360290343196462723174177342294339229792213396006286331141933952648238459364417067676760977202812721209681621184724443514062993874571816382775241753902032787099435678672474841",
+ "0.012575606686811781116778815864446643746718166744927923785139233710240017201737625088406861185781739628293213436323314376708933534933748436720721568462267317026688561438144113855290140925120435317506169856461386623828941531577425811393721991195661429557079268566156800689149725770186985872449679872155877537432897653904213375816262709009448220490217917537801655330411526526290708967440087145630462068976",
+ "0.014487477226190798137230457835664944872810802211308342685055637400305474021552028493778559102552025380880477103065187688337931713540557562373991431880251553620947836940726544553647739994157300967262941976933375115946629204615918888689039777423610894099269527633757403818072000860056651445780074486612843419789636984117740884711882675016016919064788076097669389652323393864660933705259163296837955978748",
+ "0.016399294800535714798489384358524900105286836154421890562438917862501411947245037986455919696365301666112414890097246479762149456962809638588245466988584093380263545543023411087203351948681559905336010066900667101787138862856447778428938265451537422367650992162004154495705878092019403922006152498705687706013973674800621422751806347308220226407830977673540994341535381202679482907460136241543505771361",
+ "0.018311052420397544372537858201001145083914223029622271478159852925692124442640247100336262041440360412392318902558295108452513123454103504516607498763863728284797202978975409264141138861738184468257576157204552383675442780049333490201800526935793000727771598103735596829143729912656158790924063286176336412427525710457367751437348230246446466833498557166002214984255422115833828533909144072330080184872",
+ "0.020222743096546488827333191237246591760639730704704148795009602627175281013458865557238240830203973690492882935553111519759474835556686812553430134442713057622274348510526931333124437928482001301214776111358848026164688447150395879262705323533149853785508106018564787140458587165768350143018847840661371060583295055600185059031740386698369796694993301139380463919242175430688496936048982929502368583755",
+ "0.022134359839997490880406060727014362125793630864951833270601574861700025448109186301755833862830343973100181180995751924514611578149687732808840212399134735559355116816700346196685057916461444889179117142807858883574426062415931319905031345377305247124198345242221848293630112578508459623098934259229893301963120289071135120089672338617200639338087265986570094025605269870532431816151660553037324591448",
+ "0.024045895662035785157706623778569329505432699504171659064296747761761946910295074291838826981712792368282349553905175996858645967280135417577488810651594776626562252686758463813820791031580579721782251705600570838044158357396828391251385978824608388341556751951593319015721256942139947235672567093309227673005475237474351604086627391812539914665025071874865132198040631867741985556198082915821590691115",
+ "0.025957343574242448364285479040344211549214421772336408904791690210449825580868841229728937909141136116652894475476991471494524501035809956288247010861464302066154254736425460468024350571584780489213056428098560686376999562953811729945811217829999284678155635497607933780499844559793793320393174691097636750027421158473345884329284455326733063073401001936304522649050748641723222539485352644237494855455",
+ "0.027868696588519948373400137317728007608587427701668964330844960393232962659347088604492706251530487148805683505883152882204177723404307465324383408418716579280515871949790204586171885981761699066301009410176801635003961167315448162116236938093263170474354430610732127054993766008385425707409224417795873645410443727472246508894027549288331903202127478347028519320691939639175445464091747341289465807076",
+ "0.029779947717117692140641616959423088975059158964671307393654571763491553590582559015283533532986018614029995854278748039155177088839414450454409571267110720713374288363670804692289394770804051182510495900322915294613479146430103948686457060129295537542317247965142780968717375277053102667416124807987527429828758851341378395347636356414345553353015296944031211364374602764176767114282660874356057979248",
+ "0.03169108997265757234968007548831539092664261419258315028339932724609641378752993073240305448323210275610250474048387518003293691429670190316839718892647475151605557113852966925288722557261748981001717642661075734993748510506277165730472207647763678204813714194082852502621623007244214605646094787730992510318924772328958129857640953691466395972638014259980360897599169526022683004620965496473543834477",
+ "0.033602116368159512696233026049065446239504816931754722314316906991719894135599777826750609185018647633748023602662568553364455253741994701511752478506175671449029859193583332380924298164350627023797218098539441228986492601142199774579432202424360114528105854714450548265654769162069979862894518829365029262734944196495563243510942310738160350648115273816371164862001848102516957052031698646996790510953",
+ "0.035513019917067011716864665791693591701266221069066142988726516832036728613300457006403299601385922973285573124147669717618486570986860008564309641657943172757912451506572783449830586163814477502720341010870119231030511664725149033496023356743601581035789746158436049009960920433265660001864258067191594425969638702851317416487965304378219676062220223886417078628342731900948906319081697480745936074075",
+ "0.037423793633272685069230163289099410548201460485083250584815890545695501760634737348027106921155349564805321222282824709072582234185849564440670000847571561359324629877368620222775856068569278590582843550096096627510109210574429458414697641703261368397349100700647508781941466979105505468662952228018391181441110331804231754679360190526351574820397399161022517352576803713854137820941977691824804918229",
+ "0.039334430531143806170384413477273936914540782490679532559795199052084263353981243128408259086619593938946158294175465792633584421592350011455198124846778194417281005620258982615227234871780679327289232072858751285307955384102986030326321993554199425677956531006546270705693578070953933490084008156062047268010604414954653769711129551190023978078265436680151306319349753427763894284339669614362603225399",
+ "0.041244923625547845099780771389235760645292527949481044094490883777921290140650504322516472637184803214130714431279474404434513167088543202171922178874118967991301744186858054508473413647148744260057423931033177973119110921967581379650616945061418716237102199971097086754171168500651650526166023618723542873290120298640370217463634503988257867984189842393302366909916756244585593509804376197012137137735",
+ "0.043155265931878005673591620105503250213648422568500347993529171942176855000247082147052189275394127432389966427668413127665366489709229602926384588361071126297040547180622989395253518259197742053810419372452372506534313264090033740095357809571640645325965973975968081307185286025492280541542290934505383760407808393490207181258819590768103829347539943429968533891105456889889207923129412409325200337396",
+ "0.045065450466078760596989313842010956972889269629840996618541471076456145341576346037140737554087089598232657340541865108389258265511462307708855932308284610805209084413460614598570062354088931179587984702006847566162492414964136182928014974554852612762940578089297583097434972291633301329615187665009664697057933900728259220674217919826618275818024987757805509580781060051826778978395144370327934582031",
+ "0.046975470244671384601033063916347240271496301008030038885300525267985292259051299166038486168462131096926077920611254966322965395673221324506213593415263189667393727124978454125104192236004303056348320706091018781990803164595039969574510002737990997634364247271320535459089400357647302806652831431190979518269432197656547265417669309719787317687585776029758282182901563328846367691507505917911626458378",
+ "0.048885318284779485470814703449342779874157141188272539012461507790598796169844054420701400747288103863351008593834375336008952419161297787680355981672505884405645257094616683497040471721980241679616912483788844007649447969703512155758482444019770785766752697959554691538291379700303132353876869628124563105576278585509058450081192711918856522653293896204836307264696289474219755720645459588331890558889",
+ "0.050794987604154532871523976044438688478988546522275702591135165295075684834775069782087540212155311599924632216878717363279038406203747968637573994688146329296755023729170505930935028107359530042909822369245609091696704070694133386183688825674952803613566914142157159664703170379754943610785780639205752343103591085978554489192416588288410803225066825839880971435465232206429722600557780654218330146221",
+ "0.052704471221201384879102044313723519214541830844294339002006150295000261803629777930668202713875629368914012613840180174156598399096984605842000917709330893871365961242812860633022132663435078869433262371062200555333508565564704972551921154864927879748108180002977668648111714062992755985320189721615088748697314805428967770533095416911693326757965362169171309026356339280576158225848771071227224373815",
+ "0.054613762155003812122160305957618147686113745063989650607179163157398820817715079449268802189362998719256947035541552524839497119721884536865240705017403409053301625152685151644761334409897199810093505097528650897729279062117617766845257388412635800174656504897022571125534403010151970450307624961920347280823962725005822339087173498538012712497715370388872960900453285934131578336748483622553313648565",
+ "0.056522853425350019441850338124226420404372628229474954730316461224029279793449121148941830155705856364290655296696008865349058650396297667951745639266344993911111272076019522476315254920931469406381088740392436352997178777214659473302034620137440843681809428909274912969436139312159105442160243076856936138443854294531618433726198293972487505166088883354213979143973990964298454127970039847456893860203",
+ "0.058431738052758164976379864942430396555977098734986011309321413104802080798824039565461521608355122102022725461220269967251619843394860641070621951433765763369761658916816880868188275032453137184211673934079277285593935159478757148621410070196500221526968060556586710920750728824112282461003224923995158937905479480579208549847478185757177039153501786271361921802927586114942206193581554801605680183774",
+ "0.060340409058501876576879058406717550375449897922866349024612531373677724965692896763451690034750214807393086060232183962741893455630800282528706094634312497867863194252914455062127544671909424505367559503649890477570116767021509485710626043408265846213906257952113003324887350087083283630715857354116849013376841533857321740197047217435805280085872071354373524395263864933170034771001607559366437835689",
+ "0.06224885946463576546133123915706193746686049729742751789281333411875145041642253752249398319274836506892916659694331849766284472811963607782488993959669913942440995816339529777656740297867471191540909520680122909159182411803441391065468297111274482089347737322313334144161837035757661055283810143238846811496286086926075008068489724098160672664550444107807861952850135669761489736449089327971794824585",
+ "0.064157082294020937013292141108273585068933185681722806586173136512969086561151000586083228827704474922133659368208499428517560937267711287558275856325851735527047525549135602809953924346232393575354505341516408877034795144989051337120442048812961016500803766780090428411925756071299228254760633032932651170483895163866111455935100454818941073761804284777739005007991141161823471943803047351369535073521",
+ "0.066065070570350498632132342303164932774411476452581548988386145454309844170784631219900687545375669726062411278210148833761887075889382631711319762066717518842787273543143969874177059386003262516941215168234997245420735913778365997498382320917159517052861653706668051150014889560865161606396037665048820655743861710636504450723955435275019348223982732095398949832565423361714391500479155224225613768011",
+ "0.067972817318175064541548243754498015429928588516517183822313264446879635682093113384264993280408482780193047687370305892309106748875519486540879020142902362307237689684697063792225838111742241714789823601251998299331254097504567214769822096812914869886418586879378868131071702869283011709161582762527864014863950459121468893761825841337802563429112718615110803469902519051203360473993644451463303576859",
+ "0.069880315562928257463098098362562671709183706398122146969098129179472379455539984270317889382725678551314678030902515782188203802362460214070192378666311369730755912670660970378408284876465192356340335277225457776091515934608751710356445501169982098020701963512215973413220903547301855847279762573955110834619967590588317288171580291576756417265600792610005176888567344924086299458709493921684370833814",
+ "0.071787558330952207061531053207739391124226218288071373402959685303573894071937999096931283415397385296306228484128726125223568292760110763075739612174182840148193517540379302896938375357744754831885570482299802985278525692833941172622048860945698352794727105726197891701070706523197225463566498764869186174536278875440544967870368440256565084805804998877012238900798874720340885805165811704445925369809",
+ "0.07369453864952304506868897057861922170414313661538863465614770246556638808351254050794164760581857499175318127117745597595046399453737415234966090460819383278338184265518294393589316067434296307320873514873375534499000895507092920123162793722742278902956263178675873980121089525814840115300730124457959632013360479776554262210801798434607194598511786777350540581826836696200671400628870250659962729555",
+ "0.075601249546876396992772935963040077834759122887264324876826746597298507042570795315940378957369646666545616927930046677179646722187557860442506025110541968257406052679604681892086517951648112201767029044637142334937786145563391280677987040697732028896674786378870229133792190093646530752257521390201161387698590619925316803401938362974478273195688740273778224688121208296858072701246429755713258468481",
+ "0.077507684052232870319778844857360483087988665809157375994805235390695227945273826842335916971262245322463861698987988491433092759415620685754813456247989287157909601376742141647886684380473379403067343977633347655683745871434202230624968375294472571053679501320680048739346844244553807193670436672857163839591129928936603341033670518982144557944158002407590669543043048232580344768659176122645763500513",
+ "0.079413835195823539113919284592789131508074280056913456617148863190077260584186476150168101766032692499585019572300009477107342325731806003539645749720998260074894005503243715777788187754550286488316966320623707403846973934258796072434720381188302956748572794547906591019552569722211941807674118070825610462581312695693650893380241875873254675082431417454526920871842555422162216221640850141209989864308",
+ "0.081319696008915424923862092389736899811819511475112310887916890436246797704730704673729056088324784096921353721791055102563812592375189346816348952621603248827528923433998597558478366712658235656924601774921095079356565867874041683517103417362062033545480747089630436317004907748679995334911923789802669273406449877710501792905734235548100216242648355048174292232350538531258791292074224222773259366265",
+ "0.083225259523836973901629476483826882570495097409722948211156651871411915926347698443317606324912095013846386144848076019334983060323996364575622231284156371311209803383868297666027142776492604713451401116304951916037351315288808149328656282592946622481248077426878390562084748274992526750980236994304445617883874613002677387890383751048690275480465558930319669630406765794141303531112767626885032234711",
+ "0.085130518774003530041015433371012162123590338565297712899451572274044870858132401685294989726432756808251618198809497117031428754224182463768189333992610411750324249283786647605964593556580841488686189374310703328490638378071341189999989736919850819640255203388192531225871093915262442913255553964348789674386732423763999398384843950222967487918049677831350991752153610543052586794779289758903475438463",
+ "0.087035466793942804442393380943589773874807384137701777807755858606555806090045313793349743667697666495784828540247587627381581545620918795107877715086227932192756144780086856515641298195558204484728115519445514732755572178929839231921546119143469647706999890259163924570037168105911942268212237224359201159897493303064534985539474450028748960081579369980283792804593122976296597796047722827878891322393",
+ "0.088940096619320340510800454481897179643787714504988904779549430422905882044782054375828906100456879992313640144934242418129400679706865644316664458061953684856607341811667576418163339843372041295322709797007871604740491453013916791024918954258557372755707588171502529270934617054742841996068375532958173787119651672031238405892943090742861150287144368470297356054911834742041692715934237148148936307154",
+ "0.090844401286964974994199780075024285173534240616972938308566124002318176156233343333797652771250228033597767340846476094210813299723066344955542455246897302945908336756464582189829335315055318509171623072382573656172991307091055717376996812421994002305994837615827430425975713541786272473174908117299253875064746541808768776888139494200307162476704515967971265236163183394620211890252072718610942571965",
+ "0.092748373834894294768837248013614869545920040757666771889792264347367335922283987944081370356939214799510822558638935486112190359701790662792925773186897671244831971450474952036618937833706899006048469791213129922302798462311426294239282200248625552430083292818594731518350634587677158329361662244008606299358410273467156168469937529868888478684257396004386633746334360279683178784117372066095688934486",
+ "0.094652007302340089278624856973167138217258137565762699413364163993950641989798336903224059425798872308451866930780842878435503832366316245159154044350517727312654980455290163514021860802028251981954724580292247887851185639950862672925642859475325430465650514258094310141033116303195908372018392349011340787373492402788283020594141795669947097771918542864972570255253465754192708165241608041715996375567",
+ "0.09655529472977379853549858833033074225823562054271495313739665642376685099661084023094270272485976247900824483810911634635819558334630910267353320029261330296977292720266655308513559530586843550229208517388789783011887450865488554143475302590353915732321663418057567573042594801866258948380684000769091353165879953111046260532796891917772727185993569684246844052518121013717183610828519193371796413317",
+ }};
+
+ T half_pi = static_cast<T>("1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404325664115332354692230477529111586267970406424055872514205135096926055277982231147447746519098221440548783296672306423782411689339158263560095457282428346173017430522716332410669680363012457064");
+
+ max_err = 0;
+ for(unsigned k = 0; k < near_one.size(); k++)
+ {
+ static const T euler_gamma = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+ T val = cos(half_pi - (euler_gamma + k) / 523);
+ T e = relative_error(val, T(near_one[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = cos(-half_pi + (euler_gamma + k) / 523);
+ e = relative_error(val, T(near_one[k]));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+#if defined(BOOST_INTEL) && defined(TEST_FLOAT128)
+ BOOST_TEST(max_err < 8000);
+#else
+ BOOST_TEST(max_err < 750);
+#endif
+
+ //
+ // Test with some exact binary values as input - this tests our code
+ // rather than the test data:
+ //
+ static const boost::array<boost::array<T, 2>, 8> exact_data =
+ {{
+ {{ 0.5, static_cast<T>("0.877582561890372716116281582603829651991645197109744052997610868315950763274213947405794184084682258355478400593109053993") }},
+ {{ 0.25, static_cast<T>("0.968912421710644784144595449494189199804134190287442831148128124288942561184523327264655202799685025510352709626116202617") }},
+ {{0.75, static_cast<T>("0.731688868873820886311838753000084543840541276050772482507683220220750082501569499540967562610201174960122884908227300721") }},
+ {{std::ldexp(1.0, -20), static_cast<T>("0.99999999999954525264911357034690133684385823577463126432241468890539365027135494672267164697779879113636143901797362388") }},
+ {{ 2, static_cast<T>("-0.416146836547142386997568229500762189766000771075544890755149973781964936124079169074531777860169140367366791365215728559") }},
+ {{ 5, static_cast<T>("0.283662185463226264466639171513557308334422592252215944930359066586151456767382702286176981668344573238827368717546699737") }},
+ {{ 10, static_cast<T>("-0.839071529076452452258863947824064834519930165133168546835953731048792586866270768400933712760422138927451054405350243624") }},
+ {{ 8.5, static_cast<T>("-0.60201190268482361534842652295699870029606776360435523539636606145572515876770619546025351418378467287262574566665150299") }}
+ }};
+ max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = cos(exact_data[k][0]);
+ T e = relative_error(val, exact_data[k][1]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = cos(-exact_data[k][0]);
+ e = relative_error(val, exact_data[k][1]);
+ 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);
+
+ BOOST_TEST(cos(T(0)) == 1);
+#if defined(BOOST_INTEL) && defined(TEST_FLOAT128)
+ BOOST_TEST(fabs(cos(half_pi)) < 4 * std::numeric_limits<T>::epsilon());
+#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);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cosh.cpp b/libs/multiprecision/test/test_cosh.cpp
new file mode 100644
index 0000000000..97bb068a8e
--- /dev/null
+++ b/libs/multiprecision/test/test_cosh.cpp
@@ -0,0 +1,188 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 51u> data =
+ {{
+ "1.0560191127459844751259038114395241283965590525302917878166464679729562764239266483419824023679041866569431842053263976225991679105269492268050148624443706785607467750929028856273183654547152707568642275917435773104050171284580773949313906303074811586096214771879801872225500237540725592288167903987152007171391207680034517664218965133028298959753155835975555361514087618679892905973726581183754237665",
+ "6.0577917650974496023981039346694689204850927958941226507775366589415588030232830758139222010716099059155799853188868489737439396141346120898610181630988217093945337280471788812956307352429914669334599644412036010014302812555700905490062030666482387008384856645533100266205122930455496234252478878949675888122615795451076521244771554025667181070733415815608287241160724578541982548132473721865287585003",
+ "383.32956577005424506758441449272199796616394738942294350035763341369127219359132618750028176886177362785452836065735889720098699937365992620246167965376788963171659530350198190156275836547285437366012371175910490835823389352716981464503672749829183569550509561579181434088407652213421105693358960196044447948190823567291153397039759820680087749250557665869797605969680417240900163183563482342795870741",
+ "180470.88335034971169904627554690213669106779370247753503772451628313223853228134148123711258586005038324156900626143047383382773083164188515409766952843294484598668304799186411411329575367546332731190431166613267871177008493921416649792646568096789971466064344922873643120446759328638447781504932928745974584136039698220604099816877847080168890581112550484205291341188894903342677757367415636409890558",
+ "6.2781497954189513287619297175142770025826052476955600323495790530946900406209789437212923381830889846578651793922971071825731424267985994598149826652782605981764572599129753631344305259620294513472869937699509893247230674850025066547664563263958672029867981296029855675095947587305949634130736118694040608573981560192569935477462121110619100122692626135788198431038121227062383110684489973794745342204e8",
+ "1.613783114750852113223226710244634574082654363427931747177970610142560035434819323665197978270795707611590961019502906079030261920109649748962125930850198625621792763842224096823299250338750953491004408731082880660125641628213970297576817341593254767125933119462446651783267917469179893016103516988279473907996009458208097272806046395206212403180775656514566222835047724943633607736647735739948551096e13",
+ "3.0651210048650948869531196671342477415226643123350617715268971834881834615138925908518703584506447138436613632341330640449725016173384960626760387649747643297918807083363913015806893683786389067836005832038060734248371426886808175554210317756018846109627572546314172492701544345965940408777570519312837860014177872754358662463423939942202520475422342889660750666147940146262635303938752019875745307992e18",
+ "4.3016893602106215864771434464025735547192956887050537014696231526954713331351791376069506688795159316625154458115179050297716224800318064110052445970764898870599885508391064218065806885129697936678362276766771902589638957537168339190488273555753876162633237990462617955892238424402124353124736879474651977422350856642986446591941163073842974714357745162365700428610167249762162775568692443158879770006e24",
+ "4.4608685929681360001024935791890661655506049487122331222491789277138083092507844933483858468341107613657448783043064935174812965310544903547535217357996429824403225005261842368679242972243707736489629610256554995236901040773902962370130989883960298987808008001651650799892267761089302132749037069497452309074389846493140222931714618697738906019885122076310868220596765753447232222740129365498326869428e31",
+ "3.4181315955816806472569357441100390029536003312981931954091744304974491527743601285017456624487264929971022746516079644284683284072159616291298593217459064246713801084801182706805865477209408120733740982340972570739267039630582468876075574706187115643861449939429503730606743466086010115127464706315791765264572070452800816054590653675962889901898843712936126341807733200610910325052666512334161414655e39",
+ "1.935294628272790810141453021278524976364077691905248015888165919062516673344977091262644262832934899971824373171672037249361491844419302323587942915162859665992916625636813244576210109931852761921719987632855596663907494303248513195744818730879742963301327852160193919379798462926667740594397712731448572837824802330973561570848397758210619453310032286208701226098998940360395267237151018055781640126e48",
+ "8.0964449511890098565841496436016431651692307764702784234901741408135381374668439020986470675941110923614446905696411023621632714191313583360826598468217983223558130595633054971338824192327248896500337050246640453410159732184419096917171044075711156867804851018388576371530520943696439917673720450911725466781235347212700849702742625663288687644090935756560022610000629006347244369388824818661974220426e57",
+ "2.5028257092625174549175008952222569141816383637904981644379473858250736896174216539673733521627607209322019413420937570273676341726636307131078699799472622998437404149614292337267153201903296102921815263736653035269935857816159086496594269187082442244280898258397047045746728729079796167987895368614037770286371191530575814695859433478185016171380286325273493350193132538052551497175771289873181595171e68",
+ "5.7168370213792649967466315312864179662895170192695050789061362839510836418124645968032989149068311018994324517420345278843446068634292140996241291031113395887832891095928020095581695527354104986223411349657526888924224926675682032043363279774947976053895819671003276400297758359779703605970507328706064692923481168676751999124073697599262277247814864401196929320497117521176016017349797292609303756215e79",
+ "9.6487261169670031207955841899729386502708125098394777808615183927342163909284025992243201020435915122698808649711566042372911206942311277943247994427354130507790526857797833309691667380623792736661655695464087154725768656507603378053220212067894914686147301550764045337512361478831034999674296837635744344039906734109560908793921568633128400104314078575159786136202769893309913175064586488844295321363e91",
+ "1.2032977660238608232537005158851668311089986235965463249220377778638489972355974848209035082333822309902237165042868213438627625544096344578102199846440476859557339736747791529782018329078191477783605471526120466881600981869890379917878811691555316448842731085218988710571211956972016424649758226606500603194972966032036214213759991156778846329137084961334557845326183588274571457361004704490747798678e105",
+ "1.1088306081278288754492401130897590262404571813281460605683836139669281218442501421935533170636990866165181664561596333701204545493730707210930818738817252706131805203538144119244917164949716209095542194899833868499263375700313934257155601275526921302332118009966650991624878227108265079219497366770219141098050965023005919495048022616553249266192057652205987267068584616625670961423579715954410508985e119",
+ "7.5499880591625965663868042832675300901799245732418501707646792135512053284835138294796976048691668315442427834949618514094329533376442442492757936744857569785450769927581802961191319878260712808001736830227501518832554201816224207300614310712430470538022948957433004829725273067921443635526965673971412049693552004259820173389681647135125678701502084190660111860351299407405357314966388044340723077086e133",
+ "3.7985363580067976240250330165300706958269826851549371732460220923459822809007918495780412109700378352703982899561570150646963751463572075768540297484136809462018052149545042828665345287117150392150513078663739946623681053685054650372595872914400423446635806806461783139586204378680585507446218544068845246753010850565341852111017728985713047360191412931479535524815646071456825031827933342626130249175e149",
+ "1.4121319341572581270215359848706630542776633675711529687593487346259283960708095601494823112486631023721124235640943167173029348028743563902367757599140008654691320430919753414890689949599421028277624880392344132646738394546195638261279687543208503932172926275294218429086816560213399180179494004109164546844899632385177835442946174689070525154077366030192931540897742543089509897490703511310531249977e166",
+ "3.8790307719997974510664339744260233373881096199933152202662556556779783775106563986911859526413282055258612522499767709123313205863879946518297779104337686883587019222829967005608205535314284003183828513113021722123872387036435113517356676447376715595408179555267871947671679098986651665719279348025058713817796876795915844151719103197410787508530261619841035613531488383930867055908047961915279983259e183",
+ "7.8733605373835840397434523264038598405672829925651165847065668324385430746087633348848905637835428739401439679896923081980364912472282573695612463537585283007941057172128277340402716645674443632827653710173742423648839359547777694778576675604645880219833375227941998426325886558435214355022240854563558864080627758653439429917072753785194675103766900514602432580639079224631229479607396935864512990879e201",
+ "1.1808262995038900942517891457926200063018079695348469762725520377876370005771518954251015338402886097689762895044056273430051256244413916763438966705458118354189107806216991150264176024521937328179762640422127608560103802431672144866013216405157197709788484197720057702118788168789816074560208078260433548283881535909071116553897893659656781376448427981358955547508806938614921874867135186509274509121e221",
+ "1.3085817499987842655130548827168955655838432140245228169691892267707778790498773914833199368916114043966197329562444577848635313938483757629541576533880917215885485474416704968999200090496252044959849927443732134176975867869986011315975625868009065373046224716063168977788103866885720471095547385342868632018951910603936835789387464412366605713487321530237148912677199033012777178113821791621549557963e241",
+ "1.0715308148006899161903881353829644069217121138682658034413051575604561649576261428568888094218620444635013220705511245290719605273316790249367622122178650529000528086055415007045458486410501636380119413632657994999412652188430063128470336817401482172580366374079331295129200936246446347832380606353293858222758687479612927181530236387227215663399410099251455256898414199913458340065553949424990477448e262",
+ "6.483319651006309502237640505955012384293570932602353784849377890534620180296272226076424490097577093511886503973590409376477611667988893542117173598716788837179265384921201772013611631892729250835822804494742316330406688475091973437669111728949960922002370308207819760146543720499389938855072810566961589413895110830251224194598788696990065693705615156654866578134664648091752361824241438921952031149e283",
+ "2.8985391304542768293172709775230767981477721528885408305355619530690119426207269563049756824939397157221877775531212262059946098575425050827283362457005503261796116156917077778477251551070762614233325253060283603452216492681531839154649232080928787066338399915850327381614672456102374248950210248266796072457623370079195574322846594267768883120374288952014885152055438195794090975578878933873824774214e306",
+ "9.57524433627083921372674145950563946532138741951042299439035158875449060589509856903496678820625880407684156184675763001790613289835869844325821965070261880894138207436003366195024403902162467929095155787852409710735775347490909311196315332711680552044467458169615366116872469435840608534489425322247278926672059747911266981024366989976214521515026692183039600169984107883592297128416659318858313127e329",
+ "2.3372734503362369375381009524197350830316472034721759761797536237738670471009423543542251572488229045699598160834162677357730620072441755506075897500940629883044875771104686291523502165266242030847074909362622098365719455332359938746138629161304717385265309980898079489959955157644566232440805137701071311495653330606071611331941246434767948905863368638163788562679785940566685500460815077065003612487e354",
+ "4.2155879126937199240969909448599186868484717887298729605150033299123534992857332918168135230843738695925698383815575417820480732378749635394939513838137876524333991937836847074991505476867647762082587225838063325020413513077128321581439429001485977751765798011101092072613053687422983352140468569171564773941232256057064161142341661775359191159220450305300322654184921617310753474842253496677498824723e379",
+ "5.6181811613375701248970224378256740494692066242437602652469740512738297599235414593999616891945156186827736326184687322137498447792007445397397290336810468925670064733464757082986791232916898141597610692740388799796632396708149027243436859752526805112778790645096555770227809873695589969805678601106157556386974221647669590827712353133603091803570183764883405340587430017053183637835511899658145649708e405",
+ "5.532511069282205350923830187073466127274584467195468607886763750877294392993663821432158885753563495238131394373865428654052604326264330104646257659760161386620716716703631608643312613245804625511813964275109451513736558514977338129201153666764317441936156609643185133981728847167450887861106642311329612564652645663234240748195490808151911497393974690166034839217817023634217121406163178148652748479e432",
+ "4.0256666306761331240653217136731531623017017695713942917027851762705346357330788586411431378972009980532310757689380174461664677676028378924382554201434975574729861177781849023768222381429947872325368088023224591306630434887529215459580760863075907686248521168590309636468448648513752893851767315693469638980874648457114335557202115472595647478331668869318302753802858726588719006447471192697846325955e460",
+ "2.1644237346681663424601781769159797919834245365230735589058796985974745594485988855971413936820871935714602237643458356241187573307428309041919648027960168541647193436225977495680484218384107820095589356463058222584008532497069179993678533431131233629312850771528970443634604290143149079209513868130585713006080733488491160321145735562062411305931183571279530201672366980412430529846635995189699318073e489",
+ "8.5987580981195983662047247216936066485731760315371506386077056691409579856014763032619539539935299716110411688793466397984311640631361934500807639285587334983206556915704635831992012926186843826981296831658998834850783404713050829093753126189556625095994621605300047199962332098857236359801681157419606676412198783092816364336047306243999363335004760439115355072350465422891365411868472688286678516314e518",
+ "2.5241673163187127276134610716954724162270290228773641734420864618245211926017624829840685860130579257772126398622324109858115624706486522844752512951837805396709793171502497523431473021570806024043139443284538862368635312799539108264084028032731295487282188616820261689634926427135060887942797635147693849950058672753458576476491733064455826768562371858057444914175251596852571637211466017938478085247e549",
+ "5.475067911823387661325942057081957044927796274441278042805014835144678321092623034147031518807063234976073102574257079170283458172046752719724152941316842521196069804425876507927418423409523739261726681120662097159943049401039490818332686968135012747332468921142470970507219403290422458185430415836291605355383658657658638112408092789126678938878667507151950931633694006471359998448912249374833586727e580",
+ "8.7750549689950256776639468724574158629603320014390275681028674550826357080136422399476213432791376656222763800628593282303459051561266270006921840049305819767639184391149913915312831894296821356222752594264134130151457242713539248421883837353442181724530706933220158507240760325182068001553294949268596178418634164323874971937997072367419479635154591248667559627811893588163238012665671798461211917208e612",
+ "1.0392000158337773273751156576416024664653679689973856373456304843339302977923254238376497044027728158058903302390909588333829463843362779584402914847447592731182614369968957680281500946805571235013941407979569788567794900810257154433592958167545186687137810101848000107335074486050959387974516414654638879740966175786016492797845169374594168995878543584318334800124941205910589727264397237600733483158e646",
+ "9.0936326753636727240574546678839170665019169110943878894933093211555976995701468041449327370073681898690638466136204694745206283652338526673125958055131610409923286526192661778126811265116493171283319361595267283588121098349703951929669281966675596890266483864217591555707552765565756842701056144290075867893520379419521775913047964393758374891516340929062076304350159966063972713118995033247759001609e679",
+ "5.8798281636930489964162009429009257867906792508058801627042121953599912951265315933723440185825519080102988056836911095299854840387008575164090793635997912930561430335216151607097220208013034399895832350235280120270626904356196935166701773768680311063264380891331021514518757839220818506905997847228783439015252768055166165941582030353226255576433910936297965207260585437762430381969160714956727596198e714",
+ "2.8091881292911108404345975896815558958477835260737794579417284512413473388968057587088555041266297486841923628702282019643659456724373332519583025947015025975126598748630623031951723754960589046233996595466021913942587558326660593063197905288573353559106884645285531497626940379800500474282446929237914568534665868703742731713632349090897884403966643055728471509474896855575286123275564417626861566706e750",
+ "9.917129372597671132067673866739246238179742417231064062960232866725337575281938597212073697168000155027158148165861617400080837699968785505107579831803685516054837447325150388867488754170677228096524224392410232206238263933144338637103531441623303187445874039234973380151391274490746625993568552049954630793219419614845431626975962881182662815760423226111647056071831411664335144052772436215105801395e786",
+ "2.5869027163543111121878679987081647715187872826677398475096738640583659800068967379551376322170347537454918190603891312949716382621902484616361664158953484778255247083652726854621059785392022847887382779010079407502679229021085320675903109573769331277413372272363218896397965662581357886739691376204316908974081821980432178065394228926767529685562155837452626029223937027004015040825450642409597700449e824",
+ "4.9861251931207080923785686798881789193813879610842675205361210155894774686328710893906543682447029206928934967525495260314937837003448878215156341411477636831113484416124080974502217578408248150338565305116223944900839866528622960352723938548713319425798453345402992146078868053263606234074443024155243450623634720912438841022969909473424559262711669905282193529250216454066716533180418518228387188393e862",
+ "7.1012569014339068241101751233953234216522840280342406520909288232012799547871960723719836516359548198842749536961644100550279020276709043358260853581760590386456213180291689322352732545965831405519844109680619067101311180959399339922706596098526969148981173519865139508665631317310424178378833370605922449094745510812618563813537347841030916512147874232760564378443782164868016244561788356251308121716e901",
+ "7.4730215360486642135431754747074885377840195683583018254892502245011973712084221116813364423492802080799768174534590613188275471080608467087354983850284805514875889145266688973752185071777341375422809910165581997555433091939959406569831183459872344778707098094941193489061532160249775856426569696127193453339548371679229676272663084782830276508737129506676031759345288056484158647796152349867328841634e941",
+ "5.8109375364209112227579654658730977030869454388607076903639465992296616832002964138000947668837140543325908222688655359602408511410663722770167244801973012245657865182739637159804595049180263175014778215232564251739259624759589953677661356104554831551073263668188283861123521688445132164147762321111597028523130093864153999974376790494383016372210442340324038686843345053322425194077414241243050491297e982",
+ "3.33875955701899627718146291382268063073604182131575843695486667154496711979350813988644889979275310892951143249901398447859083674739840084454465850475774696325142148671937407108540250845900941142800157345665761403930889797424808979569550325271558518404559007551625637761142662107757913763221912282957681784053564387104062317729788737215450574233690655931888608424916152893688106181220341997128198692e1024",
+ "1.4174672877823334709610117319768830739080734407353905145632612088824955720198734996604261250019291955883620333545750761619015467840567122066622229379056280064206319780047687015558007624774062399477328822231085767309831266032616053065858739373818651687128093335640388513396191118537181280334430292439188737524362269789272308905723812818882228503013875816702686587035844437102478263525616196832018321602e1067",
+ "4.4466189016791091516801723880812533528438597080549410911235655611382010503145789286158745555771483577943662768773465284793798720178177605712848440200402906836390133865748188969184005230383247111166918721449908133920663776952786683837038180436264738937354101153867171804315769471050303182129269442292354388037298125177941217926845803005587166270803697433886463469168814941555804311717400657004050157245e1110",
+ }};
+
+ T eg = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ const T x = eg + k;
+ T val = boost::multiprecision::cosh(x * x);
+ 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);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_bin_float.cpp b/libs/multiprecision/test/test_cpp_bin_float.cpp
new file mode 100644
index 0000000000..9bcae51b4a
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_bin_float.cpp
@@ -0,0 +1,221 @@
+// 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)();
+ test_type half = 0.5;
+ test_type one_point_5 = 1.5;
+
+ 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 / half, inf_val);
+ BOOST_CHECK_EQUAL(max_val / -half, -inf_val);
+ // Underflow:
+ BOOST_CHECK_EQUAL(min_val * 2 - one_point_5 * min_val, 0);
+ BOOST_CHECK_EQUAL(-min_val * 2 + one_point_5 * min_val, 0);
+ BOOST_CHECK_EQUAL(min_val / 2, 0);
+ BOOST_CHECK_EQUAL(min_val * half, 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();
+}
+
diff --git a/libs/multiprecision/test/test_cpp_bin_float_io.cpp b/libs/multiprecision/test/test_cpp_bin_float_io.cpp
new file mode 100644
index 0000000000..9fe628e94a
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_bin_float_io.cpp
@@ -0,0 +1,271 @@
+// 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(std::numeric_limits<T>::digits10 + 2);
+#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));
+
+ static int error_count = 0;
+
+ if(error_count != boost::detail::test_errors())
+ {
+ error_count = boost::detail::test_errors();
+ std::cout << "Errors occured while testing value....";
+ if(val.backend().sign())
+ std::cout << "-";
+ std::cout << boost::multiprecision::cpp_int(val.backend().bits()) << "e" << val.backend().exponent() << std::endl;
+ }
+}
+
+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));
+
+ if(boost::detail::test_errors() > 200) break; // escape if there are too many errors.
+ }
+
+ 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();
+}
+
diff --git a/libs/multiprecision/test/test_cpp_bin_float_serial.cpp b/libs/multiprecision/test/test_cpp_bin_float_serial.cpp
new file mode 100644
index 0000000000..361692ba07
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_bin_float_serial.cpp
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#include "test_float_serial.hpp"
+
+#if !defined(TEST1) && !defined(TEST2)
+# define TEST1
+# define TEST2
+#endif
+
+
+int main()
+{
+ using namespace boost::multiprecision;
+#ifdef TEST1
+ test<cpp_bin_float_50>();
+#endif
+#ifdef TEST2
+ test<cpp_bin_float_quad>();
+#endif
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_dec_float_conv.cpp b/libs/multiprecision/test/test_cpp_dec_float_conv.cpp
new file mode 100644
index 0000000000..d1c7306497
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_dec_float_conv.cpp
@@ -0,0 +1,42 @@
+///////////////////////////////////////////////////////////////
+// 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/detail/lightweight_test.hpp>
+#include <boost/array.hpp>
+#include "test.hpp"
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+int main()
+{
+ using namespace boost::multiprecision;
+ //
+ // Test interconversions between different precisions:
+ //
+ cpp_dec_float_50 f1(2);
+ cpp_dec_float_100 f2(3);
+
+ cpp_dec_float_100 f3 = f1; // implicit conversion OK
+ BOOST_TEST(f3 == 2);
+ cpp_dec_float_50 f4(f2); // explicit conversion OK
+ BOOST_TEST(f4 == 3);
+
+ f2 = f1;
+ BOOST_TEST(f2 == 2);
+ f2 = 4;
+ f1 = static_cast<cpp_dec_float_50>(f2);
+ BOOST_TEST(f1 == 4);
+
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_dec_float_round.cpp b/libs/multiprecision/test/test_cpp_dec_float_round.cpp
new file mode 100644
index 0000000000..4d70719aac
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_dec_float_round.cpp
@@ -0,0 +1,67 @@
+///////////////////////////////////////////////////////////////
+// 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_
+//
+
+// Test case for ticket:
+// #8065: Multiprecision rounding issue
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include "test.hpp"
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include <boost/math/special_functions/round.hpp>
+
+template<int N>
+static bool round_test_imp()
+{
+ typedef boost::multiprecision::cpp_dec_float<N> mp_backend_type;
+ typedef boost::multiprecision::number<mp_backend_type, boost::multiprecision::et_off> mp_type;
+
+ const mp_type original_digits(1.0F);
+
+ const mp_type scale = pow(mp_type(10), N);
+
+ mp_type these_digits = original_digits * scale;
+
+ these_digits = boost::math::round(these_digits);
+ these_digits /= scale;
+
+ const std::string result = these_digits.str();
+
+ return (result == original_digits.str());
+}
+
+template<int N>
+struct round_test
+{
+ static bool test()
+ {
+ return (round_test_imp<N>() && round_test<N - 1>::test());
+ }
+};
+
+template<>
+struct round_test<0>
+{
+ static bool test()
+ {
+ return round_test_imp<0>();
+ }
+};
+
+int main()
+{
+ //
+ // Test cpp_dec_float rounding with boost::math::round() at various precisions:
+ //
+ const bool round_test_result = round_test<40>::test();
+
+ BOOST_CHECK_EQUAL(round_test_result, true);
+
+ return boost::report_errors();
+}
diff --git a/libs/multiprecision/test/test_cpp_dec_float_serial.cpp b/libs/multiprecision/test/test_cpp_dec_float_serial.cpp
new file mode 100644
index 0000000000..166cfa3b82
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_dec_float_serial.cpp
@@ -0,0 +1,36 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include "test_float_serial.hpp"
+
+#if !defined(TEST1) && !defined(TEST2)
+# define TEST1
+# define TEST2
+#endif
+
+
+int main()
+{
+ using namespace boost::multiprecision;
+#ifdef TEST1
+ test<cpp_dec_float_50>();
+#endif
+#ifdef TEST2
+ test<number<cpp_dec_float<100, boost::int64_t, std::allocator<void> > > >();
+#endif
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_int.cpp b/libs/multiprecision/test/test_cpp_int.cpp
new file mode 100644
index 0000000000..70c5f7b4bb
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_int.cpp
@@ -0,0 +1,593 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/gmp.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/timer.hpp>
+#include "test.hpp"
+
+template <class T>
+T generate_random(unsigned bits_wanted)
+{
+ static boost::random::mt19937 gen;
+ typedef boost::random::mt19937::result_type random_type;
+
+ T max_val;
+ unsigned digits;
+ if(std::numeric_limits<T>::is_bounded && (bits_wanted == (unsigned)std::numeric_limits<T>::digits))
+ {
+ max_val = (std::numeric_limits<T>::max)();
+ digits = std::numeric_limits<T>::digits;
+ }
+ else
+ {
+ max_val = T(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ T val = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ val %= max_val;
+ return val;
+}
+
+template <class T>
+struct is_checked_cpp_int : public boost::mpl::false_ {};
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, class Allocator, boost::multiprecision::expression_template_option ET>
+struct is_checked_cpp_int<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::checked, Allocator>, ET> > : public boost::mpl::true_ {};
+
+template <class Number>
+struct tester
+{
+ typedef Number test_type;
+ typedef typename test_type::backend_type::checked_type checked;
+
+ unsigned last_error_count;
+ boost::timer tim;
+
+ boost::multiprecision::mpz_int a, b, c, d;
+ int si;
+ unsigned ui;
+ test_type a1, b1, c1, d1;
+
+
+ void t1()
+ {
+ using namespace boost::multiprecision;
+ BOOST_CHECK_EQUAL(a.str(), a1.str());
+ BOOST_CHECK_EQUAL(b.str(), b1.str());
+ BOOST_CHECK_EQUAL(c.str(), c1.str());
+ BOOST_CHECK_EQUAL(d.str(), d1.str());
+ BOOST_CHECK_EQUAL(mpz_int(a+b).str(), test_type(a1 + b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=b).str(), (test_type(a1) += b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(b)+=a).str(), (test_type(b1) += a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a-b).str(), test_type(a1 - b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=b).str(), (test_type(a1) -= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(mpz_int(-a)+b).str(), test_type(test_type(-a1) + b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(mpz_int(-a)-b).str(), test_type(test_type(-a1) - b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(c * d).str(), test_type(c1 * d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(c)*=d).str(), (test_type(c1) *= d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(d)*=c).str(), (test_type(d1) *= c1).str());
+ BOOST_CHECK_EQUAL(mpz_int(c * -d).str(), test_type(c1 * -d1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-c * d).str(), test_type(-c1 * d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(c)*=-d).str(), (test_type(c1) *= -d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-d)*=c).str(), (test_type(-d1) *= c1).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * c).str(), test_type(b1 * c1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / b).str(), test_type(a1 / b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=b).str(), (test_type(a1) /= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / -b).str(), test_type(a1 / -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a / b).str(), test_type(-a1 / b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=-b).str(), (test_type(a1) /= -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=b).str(), (test_type(-a1) /= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / d).str(), test_type(a1 / d1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % b).str(), test_type(a1 % b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=b).str(), (test_type(a1) %= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % -b).str(), test_type(a1 % -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=-b).str(), (test_type(a1) %= -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a % b).str(), test_type(-a1 % b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=b).str(), (test_type(-a1) %= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % d).str(), test_type(a1 % d1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=d).str(), (test_type(a1) %= d1).str());
+
+ if(!std::numeric_limits<test_type>::is_bounded)
+ {
+ test_type p = a1 * b1;
+ test_type r;
+ divide_qr(p, b1, p, r);
+ BOOST_CHECK_EQUAL(p, a1);
+ BOOST_CHECK_EQUAL(r, test_type(0));
+
+ p = a1 * d1;
+ divide_qr(p, d1, p, r);
+ BOOST_CHECK_EQUAL(p, a1);
+ BOOST_CHECK_EQUAL(r, test_type(0));
+
+ divide_qr(p, test_type(1), p, r);
+ BOOST_CHECK_EQUAL(p, a1);
+ BOOST_CHECK_EQUAL(r, test_type(0));
+ }
+ }
+
+ void t2()
+ {
+ using namespace boost::multiprecision;
+ // bitwise ops:
+ BOOST_CHECK_EQUAL(mpz_int(a|b).str(), test_type(a1 | b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=b).str(), (test_type(a1) |= b1).str());
+ if(!is_checked_cpp_int<test_type>::value)
+ {
+ BOOST_CHECK_EQUAL(mpz_int(-a|b).str(), test_type(-a1 | b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)|=b).str(), (test_type(-a1) |= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a|-b).str(), test_type(a1 | -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=-b).str(), (test_type(a1) |= -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a|-b).str(), test_type(-a1 | -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)|=-b).str(), (test_type(-a1) |= -b1).str());
+ }
+ BOOST_CHECK_EQUAL(mpz_int(a&b).str(), test_type(a1 & b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=b).str(), (test_type(a1) &= b1).str());
+ if(!is_checked_cpp_int<test_type>::value)
+ {
+ BOOST_CHECK_EQUAL(mpz_int(-a&b).str(), test_type(-a1 & b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)&=b).str(), (test_type(-a1) &= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a&-b).str(), test_type(a1 & -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=-b).str(), (test_type(a1) &= -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a&-b).str(), test_type(-a1 & -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)&=-b).str(), (test_type(-a1) &= -b1).str());
+ }
+ BOOST_CHECK_EQUAL(mpz_int(a^b).str(), test_type(a1 ^ b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=b).str(), (test_type(a1) ^= b1).str());
+ if(!is_checked_cpp_int<test_type>::value)
+ {
+ BOOST_CHECK_EQUAL(mpz_int(-a^b).str(), test_type(-a1 ^ b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)^=b).str(), (test_type(-a1) ^= b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a^-b).str(), test_type(a1 ^ -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=-b).str(), (test_type(a1) ^= -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a^-b).str(), test_type(-a1 ^ -b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)^=-b).str(), (test_type(-a1) ^= -b1).str());
+ }
+ // Shift ops:
+ for(unsigned i = 0; i < 128; ++i)
+ {
+ if(!std::numeric_limits<test_type>::is_bounded)
+ {
+ BOOST_CHECK_EQUAL(mpz_int(a << i).str(), test_type(a1 << i).str());
+ }
+ else if(!is_checked_cpp_int<test_type>::value)
+ {
+ test_type t1(mpz_int(a << i).str());
+ test_type t2 = a1 << i;
+ BOOST_CHECK_EQUAL(t1, t2);
+ }
+ BOOST_CHECK_EQUAL(mpz_int(a >> i).str(), test_type(a1 >> i).str());
+ }
+ // gcd/lcm
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, b)).str(), test_type(gcd(a1, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, d)).str(), test_type(lcm(c1, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, b)).str(), test_type(gcd(-a1, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, d)).str(), test_type(lcm(-c1, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, -b)).str(), test_type(gcd(-a1, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, -d)).str(), test_type(lcm(-c1, -d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, -b)).str(), test_type(gcd(a1, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, -d)).str(), test_type(lcm(c1, -d1)).str());
+ // Integer sqrt:
+ mpz_int r;
+ test_type r1;
+ BOOST_CHECK_EQUAL(sqrt(a, r).str(), sqrt(a1, r1).str());
+ BOOST_CHECK_EQUAL(r.str(), r1.str());
+ }
+
+ void t3()
+ {
+ using namespace boost::multiprecision;
+ // Now check operations involving signed integers:
+ BOOST_CHECK_EQUAL(mpz_int(a + si).str(), test_type(a1 + si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a + -si).str(), test_type(a1 + -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a + si).str(), test_type(-a1 + si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si + a).str(), test_type(si + a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=si).str(), (test_type(a1) += si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=-si).str(), (test_type(a1) += -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)+=si).str(), (test_type(-a1) += si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)+=-si).str(), (test_type(-a1) += -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a - si).str(), test_type(a1 - si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a - -si).str(), test_type(a1 - -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a - si).str(), test_type(-a1 - si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si - a).str(), test_type(si - a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=si).str(), (test_type(a1) -= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=-si).str(), (test_type(a1) -= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)-=si).str(), (test_type(-a1) -= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)-=-si).str(), (test_type(-a1) -= -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * si).str(), test_type(b1 * si).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * -si).str(), test_type(b1 * -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-b * si).str(), test_type(-b1 * si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si * b).str(), test_type(si * b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)*=si).str(), (test_type(a1) *= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)*=-si).str(), (test_type(a1) *= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)*=si).str(), (test_type(-a1) *= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)*=-si).str(), (test_type(-a1) *= -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / si).str(), test_type(a1 / si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / -si).str(), test_type(a1 / -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a / si).str(), test_type(-a1 / si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=si).str(), (test_type(a1) /= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=-si).str(), (test_type(a1) /= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=si).str(), (test_type(-a1) /= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=-si).str(), (test_type(-a1) /= -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % si).str(), test_type(a1 % si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % -si).str(), test_type(a1 % -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a % si).str(), test_type(-a1 % si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=si).str(), (test_type(a1) %= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=-si).str(), (test_type(a1) %= -si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=si).str(), (test_type(-a1) %= si).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=-si).str(), (test_type(-a1) %= -si).str());
+ if((si > 0) || !is_checked_cpp_int<test_type>::value)
+ {
+ BOOST_CHECK_EQUAL(mpz_int(a|si).str(), test_type(a1 | si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=si).str(), (test_type(a1) |= si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a&si).str(), test_type(a1 & si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=si).str(), (test_type(a1) &= si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a^si).str(), test_type(a1 ^ si).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=si).str(), (test_type(a1) ^= si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si|a).str(), test_type(si|a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(si&a).str(), test_type(si&a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(si^a).str(), test_type(si^a1).str());
+ }
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, si)).str(), test_type(gcd(a1, si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(si, b)).str(), test_type(gcd(si, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, si)).str(), test_type(lcm(c1, si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(si, d)).str(), test_type(lcm(si, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, si)).str(), test_type(gcd(-a1, si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-si, b)).str(), test_type(gcd(-si, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, si)).str(), test_type(lcm(-c1, si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-si, d)).str(), test_type(lcm(-si, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, -si)).str(), test_type(gcd(-a1, -si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-si, -b)).str(), test_type(gcd(-si, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, -si)).str(), test_type(lcm(-c1, -si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-si, -d)).str(), test_type(lcm(-si, -d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, -si)).str(), test_type(gcd(a1, -si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(si, -b)).str(), test_type(gcd(si, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, -si)).str(), test_type(lcm(c1, -si)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(si, -d)).str(), test_type(lcm(si, -d1)).str());
+ }
+
+ void t4()
+ {
+ using namespace boost::multiprecision;
+ // Now check operations involving unsigned integers:
+ BOOST_CHECK_EQUAL(mpz_int(a + ui).str(), test_type(a1 + ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a + ui).str(), test_type(-a1 + ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui + a).str(), test_type(ui + a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)+=ui).str(), (test_type(a1) += ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)+=ui).str(), (test_type(-a1) += ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a - ui).str(), test_type(a1 - ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a - ui).str(), test_type(-a1 - ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui - a).str(), test_type(ui - a1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)-=ui).str(), (test_type(a1) -= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)-=ui).str(), (test_type(-a1) -= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * ui).str(), test_type(b1 * ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-b * ui).str(), test_type(-b1 * ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui * b).str(), test_type(ui * b1).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)*=ui).str(), (test_type(a1) *= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)*=ui).str(), (test_type(-a1) *= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / ui).str(), test_type(a1 / ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a / ui).str(), test_type(-a1 / ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)/=ui).str(), (test_type(a1) /= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)/=ui).str(), (test_type(-a1) /= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % ui).str(), test_type(a1 % ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a % ui).str(), test_type(-a1 % ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)%=ui).str(), (test_type(a1) %= ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(-a)%=ui).str(), (test_type(-a1) %= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a|ui).str(), test_type(a1 | ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)|=ui).str(), (test_type(a1) |= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a&ui).str(), test_type(a1 & ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)&=ui).str(), (test_type(a1) &= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(a^ui).str(), test_type(a1 ^ ui).str());
+ BOOST_CHECK_EQUAL((mpz_int(a)^=ui).str(), (test_type(a1) ^= ui).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui|a).str(), test_type(ui|a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui&a).str(), test_type(ui&a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(ui^a).str(), test_type(ui^a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, ui)).str(), test_type(gcd(a1, ui)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(ui, b)).str(), test_type(gcd(ui, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, ui)).str(), test_type(lcm(c1, ui)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(ui, d)).str(), test_type(lcm(ui, d1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(-a, ui)).str(), test_type(gcd(-a1, ui)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(-c, ui)).str(), test_type(lcm(-c1, ui)).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(ui, -b)).str(), test_type(gcd(ui, -b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(ui, -d)).str(), test_type(lcm(ui, -d1)).str());
+
+ if(std::numeric_limits<test_type>::is_modulo && checked::value)
+ {
+ static mpz_int m = mpz_int(1) << std::numeric_limits<test_type>::digits;
+ mpz_int t(a);
+ test_type t1(a1);
+ for(unsigned i = 0; i < 10; ++i)
+ {
+ t *= a;
+ t %= m;
+ t += a;
+ t %= m;
+ t1 *= a1;
+ t1 += a1;
+ }
+ BOOST_CHECK_EQUAL(t.str(), t1.str());
+ }
+ }
+
+ void t5()
+ {
+ using namespace boost::multiprecision;
+ //
+ // Now integer functions:
+ //
+ mpz_int z1, z2;
+ test_type t1, t2;
+ divide_qr(a, b, z1, z2);
+ divide_qr(a1, b1, t1, t2);
+ BOOST_CHECK_EQUAL(z1.str(), t1.str());
+ BOOST_CHECK_EQUAL(z2.str(), t2.str());
+ BOOST_CHECK_EQUAL(integer_modulus(a, si), integer_modulus(a1, si));
+ BOOST_CHECK_EQUAL(lsb(a), lsb(a1));
+ BOOST_CHECK_EQUAL(msb(a), msb(a1));
+
+ for(unsigned i = 0; i < 1000; i += 13)
+ {
+ BOOST_CHECK_EQUAL(bit_test(a, i), bit_test(a1, i));
+ }
+ if(!std::numeric_limits<test_type>::is_modulo)
+ {
+ // We have to take care that our powers don't grow too large, otherwise this takes "forever",
+ // also don't test for modulo types, as these may give a different result from arbitrary
+ // precision types:
+ BOOST_CHECK_EQUAL(mpz_int(pow(d, ui % 19)).str(), test_type(pow(d1, ui % 19)).str());
+ BOOST_CHECK_EQUAL(mpz_int(powm(a, b, c)).str(), test_type(powm(a1, b1, c1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(powm(a, b, ui)).str(), test_type(powm(a1, b1, ui)).str());
+ BOOST_CHECK_EQUAL(mpz_int(powm(a, ui, c)).str(), test_type(powm(a1, ui, c1)).str());
+ }
+ BOOST_CHECK_EQUAL(lsb(a), lsb(a1));
+ BOOST_CHECK_EQUAL(msb(a), msb(a1));
+ }
+
+ void test_bug_cases()
+ {
+ if(!std::numeric_limits<test_type>::is_bounded)
+ {
+ // https://svn.boost.org/trac/boost/ticket/7878
+ test_type a("0x1000000000000000000000000000000000000000000000000000000000000000");
+ test_type b = 0xFFFFFFFF;
+ test_type c = a * b + b; // quotient has 1 in the final place
+ test_type q, r;
+ divide_qr(c, b, q, r);
+ BOOST_CHECK_EQUAL(a + 1, q);
+ BOOST_CHECK_EQUAL(r, 0);
+
+ b = static_cast<test_type>("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+ c = a * b + b; // quotient has 1 in the final place
+ divide_qr(c, b, q, r);
+ BOOST_CHECK_EQUAL(a + 1, q);
+ BOOST_CHECK_EQUAL(r, 0);
+ //
+ // Not a bug, but test some other special cases that don't otherwise occur through
+ // random testing:
+ //
+ c = a * b; // quotient has zero in the final place
+ divide_qr(c, b, q, r);
+ BOOST_CHECK_EQUAL(q, a);
+ BOOST_CHECK_EQUAL(r, 0);
+ divide_qr(c, a, q, r);
+ BOOST_CHECK_EQUAL(q, b);
+ BOOST_CHECK_EQUAL(r, 0);
+ ++c;
+ divide_qr(c, b, q, r);
+ BOOST_CHECK_EQUAL(q, a);
+ BOOST_CHECK_EQUAL(r, 1);
+ }
+ // Bug https://svn.boost.org/trac/boost/ticket/8126:
+ test_type a("-4294967296");
+ test_type b("4294967296");
+ test_type c("-1");
+ a = (a / b);
+ BOOST_CHECK_EQUAL(a, -1);
+ a = -4294967296;
+ a = (a / b) * c;
+ BOOST_CHECK_EQUAL(a, 1);
+ a = -23;
+ b = 23;
+ a = (a / b) * c;
+ BOOST_CHECK_EQUAL(a, 1);
+ a = -23;
+ a = (a / b) / c;
+ BOOST_CHECK_EQUAL(a, 1);
+ a = test_type("-26607734784073568386365259775");
+ b = test_type("8589934592");
+ a = a / b;
+ BOOST_CHECK_EQUAL(a, test_type("-3097548007973652377"));
+ // Bug https://svn.boost.org/trac/boost/ticket/8133:
+ a = test_type("0x12345600012434ffffffffffffffffffffffff");
+ unsigned ui = 0xffffffff;
+ a = a - ui;
+ BOOST_CHECK_EQUAL(a, test_type("0x12345600012434ffffffffffffffff00000000"));
+ a = test_type("0x12345600012434ffffffffffffffffffffffff");
+#ifndef BOOST_NO_LONG_LONG
+ unsigned long long ull = 0xffffffffffffffffuLL;
+ a = a - ull;
+ BOOST_CHECK_EQUAL(a, test_type("0x12345600012434ffffffff0000000000000000"));
+#endif
+ //
+ // Now check that things which should be zero really are
+ // https://svn.boost.org/trac/boost/ticket/8145:
+ //
+ a = -1;
+ a += 1;
+ BOOST_CHECK_EQUAL(a, 0);
+ a = 1;
+ a += -1;
+ BOOST_CHECK_EQUAL(a, 0);
+ a = -1;
+ a += test_type(1);
+ BOOST_CHECK_EQUAL(a, 0);
+ a = 1;
+ a += test_type(-1);
+ BOOST_CHECK_EQUAL(a, 0);
+ a = test_type("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+ a -= test_type("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+ BOOST_CHECK_EQUAL(a, 0);
+ a = -test_type("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+ a += test_type("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+ BOOST_CHECK_EQUAL(a, 0);
+ a = 2;
+ a *= 0;
+ BOOST_CHECK_EQUAL(a, 0);
+ a = -2;
+ a *= 0;
+ BOOST_CHECK_EQUAL(a, 0);
+ a = 2;
+ a *= test_type(0);
+ BOOST_CHECK_EQUAL(a, 0);
+ a = -2;
+ a *= test_type(0);
+ BOOST_CHECK_EQUAL(a, 0);
+ a = -2;
+ a /= 50;
+ BOOST_CHECK_EQUAL(a, 0);
+ a = -test_type("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
+ a /= (1 + test_type("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"));
+ BOOST_CHECK_EQUAL(a, 0);
+ // https://svn.boost.org/trac/boost/ticket/8160
+ a = 1;
+ a = 0 / test_type(1);
+ BOOST_CHECK_EQUAL(a, 0);
+ a = 1;
+ a = 0 % test_type(25);
+ BOOST_CHECK_EQUAL(a, 0);
+ }
+
+ void test()
+ {
+ using namespace boost::multiprecision;
+
+ test_bug_cases();
+
+ last_error_count = 0;
+
+ BOOST_CHECK_EQUAL(Number(), 0);
+
+ for(int i = 0; i < 10000; ++i)
+ {
+ a = generate_random<mpz_int>(1000);
+ b = generate_random<mpz_int>(512);
+ c = generate_random<mpz_int>(256);
+ d = generate_random<mpz_int>(32);
+
+ si = d.convert_to<int>();
+ ui = si;
+
+ a1 = static_cast<test_type>(a.str());
+ b1 = static_cast<test_type>(b.str());
+ c1 = static_cast<test_type>(c.str());
+ d1 = static_cast<test_type>(d.str());
+
+ t1();
+ t2();
+#ifndef SLOW_COMPILER
+ t3();
+ t4();
+ t5();
+#endif
+
+ if(last_error_count != (unsigned)boost::detail::test_errors())
+ {
+ last_error_count = boost::detail::test_errors();
+ std::cout << std::hex << std::showbase;
+
+ std::cout << "a = " << a << std::endl;
+ std::cout << "a1 = " << a1 << std::endl;
+ std::cout << "b = " << b << std::endl;
+ std::cout << "b1 = " << b1 << std::endl;
+ std::cout << "c = " << c << std::endl;
+ std::cout << "c1 = " << c1 << std::endl;
+ std::cout << "d = " << d << std::endl;
+ std::cout << "d1 = " << d1 << std::endl;
+ std::cout << "a + b = " << a+b << std::endl;
+ std::cout << "a1 + b1 = " << a1+b1 << std::endl;
+ std::cout << std::dec;
+ std::cout << "a - b = " << a-b << std::endl;
+ std::cout << "a1 - b1 = " << a1-b1 << std::endl;
+ std::cout << "-a + b = " << mpz_int(-a)+b << std::endl;
+ std::cout << "-a1 + b1 = " << test_type(-a1)+b1 << std::endl;
+ std::cout << "-a - b = " << mpz_int(-a)-b << std::endl;
+ std::cout << "-a1 - b1 = " << test_type(-a1)-b1 << std::endl;
+ std::cout << "c*d = " << c*d << std::endl;
+ std::cout << "c1*d1 = " << c1*d1 << std::endl;
+ std::cout << "b*c = " << b*c << std::endl;
+ std::cout << "b1*c1 = " << b1*c1 << std::endl;
+ std::cout << "a/b = " << a/b << std::endl;
+ std::cout << "a1/b1 = " << a1/b1 << std::endl;
+ std::cout << "a/d = " << a/d << std::endl;
+ std::cout << "a1/d1 = " << a1/d1 << std::endl;
+ std::cout << "a%b = " << a%b << std::endl;
+ std::cout << "a1%b1 = " << a1%b1 << std::endl;
+ std::cout << "a%d = " << a%d << std::endl;
+ std::cout << "a1%d1 = " << a1%d1 << std::endl;
+ }
+
+ //
+ // Check to see if test is taking too long.
+ // Tests run on the compiler farm time out after 300 seconds,
+ // so don't get too close to that:
+ //
+ if(tim.elapsed() > 200)
+ {
+ std::cout << "Timeout reached, aborting tests now....\n";
+ break;
+ }
+
+ }
+ }
+};
+
+#if !defined(TEST1) && !defined(TEST2) && !defined(TEST3)
+#define TEST1
+#define TEST2
+#define TEST3
+#endif
+
+int main()
+{
+ using namespace boost::multiprecision;
+#ifdef TEST1
+ tester<cpp_int> t1;
+ t1.test();
+#endif
+#ifdef TEST2
+ tester<number<cpp_int_backend<2048, 2048, signed_magnitude, checked, void> > > t2;
+ t2.test();
+#endif
+#ifdef TEST3
+ // Unchecked test verifies modulo arithmetic:
+ tester<number<cpp_int_backend<2048, 2048, signed_magnitude, unchecked, void> > > t3;
+ t3.test();
+#endif
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_int_conv.cpp b/libs/multiprecision/test/test_cpp_int_conv.cpp
new file mode 100644
index 0000000000..d5a8e2a333
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_int_conv.cpp
@@ -0,0 +1,77 @@
+///////////////////////////////////////////////////////////////
+// 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/detail/lightweight_test.hpp>
+#include <boost/array.hpp>
+#include "test.hpp"
+
+#include <boost/multiprecision/cpp_int.hpp>
+
+int main()
+{
+ using namespace boost::multiprecision;
+ //
+ // Test interconversions between different precisions:
+ //
+ cpp_int i1(2);
+ int128_t i2(3);
+ int256_t i3(4);
+ number<cpp_int_backend<32, 32, signed_magnitude, checked, void> > i4(5);
+
+ i1 = i3;
+ BOOST_TEST(i1 == 4);
+ i1 = i4;
+ BOOST_TEST(i1 == 5);
+
+ i3 = -1234567;
+ i4 = -5677334;
+ i1 = i3;
+ BOOST_TEST(i1 == -1234567);
+ i1 = i4;
+ BOOST_TEST(i1 == -5677334);
+
+ i3 = i2;
+ BOOST_TEST(i3 == 3);
+
+ i3 = -1234567;
+
+ uint128_t i5(i3);
+ BOOST_TEST(i5 == -1234567);
+
+ int128_t i6(i4);
+ BOOST_TEST(i6 == -5677334);
+
+ number<cpp_int_backend<32, 32, signed_magnitude, unchecked, void>, et_off> i7(i3);
+ BOOST_TEST(i7 == -1234567);
+
+ int256_t i8(i6);
+ BOOST_TEST(i8 == -5677334);
+
+ i7.assign(4.0);
+ BOOST_TEST(i7 == 4);
+
+ number<cpp_int_backend<30, 30, signed_magnitude, checked, void>, et_off> i9(-5677334);
+ i7 = i9;
+ BOOST_TEST(i7 == -5677334);
+ i7 = number<cpp_int_backend<32, 32, signed_magnitude, checked, void>, et_off>(i9);
+ BOOST_TEST(i7 == -5677334);
+
+ i9 = static_cast<number<cpp_int_backend<30, 30, signed_magnitude, checked, void>, et_off> >(i7);
+ BOOST_TEST(i9 == -5677334);
+
+ ++i9;
+ i7 = i9;
+ BOOST_TEST(i7 == 1 - 5677334);
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_int_deserial.cpp b/libs/multiprecision/test/test_cpp_int_deserial.cpp
new file mode 100644
index 0000000000..6b5d888c37
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_int_deserial.cpp
@@ -0,0 +1,3197 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test.hpp"
+
+#include <iostream>
+#include <iomanip>
+#include <fstream>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/exception/all.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/fstream.hpp>
+
+boost::filesystem::path root;
+
+template <class T>
+void test64()
+{
+ using namespace boost::multiprecision;
+
+ const char* text_array[] = {
+ "4991075498124186",
+ "-4991075498124186",
+ "750",
+ "-750",
+ "415210192158791091",
+ "-415210192158791091",
+ "2172493004228646",
+ "-2172493004228646",
+ "993",
+ "-993",
+ "801484291299519218",
+ "-801484291299519218",
+ "294605502329193119",
+ "-294605502329193119",
+ "52506",
+ "-52506",
+ "1509449075377",
+ "-1509449075377",
+ "2042599",
+ "-2042599",
+ "228",
+ "-228",
+ "38666759073",
+ "-38666759073",
+ "611489",
+ "-611489",
+ "5393",
+ "-5393",
+ "12930071684",
+ "-12930071684",
+ "3606852234541437552",
+ "-3606852234541437552",
+ "3764404188985662264",
+ "-3764404188985662264",
+ "13300301596736993408",
+ "-13300301596736993408",
+ "3519758520509816019",
+ "-3519758520509816019",
+ "811951798554103911",
+ "-811951798554103911",
+ "2440",
+ "-2440",
+ "175149377023342",
+ "-175149377023342",
+ "5347169560611466452",
+ "-5347169560611466452",
+ "187134495165780485",
+ "-187134495165780485",
+ "761263991097466327",
+ "-761263991097466327",
+ "205",
+ "-205",
+ "7437277938",
+ "-7437277938",
+ "2530448830165700",
+ "-2530448830165700",
+ "3771546153060183",
+ "-3771546153060183",
+ "1238034",
+ "-1238034",
+ "1470",
+ "-1470",
+ "7",
+ "-7",
+ "203065689",
+ "-203065689",
+ "130",
+ "-130",
+ "74717518653749632",
+ "-74717518653749632",
+ "3028698162338",
+ "-3028698162338",
+ "3471587482356581",
+ "-3471587482356581",
+ "34698219712863216",
+ "-34698219712863216",
+ "941191493582057728",
+ "-941191493582057728",
+ "14803251323",
+ "-14803251323",
+ "552076672455",
+ "-552076672455",
+ "410481316632532",
+ "-410481316632532",
+ "6",
+ "-6",
+ "3851011",
+ "-3851011",
+ "12895806074024545",
+ "-12895806074024545",
+ "59538",
+ "-59538",
+ "944776298737546117",
+ "-944776298737546117",
+ "25010240662345",
+ "-25010240662345",
+ "29657097213970",
+ "-29657097213970",
+ "88000252",
+ "-88000252",
+ "545263458410825",
+ "-545263458410825",
+ "216600129907865",
+ "-216600129907865",
+ "262741237793873",
+ "-262741237793873",
+ "226964744",
+ "-226964744",
+ "111776857",
+ "-111776857",
+ "346922769",
+ "-346922769",
+ "7324307011273",
+ "-7324307011273",
+ "182",
+ "-182",
+ "4204",
+ "-4204",
+ "60455",
+ "-60455",
+ "35250836865461",
+ "-35250836865461",
+ "4100298085120029",
+ "-4100298085120029",
+ "6",
+ "-6",
+ "3262369",
+ "-3262369",
+ "103928",
+ "-103928",
+ "82055266594432948",
+ "-82055266594432948",
+ "8",
+ "-8",
+ "1731",
+ "-1731",
+ "338",
+ "-338",
+ "13202690186510006305",
+ "-13202690186510006305",
+ "3916209444926814",
+ "-3916209444926814",
+ "1801701990484582",
+ "-1801701990484582",
+ "54042343363098",
+ "-54042343363098",
+ "86",
+ "-86",
+ "1346703",
+ "-1346703",
+ "34499847353417",
+ "-34499847353417",
+ "870972860051498248",
+ "-870972860051498248",
+ "2676223213",
+ "-2676223213",
+ "10",
+ "-10",
+ "2207730666882",
+ "-2207730666882",
+ "256557933",
+ "-256557933",
+ "742",
+ "-742",
+ "17809514",
+ "-17809514",
+ "41738",
+ "-41738",
+ "937490350973899",
+ "-937490350973899",
+ "10",
+ "-10",
+ "2153955175933399",
+ "-2153955175933399",
+ "21",
+ "-21",
+ "9767",
+ "-9767",
+ "160991545",
+ "-160991545",
+ "5537202949",
+ "-5537202949",
+ "1729222816",
+ "-1729222816",
+ "880543773",
+ "-880543773",
+ "4994415770",
+ "-4994415770",
+ "5667270210124",
+ "-5667270210124",
+ "1789552738407096",
+ "-1789552738407096",
+ "52084908492459",
+ "-52084908492459",
+ "419923376385918098",
+ "-419923376385918098",
+ "193184120308428",
+ "-193184120308428",
+ "3716593161704457",
+ "-3716593161704457",
+ "835313",
+ "-835313",
+ "47794728416344",
+ "-47794728416344",
+ "32162267350660",
+ "-32162267350660",
+ "1",
+ "-1",
+ "6746653265049",
+ "-6746653265049",
+ "72924075986572",
+ "-72924075986572",
+ "4061",
+ "-4061",
+ "1776612112178",
+ "-1776612112178",
+ "798",
+ "-798",
+ "266401037",
+ "-266401037",
+ "6773927626",
+ "-6773927626",
+ "935572859041371",
+ "-935572859041371",
+ "2667878767142547263",
+ "-2667878767142547263",
+ "107694081993",
+ "-107694081993",
+ "2478862",
+ "-2478862",
+ "75439252494463178",
+ "-75439252494463178",
+ "502732137506",
+ "-502732137506",
+ "1345285828338743",
+ "-1345285828338743",
+ "15181",
+ "-15181",
+ "6",
+ "-6",
+ "503497089658971",
+ "-503497089658971",
+ "3925896855680859",
+ "-3925896855680859",
+ "259231",
+ "-259231",
+ "7499637741115431",
+ "-7499637741115431",
+ "16282283214",
+ "-16282283214",
+ "1664259700668569315",
+ "-1664259700668569315",
+ "63205423227654",
+ "-63205423227654",
+ "122839112",
+ "-122839112",
+ "254133246000861645",
+ "-254133246000861645",
+ "324448699",
+ "-324448699",
+ "2634830651678498499",
+ "-2634830651678498499",
+ "65612160397",
+ "-65612160397",
+ "7064926544",
+ "-7064926544",
+ "3816",
+ "-3816",
+ "1964",
+ "-1964",
+ "208639360759781",
+ "-208639360759781",
+ "3910",
+ "-3910",
+ "95080",
+ "-95080",
+ "175945",
+ "-175945",
+ "5880392757177227",
+ "-5880392757177227",
+ "17254376508100660",
+ "-17254376508100660",
+ "16568677462108662019",
+ "-16568677462108662019",
+ "193490",
+ "-193490",
+ "6055816",
+ "-6055816",
+ "4421583059373970",
+ "-4421583059373970",
+ "34879",
+ "-34879",
+ "52778",
+ "-52778",
+ "0",
+ "0",
+ "935000170463558922",
+ "-935000170463558922",
+ "173",
+ "-173",
+ "10327678",
+ "-10327678",
+ "45810516546119519",
+ "-45810516546119519",
+ "8712",
+ "-8712",
+ "1932876094515139",
+ "-1932876094515139",
+ "84388",
+ "-84388",
+ "2050813773845403160",
+ "-2050813773845403160",
+ "1542848238524",
+ "-1542848238524",
+ "1555584758215827",
+ "-1555584758215827",
+ "3571489748",
+ "-3571489748",
+ "18291705113053112226",
+ "-18291705113053112226",
+ "5713248",
+ "-5713248",
+ "43",
+ "-43",
+ "7537188724850197",
+ "-7537188724850197",
+ "3450872745386207",
+ "-3450872745386207",
+ "335595262120",
+ "-335595262120",
+ "481778267224",
+ "-481778267224",
+ "86277827129",
+ "-86277827129",
+ "132147177032651",
+ "-132147177032651",
+ "222305704702019735",
+ "-222305704702019735",
+ "15454425372201",
+ "-15454425372201",
+ "37444",
+ "-37444",
+ "14915074751748",
+ "-14915074751748",
+ "322332143987563",
+ "-322332143987563",
+ "126997604",
+ "-126997604",
+ "484901511158709",
+ "-484901511158709",
+ "7452547923",
+ "-7452547923",
+ "43400437",
+ "-43400437",
+ "950",
+ "-950",
+ "133435748899",
+ "-133435748899",
+ "13225323986",
+ "-13225323986",
+ "113",
+ "-113",
+ "31298263",
+ "-31298263",
+ "33",
+ "-33",
+ "11093233",
+ "-11093233",
+ "13921728621",
+ "-13921728621",
+ "256811828405",
+ "-256811828405",
+ "568533463853249",
+ "-568533463853249",
+ "384553",
+ "-384553",
+ "1046793359495877872",
+ "-1046793359495877872",
+ "3513488911471240501",
+ "-3513488911471240501",
+ "999",
+ "-999",
+ "3257",
+ "-3257",
+ "141868737283",
+ "-141868737283",
+ "97723548",
+ "-97723548",
+ "380232796",
+ "-380232796",
+ "11615871",
+ "-11615871",
+ "2",
+ "-2",
+ "516935083428",
+ "-516935083428",
+ "2767393",
+ "-2767393",
+ "74918721",
+ "-74918721",
+ "7083",
+ "-7083",
+ "497484184665289623",
+ "-497484184665289623",
+ "3309660146889781",
+ "-3309660146889781",
+ "795624163",
+ "-795624163",
+ "1739075",
+ "-1739075",
+ "38737391516580422",
+ "-38737391516580422",
+ "33363484068",
+ "-33363484068",
+ "453947517553",
+ "-453947517553",
+ "7206",
+ "-7206",
+ "912",
+ "-912",
+ "1070565937975",
+ "-1070565937975",
+ "3607679046",
+ "-3607679046",
+ "503313",
+ "-503313",
+ "5384337",
+ "-5384337",
+ "7913554120377",
+ "-7913554120377",
+ "4112847188",
+ "-4112847188",
+ "8191226371802",
+ "-8191226371802",
+ "41268527630506",
+ "-41268527630506",
+ "446828884957609",
+ "-446828884957609",
+ "17378379828995102574",
+ "-17378379828995102574",
+ "802194395",
+ "-802194395",
+ "6459076776036",
+ "-6459076776036",
+ "189",
+ "-189",
+ "456272745323742742",
+ "-456272745323742742",
+ "35245",
+ "-35245",
+ "4142317167",
+ "-4142317167",
+ "240455833189507891",
+ "-240455833189507891",
+ "32426861928",
+ "-32426861928",
+ "3464",
+ "-3464",
+ "15152220677",
+ "-15152220677",
+ "8550134950160679",
+ "-8550134950160679",
+ "226598734",
+ "-226598734",
+ "35686909663",
+ "-35686909663",
+ "59277903563",
+ "-59277903563",
+ "6946537179316043375",
+ "-6946537179316043375",
+ "516198226",
+ "-516198226",
+ "54",
+ "-54",
+ "27406574726722597",
+ "-27406574726722597",
+ "717765982",
+ "-717765982",
+ "540734180837",
+ "-540734180837",
+ "381",
+ "-381",
+ "2883798342",
+ "-2883798342",
+ "2454889904722697593",
+ "-2454889904722697593",
+ "5324758776781459411",
+ "-5324758776781459411",
+ "0",
+ "0",
+ "3",
+ "-3",
+ "758016775051877",
+ "-758016775051877",
+ "6368641396491647651",
+ "-6368641396491647651",
+ "2409862725919775",
+ "-2409862725919775",
+ "19831125",
+ "-19831125",
+ "19839578195623645",
+ "-19839578195623645",
+ "19556929453271",
+ "-19556929453271",
+ "245",
+ "-245",
+ "83382",
+ "-83382",
+ "30044944",
+ "-30044944",
+ "10307835790108389",
+ "-10307835790108389",
+ "266904",
+ "-266904",
+ "29",
+ "-29",
+ "1691697088175268",
+ "-1691697088175268",
+ "6361142035143",
+ "-6361142035143",
+ "440939789",
+ "-440939789",
+ "19836890767598",
+ "-19836890767598",
+ "78676472953102968",
+ "-78676472953102968",
+ "1663",
+ "-1663",
+ "7103",
+ "-7103",
+ "2602952185917450011",
+ "-2602952185917450011",
+ "8018",
+ "-8018",
+ "244",
+ "-244",
+ "1908",
+ "-1908",
+ "394626",
+ "-394626",
+ "559",
+ "-559",
+ "2692219006891972",
+ "-2692219006891972",
+ "13265871632018922",
+ "-13265871632018922",
+ "124",
+ "-124",
+ "222927115625",
+ "-222927115625",
+ "1283014176523",
+ "-1283014176523",
+ "63800278885",
+ "-63800278885",
+ "0",
+ "0",
+ "1829",
+ "-1829",
+ "13920824467759",
+ "-13920824467759",
+ "5133342577177325",
+ "-5133342577177325",
+ "11207577826",
+ "-11207577826",
+ "1482655119893",
+ "-1482655119893",
+ "200471339",
+ "-200471339",
+ "14758141",
+ "-14758141",
+ "29794",
+ "-29794",
+ "17080244",
+ "-17080244",
+ "699",
+ "-699",
+ "33751076",
+ "-33751076",
+ "16396192",
+ "-16396192",
+ "98",
+ "-98",
+ "81983490866862",
+ "-81983490866862",
+ "102679",
+ "-102679",
+ "13",
+ "-13",
+ "300",
+ "-300",
+ "195317",
+ "-195317",
+ "8257",
+ "-8257",
+ "9944069581",
+ "-9944069581",
+ "63162",
+ "-63162",
+ "2814124367772394",
+ "-2814124367772394",
+ "136699870",
+ "-136699870",
+ "2298044154057333478",
+ "-2298044154057333478",
+ "14",
+ "-14",
+ "15514009231077760",
+ "-15514009231077760",
+ "183794877561119741",
+ "-183794877561119741",
+ "1799598",
+ "-1799598",
+ "1873291206216770568",
+ "-1873291206216770568",
+ "31",
+ "-31",
+ "5025013349",
+ "-5025013349",
+ "26376",
+ "-26376",
+ "905247925",
+ "-905247925",
+ "36545804839",
+ "-36545804839",
+ "960743",
+ "-960743",
+ "90208569247342191",
+ "-90208569247342191",
+ "148711261716954186",
+ "-148711261716954186",
+ "15491943",
+ "-15491943",
+ "15539960",
+ "-15539960",
+ "15",
+ "-15",
+ "39",
+ "-39",
+ "7901",
+ "-7901",
+ "2124324987051603",
+ "-2124324987051603",
+ "45033487059826453",
+ "-45033487059826453",
+ "87387056",
+ "-87387056",
+ "13621",
+ "-13621",
+ "36002",
+ "-36002",
+ "130430",
+ "-130430",
+ "65703401",
+ "-65703401",
+ "7703922866",
+ "-7703922866",
+ "171",
+ "-171",
+ "61731",
+ "-61731",
+ "1387",
+ "-1387",
+ "8049274895",
+ "-8049274895",
+ "1951008680589745867",
+ "-1951008680589745867",
+ "2763480591525312699",
+ "-2763480591525312699",
+ "446243894833471417",
+ "-446243894833471417",
+ "5396319104693",
+ "-5396319104693",
+ "162371331057",
+ "-162371331057",
+ "370769520766475",
+ "-370769520766475",
+ "1",
+ "-1",
+ "361477542",
+ "-361477542",
+ "999",
+ "-999",
+ "5869928506",
+ "-5869928506",
+ "10725949",
+ "-10725949",
+ "16",
+ "-16",
+ "4934609875259411",
+ "-4934609875259411",
+ "3909261",
+ "-3909261",
+ "1",
+ "-1",
+ "96362",
+ "-96362",
+ "24",
+ "-24",
+ "206089594430410490",
+ "-206089594430410490",
+ "104",
+ "-104",
+ "5836462606744621",
+ "-5836462606744621",
+ "4267837773445",
+ "-4267837773445",
+ "485898",
+ "-485898",
+ "115640927033286",
+ "-115640927033286",
+ "1554",
+ "-1554",
+ "8719162940811",
+ "-8719162940811",
+ "2870768607",
+ "-2870768607",
+ "1052349661",
+ "-1052349661",
+ "23867197",
+ "-23867197",
+ "45326966103",
+ "-45326966103",
+ "90260998217302",
+ "-90260998217302",
+ "1523891",
+ "-1523891",
+ "666993",
+ "-666993",
+ "107936212247500",
+ "-107936212247500",
+ "1559140486984",
+ "-1559140486984",
+ "5874",
+ "-5874",
+ "5388740994398251",
+ "-5388740994398251",
+ "9448163810439",
+ "-9448163810439",
+ "1654654",
+ "-1654654",
+ "10590",
+ "-10590",
+ "54734468",
+ "-54734468",
+ "30749964",
+ "-30749964",
+ "9811424",
+ "-9811424",
+ "526166608342",
+ "-526166608342",
+ "4115859427270797",
+ "-4115859427270797",
+ "596517644188027",
+ "-596517644188027",
+ "14364215824260",
+ "-14364215824260",
+ "187",
+ "-187",
+ "24260378",
+ "-24260378",
+ "55791469491162660",
+ "-55791469491162660",
+ "2106900391",
+ "-2106900391",
+ "217782523580138",
+ "-217782523580138",
+ "1216259",
+ "-1216259",
+ "3275398462",
+ "-3275398462",
+ "343016100304169644",
+ "-343016100304169644",
+ "957668440",
+ "-957668440",
+ "6471546279",
+ "-6471546279",
+ "614957732",
+ "-614957732",
+ "130810411909693",
+ "-130810411909693",
+ "792104",
+ "-792104",
+ "465",
+ "-465",
+ "7782172074",
+ "-7782172074",
+ "55034847",
+ "-55034847",
+ "6775527365",
+ "-6775527365",
+ "12803753747546578",
+ "-12803753747546578",
+ "6126135608700535",
+ "-6126135608700535",
+ "12740679",
+ "-12740679",
+ "1266634072040501",
+ "-1266634072040501",
+ "348269777058432218",
+ "-348269777058432218",
+ "2184392953733",
+ "-2184392953733",
+ "9522770891",
+ "-9522770891",
+ "37077445",
+ "-37077445",
+ "1364",
+ "-1364",
+ "375540696398769",
+ "-375540696398769",
+ "24230",
+ "-24230",
+ "43119671230",
+ "-43119671230",
+ "1029673322569841213",
+ "-1029673322569841213",
+ "14194736",
+ "-14194736",
+ "4439459006245050525",
+ "-4439459006245050525",
+ "2016679919307343642",
+ "-2016679919307343642",
+ "68490",
+ "-68490",
+ "138373187496830016",
+ "-138373187496830016",
+ "12",
+ "-12",
+ "72731399395",
+ "-72731399395",
+ "103249241",
+ "-103249241",
+ "686434193208",
+ "-686434193208",
+ "2220097226366547",
+ "-2220097226366547",
+ "389615851678",
+ "-389615851678",
+ "1188756152",
+ "-1188756152",
+ "3527",
+ "-3527",
+ "64606107042",
+ "-64606107042",
+ "1628835",
+ "-1628835",
+ "14",
+ "-14",
+ "3398525351",
+ "-3398525351",
+ "192736533293843919",
+ "-192736533293843919",
+ "62739",
+ "-62739",
+ "29797",
+ "-29797",
+ "27022533997970320",
+ "-27022533997970320",
+ "85203884819644813",
+ "-85203884819644813",
+ "16723",
+ "-16723",
+ "720455425",
+ "-720455425",
+ "21193",
+ "-21193",
+ "911",
+ "-911",
+ "7564",
+ "-7564",
+ "9937",
+ "-9937",
+ "17698",
+ "-17698",
+ "3154835669492701",
+ "-3154835669492701",
+ "714419922",
+ "-714419922",
+ "3441710384",
+ "-3441710384",
+ "2302757",
+ "-2302757",
+ "13",
+ "-13",
+ "191092534665719086",
+ "-191092534665719086",
+ "2671438117955",
+ "-2671438117955",
+ "269195401",
+ "-269195401",
+ "1257367614616",
+ "-1257367614616",
+ "15233",
+ "-15233",
+ "242652372681",
+ "-242652372681",
+ "379035516581309513",
+ "-379035516581309513",
+ "234696334636228",
+ "-234696334636228",
+ "2190428804113181503",
+ "-2190428804113181503",
+ "5182131",
+ "-5182131",
+ "35710270",
+ "-35710270",
+ "30830418043327",
+ "-30830418043327",
+ "157",
+ "-157",
+ "56976290639537",
+ "-56976290639537",
+ "429094",
+ "-429094",
+ "8166",
+ "-8166",
+ "259284720",
+ "-259284720",
+ "1974",
+ "-1974",
+ "414549061889",
+ "-414549061889",
+ "12126192",
+ "-12126192",
+ "477683",
+ "-477683",
+ "26",
+ "-26",
+ "200991115623",
+ "-200991115623",
+ "105657935189602",
+ "-105657935189602",
+ "137401581416017",
+ "-137401581416017",
+ "3133",
+ "-3133",
+ "41301",
+ "-41301",
+ "9120545960887397",
+ "-9120545960887397",
+ "615",
+ "-615",
+ "1677628",
+ "-1677628",
+ "487311",
+ "-487311",
+ "6467819698256",
+ "-6467819698256",
+ "2721454",
+ "-2721454",
+ "356423793",
+ "-356423793",
+ "525408497",
+ "-525408497",
+ "1791793366931794",
+ "-1791793366931794",
+ "16267730984",
+ "-16267730984",
+ "787",
+ "-787",
+ "82",
+ "-82",
+ "8594582631777749056",
+ "-8594582631777749056",
+ "494351",
+ "-494351",
+ "5138",
+ "-5138",
+ "404787056092544",
+ "-404787056092544",
+ "235074602368269",
+ "-235074602368269",
+ "14",
+ "-14",
+ "364870",
+ "-364870",
+ "592299531695979194",
+ "-592299531695979194",
+ "243533",
+ "-243533",
+ "228268671797977",
+ "-228268671797977",
+ "150",
+ "-150",
+ "2109092292",
+ "-2109092292",
+ "10814341",
+ "-10814341",
+ "229344736512",
+ "-229344736512",
+ "506659",
+ "-506659",
+ "15065",
+ "-15065",
+ "73012461469893725",
+ "-73012461469893725",
+ "183623698",
+ "-183623698",
+ "30820",
+ "-30820"
+ };
+
+ boost::filesystem::ifstream is(root / "cpp_int64_serial64.txt");
+ std::cout << "Testing cpp_int64_serial64.txt with T=" << typeid(T).name() << std::endl;
+ is.peek();
+ BOOST_CHECK(is.good());
+ boost::archive::text_iarchive ia(is);
+ for(unsigned i = 0; i < sizeof(text_array) / sizeof(text_array[0]); ++i)
+ {
+ T val;
+ ia >> val;
+ BOOST_CHECK_EQUAL(val, T(text_array[i]));
+ }
+
+ boost::filesystem::ifstream is2(root / "cpp_int64_serial32.txt");
+ std::cout << "Testing cpp_int64_serial32.txt with T=" << typeid(T).name() << std::endl;
+ is2.peek();
+ BOOST_CHECK(is2.good());
+ boost::archive::text_iarchive ia2(is2);
+ for(unsigned i = 0; i < sizeof(text_array) / sizeof(text_array[0]); ++i)
+ {
+ T val;
+ ia2 >> val;
+ BOOST_CHECK_EQUAL(val, T(text_array[i]));
+ }
+}
+
+template <class T>
+void test128()
+{
+ using namespace boost::multiprecision;
+
+ const char* text_array[] = {
+ "27388486965920179246162874599461",
+ "-27388486965920179246162874599461",
+ "144684",
+ "-144684",
+ "40075268927703813213972787292005375",
+ "-40075268927703813213972787292005375",
+ "185882978840350932616815972016599",
+ "-185882978840350932616815972016599",
+ "118042",
+ "-118042",
+ "18836407318976510834104635573348923563",
+ "-18836407318976510834104635573348923563",
+ "305594372610563985628870243265194313",
+ "-305594372610563985628870243265194313",
+ "992608567",
+ "-992608567",
+ "1079802217950896854831728",
+ "-1079802217950896854831728",
+ "382261429251",
+ "-382261429251",
+ "7995",
+ "-7995",
+ "1691954012304306190464",
+ "-1691954012304306190464",
+ "252558125876",
+ "-252558125876",
+ "63408135",
+ "-63408135",
+ "1923885021482774859879",
+ "-1923885021482774859879",
+ "218151618018868077912122028563473880039",
+ "-218151618018868077912122028563473880039",
+ "1830482607233486577967554117978261568",
+ "-1830482607233486577967554117978261568",
+ "232684363792492642717810801641182199046",
+ "-232684363792492642717810801641182199046",
+ "18951107105103656564987041230801322761",
+ "-18951107105103656564987041230801322761",
+ "18602001100058210837668227206289280804",
+ "-18602001100058210837668227206289280804",
+ "619312",
+ "-619312",
+ "3300635207581175104869860370",
+ "-3300635207581175104869860370",
+ "35913874076527213864347472731883210240",
+ "-35913874076527213864347472731883210240",
+ "22584003535744275158325315387889625225",
+ "-22584003535744275158325315387889625225",
+ "1087569784912004503372385117646999025",
+ "-1087569784912004503372385117646999025",
+ "53419",
+ "-53419",
+ "6365946347248672643",
+ "-6365946347248672643",
+ "923074766928095495451885549346",
+ "-923074766928095495451885549346",
+ "791386027675064089452885112122",
+ "-791386027675064089452885112122",
+ "1095850863769",
+ "-1095850863769",
+ "585462",
+ "-585462",
+ "7",
+ "-7",
+ "14396352646034696",
+ "-14396352646034696",
+ "103513",
+ "-103513",
+ "236879494739813627852695329647307484",
+ "-236879494739813627852695329647307484",
+ "833105528657041028703317",
+ "-833105528657041028703317",
+ "403987552870100762517310706932",
+ "-403987552870100762517310706932",
+ "9241069445104304081394313010837003",
+ "-9241069445104304081394313010837003",
+ "7747462702643357490732429745555870341",
+ "-7747462702643357490732429745555870341",
+ "24325940392988231200",
+ "-24325940392988231200",
+ "3169332595628505508931977",
+ "-3169332595628505508931977",
+ "2956433455556566120076606972499",
+ "-2956433455556566120076606972499",
+ "97",
+ "-97",
+ "162358208806282",
+ "-162358208806282",
+ "450940116154946927404473774882465",
+ "-450940116154946927404473774882465",
+ "451641858",
+ "-451641858",
+ "1225696755823790187144596188382442861",
+ "-1225696755823790187144596188382442861",
+ "29784146626131423063590613",
+ "-29784146626131423063590613",
+ "234254347872215512272431905",
+ "-234254347872215512272431905",
+ "1188109449997714",
+ "-1188109449997714",
+ "67931289973154010244863599404",
+ "-67931289973154010244863599404",
+ "15985550526478899202524298413",
+ "-15985550526478899202524298413",
+ "44969358144856504665069077764",
+ "-44969358144856504665069077764",
+ "2433869372731414379",
+ "-2433869372731414379",
+ "389948478409995",
+ "-389948478409995",
+ "42980455782580666",
+ "-42980455782580666",
+ "32377741714896213765436617",
+ "-32377741714896213765436617",
+ "14147536",
+ "-14147536",
+ "7281984",
+ "-7281984",
+ "1940499846845",
+ "-1940499846845",
+ "431464371512114469628917178",
+ "-431464371512114469628917178",
+ "7407337220313553496076208494128",
+ "-7407337220313553496076208494128",
+ "30",
+ "-30",
+ "1327411295501",
+ "-1327411295501",
+ "66903469770",
+ "-66903469770",
+ "1681234517540805320612830262883456",
+ "-1681234517540805320612830262883456",
+ "100",
+ "-100",
+ "1619033",
+ "-1619033",
+ "31778",
+ "-31778",
+ "157454929543174151967897543014505981946",
+ "-157454929543174151967897543014505981946",
+ "71577966086399886868276034834304",
+ "-71577966086399886868276034834304",
+ "39053861540146327519720396203958",
+ "-39053861540146327519720396203958",
+ "744644565611021440442223814",
+ "-744644565611021440442223814",
+ "141620",
+ "-141620",
+ "2207944969567",
+ "-2207944969567",
+ "203426602629118177589459157758",
+ "-203426602629118177589459157758",
+ "4687930831049614526662210561259545215",
+ "-4687930831049614526662210561259545215",
+ "13741620425001328569",
+ "-13741620425001328569",
+ "28",
+ "-28",
+ "19919840763987597711639960",
+ "-19919840763987597711639960",
+ "58845502926990870",
+ "-58845502926990870",
+ "46503",
+ "-46503",
+ "227899590091810",
+ "-227899590091810",
+ "520269641",
+ "-520269641",
+ "533635134464326491653819104191",
+ "-533635134464326491653819104191",
+ "32",
+ "-32",
+ "2311765742988497575052179436185",
+ "-2311765742988497575052179436185",
+ "104",
+ "-104",
+ "13174010",
+ "-13174010",
+ "9157004287034859",
+ "-9157004287034859",
+ "13439929054075798978",
+ "-13439929054075798978",
+ "1005710832260650449",
+ "-1005710832260650449",
+ "45810516546119519",
+ "-45810516546119519",
+ "10111031832823515595",
+ "-10111031832823515595",
+ "1556666498630726306813245",
+ "-1556666498630726306813245",
+ "3776079563026301615061583892830",
+ "-3776079563026301615061583892830",
+ "3554220000452135447940601650",
+ "-3554220000452135447940601650",
+ "342914370059615129601458555955512766",
+ "-342914370059615129601458555955512766",
+ "37211915143242116097464702285",
+ "-37211915143242116097464702285",
+ "8426589576380612848355737491164",
+ "-8426589576380612848355737491164",
+ "32989222860",
+ "-32989222860",
+ "2242563523293104833112476952",
+ "-2242563523293104833112476952",
+ "26340698264302762867393911",
+ "-26340698264302762867393911",
+ "7",
+ "-7",
+ "690707180838394286313288",
+ "-690707180838394286313288",
+ "4152835666147840816597477625",
+ "-4152835666147840816597477625",
+ "4307204",
+ "-4307204",
+ "5538028691958331075031052",
+ "-5538028691958331075031052",
+ "15605",
+ "-15605",
+ "779689768131768618",
+ "-779689768131768618",
+ "31804890425581409493",
+ "-31804890425581409493",
+ "82342246867680606750756320822",
+ "-82342246867680606750756320822",
+ "9901401020017005286056280532528545058",
+ "-9901401020017005286056280532528545058",
+ "23964619045267142735208",
+ "-23964619045267142735208",
+ "23105481037040",
+ "-23105481037040",
+ "9261441758156913859636303647639218",
+ "-9261441758156913859636303647639218",
+ "60070546007507763924924",
+ "-60070546007507763924924",
+ "12326765403330476150347768542599",
+ "-12326765403330476150347768542599",
+ "1754723286",
+ "-1754723286",
+ "28",
+ "-28",
+ "89432086134972543173032616112",
+ "-89432086134972543173032616112",
+ "57126030796671809943615335657436",
+ "-57126030796671809943615335657436",
+ "14251136561",
+ "-14251136561",
+ "34939118696445841694152507070732",
+ "-34939118696445841694152507070732",
+ "62242533492272937541",
+ "-62242533492272937541",
+ "743045397928995080970748460370011005",
+ "-743045397928995080970748460370011005",
+ "657268729381871210499613874",
+ "-657268729381871210499613874",
+ "5257773746486582",
+ "-5257773746486582",
+ "40168363520567402312420813782551098",
+ "-40168363520567402312420813782551098",
+ "61834553929623600",
+ "-61834553929623600",
+ "8827879038299859860036523950621910882",
+ "-8827879038299859860036523950621910882",
+ "18187363614017047925823",
+ "-18187363614017047925823",
+ "1117818522952984212179",
+ "-1117818522952984212179",
+ "2656685",
+ "-2656685",
+ "409037",
+ "-409037",
+ "184490923222475885977498171480",
+ "-184490923222475885977498171480",
+ "802095",
+ "-802095",
+ "1362431392",
+ "-1362431392",
+ "22261578528",
+ "-22261578528",
+ "29290981558101942713268861928118",
+ "-29290981558101942713268861928118",
+ "47302301317848473766508256110200",
+ "-47302301317848473766508256110200",
+ "148503360374909444835237781907560612329",
+ "-148503360374909444835237781907560612329",
+ "30589987607",
+ "-30589987607",
+ "9336827203045",
+ "-9336827203045",
+ "30107043678267266207220294684045",
+ "-30107043678267266207220294684045",
+ "1084118892329",
+ "-1084118892329",
+ "7041095740",
+ "-7041095740",
+ "15",
+ "-15",
+ "610704633153562426576938052064937496",
+ "-610704633153562426576938052064937496",
+ "595347631",
+ "-595347631",
+ "7667191853556",
+ "-7667191853556",
+ "44454027936868155101947565993903816",
+ "-44454027936868155101947565993903816",
+ "85883611",
+ "-85883611",
+ "360758748839243518516454792370840",
+ "-360758748839243518516454792370840",
+ "2790927324",
+ "-2790927324",
+ "3742465736365768915898498156617091585",
+ "-3742465736365768915898498156617091585",
+ "147479413949146319856130",
+ "-147479413949146319856130",
+ "1039208893123161146877445631451",
+ "-1039208893123161146877445631451",
+ "4014354216767740814",
+ "-4014354216767740814",
+ "119781181099519678732165162824065718973",
+ "-119781181099519678732165162824065718973",
+ "78562776301070",
+ "-78562776301070",
+ "559",
+ "-559",
+ "11280106118161133960100664534446",
+ "-11280106118161133960100664534446",
+ "4606016388942561437580270830022",
+ "-4606016388942561437580270830022",
+ "57670561868327441370011",
+ "-57670561868327441370011",
+ "71416894909097014471844",
+ "-71416894909097014471844",
+ "3968198792173455589573",
+ "-3968198792173455589573",
+ "13149823145733642608775252727",
+ "-13149823145733642608775252727",
+ "264546856712400799367073649733688068",
+ "-264546856712400799367073649733688068",
+ "181571595840115131057831601",
+ "-181571595840115131057831601",
+ "137320082754",
+ "-137320082754",
+ "106737570210691788059038313",
+ "-106737570210691788059038313",
+ "266197717365288449213562655531",
+ "-266197717365288449213562655531",
+ "2641672529147341",
+ "-2641672529147341",
+ "151305657535708132064629059130",
+ "-151305657535708132064629059130",
+ "8838288455460932557542",
+ "-8838288455460932557542",
+ "229580992302363",
+ "-229580992302363",
+ "381276009",
+ "-381276009",
+ "2189254995814346543537",
+ "-2189254995814346543537",
+ "241062663892019429783",
+ "-241062663892019429783",
+ "1289",
+ "-1289",
+ "3768499169854362",
+ "-3768499169854362",
+ "46",
+ "-46",
+ "113123194090149",
+ "-113123194090149",
+ "257162014338572986111",
+ "-257162014338572986111",
+ "125826984535179834218224",
+ "-125826984535179834218224",
+ "380714866068747567944322727593",
+ "-380714866068747567944322727593",
+ "104303598841139",
+ "-104303598841139",
+ "1065280345148327648773363223393307192",
+ "-1065280345148327648773363223393307192",
+ "20248493338789246233167313227932895840",
+ "-20248493338789246233167313227932895840",
+ "162538",
+ "-162538",
+ "173739",
+ "-173739",
+ "5359750034437798426950",
+ "-5359750034437798426950",
+ "665876738146930",
+ "-665876738146930",
+ "709289441745698432",
+ "-709289441745698432",
+ "202728866936448",
+ "-202728866936448",
+ "6",
+ "-6",
+ "15800583732744199482624014690",
+ "-15800583732744199482624014690",
+ "29779074291232",
+ "-29779074291232",
+ "984339779461760",
+ "-984339779461760",
+ "767398",
+ "-767398",
+ "415462781851563431292700828131108380",
+ "-415462781851563431292700828131108380",
+ "1147933945700269690596156182506",
+ "-1147933945700269690596156182506",
+ "42450738679031729",
+ "-42450738679031729",
+ "2577950950157",
+ "-2577950950157",
+ "2522521710801514347400568661434422",
+ "-2522521710801514347400568661434422",
+ "13819658998892401541",
+ "-13819658998892401541",
+ "496658145774859954943564",
+ "-496658145774859954943564",
+ "518126",
+ "-518126",
+ "1401",
+ "-1401",
+ "65673247548918355271934",
+ "-65673247548918355271934",
+ "1902619525684055188",
+ "-1902619525684055188",
+ "32325262934",
+ "-32325262934",
+ "768343207102",
+ "-768343207102",
+ "7717131697976593508998559",
+ "-7717131697976593508998559",
+ "318668224221205716681",
+ "-318668224221205716681",
+ "373695949349041942234118586",
+ "-373695949349041942234118586",
+ "2374230638947377832537387112",
+ "-2374230638947377832537387112",
+ "38727149332417950712342749093",
+ "-38727149332417950712342749093",
+ "50641097967663747879422486643603294439",
+ "-50641097967663747879422486643603294439",
+ "155679557293775199",
+ "-155679557293775199",
+ "9584524694361179551000251851",
+ "-9584524694361179551000251851",
+ "1555",
+ "-1555",
+ "153598430081275298827470966254180164",
+ "-153598430081275298827470966254180164",
+ "1792977580",
+ "-1792977580",
+ "40513995299101921791",
+ "-40513995299101921791",
+ "205149194684558953622782831493255495",
+ "-205149194684558953622782831493255495",
+ "8569592230593344920443",
+ "-8569592230593344920443",
+ "508895",
+ "-508895",
+ "19768102480409470254",
+ "-19768102480409470254",
+ "137276814223629775094893592279819",
+ "-137276814223629775094893592279819",
+ "294000609851122741",
+ "-294000609851122741",
+ "65049209437230122275",
+ "-65049209437230122275",
+ "23362940999728532813",
+ "-23362940999728532813",
+ "88836918597358775734007849873044275046",
+ "-88836918597358775734007849873044275046",
+ "434035006963316670",
+ "-434035006963316670",
+ "622",
+ "-622",
+ "581347029549389573249184843256799",
+ "-581347029549389573249184843256799",
+ "180338559687589565",
+ "-180338559687589565",
+ "561053757585637776917747",
+ "-561053757585637776917747",
+ "32239",
+ "-32239",
+ "33901075413575967103",
+ "-33901075413575967103",
+ "8932885164594123487128517542485517028",
+ "-8932885164594123487128517542485517028",
+ "83521148713289418108751633969571232369",
+ "-83521148713289418108751633969571232369",
+ "7",
+ "-7",
+ "97",
+ "-97",
+ "148574175322938930280707441746",
+ "-148574175322938930280707441746",
+ "34819851973902418549646788688822516665",
+ "-34819851973902418549646788688822516665",
+ "8315372482034321202893445528412",
+ "-8315372482034321202893445528412",
+ "78070260632520",
+ "-78070260632520",
+ "1694579890551276986736768820881486",
+ "-1694579890551276986736768820881486",
+ "148949594888574520284515061",
+ "-148949594888574520284515061",
+ "7155",
+ "-7155",
+ "54025120576002",
+ "-54025120576002",
+ "6486075462638233",
+ "-6486075462638233",
+ "381736014892858568664127676041586",
+ "-381736014892858568664127676041586",
+ "20417033368",
+ "-20417033368",
+ "129",
+ "-129",
+ "4369312912082114047863415327506",
+ "-4369312912082114047863415327506",
+ "3425863567263779336359928",
+ "-3425863567263779336359928",
+ "126664685306324611",
+ "-126664685306324611",
+ "79290635423234192686030222410",
+ "-79290635423234192686030222410",
+ "89904040753844842469288403271470296",
+ "-89904040753844842469288403271470296",
+ "303078",
+ "-303078",
+ "24403696",
+ "-24403696",
+ "71519894287768242731407528483177175738",
+ "-71519894287768242731407528483177175738",
+ "43562121429",
+ "-43562121429",
+ "27030",
+ "-27030",
+ "24600",
+ "-24600",
+ "248387716733",
+ "-248387716733",
+ "371528",
+ "-371528",
+ "4787877250361840261744279869821",
+ "-4787877250361840261744279869821",
+ "4997511746500297909058528782721320",
+ "-4997511746500297909058528782721320",
+ "1586",
+ "-1586",
+ "31554014671157226899246",
+ "-31554014671157226899246",
+ "2859985988700258455304314",
+ "-2859985988700258455304314",
+ "4509508709806307404851",
+ "-4509508709806307404851",
+ "9",
+ "-9",
+ "1637744",
+ "-1637744",
+ "12479552255352789077760938",
+ "-12479552255352789077760938",
+ "976489633596851129859012248183437",
+ "-976489633596851129859012248183437",
+ "851806998881827048562",
+ "-851806998881827048562",
+ "906771089783845862955091",
+ "-906771089783845862955091",
+ "80038352079069729",
+ "-80038352079069729",
+ "17388136706500",
+ "-17388136706500",
+ "61145989",
+ "-61145989",
+ "94774844620540266019",
+ "-94774844620540266019",
+ "408281",
+ "-408281",
+ "952903032817435",
+ "-952903032817435",
+ "1631092620569808",
+ "-1631092620569808",
+ "2138",
+ "-2138",
+ "212824926871186875960728065608",
+ "-212824926871186875960728065608",
+ "4268162925",
+ "-4268162925",
+ "36",
+ "-36",
+ "223723",
+ "-223723",
+ "16415665053",
+ "-16415665053",
+ "25788643",
+ "-25788643",
+ "70220421074486178069",
+ "-70220421074486178069",
+ "4575797377",
+ "-4575797377",
+ "76884751129407965501107148587666",
+ "-76884751129407965501107148587666",
+ "29088346935783207",
+ "-29088346935783207",
+ "45914004714587007155631909758206960989",
+ "-45914004714587007155631909758206960989",
+ "248",
+ "-248",
+ "5579572272102752655174722938686",
+ "-5579572272102752655174722938686",
+ "30175831892260274369581289965353458",
+ "-30175831892260274369581289965353458",
+ "1237805257371",
+ "-1237805257371",
+ "4843618316827222290521953980935538236",
+ "-4843618316827222290521953980935538236",
+ "240",
+ "-240",
+ "15807477184070179658",
+ "-15807477184070179658",
+ "4142567393",
+ "-4142567393",
+ "12811809209743734075",
+ "-12811809209743734075",
+ "1485630615919152225304",
+ "-1485630615919152225304",
+ "7910273036167",
+ "-7910273036167",
+ "8463758727276424785250829495444564",
+ "-8463758727276424785250829495444564",
+ "64731869997654405671780238192304416",
+ "-64731869997654405671780238192304416",
+ "23615438174870",
+ "-23615438174870",
+ "352157140910141",
+ "-352157140910141",
+ "5",
+ "-5",
+ "59221",
+ "-59221",
+ "2569479",
+ "-2569479",
+ "542857439184063766884246909368",
+ "-542857439184063766884246909368",
+ "1823313067549638501383110895210828",
+ "-1823313067549638501383110895210828",
+ "3270724720703321",
+ "-3270724720703321",
+ "301251143",
+ "-301251143",
+ "2479800639",
+ "-2479800639",
+ "91698905921",
+ "-91698905921",
+ "2871719453817880",
+ "-2871719453817880",
+ "15334399950643828095",
+ "-15334399950643828095",
+ "5526",
+ "-5526",
+ "233477156",
+ "-233477156",
+ "133654",
+ "-133654",
+ "16379095557010108528",
+ "-16379095557010108528",
+ "781428672272181160786182179076882317",
+ "-781428672272181160786182179076882317",
+ "8296349327720787412560043280221269761",
+ "-8296349327720787412560043280221269761",
+ "10281035380942381640132947771350381026",
+ "-10281035380942381640132947771350381026",
+ "21040070113550157615461288",
+ "-21040070113550157615461288",
+ "25742884982404545443527",
+ "-25742884982404545443527",
+ "32454973901024441799985592013",
+ "-32454973901024441799985592013",
+ "743",
+ "-743",
+ "48093509516189552",
+ "-48093509516189552",
+ "3310081024",
+ "-3310081024",
+ "555885664598428773514",
+ "-555885664598428773514",
+ "12816465810736",
+ "-12816465810736",
+ "318",
+ "-318",
+ "11177674634623001920713776522758",
+ "-11177674634623001920713776522758",
+ "4478260629000",
+ "-4478260629000",
+ "7",
+ "-7",
+ "16047003680147439",
+ "-16047003680147439",
+ "183",
+ "-183",
+ "59147119480091828181670682607031985",
+ "-59147119480091828181670682607031985",
+ "14760016",
+ "-14760016",
+ "6274417502047620562218369346380",
+ "-6274417502047620562218369346380",
+ "14026544807038936634796795",
+ "-14026544807038936634796795",
+ "17158839999",
+ "-17158839999",
+ "15548352769483287520249305142",
+ "-15548352769483287520249305142",
+ "362163",
+ "-362163",
+ "3476850886273368477018353",
+ "-3476850886273368477018353",
+ "12190143908040407488",
+ "-12190143908040407488",
+ "521525508150081044",
+ "-521525508150081044",
+ "433309060522200",
+ "-433309060522200",
+ "2165455650813681324517",
+ "-2165455650813681324517",
+ "6819348098387524497126647285",
+ "-6819348098387524497126647285",
+ "464251630203",
+ "-464251630203",
+ "145993167313",
+ "-145993167313",
+ "23955493117052698447116654044",
+ "-23955493117052698447116654044",
+ "1249962737542647752328381",
+ "-1249962737542647752328381",
+ "25985762",
+ "-25985762",
+ "8825811397396758414408048174991",
+ "-8825811397396758414408048174991",
+ "456322584656453621447742298",
+ "-456322584656453621447742298",
+ "3635296824314",
+ "-3635296824314",
+ "48071792",
+ "-48071792",
+ "573327609505513",
+ "-573327609505513",
+ "32947066161183",
+ "-32947066161183",
+ "3572119014464",
+ "-3572119014464",
+ "339951878200713991932774",
+ "-339951878200713991932774",
+ "9829263561931267281756747918204",
+ "-9829263561931267281756747918204",
+ "99133551353390277845579505558",
+ "-99133551353390277845579505558",
+ "87647698384969946179713959",
+ "-87647698384969946179713959",
+ "812",
+ "-812",
+ "874259982778101",
+ "-874259982778101",
+ "427106308211321596930989851275848063",
+ "-427106308211321596930989851275848063",
+ "182604408166381257",
+ "-182604408166381257",
+ "1027122202590661838104329309513",
+ "-1027122202590661838104329309513",
+ "1354315694936",
+ "-1354315694936",
+ "6079470672663034486",
+ "-6079470672663034486",
+ "141187763548195492188625309258190962",
+ "-141187763548195492188625309258190962",
+ "5948423816691427",
+ "-5948423816691427",
+ "3790826071191932816",
+ "-3790826071191932816",
+ "475187449013755049",
+ "-475187449013755049",
+ "134916830618137216019136180544",
+ "-134916830618137216019136180544",
+ "289548281081",
+ "-289548281081",
+ "56088",
+ "-56088",
+ "71309468310269123716",
+ "-71309468310269123716",
+ "4319226187100950",
+ "-4319226187100950",
+ "64155929243330777086",
+ "-64155929243330777086",
+ "1346606607492942300949980881912922",
+ "-1346606607492942300949980881912922",
+ "56691962171349121239043134503543",
+ "-56691962171349121239043134503543",
+ "179884054884043",
+ "-179884054884043",
+ "1457175629136147646463304750253",
+ "-1457175629136147646463304750253",
+ "298847019807831033427383443102915235",
+ "-298847019807831033427383443102915235",
+ "3724333984635632125440253",
+ "-3724333984635632125440253",
+ "75997801235764509433",
+ "-75997801235764509433",
+ "624924035973776",
+ "-624924035973776",
+ "663853",
+ "-663853",
+ "39794266307878236329712249281466",
+ "-39794266307878236329712249281466",
+ "68236356",
+ "-68236356",
+ "874551267305634766833",
+ "-874551267305634766833",
+ "3069873585346853407835416677633253152",
+ "-3069873585346853407835416677633253152",
+ "128022182325463",
+ "-128022182325463",
+ "102685407245351562527197662841526650696",
+ "-102685407245351562527197662841526650696",
+ "1268696403523315749290280644252872285",
+ "-1268696403523315749290280644252872285",
+ "962551179",
+ "-962551179",
+ "5397346809016967977013332103668812",
+ "-5397346809016967977013332103668812",
+ "19",
+ "-19",
+ "1383556287038543763721",
+ "-1383556287038543763721",
+ "596132342851497",
+ "-596132342851497",
+ "386032274487026935724854",
+ "-386032274487026935724854",
+ "913487342891468949707909122983",
+ "-913487342891468949707909122983",
+ "60948098701787507435146",
+ "-60948098701787507435146",
+ "2022832067596000203",
+ "-2022832067596000203",
+ "25656479",
+ "-25656479",
+ "2346119770800025007571",
+ "-2346119770800025007571",
+ "376371975341",
+ "-376371975341",
+ "9",
+ "-9",
+ "2942356530044344965",
+ "-2942356530044344965",
+ "3932381905103911287794534670998227",
+ "-3932381905103911287794534670998227",
+ "3218056320",
+ "-3218056320",
+ "102738821",
+ "-102738821",
+ "234572888397008437041293767052858",
+ "-234572888397008437041293767052858",
+ "5858001549782605027037905592031557",
+ "-5858001549782605027037905592031557",
+ "90718950",
+ "-90718950",
+ "39428225166028193",
+ "-39428225166028193",
+ "1383746282",
+ "-1383746282",
+ "915121",
+ "-915121",
+ "8970289",
+ "-8970289",
+ "4322641789",
+ "-4322641789",
+ "260209037",
+ "-260209037",
+ "6609227084602664174553003642710",
+ "-6609227084602664174553003642710",
+ "37231518369001507",
+ "-37231518369001507",
+ "4301528568595403190",
+ "-4301528568595403190",
+ "2333077100212",
+ "-2333077100212",
+ "11565",
+ "-11565",
+ "255726621336514413017008354182674709",
+ "-255726621336514413017008354182674709",
+ "17395422733913073065750181",
+ "-17395422733913073065750181",
+ "125019234224449492",
+ "-125019234224449492",
+ "4740360722276299853297125",
+ "-4740360722276299853297125",
+ "7568347",
+ "-7568347",
+ "17122026961016863428287",
+ "-17122026961016863428287",
+ "112577394987931131505768113032531171",
+ "-112577394987931131505768113032531171",
+ "7046212555452856822490707564",
+ "-7046212555452856822490707564",
+ "33256103762317100748101545285090311772",
+ "-33256103762317100748101545285090311772",
+ "104639691131091",
+ "-104639691131091",
+ "74043463548796243",
+ "-74043463548796243",
+ "49942702457067622169669481",
+ "-49942702457067622169669481",
+ "12806",
+ "-12806",
+ "4194227136755752775246633399",
+ "-4194227136755752775246633399",
+ "22363149786",
+ "-22363149786",
+ "53844",
+ "-53844",
+ "6204108132585699",
+ "-6204108132585699",
+ "133987",
+ "-133987",
+ "47357030709179941308475",
+ "-47357030709179941308475",
+ "167735124254221045",
+ "-167735124254221045",
+ "58394613871",
+ "-58394613871",
+ "214",
+ "-214",
+ "97085709128533841718123",
+ "-97085709128533841718123",
+ "9049249133086876221572990732831",
+ "-9049249133086876221572990732831",
+ "1860834869623152381150863486",
+ "-1860834869623152381150863486",
+ "3868776",
+ "-3868776",
+ "714752211",
+ "-714752211",
+ "117044601375672047600456567336894",
+ "-117044601375672047600456567336894",
+ "38202",
+ "-38202",
+ "1706135867048",
+ "-1706135867048",
+ "568201454130",
+ "-568201454130",
+ "10071543790040355676774628",
+ "-10071543790040355676774628",
+ "3955606956905",
+ "-3955606956905",
+ "1710822834542941",
+ "-1710822834542941",
+ "28185453895207483",
+ "-28185453895207483",
+ "2241403707806732425937134125743",
+ "-2241403707806732425937134125743",
+ "24424908461669836348",
+ "-24424908461669836348",
+ "39965",
+ "-39965",
+ "5776",
+ "-5776",
+ "161984235115107451958835599550261843326",
+ "-161984235115107451958835599550261843326",
+ "29821471341",
+ "-29821471341",
+ "3087720",
+ "-3087720",
+ "234408055908870511236228564329",
+ "-234408055908870511236228564329",
+ "367687929171771055426419375659",
+ "-367687929171771055426419375659",
+ "31",
+ "-31",
+ "14038375921",
+ "-14038375921",
+ "1272562766857183500104765994611086188",
+ "-1272562766857183500104765994611086188",
+ "5395131009",
+ "-5395131009",
+ "34630426722601695384252351222",
+ "-34630426722601695384252351222",
+ "16553",
+ "-16553",
+ "11084856402443484655",
+ "-11084856402443484655",
+ "4497048086787",
+ "-4497048086787",
+ "32568631422747274845485",
+ "-32568631422747274845485",
+ "262201867566",
+ "-262201867566",
+ "3603196342",
+ "-3603196342",
+ "32228667062769096924274427075075163477",
+ "-32228667062769096924274427075075163477",
+ "693196875773858622",
+ "-693196875773858622",
+ "375838207",
+ "-375838207",
+ };
+
+ boost::filesystem::ifstream is(root / "cpp_int128_serial64.txt");
+ std::cout << "Testing cpp_int128_serial64.txt with T=" << typeid(T).name() << std::endl;
+ is.peek();
+ BOOST_CHECK(is.good());
+ boost::archive::text_iarchive ia(is);
+ for(unsigned i = 0; i < sizeof(text_array) / sizeof(text_array[0]); ++i)
+ {
+ try
+ {
+ T val;
+ ia >> val;
+ BOOST_CHECK_EQUAL(val, T(text_array[i]));
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+ }
+
+ boost::filesystem::ifstream is2(root / "cpp_int128_serial32.txt");
+ std::cout << "Testing cpp_int128_serial32.txt with T=" << typeid(T).name() << std::endl;
+ is2.peek();
+ BOOST_CHECK(is2.good());
+ boost::archive::text_iarchive ia2(is2);
+ for(unsigned i = 0; i < sizeof(text_array) / sizeof(text_array[0]); ++i)
+ {
+ try
+ {
+ T val;
+ ia2 >> val;
+ BOOST_CHECK_EQUAL(val, T(text_array[i]));
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+ }
+}
+
+template <class T>
+void test1024()
+{
+ using namespace boost::multiprecision;
+
+ const char* text_array[] = {
+ "199116592524695642085302184291534972104821103496846288349049702743455488423756865233534697793799569802866670981662356904270988544309072648691983459024063468708849163858558300444260495432655880504371186304007206097685833870163932928823469130199562442992",
+ "-199116592524695642085302184291534972104821103496846288349049702743455488423756865233534697793799569802866670981662356904270988544309072648691983459024063468708849163858558300444260495432655880504371186304007206097685833870163932928823469130199562442992",
+ "900593985907599133309438051698408853499625",
+ "-900593985907599133309438051698408853499625",
+ "1999874529133918706984995533406759076286565612920872635155416162504047196283513226624804224664215451103787410646351770677862238993331622942206185777454355265435238628326337253875004975201674224657309748975788962678417182798452737039836018579998386385843839364431684621083773420995",
+ "-1999874529133918706984995533406759076286565612920872635155416162504047196283513226624804224664215451103787410646351770677862238993331622942206185777454355265435238628326337253875004975201674224657309748975788962678417182798452737039836018579998386385843839364431684621083773420995",
+ "3984622917724894533997006216154563211907361459910318973090457115167740283771041468834030135879776466911564784436671674308756100400008317797390250537451443539509892669634431827675333761787371583170220547281395030543315815109821053621124047969069733480692532",
+ "-3984622917724894533997006216154563211907361459910318973090457115167740283771041468834030135879776466911564784436671674308756100400008317797390250537451443539509892669634431827675333761787371583170220547281395030543315815109821053621124047969069733480692532",
+ "3232318919913083002600961037970380935109",
+ "-3232318919913083002600961037970380935109",
+ "31063287987662242043295268121189412701158946907681323476663158129071217086758046387444487305432940821201595312001091888440038537739012180871591529361766112029121819690067004102150186222757899576567650712850787690098182019345491656562683693940513570929164008316791512277994247388861874767036310283032",
+ "-31063287987662242043295268121189412701158946907681323476663158129071217086758046387444487305432940821201595312001091888440038537739012180871591529361766112029121819690067004102150186222757899576567650712850787690098182019345491656562683693940513570929164008316791512277994247388861874767036310283032",
+ "551891699448873731005410917251662274314405815829594429768196331539904618164780043996715480720882109933893638976491102937306842056459564612366897777250359518885611699552940726261111066137661097166708199216229508773692203174236076409923801944639195246263554709054412966237162836449108",
+ "-551891699448873731005410917251662274314405815829594429768196331539904618164780043996715480720882109933893638976491102937306842056459564612366897777250359518885611699552940726261111066137661097166708199216229508773692203174236076409923801944639195246263554709054412966237162836449108",
+ "335366696367917734077308183957523963605452915968160245855756922088011",
+ "-335366696367917734077308183957523963605452915968160245855756922088011",
+ "516747586835313993425742202038941743391184401954870801073750702371672555461045948927255871449025485037535181895965683819085832663856528858925035833888106053116851498798112586463619731478072279623",
+ "-516747586835313993425742202038941743391184401954870801073750702371672555461045948927255871449025485037535181895965683819085832663856528858925035833888106053116851498798112586463619731478072279623",
+ "266698476906140000185555171296233707414383217616977634049828438937252114299738535337312010987594",
+ "-266698476906140000185555171296233707414383217616977634049828438937252114299738535337312010987594",
+ "1742740128166122778815789893503",
+ "-1742740128166122778815789893503",
+ "9724178186350731882862121812371154796147496227432585250532513144071077406366937493221094046638206862261142165156227060439590867019554905722401562859987295808994814401942",
+ "-9724178186350731882862121812371154796147496227432585250532513144071077406366937493221094046638206862261142165156227060439590867019554905722401562859987295808994814401942",
+ "78669120642064259414462176059292690866387576703089703385165678245138348243792107699164",
+ "-78669120642064259414462176059292690866387576703089703385165678245138348243792107699164",
+ "20818242466417733255855534640058104588616172091806661117670",
+ "-20818242466417733255855534640058104588616172091806661117670",
+ "4285795302257142023279557595265352619153550443850366091691013701573116876759469534501053640452948548428208657312557380072256478428969426137868124810140942586250078976271",
+ "-4285795302257142023279557595265352619153550443850366091691013701573116876759469534501053640452948548428208657312557380072256478428969426137868124810140942586250078976271",
+ "582604000062572804923757892130426287093735944713405746172610139142407500801888662008036220641936720421041737454101798928020195070207248743108048751731809924563484418793905813766932871306262995484219521766924610729803972858084042961494083239630079092513694133586118612073236719306830956983397633251414977754",
+ "-582604000062572804923757892130426287093735944713405746172610139142407500801888662008036220641936720421041737454101798928020195070207248743108048751731809924563484418793905813766932871306262995484219521766924610729803972858084042961494083239630079092513694133586118612073236719306830956983397633251414977754",
+ "15244715246682897475794438496539784661328456725495852276384174914973848673559621029178770197754207946620279120766931180917955631763555863913554513123775304647102553401018292948818112379521732233018874991323186887132286586138108436833252904592044083624364585617172057137372527454560587256796482346",
+ "-15244715246682897475794438496539784661328456725495852276384174914973848673559621029178770197754207946620279120766931180917955631763555863913554513123775304647102553401018292948818112379521732233018874991323186887132286586138108436833252904592044083624364585617172057137372527454560587256796482346",
+ "2162895251469736394155373749298870491019042810468937007114239114834965434324532372477043450771464135064045267665496385710799863273304844467062688237563757141742551576106360777697871874341148850361709074093167368004234386954371485929893986000482110508651966963502456247924228172005161782355542551339301544053",
+ "-2162895251469736394155373749298870491019042810468937007114239114834965434324532372477043450771464135064045267665496385710799863273304844467062688237563757141742551576106360777697871874341148850361709074093167368004234386954371485929893986000482110508651966963502456247924228172005161782355542551339301544053",
+ "1598979420051373213779067102428825857258960753077031910510837547866117340690938015398588975672437163347616966444506118889316096334851198017036793976867532695462600493286904022181865571035930456030653116939922200581824528814030699118802949188745959300411809512397337408237271478944565611123755566305",
+ "-1598979420051373213779067102428825857258960753077031910510837547866117340690938015398588975672437163347616966444506118889316096334851198017036793976867532695462600493286904022181865571035930456030653116939922200581824528814030699118802949188745959300411809512397337408237271478944565611123755566305",
+ "16972265575362228409871949532650408574482631199000565615577589612763707133618421955651468786564593364791708076161039592041831568321621510957105628787468779948579969928175938436896904310402554255504042135507367561049409553354413837219069382497010795375231533129182910408442845936728120354915635936898",
+ "-16972265575362228409871949532650408574482631199000565615577589612763707133618421955651468786564593364791708076161039592041831568321621510957105628787468779948579969928175938436896904310402554255504042135507367561049409553354413837219069382497010795375231533129182910408442845936728120354915635936898",
+ "6578842255326490592104075020940649831283616551660",
+ "-6578842255326490592104075020940649831283616551660",
+ "21683239365736925204171059844091235529220850759783534345105279221261364632686763920546656745741380892718845596049305277834093327836699551790128153290026473154694088594033146472697265593756340629571314831536187835497879992488",
+ "-21683239365736925204171059844091235529220850759783534345105279221261364632686763920546656745741380892718845596049305277834093327836699551790128153290026473154694088594033146472697265593756340629571314831536187835497879992488",
+ "82705023096235991529043144815694768432078642064433253929157769869969882959684824083733064475507849892985247689495254462302557886989778499312762640233348268023648079139590178633699092745191633841431797230103981800388019961016410936969661694491101422518397720383375579079432440889617406834440612316345",
+ "-82705023096235991529043144815694768432078642064433253929157769869969882959684824083733064475507849892985247689495254462302557886989778499312762640233348268023648079139590178633699092745191633841431797230103981800388019961016410936969661694491101422518397720383375579079432440889617406834440612316345",
+ "182226847821689839702269917063301483274601928154240894497051272590070015871573462612330908644446070144310876769617182637134479859518870301265103824148955731473219622377635930380500965073993471768564617573332989796817488809960475386339256946590978228792909775228312826022751099327081513175259103822462404",
+ "-182226847821689839702269917063301483274601928154240894497051272590070015871573462612330908644446070144310876769617182637134479859518870301265103824148955731473219622377635930380500965073993471768564617573332989796817488809960475386339256946590978228792909775228312826022751099327081513175259103822462404",
+ "5047815496286192631875136121482961684854345143375644371655857541129061222585290469283326779682311519927896776754142231238721306654582346292285270137340078762804088754913299932236143865279819208519978638432654788640663782736369734346995034407838300134017424349501474133378173964391719130592921725",
+ "-5047815496286192631875136121482961684854345143375644371655857541129061222585290469283326779682311519927896776754142231238721306654582346292285270137340078762804088754913299932236143865279819208519978638432654788640663782736369734346995034407838300134017424349501474133378173964391719130592921725",
+ "22536736652558441743601984420319740",
+ "-22536736652558441743601984420319740",
+ "327447539579270438292704828441807528233522606163188888154105354488483374541037700785580710347093169240568594799687437260325328617564586900214241043337",
+ "-327447539579270438292704828441807528233522606163188888154105354488483374541037700785580710347093169240568594799687437260325328617564586900214241043337",
+ "576979741896869527546425470124797714231020028752356356333225775983321871157857129520067018389689110139112275805449955044770978296650876883361429976430221447982628049254445385786013507310850518003697984237866336100952912645415854388908568224414707",
+ "-576979741896869527546425470124797714231020028752356356333225775983321871157857129520067018389689110139112275805449955044770978296650876883361429976430221447982628049254445385786013507310850518003697984237866336100952912645415854388908568224414707",
+ "755708508440402225863498155833596268190934339616501653733913066972752009318647339364141109604780235018474569114884922495929398288656171192074004071372424004589137926220537255429717898046520571796147507616408370836807000016827363741604261172604190",
+ "-755708508440402225863498155833596268190934339616501653733913066972752009318647339364141109604780235018474569114884922495929398288656171192074004071372424004589137926220537255429717898046520571796147507616408370836807000016827363741604261172604190",
+ "28048724901616569597172899970128263950954786552499389660847160202213362969018987235256727605",
+ "-28048724901616569597172899970128263950954786552499389660847160202213362969018987235256727605",
+ "173167043910755577166191737374818499849624950",
+ "-173167043910755577166191737374818499849624950",
+ "48",
+ "-48",
+ "18463009925253820920449684292621801312807473363997541122773157125946854399091765241363833326106601909427978296931833223183788301543",
+ "-18463009925253820920449684292621801312807473363997541122773157125946854399091765241363833326106601909427978296931833223183788301543",
+ "31164619961775222493397145731379707",
+ "-31164619961775222493397145731379707",
+ "1816096570786800455898299961483294949815377533170208282553387279497784999672154364831631933541855425071102266426105906939977630773287626616160771806315066360322795263086589842632991562964241768039371149116395673886243340566387264938743398973079853460222114803451321466708714785006727",
+ "-1816096570786800455898299961483294949815377533170208282553387279497784999672154364831631933541855425071102266426105906939977630773287626616160771806315066360322795263086589842632991562964241768039371149116395673886243340566387264938743398973079853460222114803451321466708714785006727",
+ "286006007227658140199584887789816189451349886507993355022297173895214040208905643298365570365441499922605759964419143497079708873231260957597650186760056343574600947950687835678669676590667783184666",
+ "-286006007227658140199584887789816189451349886507993355022297173895214040208905643298365570365441499922605759964419143497079708873231260957597650186760056343574600947950687835678669676590667783184666",
+ "18358404935882372210070601728050732884947257854425817110955248936260198050228809460271322586740505320746909919918679627100695097433534409202108416481259416338560209999440019558569552164395624923489329323411399738280552853025588689733098861097523",
+ "-18358404935882372210070601728050732884947257854425817110955248936260198050228809460271322586740505320746909919918679627100695097433534409202108416481259416338560209999440019558569552164395624923489329323411399738280552853025588689733098861097523",
+ "4134722455319345214940599980631794346657332870755359010455452155626594269008814501180484509879573967565890465226873255542092192607602138135728673418643645201766135430371744351074472506612976620427027592918016747144700651239945277040717933887512645490432181939225775342965",
+ "-4134722455319345214940599980631794346657332870755359010455452155626594269008814501180484509879573967565890465226873255542092192607602138135728673418643645201766135430371744351074472506612976620427027592918016747144700651239945277040717933887512645490432181939225775342965",
+ "54920807074733793884577529077249631831162657302693894027178095216669108940322624411834499900757281913727092273510264248215928273287884179463378853565331877701638585020489866284361829333257710807106023052404897652297092714031250456279772808462426750654556160069174238558295987347555132735561420095",
+ "-54920807074733793884577529077249631831162657302693894027178095216669108940322624411834499900757281913727092273510264248215928273287884179463378853565331877701638585020489866284361829333257710807106023052404897652297092714031250456279772808462426750654556160069174238558295987347555132735561420095",
+ "399265560197794252401617167580850085282220794173216714093253564006986475971645145366672323528680289510504223856530994241334812625576574784650620927403732184",
+ "-399265560197794252401617167580850085282220794173216714093253564006986475971645145366672323528680289510504223856530994241334812625576574784650620927403732184",
+ "31621966437344909804014117858935966136505781977117316516659445266533686603282356943749115958158394083237531612132476116831423261618528802877894233115470068483988764082981116838784931515017818535550110918",
+ "-31621966437344909804014117858935966136505781977117316516659445266533686603282356943749115958158394083237531612132476116831423261618528802877894233115470068483988764082981116838784931515017818535550110918",
+ "1606985215548409716503362538444761880543201213399618535731027289265156579177336621807120077949866098802813413615868269176538634784089984273973440941833767736805385007543715097934592673987261460898859324638806817938705575451364443949120235151257544",
+ "-1606985215548409716503362538444761880543201213399618535731027289265156579177336621807120077949866098802813413615868269176538634784089984273973440941833767736805385007543715097934592673987261460898859324638806817938705575451364443949120235151257544",
+ "285683190193",
+ "-285683190193",
+ "8061697887583266465310973659826347597097558972448901485453524610917952084739066859639084715521710210973596165921",
+ "-8061697887583266465310973659826347597097558972448901485453524610917952084739066859639084715521710210973596165921",
+ "6219223289787909965098172528033914428025426344931365048240610134846930087708486382224526942350364117413020461482722657384885935391455080562169318712277658961972965925941924792948343565934378704158420349097774074011993945850670748056251470218258676908828627471885",
+ "-6219223289787909965098172528033914428025426344931365048240610134846930087708486382224526942350364117413020461482722657384885935391455080562169318712277658961972965925941924792948343565934378704158420349097774074011993945850670748056251470218258676908828627471885",
+ "697258758163542187076749918900636966609908531786609361940000240519",
+ "-697258758163542187076749918900636966609908531786609361940000240519",
+ "1046098084657831111818175325887422175023162118504873435909952452494852374571808810176243062515313047215471029884493246457829292480590847793716267629027995295229796393654811459791589585169546388254745922345946744655803804613032804268083425871981695717315478983498539611218241664930157839795",
+ "-1046098084657831111818175325887422175023162118504873435909952452494852374571808810176243062515313047215471029884493246457829292480590847793716267629027995295229796393654811459791589585169546388254745922345946744655803804613032804268083425871981695717315478983498539611218241664930157839795",
+ "2484434366380099043156299869169661345741558449531766681226478781813341982338634464499146134940119727735818398667362505498484418919464161091166892386016324225384189876252889149071097656823108497551033588357003722",
+ "-2484434366380099043156299869169661345741558449531766681226478781813341982338634464499146134940119727735818398667362505498484418919464161091166892386016324225384189876252889149071097656823108497551033588357003722",
+ "308286676308193197031410043742676292328591745213481644733897249474373496522533072738438449939815750248898922885290011346375849968712988888608255565930075126704466104946675008196710396726585487442780152614905677",
+ "-308286676308193197031410043742676292328591745213481644733897249474373496522533072738438449939815750248898922885290011346375849968712988888608255565930075126704466104946675008196710396726585487442780152614905677",
+ "1578729146192540123786163537348004400750916878495381648015362308555564957146975794392752284685500828245809393902172165166570",
+ "-1578729146192540123786163537348004400750916878495381648015362308555564957146975794392752284685500828245809393902172165166570",
+ "753635193017654981561112585877756433926946338453536513833144933556077262395793429496030381482043731560006145122148417766008778064151654898372617208349138764363280371778703526306929669285807019015087056633479893959366709941765720251266",
+ "-753635193017654981561112585877756433926946338453536513833144933556077262395793429496030381482043731560006145122148417766008778064151654898372617208349138764363280371778703526306929669285807019015087056633479893959366709941765720251266",
+ "1023056796494340203037740397557237363844811192683830278749294166121707658052654599305485368530300819052987687826810994785603794931372101763295285975973124930171986523205085256147491724466952116413750593896486505408297359237231028",
+ "-1023056796494340203037740397557237363844811192683830278749294166121707658052654599305485368530300819052987687826810994785603794931372101763295285975973124930171986523205085256147491724466952116413750593896486505408297359237231028",
+ "7279368955234841237989689629914561920962002431310686381873314222568640123479287155739276546923764190325442924090937031964044572030997024902955450149096922769606827151526955803170246823486172000556133026264782831784752812128580068",
+ "-7279368955234841237989689629914561920962002431310686381873314222568640123479287155739276546923764190325442924090937031964044572030997024902955450149096922769606827151526955803170246823486172000556133026264782831784752812128580068",
+ "424617380576309116241807458648692744450386557212868763669113075114477578778872841574527732081207492431831870311301491048670446826911900920994644694",
+ "-424617380576309116241807458648692744450386557212868763669113075114477578778872841574527732081207492431831870311301491048670446826911900920994644694",
+ "7046686003127119093099476961562427444038611347486414217752094860417190797774076723407713585872307944642824878964077822345",
+ "-7046686003127119093099476961562427444038611347486414217752094860417190797774076723407713585872307944642824878964077822345",
+ "19949119701600514825288852843654302777880460105733015351003691242645123465142555331932685718332487926262997425529449487067278953683",
+ "-19949119701600514825288852843654302777880460105733015351003691242645123465142555331932685718332487926262997425529449487067278953683",
+ "16469140092633375339743693580164888653727421730589027379476942842394844761208703483677054585417793177811566576822391363212778421263249183342676114446881502895872964885316569671443951931393367071689754985",
+ "-16469140092633375339743693580164888653727421730589027379476942842394844761208703483677054585417793177811566576822391363212778421263249183342676114446881502895872964885316569671443951931393367071689754985",
+ "1061702816480363701187846694728343109042150409401045998",
+ "-1061702816480363701187846694728343109042150409401045998",
+ "7391047600385760425390763210856013417540808412389899",
+ "-7391047600385760425390763210856013417540808412389899",
+ "3720217478561502591416009227591582869882982470098168796813426264578076670286029029195560760567",
+ "-3720217478561502591416009227591582869882982470098168796813426264578076670286029029195560760567",
+ "66106892589637039037744676327200772291368517688108041167197715930935273497569759111332854815299471155925869011997907566713674005971100914739364454164984587128896600583993354569858550495377843782520710717979164977585093",
+ "-66106892589637039037744676327200772291368517688108041167197715930935273497569759111332854815299471155925869011997907566713674005971100914739364454164984587128896600583993354569858550495377843782520710717979164977585093",
+ "655105381318829622535325161492573443039473032159228692157069475333288969363672255837498503071757247193471076794288004751047135238604867298249068617214132553959376152373616588040808707670098140225261882200984527500899566180951300745344526414599508",
+ "-655105381318829622535325161492573443039473032159228692157069475333288969363672255837498503071757247193471076794288004751047135238604867298249068617214132553959376152373616588040808707670098140225261882200984527500899566180951300745344526414599508",
+ "32279098297",
+ "-32279098297",
+ "91236285260894969491370094562444170610185292123928049180398654028165920269699400153752501142438076",
+ "-91236285260894969491370094562444170610185292123928049180398654028165920269699400153752501142438076",
+ "76148543022827828542260034575767140554118312303651220784462009876431985956698652362044",
+ "-76148543022827828542260034575767140554118312303651220784462009876431985956698652362044",
+ "83588868584829923837376678742649596503169974719002042708417338297148455364317505115231903770625036463360146776147319869172298475847924715607135999201658410499586149882123548133278995113231076277183588359228055211291455848766205373827838498451914146847385535315038611426",
+ "-83588868584829923837376678742649596503169974719002042708417338297148455364317505115231903770625036463360146776147319869172298475847924715607135999201658410499586149882123548133278995113231076277183588359228055211291455848766205373827838498451914146847385535315038611426",
+ "963957921647213",
+ "-963957921647213",
+ "13301565202923219609572812103802050473736468733",
+ "-13301565202923219609572812103802050473736468733",
+ "4746350713999103687568954691814",
+ "-4746350713999103687568954691814",
+ "2001142907044963200442678450863815898813903676660733058871895239756077633074421909013654237542517301596550011117510574893770558703407744684777702961205416292826384730912647565673208707968211244040320246494312087239093502776249390829799552970184550131203169359608726456455152480928583576591394902496106626144",
+ "-2001142907044963200442678450863815898813903676660733058871895239756077633074421909013654237542517301596550011117510574893770558703407744684777702961205416292826384730912647565673208707968211244040320246494312087239093502776249390829799552970184550131203169359608726456455152480928583576591394902496106626144",
+ "107594281614292318387817778890700162347725421105656330924973717308436245329157596183845769858366750239404646287651057292302740816759738471158092800874582432179112119211566698620828469639621669897519755264598100204713172616980523260714264267451063089420215",
+ "-107594281614292318387817778890700162347725421105656330924973717308436245329157596183845769858366750239404646287651057292302740816759738471158092800874582432179112119211566698620828469639621669897519755264598100204713172616980523260714264267451063089420215",
+ "1748285028280968559027056769483145164710362048627307365465656148480028444958644903475995728328069875726460568057080202853997524099097288749318318801615657840242878599655077486108729249226195564937733374638566648902211364103190286203200478747078106163053",
+ "-1748285028280968559027056769483145164710362048627307365465656148480028444958644903475995728328069875726460568057080202853997524099097288749318318801615657840242878599655077486108729249226195564937733374638566648902211364103190286203200478747078106163053",
+ "11460180193889065606722132385926501525431980106546682247601052575855000134486061731618687473242633808411918689848577390823351808790715520481001965421879800810352399655561482898353748786253207752078326991084961012083",
+ "-11460180193889065606722132385926501525431980106546682247601052575855000134486061731618687473242633808411918689848577390823351808790715520481001965421879800810352399655561482898353748786253207752078326991084961012083",
+ "574927035874041759213679385423821561867",
+ "-574927035874041759213679385423821561867",
+ "120643345454198941508563017089006360092589256126170227342940319190269214269775023269721267117406618",
+ "-120643345454198941508563017089006360092589256126170227342940319190269214269775023269721267117406618",
+ "43211052397169822368769320044098366176065820670381470825125490923898893035078574715878390619044493658716106759475917845349930472007385257270090791727486873231922936861573077702054193955871675235660795444516942345577520753954381850029768",
+ "-43211052397169822368769320044098366176065820670381470825125490923898893035078574715878390619044493658716106759475917845349930472007385257270090791727486873231922936861573077702054193955871675235660795444516942345577520753954381850029768",
+ "9844479373748707013063227964029459596247847016794211846228318515960354387966950301750833297921955723417061013994092483915173465284502461089399372968661262420490350455873655690633576331503541999665999411319072898423762904939498903689838493823091884957816736065194017711554932378966207638596446",
+ "-9844479373748707013063227964029459596247847016794211846228318515960354387966950301750833297921955723417061013994092483915173465284502461089399372968661262420490350455873655690633576331503541999665999411319072898423762904939498903689838493823091884957816736065194017711554932378966207638596446",
+ "1549569662025720311251404569332722105893198679127923795355656951920288528581705427103792360667449800130523485559533763978458224547356178202688985769505",
+ "-1549569662025720311251404569332722105893198679127923795355656951920288528581705427103792360667449800130523485559533763978458224547356178202688985769505",
+ "36315742657",
+ "-36315742657",
+ "8921164792041877158829344493852966827789686565858639796763485931102357440731861058782552324538917399828752311227018705861210803742330995498617328892413590387831390338234562492080836551321361310716484078814",
+ "-8921164792041877158829344493852966827789686565858639796763485931102357440731861058782552324538917399828752311227018705861210803742330995498617328892413590387831390338234562492080836551321361310716484078814",
+ "3564428449813842615037566955460603551635405941961408429533479906924825068973042239756262262787799344453371579266807953907224412476869508",
+ "-3564428449813842615037566955460603551635405941961408429533479906924825068973042239756262262787799344453371579266807953907224412476869508",
+ "803208608149818042371281509635155439483",
+ "-803208608149818042371281509635155439483",
+ "4866189324296232234061833332746205890326919472641667725283106186358795590420827732306960443344464312769726502055107509",
+ "-4866189324296232234061833332746205890326919472641667725283106186358795590420827732306960443344464312769726502055107509",
+ "207298564235033398879052037508717471071493511497187540585110196743",
+ "-207298564235033398879052037508717471071493511497187540585110196743",
+ "193717918520883498325012985935003601959305178471191450716579245791510632312265720137365047580022087853055977679260908512014775411818562756581294466392949427067700253919565514470785071872659525583000795812531290669561365815697655594188906",
+ "-193717918520883498325012985935003601959305178471191450716579245791510632312265720137365047580022087853055977679260908512014775411818562756581294466392949427067700253919565514470785071872659525583000795812531290669561365815697655594188906",
+ "2437877491739207",
+ "-2437877491739207",
+ "37013774102202564305419053038604891745828779816673570038156288209445014156533018002446399548329104265253840467051874818175306349349752734572291264362672503100264435752942371629071789078883405034467875813374259058124047248097835249024123072756933",
+ "-37013774102202564305419053038604891745828779816673570038156288209445014156533018002446399548329104265253840467051874818175306349349752734572291264362672503100264435752942371629071789078883405034467875813374259058124047248097835249024123072756933",
+ "354494755327",
+ "-354494755327",
+ "11780642893082070770985419994433169541426957824422257433844",
+ "-11780642893082070770985419994433169541426957824422257433844",
+ "485430660154648600595640793061533874664308049695155979729256186778257302321647241550949220266916178753497849914452979205318162",
+ "-485430660154648600595640793061533874664308049695155979729256186778257302321647241550949220266916178753497849914452979205318162",
+ "23858852603627264837843140314865296322097028936336850188878465502728409524610276592851077626292364546252755103916928846389671162429425418906991891502973",
+ "-23858852603627264837843140314865296322097028936336850188878465502728409524610276592851077626292364546252755103916928846389671162429425418906991891502973",
+ "2073475025890625790912875485180905813499103080617022204722722710095631077512485124044881139986135538169181486312704584071614904004373594716419",
+ "-2073475025890625790912875485180905813499103080617022204722722710095631077512485124044881139986135538169181486312704584071614904004373594716419",
+ "15280710757061816529388583850582811170979066299366854920512818520549969116440063183787310498271091672343434592650388724950511822972092076",
+ "-15280710757061816529388583850582811170979066299366854920512818520549969116440063183787310498271091672343434592650388724950511822972092076",
+ "6382485371693619169022055595031229091762638736860010414889365673981891166426242136610234221929171470107008843300114050380584829581671837693187024514818",
+ "-6382485371693619169022055595031229091762638736860010414889365673981891166426242136610234221929171470107008843300114050380584829581671837693187024514818",
+ "12185224224701673175361331319115762816895575796767843658049699617134858039026831564288739190981827007791493862865956911735574421879562096311558676154252796632277351699205162505700258194809563580445507",
+ "-12185224224701673175361331319115762816895575796767843658049699617134858039026831564288739190981827007791493862865956911735574421879562096311558676154252796632277351699205162505700258194809563580445507",
+ "34003980273948488873087243030302546934071096333462110121575903766367670827215796429777573314114296018716373089777559546454127470648315079633590832262220530391541976999162677539194732289306375110039265026554808460597438607169664283497662076280786",
+ "-34003980273948488873087243030302546934071096333462110121575903766367670827215796429777573314114296018716373089777559546454127470648315079633590832262220530391541976999162677539194732289306375110039265026554808460597438607169664283497662076280786",
+ "122848198938353223588037911092014612429998780961520627899382186456109045142826399845219049519395028055840868305519753136489752495357572137972700299899629238691174342998161949671331013802430679284465951931850871392212632",
+ "-122848198938353223588037911092014612429998780961520627899382186456109045142826399845219049519395028055840868305519753136489752495357572137972700299899629238691174342998161949671331013802430679284465951931850871392212632",
+ "43537967438743700082839955990027575248714598937547106788531846714509188167960975769453819977500278194590313507781727399526395127656584060420218121352097776308452702567298202679209230473699619650828718821287113120498048345913575657082695406163703126042367182026511481872506111256791596",
+ "-43537967438743700082839955990027575248714598937547106788531846714509188167960975769453819977500278194590313507781727399526395127656584060420218121352097776308452702567298202679209230473699619650828718821287113120498048345913575657082695406163703126042367182026511481872506111256791596",
+ "58406767675650075287505789516356411545831826432139397101494864325157903449602707567656548116973052773130530151058837990354645940288559829449340220508188691146281802100553666536211206823508084744153463134410959296949868335640749454837",
+ "-58406767675650075287505789516356411545831826432139397101494864325157903449602707567656548116973052773130530151058837990354645940288559829449340220508188691146281802100553666536211206823508084744153463134410959296949868335640749454837",
+ "845873210129906374353022076245969947869460127750482252356111232286849327159845231580563758295137285209548293776383830614553566014483472912208993044958366148170162204310293796785477227702675371216304957228188615867576567406231041038281756292397397561",
+ "-845873210129906374353022076245969947869460127750482252356111232286849327159845231580563758295137285209548293776383830614553566014483472912208993044958366148170162204310293796785477227702675371216304957228188615867576567406231041038281756292397397561",
+ "53588224463377221082233930622411910641801456988689291134720826079004949443094787414435",
+ "-53588224463377221082233930622411910641801456988689291134720826079004949443094787414435",
+ "72112722851930798700228005210608826370783262851441860040831117968729809788108346159403319971018904246301591088717098607465649205797470097967252119620134427778008686902310907006410363397508152328805949858597088819284277",
+ "-72112722851930798700228005210608826370783262851441860040831117968729809788108346159403319971018904246301591088717098607465649205797470097967252119620134427778008686902310907006410363397508152328805949858597088819284277",
+ "641918660703774309882129738043218549030513645540611429936046631082566036061356980177384685321883957675631751681520848096394297317163463488891570190724496654177980091225725954578443264041706056677969812886935701",
+ "-641918660703774309882129738043218549030513645540611429936046631082566036061356980177384685321883957675631751681520848096394297317163463488891570190724496654177980091225725954578443264041706056677969812886935701",
+ "30",
+ "-30",
+ "6394573041749544637932142063252660876011988517352129759808021807615786602503160259195561963658103141713195046053277921040817887800559226509891982140334607813922841396821838502087774297750475588617168795",
+ "-6394573041749544637932142063252660876011988517352129759808021807615786602503160259195561963658103141713195046053277921040817887800559226509891982140334607813922841396821838502087774297750475588617168795",
+ "1786466222561817425577249373742981037566301146961591730677121116610853649457567467081637483584212899635954801237845898555279493690732411882920175456222801107258417531725553455448259056866349458253419178431317512242742160",
+ "-1786466222561817425577249373742981037566301146961591730677121116610853649457567467081637483584212899635954801237845898555279493690732411882920175456222801107258417531725553455448259056866349458253419178431317512242742160",
+ "137832029750529182794342751962197941412491800492104",
+ "-137832029750529182794342751962197941412491800492104",
+ "8108038128324706368474080686463548136481517039342729533539080912561382244733668445971779623479147878923993970600643926905142316004585446689923640217524203592135814813370649929971097550423245537858260",
+ "-8108038128324706368474080686463548136481517039342729533539080912561382244733668445971779623479147878923993970600643926905142316004585446689923640217524203592135814813370649929971097550423245537858260",
+ "5002261098184392173934780113066967242",
+ "-5002261098184392173934780113066967242",
+ "690951335667913995812417540653386648776452918801140879728454196755039750563977820072442505506359908874725801630758561609054355988759175228289",
+ "-690951335667913995812417540653386648776452918801140879728454196755039750563977820072442505506359908874725801630758561609054355988759175228289",
+ "10674213497798883899476403327832261239905267095517429500221095458852845305968864392299051608409658803957443554649236067724400487971044164121242198029786220",
+ "-10674213497798883899476403327832261239905267095517429500221095458852845305968864392299051608409658803957443554649236067724400487971044164121242198029786220",
+ "17992446102498398809906415490084711513529803098403245836231064924343042871622653363618957583240979467823413823373231710836844132776133330230504849252207785917957852664671150869449421757327447929003162434828411052366071580989788644644058346",
+ "-17992446102498398809906415490084711513529803098403245836231064924343042871622653363618957583240979467823413823373231710836844132776133330230504849252207785917957852664671150869449421757327447929003162434828411052366071580989788644644058346",
+ "33842687090178160518628086932775600899160163731425276680317104716407292755478424345380082755988441733647290183079908808136196734777398636133355822624652625917768049717031860506349867723992592655421369270624555109106177714680336653018611913032875963068852500326353648887921416851020395037162987766",
+ "-33842687090178160518628086932775600899160163731425276680317104716407292755478424345380082755988441733647290183079908808136196734777398636133355822624652625917768049717031860506349867723992592655421369270624555109106177714680336653018611913032875963068852500326353648887921416851020395037162987766",
+ "1054083826397869852970042065169251590328234555837539271102624160027471295945233271106117930450857346874100524858325086710499923040919634021718345296558298025504382070214470223730",
+ "-1054083826397869852970042065169251590328234555837539271102624160027471295945233271106117930450857346874100524858325086710499923040919634021718345296558298025504382070214470223730",
+ "136407237437852413879681494779911076041207111591826209650287776324941155126675066585977968663006698647245",
+ "-136407237437852413879681494779911076041207111591826209650287776324941155126675066585977968663006698647245",
+ "2224879942826211211569920900726660211869323323310097306306571308813333981073744504097938050565302837264530253763057896699924896596092066791400879438413472679293844669326318441711505238433328261842523388469632517312478257062414756535170295711651910005290949014898120581894",
+ "-2224879942826211211569920900726660211869323323310097306306571308813333981073744504097938050565302837264530253763057896699924896596092066791400879438413472679293844669326318441711505238433328261842523388469632517312478257062414756535170295711651910005290949014898120581894",
+ "4047288308565310307500509489225346109923522467464514519968591592559230455772855713422415453581291554663695129034041054508221015627588797163542760075301595269083019308332323602089140",
+ "-4047288308565310307500509489225346109923522467464514519968591592559230455772855713422415453581291554663695129034041054508221015627588797163542760075301595269083019308332323602089140",
+ "1035816948031741587849086409216542916935656696246164119153928232713320856714123588940050533131790722677035036233284471386922732645880058503610308346951059222695446014860710224009856786160873437306753478940623814638264314179274958950671363159961289293",
+ "-1035816948031741587849086409216542916935656696246164119153928232713320856714123588940050533131790722677035036233284471386922732645880058503610308346951059222695446014860710224009856786160873437306753478940623814638264314179274958950671363159961289293",
+ "1718216153801609870534260896130470102834028900689159827595233108230047",
+ "-1718216153801609870534260896130470102834028900689159827595233108230047",
+ "157320",
+ "-157320",
+ "4922208547816973044459635133646703969879372571533096054296883386644122380530951726299847426987732042397595779976830474678726947018304354845591378517358359470056483109237714380888286233563680472388849805778688479350769638569123934902",
+ "-4922208547816973044459635133646703969879372571533096054296883386644122380530951726299847426987732042397595779976830474678726947018304354845591378517358359470056483109237714380888286233563680472388849805778688479350769638569123934902",
+ "3067476257285335874566823333688543442128450810079871657467124491543338509419265027748695014643813306181544035536165512867635982606378678645467114585754422748255288790715628747169903578478381870157776988838327310364853622786578500012302428307039672498275",
+ "-3067476257285335874566823333688543442128450810079871657467124491543338509419265027748695014643813306181544035536165512867635982606378678645467114585754422748255288790715628747169903578478381870157776988838327310364853622786578500012302428307039672498275",
+ "883397505237211649947418585007890070022882946801242047716792933816916920312758",
+ "-883397505237211649947418585007890070022882946801242047716792933816916920312758",
+ "1100016596294277930396702074837291475694950629762363744759571589030108139933298189695770187024515803626715526690351811923084433342467648792302262756272887683638924910835436501074742486120762849764143752164258427412169550392618539176353678199434066032915",
+ "-1100016596294277930396702074837291475694950629762363744759571589030108139933298189695770187024515803626715526690351811923084433342467648792302262756272887683638924910835436501074742486120762849764143752164258427412169550392618539176353678199434066032915",
+ "3318653243827753930075076609367167950215271547197165956541578677095035789105230285577300537970253024380004869448887191421072498566168883197146749684037295491",
+ "-3318653243827753930075076609367167950215271547197165956541578677095035789105230285577300537970253024380004869448887191421072498566168883197146749684037295491",
+ "18917325422442253597680054225840324956976833511185836470606776355469702018395215498115502098244359450586779118546945991879765584863693947599352077215049091215099400154668038964846442469328921458041398569034401548536622210828439622386945359553017072968575829651399459030775837160233158886103",
+ "-18917325422442253597680054225840324956976833511185836470606776355469702018395215498115502098244359450586779118546945991879765584863693947599352077215049091215099400154668038964846442469328921458041398569034401548536622210828439622386945359553017072968575829651399459030775837160233158886103",
+ "254366786216910043665990950804997231945088908428747001184159373059058493118875749329803453882635522927040165937386417763335659992218458086511885522609981363333096153519757022667758401739961262948319999739472528794701",
+ "-254366786216910043665990950804997231945088908428747001184159373059058493118875749329803453882635522927040165937386417763335659992218458086511885522609981363333096153519757022667758401739961262948319999739472528794701",
+ "37544442396527426899195446849672655465276344502770712178079384432684510232491164260359865664795991038222782506894463672347582854",
+ "-37544442396527426899195446849672655465276344502770712178079384432684510232491164260359865664795991038222782506894463672347582854",
+ "15673578372504731899692149900135775418224632075238646337867467957107034530818946478167665455128984412394389268797819166734444989508179006505772666514111230952795610254140089645092544526629237404643329919824803563866840859270664303879742294839213766102351871211663636813556965",
+ "-15673578372504731899692149900135775418224632075238646337867467957107034530818946478167665455128984412394389268797819166734444989508179006505772666514111230952795610254140089645092544526629237404643329919824803563866840859270664303879742294839213766102351871211663636813556965",
+ "27481560151479303283253590172063634693210359375791056643367262359056676411581745877899312410880682306069203702180378974272137310962",
+ "-27481560151479303283253590172063634693210359375791056643367262359056676411581745877899312410880682306069203702180378974272137310962",
+ "59764850084546321076270115679381459961266663920938595034931337715038895288728780241940147905268936247355365797839452044959717373177405268037975305459371499345817108953258614141073965011536848191412758145014880201415800076045236677519189441266640929126443802253464497061850704733496580039504966534",
+ "-59764850084546321076270115679381459961266663920938595034931337715038895288728780241940147905268936247355365797839452044959717373177405268037975305459371499345817108953258614141073965011536848191412758145014880201415800076045236677519189441266640929126443802253464497061850704733496580039504966534",
+ "236346389410506959600114343181511587020869234266420558654132661642154355113727359542557485608210379840787154866691122790684707204957449484562815548156526563035046035495563526969340",
+ "-236346389410506959600114343181511587020869234266420558654132661642154355113727359542557485608210379840787154866691122790684707204957449484562815548156526563035046035495563526969340",
+ "8815935276532889936007554615797399527468399687615548740700254897861864429815615560728972825692565852981716178182277189313249729477257089767951370396136769451014576455113",
+ "-8815935276532889936007554615797399527468399687615548740700254897861864429815615560728972825692565852981716178182277189313249729477257089767951370396136769451014576455113",
+ "15766842373922966734945972936934487778733908393732",
+ "-15766842373922966734945972936934487778733908393732",
+ "6595752830737826074851600247398704243439581",
+ "-6595752830737826074851600247398704243439581",
+ "883607119507167020680444599092885224088612050268051636998275726360170767104266391951078564780752590643878108107048593830807317310688757872408858062530074042278525133611486569437859217448040432508288719355266779546627635013182590336527",
+ "-883607119507167020680444599092885224088612050268051636998275726360170767104266391951078564780752590643878108107048593830807317310688757872408858062530074042278525133611486569437859217448040432508288719355266779546627635013182590336527",
+ "33694907409791755762655404952802940988899691249",
+ "-33694907409791755762655404952802940988899691249",
+ "323333915936767999634844119809319135460509879311229599308354939953168279",
+ "-323333915936767999634844119809319135460509879311229599308354939953168279",
+ "109533461242727456317187321637480456637352670377446387229311720642342270936669079",
+ "-109533461242727456317187321637480456637352670377446387229311720642342270936669079",
+ "1385911310557366456440256909064094890695543397784942861180089270740259394708721160036253862597269877264942393141524860354011688095362554758164667579347793400229024555480224078270156224230580104617746710199310164986752840215359839845498564497854670854",
+ "-1385911310557366456440256909064094890695543397784942861180089270740259394708721160036253862597269877264942393141524860354011688095362554758164667579347793400229024555480224078270156224230580104617746710199310164986752840215359839845498564497854670854",
+ "29774115054799535833930768716897017350284486426186383584162324318962025027678962428276603554895692141466695531519088683268104074739324371129542465293986416152097350166384444454811692728264434003142202934260616565733198831279676615440572524973775003086833767426",
+ "-29774115054799535833930768716897017350284486426186383584162324318962025027678962428276603554895692141466695531519088683268104074739324371129542465293986416152097350166384444454811692728264434003142202934260616565733198831279676615440572524973775003086833767426",
+ "74696367101640724890251441072354635571976155536130046140237438589798381789554793148406818355661257862104683281722318017709028012486180422540427675980472782459468162926394976288225872264456693023891477557259759177462765826175659413065496505969367440547828089465241517425279607801825661125137502490209352550",
+ "-74696367101640724890251441072354635571976155536130046140237438589798381789554793148406818355661257862104683281722318017709028012486180422540427675980472782459468162926394976288225872264456693023891477557259759177462765826175659413065496505969367440547828089465241517425279607801825661125137502490209352550",
+ "1204196594639385922414846449687106633371016123988162000948048507502126642148118",
+ "-1204196594639385922414846449687106633371016123988162000948048507502126642148118",
+ "846833858170919771038203149272750341572762713657689308208261686002409383861625765452744323828942233333",
+ "-846833858170919771038203149272750341572762713657689308208261686002409383861625765452744323828942233333",
+ "182161452241374047273456867899515861555380897442569148219001470598361338903885535593714631480225974535244035939079461012689178031931288032512442603044979036705163872936026346865633839654342088060028594652808131903888369770826412770233292335398149959646",
+ "-182161452241374047273456867899515861555380897442569148219001470598361338903885535593714631480225974535244035939079461012689178031931288032512442603044979036705163872936026346865633839654342088060028594652808131903888369770826412770233292335398149959646",
+ "982677520230623904675071524585093908331832014895485448777250229533226440326748097093798644810",
+ "-982677520230623904675071524585093908331832014895485448777250229533226440326748097093798644810",
+ "2470642728099219780778259687407342337194729387462688122808418202258274933287",
+ "-2470642728099219780778259687407342337194729387462688122808418202258274933287",
+ "21642",
+ "-21642",
+ "28109476527429648692470007325789564480573483619310804793750563939329019602047743826734114282192488430735600284398989680911911960943283501628534649887574302741936678165842670818369902783900366003306472118461382044113045381589251197206074842928328220219584087542112389580462137108895790086",
+ "-28109476527429648692470007325789564480573483619310804793750563939329019602047743826734114282192488430735600284398989680911911960943283501628534649887574302741936678165842670818369902783900366003306472118461382044113045381589251197206074842928328220219584087542112389580462137108895790086",
+ "24473934394139795039432356490797923225705279667816043556538102097065",
+ "-24473934394139795039432356490797923225705279667816043556538102097065",
+ "967666937415492520370655115944840613051857445576119169258498049770608556022671644163127742796054969198094856",
+ "-967666937415492520370655115944840613051857445576119169258498049770608556022671644163127742796054969198094856",
+ "8777670436928270404636672844045971126192291209566648012730356503650458463860437163044293866063131499188106079322582985846405009457295181485284286775546965040263973340573887093705724765371051485505998527923498980801571623582212444207027545811844533625560957194790459778850062900748",
+ "-8777670436928270404636672844045971126192291209566648012730356503650458463860437163044293866063131499188106079322582985846405009457295181485284286775546965040263973340573887093705724765371051485505998527923498980801571623582212444207027545811844533625560957194790459778850062900748",
+ "10519677007822794739900735125229787943972331835720269482799977",
+ "-10519677007822794739900735125229787943972331835720269482799977",
+ "1590072871278743537180333082100146324295480429097445157011611168462260468069742799519303496051313133424632939883615906533434106640128123864165917007171699524724790769928823375793283671051479570198286895253998686473352852617282646423776591164499455695311138248299",
+ "-1590072871278743537180333082100146324295480429097445157011611168462260468069742799519303496051313133424632939883615906533434106640128123864165917007171699524724790769928823375793283671051479570198286895253998686473352852617282646423776591164499455695311138248299",
+ "383577258388475022706431955525247573599499248581278423720457780337892379126935",
+ "-383577258388475022706431955525247573599499248581278423720457780337892379126935",
+ "4092674502161259843824589343985242161447501042778080381002610852870457757982768392530808942900298511043488661625193784801456963642409098266685508736530379429664593489447947572985105744943017018734265426997872693998175650632205202701888817395372790067319643794599452089403576233527127077671169622",
+ "-4092674502161259843824589343985242161447501042778080381002610852870457757982768392530808942900298511043488661625193784801456963642409098266685508736530379429664593489447947572985105744943017018734265426997872693998175650632205202701888817395372790067319643794599452089403576233527127077671169622",
+ "13404427613900927247182634952369430867149749267930075884187025351198408344520192279603454195813154024830997527858376982434391797362547445527455503408360391999256823815839930266546427915841779",
+ "-13404427613900927247182634952369430867149749267930075884187025351198408344520192279603454195813154024830997527858376982434391797362547445527455503408360391999256823815839930266546427915841779",
+ "1782731694176936358469465341561020425473553201468123279175729849215977910638614519237563454448377541145186523281923996935231617014737050458102419525422740666362815640052502503060273650753054955785368306923652680382227789211754118567371586934",
+ "-1782731694176936358469465341561020425473553201468123279175729849215977910638614519237563454448377541145186523281923996935231617014737050458102419525422740666362815640052502503060273650753054955785368306923652680382227789211754118567371586934",
+ "71445070949104597011738157784103420085714634511010244724089831548057084941763190363056184849082451693612273802898122477866754965092090652561708550",
+ "-71445070949104597011738157784103420085714634511010244724089831548057084941763190363056184849082451693612273802898122477866754965092090652561708550",
+ "29824403422520048745171796949849941396331286906646046322404644703962912292598789686250791183932008392905170486032131129329348882564734443795544653928497362304776093305233881623231624358963434097033411434801644527775046832916455013625115699965097251269229855092992005057236242615322851235046388965677957662",
+ "-29824403422520048745171796949849941396331286906646046322404644703962912292598789686250791183932008392905170486032131129329348882564734443795544653928497362304776093305233881623231624358963434097033411434801644527775046832916455013625115699965097251269229855092992005057236242615322851235046388965677957662",
+ "3305915750647269729664177438631754300633043385617699516297426765949911376314744190602062381040796872234391958",
+ "-3305915750647269729664177438631754300633043385617699516297426765949911376314744190602062381040796872234391958",
+ "3478784122562389625603",
+ "-3478784122562389625603",
+ "92086546733522598295324541515522297712847163647680019382995445215746554554174953976307228051786981849535290733112403050554954140651771516865900059530798935625857134201153825877196274813040051834092674214044263432436343855130586740109759258782054166065929",
+ "-92086546733522598295324541515522297712847163647680019382995445215746554554174953976307228051786981849535290733112403050554954140651771516865900059530798935625857134201153825877196274813040051834092674214044263432436343855130586740109759258782054166065929",
+ "65957872354116509297400621319564903702253130516097675674670945971981309842410416012915540911950348439255536201700835793048055599890677253563036692899622137331645054971331690373584438379720134181489517623643988341292887235850459604282122921452528",
+ "-65957872354116509297400621319564903702253130516097675674670945971981309842410416012915540911950348439255536201700835793048055599890677253563036692899622137331645054971331690373584438379720134181489517623643988341292887235850459604282122921452528",
+ "4165190074711498372705686642027748628010631591673700346085849569414502903758312031393196903476997644869669022781414821544378466903717692187198478658086148256293129853045819435002914",
+ "-4165190074711498372705686642027748628010631591673700346085849569414502903758312031393196903476997644869669022781414821544378466903717692187198478658086148256293129853045819435002914",
+ "502172553703744753908380772164642649304217792528090440716191580724484473328235664927817984771636372875409898830005825976063650593238541433729038373056225370315599153406133185392320847",
+ "-502172553703744753908380772164642649304217792528090440716191580724484473328235664927817984771636372875409898830005825976063650593238541433729038373056225370315599153406133185392320847",
+ "25810339190726741831136349797818105994358611764887668315197822821632935574011575463532742868091838388104842551381619490991039627647851601302773448573544037953054558472548",
+ "-25810339190726741831136349797818105994358611764887668315197822821632935574011575463532742868091838388104842551381619490991039627647851601302773448573544037953054558472548",
+ "4665422938667922731390545239525991067478667357298476881860826251089436662146540827982134227087684685030991914103761128873483160892760746361799786480055617662181625815248230938316973880302906675299954379007760370823224832674779",
+ "-4665422938667922731390545239525991067478667357298476881860826251089436662146540827982134227087684685030991914103761128873483160892760746361799786480055617662181625815248230938316973880302906675299954379007760370823224832674779",
+ "2223735597830224864049890057834039493638098960775167604145066375240100821674008194961337124741661084219067145508494176034464042665143434078149689607318313818865277681569064932224810481504434495675653041063465302100041302802648038458370477008560806359234416742985635022084248641500377",
+ "-2223735597830224864049890057834039493638098960775167604145066375240100821674008194961337124741661084219067145508494176034464042665143434078149689607318313818865277681569064932224810481504434495675653041063465302100041302802648038458370477008560806359234416742985635022084248641500377",
+ "42345447563490737654515925924136916105150662665879987625806652403110474948139404742355256883201223238547442445427767854602327889485658289780295383306283583160293766253974742903668207523228749309062814526339073599070",
+ "-42345447563490737654515925924136916105150662665879987625806652403110474948139404742355256883201223238547442445427767854602327889485658289780295383306283583160293766253974742903668207523228749309062814526339073599070",
+ "40757494492054593189505181124883370961902335356122875708839948469462201920152164929215445",
+ "-40757494492054593189505181124883370961902335356122875708839948469462201920152164929215445",
+ "489422217562968312762274110453276604934633603473056760608254327080440181671628006090249666021287247215269380617364913734802444913151007354363389984204873709403053283740243705411640696405073698784366581571968399",
+ "-489422217562968312762274110453276604934633603473056760608254327080440181671628006090249666021287247215269380617364913734802444913151007354363389984204873709403053283740243705411640696405073698784366581571968399",
+ "203828256280853345400063519072625079280180030947163985710628295241982787474897521472368518281000277120011930353824152022905149681658066777399408021281560972784695745183483128330447721487075906552349941557379095078354083487747855104922",
+ "-203828256280853345400063519072625079280180030947163985710628295241982787474897521472368518281000277120011930353824152022905149681658066777399408021281560972784695745183483128330447721487075906552349941557379095078354083487747855104922",
+ "12579256107866823853770946314828592500732374403508913980712874463292391864755987195690537357503818366347747743186695890433",
+ "-12579256107866823853770946314828592500732374403508913980712874463292391864755987195690537357503818366347747743186695890433",
+ "26755461309842501536357032592700549777692476999989333013567704060006230872678556198949194222172481328325450314710024939575841488411640806870121381285742075565712411648904027990740378131995279017965737335010708563099143288460848557783",
+ "-26755461309842501536357032592700549777692476999989333013567704060006230872678556198949194222172481328325450314710024939575841488411640806870121381285742075565712411648904027990740378131995279017965737335010708563099143288460848557783",
+ "179718434482969588987690660522936295504619795328517541448501507443327040584026830018965223706205351139318424383916072860628585971720095475736018979361135523338248920218527202",
+ "-179718434482969588987690660522936295504619795328517541448501507443327040584026830018965223706205351139318424383916072860628585971720095475736018979361135523338248920218527202",
+ "4559476727415984415667742638506394832394804942241662737080235712002719322907465863068712531182175979070036317680566622",
+ "-4559476727415984415667742638506394832394804942241662737080235712002719322907465863068712531182175979070036317680566622",
+ "18056873734891410248496182290389914805111823879862689239017282732",
+ "-18056873734891410248496182290389914805111823879862689239017282732",
+ "28355632329442976457768532159881703427555635510700435885472670967222653884076177077876502624372493819303621756857250806505170393973261606631093857830885883244831587318220509004",
+ "-28355632329442976457768532159881703427555635510700435885472670967222653884076177077876502624372493819303621756857250806505170393973261606631093857830885883244831587318220509004",
+ "1459732654931833317515433139762665712773308964783227471709926780387231673576225461320924899820938949422193790260955695331912805657904286897274122419209888368548603",
+ "-1459732654931833317515433139762665712773308964783227471709926780387231673576225461320924899820938949422193790260955695331912805657904286897274122419209888368548603",
+ "841297417411594292128977",
+ "-841297417411594292128977",
+ "4242195673983737600970155103235752981938372024288592013363272064075708471058134960551862070710453189027317281773782487650970",
+ "-4242195673983737600970155103235752981938372024288592013363272064075708471058134960551862070710453189027317281773782487650970",
+ "197127905405798244",
+ "-197127905405798244",
+ "6563407470658357675196420807382675727943443587151170499642011999875762151944659352887984041897388778521562733",
+ "-6563407470658357675196420807382675727943443587151170499642011999875762151944659352887984041897388778521562733",
+ "171120862433529862507872013528755671195868254123500416552655719933624587064946914905766882327146949422149531556848478731913777486790475986722345662117903207153341",
+ "-171120862433529862507872013528755671195868254123500416552655719933624587064946914905766882327146949422149531556848478731913777486790475986722345662117903207153341",
+ "187214460763227398586269742130045771591887383985328887736156741862960369193610822715922978601952519088940029424980096549841026833488303831185375087247455968007157419452960145311595471",
+ "-187214460763227398586269742130045771591887383985328887736156741862960369193610822715922978601952519088940029424980096549841026833488303831185375087247455968007157419452960145311595471",
+ "2673090487374081993731207525489391145288488762290600450482603424170240599600446740180718555900667741328318482506598059839151491967628487386391045037818794920023261735737921639708995039726148095626857322210114264941784225627483927045402749218",
+ "-2673090487374081993731207525489391145288488762290600450482603424170240599600446740180718555900667741328318482506598059839151491967628487386391045037818794920023261735737921639708995039726148095626857322210114264941784225627483927045402749218",
+ "299586874531112789052013025908546379682766040499696938471256503832571345345612339844529913907580250563145642647",
+ "-299586874531112789052013025908546379682766040499696938471256503832571345345612339844529913907580250563145642647",
+ "405538475580851874887939920459327617092961192248480802208813876830531489658564864824178266672271683879464330412787024584249226414349424728066961849584546083679996737251131765131648932944495100981642907933045304884221229278087094810231012513599884296417415741723145516546902774087770992604",
+ "-405538475580851874887939920459327617092961192248480802208813876830531489658564864824178266672271683879464330412787024584249226414349424728066961849584546083679996737251131765131648932944495100981642907933045304884221229278087094810231012513599884296417415741723145516546902774087770992604",
+ "4289997525579508886804910999084475469759259557183118236485054735737485047460566798688052482933027075995626140181076328124548622067825535609834113884951451721787266314523910215228638324453588589604475728750868849529649579405314779527171490876426202137784122981787297800640695809335850632264276817218",
+ "-4289997525579508886804910999084475469759259557183118236485054735737485047460566798688052482933027075995626140181076328124548622067825535609834113884951451721787266314523910215228638324453588589604475728750868849529649579405314779527171490876426202137784122981787297800640695809335850632264276817218",
+ "8307592530302620538620421474950064873013",
+ "-8307592530302620538620421474950064873013",
+ "668153113826415803744690433659063449914674108460",
+ "-668153113826415803744690433659063449914674108460",
+ "46917857009025361535384034419352878543368877134948287044907072634745489626203425426919312434872888667388137952819558853009128820322712955326948275185023832843664510785316937903",
+ "-46917857009025361535384034419352878543368877134948287044907072634745489626203425426919312434872888667388137952819558853009128820322712955326948275185023832843664510785316937903",
+ "72692276728923532198738657661593229541714898424777445103294553106601965453652630548922019551752677856073619742879036073418",
+ "-72692276728923532198738657661593229541714898424777445103294553106601965453652630548922019551752677856073619742879036073418",
+ "1365147498021014007274145395277247416653740352472059016216427940658523565320578614021663036729154339063385098348763260722534882240886880631939819",
+ "-1365147498021014007274145395277247416653740352472059016216427940658523565320578614021663036729154339063385098348763260722534882240886880631939819",
+ "114300720014386070718720229683003272046146186775381997423967458204765959963431901037954797839956346151530366909939183214",
+ "-114300720014386070718720229683003272046146186775381997423967458204765959963431901037954797839956346151530366909939183214",
+ "6762",
+ "-6762",
+ "52958329794842511544564431607079502085929565913139912125121000214082684350382689340216127453430020886928460043472604757294523852724883994706799227072659732722150629405334684502120793494615254736603105282342926917766772004919",
+ "-52958329794842511544564431607079502085929565913139912125121000214082684350382689340216127453430020886928460043472604757294523852724883994706799227072659732722150629405334684502120793494615254736603105282342926917766772004919",
+ "176688206756700071063559027466389453920766491733115376426152125336429137613213551729990793300311032785623",
+ "-176688206756700071063559027466389453920766491733115376426152125336429137613213551729990793300311032785623",
+ "1922483080110348257033411950111656752298655371856953617086529843662865561409994291993287457671153478029077149725149857725",
+ "-1922483080110348257033411950111656752298655371856953617086529843662865561409994291993287457671153478029077149725149857725",
+ "116652054071220139544336382432735630060274666911983",
+ "-116652054071220139544336382432735630060274666911983",
+ "5174104538080339543938990263794928249064915674657896129852899608936285960971761863486556625630466310050160624211680012958157394810117796321101931191821302341708281726643201876685372393200977149042032383466554582623637450297592330981838876150680862436764327264788138788126029954523641986",
+ "-5174104538080339543938990263794928249064915674657896129852899608936285960971761863486556625630466310050160624211680012958157394810117796321101931191821302341708281726643201876685372393200977149042032383466554582623637450297592330981838876150680862436764327264788138788126029954523641986",
+ "56602051214329308908684928399837460067357624824927409574521689818931407829513021195830603280968596169697964984976489620035360483629559652883726214824557656337088813049173231800245733072858891481768028465352155733037356970930661713472640527903665",
+ "-56602051214329308908684928399837460067357624824927409574521689818931407829513021195830603280968596169697964984976489620035360483629559652883726214824557656337088813049173231800245733072858891481768028465352155733037356970930661713472640527903665",
+ "50465855132621952642877529162542254312895872248149199085828932352785530557943935823716975491349313488156548806716473058702726383127266",
+ "-50465855132621952642877529162542254312895872248149199085828932352785530557943935823716975491349313488156548806716473058702726383127266",
+ "2103822150383069790413887708626272542825699206757181614299988243654634518589287733034323781018255",
+ "-2103822150383069790413887708626272542825699206757181614299988243654634518589287733034323781018255",
+ "2884145868221566190464654384898336516944031094549949335240745089189320393412625205715458573411537464678090067152741985416827426839574623518965109414118185662809105887512018969132683541056905460490486376635525002751775036410408309529607280059108670794204594780445621",
+ "-2884145868221566190464654384898336516944031094549949335240745089189320393412625205715458573411537464678090067152741985416827426839574623518965109414118185662809105887512018969132683541056905460490486376635525002751775036410408309529607280059108670794204594780445621",
+ "17151949587338385537174755341574689039375819189521363664160085642631581896638291949680521029535105884955679278095750173056302788876858996886433270550139444896998901",
+ "-17151949587338385537174755341574689039375819189521363664160085642631581896638291949680521029535105884955679278095750173056302788876858996886433270550139444896998901",
+ "480533356849702776352763749832742587425919427139102525668442168835109831060078665166920712330431373189225474215620302495581803094913110624590177406888394624128938633526464614177040468306987399",
+ "-480533356849702776352763749832742587425919427139102525668442168835109831060078665166920712330431373189225474215620302495581803094913110624590177406888394624128938633526464614177040468306987399",
+ "4048293905596052205036948911452380394795846231788449",
+ "-4048293905596052205036948911452380394795846231788449",
+ "26995137345178218227830930364666340738",
+ "-26995137345178218227830930364666340738",
+ "774397441571262230984201650112220858044164538606555323635490088358801192583611522683260312754942754317572391764052135170163899209038840031703432786259696586141227827701639190998818229513",
+ "-774397441571262230984201650112220858044164538606555323635490088358801192583611522683260312754942754317572391764052135170163899209038840031703432786259696586141227827701639190998818229513",
+ "18762561208181880394479657197069746737270753294648933008217092757003616838536799737540224936022419848244051559923181261528435902887894811151076237",
+ "-18762561208181880394479657197069746737270753294648933008217092757003616838536799737540224936022419848244051559923181261528435902887894811151076237",
+ "907239775827042770755661550314761787115062100342977397902609610238855670466824379",
+ "-907239775827042770755661550314761787115062100342977397902609610238855670466824379",
+ "752510106807455900379909618532778973994453687695730898309343615105390212836204453042377052183212876905061",
+ "-752510106807455900379909618532778973994453687695730898309343615105390212836204453042377052183212876905061",
+ "1594387591422875707361322970839625151131381378174641793551465510142159417127028702651513859466122585110982922292801583543059620610053622982905425511766811223211156471041084636387606630303692709955363035",
+ "-1594387591422875707361322970839625151131381378174641793551465510142159417127028702651513859466122585110982922292801583543059620610053622982905425511766811223211156471041084636387606630303692709955363035",
+ "23316150037708287470080374296114607254763375473373018965703611900047553929551418522455587001961482391010828529091929849671267100179126145618520750402550331537136654",
+ "-23316150037708287470080374296114607254763375473373018965703611900047553929551418522455587001961482391010828529091929849671267100179126145618520750402550331537136654",
+ "206570606519236414660405117101821960086150934143523942248291980694989781221204732295572458288359135192620910534498754440751275665591490740002481374496819362873621178489882031204314197626575326338703982006151642904",
+ "-206570606519236414660405117101821960086150934143523942248291980694989781221204732295572458288359135192620910534498754440751275665591490740002481374496819362873621178489882031204314197626575326338703982006151642904",
+ "64632739363686102310668199833121081452653123828159756435580680576799270035485260582762183515021072594277553694799435773660728228989363057503956061322371391729597055325808343868799201699918264379213943162952380242502610323",
+ "-64632739363686102310668199833121081452653123828159756435580680576799270035485260582762183515021072594277553694799435773660728228989363057503956061322371391729597055325808343868799201699918264379213943162952380242502610323",
+ "589421411734420159501267976455896411309276255208891167201590523330271039604417032437154142085688410405533459836702131617092573518938815446609802434772431958960872071215171855513041280388698254907927340515117391166070141683457342784",
+ "-589421411734420159501267976455896411309276255208891167201590523330271039604417032437154142085688410405533459836702131617092573518938815446609802434772431958960872071215171855513041280388698254907927340515117391166070141683457342784",
+ "78879805619934569024599381571707822806614963415349200270284875054237164864359624372158647647863797008340316828012300755667110314855460503179181117097385701319739187114139718329827695009617428401620773545555394848573360317456047893463046622890050301003010952433178967879125505419476694805185008787411114258",
+ "-78879805619934569024599381571707822806614963415349200270284875054237164864359624372158647647863797008340316828012300755667110314855460503179181117097385701319739187114139718329827695009617428401620773545555394848573360317456047893463046622890050301003010952433178967879125505419476694805185008787411114258",
+ "23502781763641178064404023959903165549857567200280242514656186491195674181432757323176594593508102253721487854615955222259753262265267416938",
+ "-23502781763641178064404023959903165549857567200280242514656186491195674181432757323176594593508102253721487854615955222259753262265267416938",
+ "409297139610776763506123895143481451963282099839420969098705456374184360544846067009871040867462673178544358986308342020083146065020599826820240081787171394155098100110040672410422987400472449240126519719022700797622570738",
+ "-409297139610776763506123895143481451963282099839420969098705456374184360544846067009871040867462673178544358986308342020083146065020599826820240081787171394155098100110040672410422987400472449240126519719022700797622570738",
+ "23333202714794325323697505",
+ "-23333202714794325323697505",
+ "88926553698672071141130629238070206100425021951043909308812007686747474756572535280975280230894876905612920792259781652532353624660383165526934048092970256374163978700915230573599950689593884285235239417830600259906139092309559397593337924686035082341037174504874298230037865321327",
+ "-88926553698672071141130629238070206100425021951043909308812007686747474756572535280975280230894876905612920792259781652532353624660383165526934048092970256374163978700915230573599950689593884285235239417830600259906139092309559397593337924686035082341037174504874298230037865321327",
+ "193216483164388919875865726156220378900478525465101761599275916110098513",
+ "-193216483164388919875865726156220378900478525465101761599275916110098513",
+ "445147927105811334112201187535182947887817402193430490222008844342623483790016955826328140200646698573333197769902932812101243075968229955686369555029175781",
+ "-445147927105811334112201187535182947887817402193430490222008844342623483790016955826328140200646698573333197769902932812101243075968229955686369555029175781",
+ "404724915427015100236245877077487335897861954733139220931559056131326351438847042320598819539736832267015136080413912317007525653866157576085879981310860858916082141809558153661155248226776118160741627797764071433035028151035984348656570943456141740411122305727778772350559929918941",
+ "-404724915427015100236245877077487335897861954733139220931559056131326351438847042320598819539736832267015136080413912317007525653866157576085879981310860858916082141809558153661155248226776118160741627797764071433035028151035984348656570943456141740411122305727778772350559929918941",
+ "15881033668267446564985922502808887168130126414945171534501886241573767046656582600501857191275522198094812554481448361027945717673462595782212036129626347287630493102505400",
+ "-15881033668267446564985922502808887168130126414945171534501886241573767046656582600501857191275522198094812554481448361027945717673462595782212036129626347287630493102505400",
+ "2137415689988797072560582676089346590053122445",
+ "-2137415689988797072560582676089346590053122445",
+ "323798850186148580554863589187091135845440166774430133093440314556959379021941132307127400322225854705093073925068652013957143959242670668925116774275979824",
+ "-323798850186148580554863589187091135845440166774430133093440314556959379021941132307127400322225854705093073925068652013957143959242670668925116774275979824",
+ "173508106063459544226297157276274728721118210069318517925122848577242175434996938459695476331454013223646557993405407002578179119005445994337106614223750746479653994536225606203430489837348181146905602085037927766933972128185498665420530967676198121700174",
+ "-173508106063459544226297157276274728721118210069318517925122848577242175434996938459695476331454013223646557993405407002578179119005445994337106614223750746479653994536225606203430489837348181146905602085037927766933972128185498665420530967676198121700174",
+ "78355099355274385235041105626642472390321765441120677546321753788293394435411913702107288104186287888107050196021354011143759436476044341380451",
+ "-78355099355274385235041105626642472390321765441120677546321753788293394435411913702107288104186287888107050196021354011143759436476044341380451",
+ "14082584100725485095810331470851521352703939751219746773401724408039845947212432002741091564650266209598267452042246073901010147451656273871799778680203026839107331149",
+ "-14082584100725485095810331470851521352703939751219746773401724408039845947212432002741091564650266209598267452042246073901010147451656273871799778680203026839107331149",
+ "2451726111242013614644472867015070800954350593117210091845723358334627905121894871023262409519589588967063261046514660829821816464168656627289239433694932574140916666824",
+ "-2451726111242013614644472867015070800954350593117210091845723358334627905121894871023262409519589588967063261046514660829821816464168656627289239433694932574140916666824",
+ "20065158625055757494521923831526555875918181556943569250588125153526936260221797604217490757723244157360646025073105062346371489195519447915244240862375631489025063124997553195851549786517441567063889510370756857238499576234680378947724748027600877684623953611544337343413268969959530489689129071097842283967",
+ "-20065158625055757494521923831526555875918181556943569250588125153526936260221797604217490757723244157360646025073105062346371489195519447915244240862375631489025063124997553195851549786517441567063889510370756857238499576234680378947724748027600877684623953611544337343413268969959530489689129071097842283967",
+ "2877720628966736569525036642910772915862211025917410379176852591593786965122381483084242795700755306144132542301154682139822037092615315519",
+ "-2877720628966736569525036642910772915862211025917410379176852591593786965122381483084242795700755306144132542301154682139822037092615315519",
+ "3795119948781692972575431",
+ "-3795119948781692972575431",
+ "117633423107664842386614454295318823031546808284886498133093442797780366695865088951102734835036375188027702346663647830425172733187275067584200082224814835976110754843437513016147344252016745713239843138800215136235719850541984478206795380204540097476184957279443",
+ "-117633423107664842386614454295318823031546808284886498133093442797780366695865088951102734835036375188027702346663647830425172733187275067584200082224814835976110754843437513016147344252016745713239843138800215136235719850541984478206795380204540097476184957279443",
+ "6028200577464886742220964264433220606667469744201474633845587044124944417457573648621749660231277732832613157240821087790368844691241612",
+ "-6028200577464886742220964264433220606667469744201474633845587044124944417457573648621749660231277732832613157240821087790368844691241612",
+ "1117820580139700758941594748763781946255037110167582749384133756752449839190401944216912957650664993553129645500059553210763046702311000117537213965255288711420760932554622971299296197897",
+ "-1117820580139700758941594748763781946255037110167582749384133756752449839190401944216912957650664993553129645500059553210763046702311000117537213965255288711420760932554622971299296197897",
+ "894440058986616656162159749909897",
+ "-894440058986616656162159749909897",
+ "11758059164722075820822351813564721682251718268398125058702252593271794825804844012676212580269973081943948588059900469592179919885984813401833621636489306",
+ "-11758059164722075820822351813564721682251718268398125058702252593271794825804844012676212580269973081943948588059900469592179919885984813401833621636489306",
+ "48260623373995703142149825869126942692445720237750683695954821352777035904885960923027672480964040682023869233942201916828693522743832886088998972188767776078279426029402097202986260065462533610836932273188567823090315418748142243190815560532101505961513910649086153182477090526300312187507612192",
+ "-48260623373995703142149825869126942692445720237750683695954821352777035904885960923027672480964040682023869233942201916828693522743832886088998972188767776078279426029402097202986260065462533610836932273188567823090315418748142243190815560532101505961513910649086153182477090526300312187507612192",
+ "155032044456958560653742313851007803134963800248495609164183285804227615140653638264588439258316691251377924988538500569549816017742093617863981847156274851353234781166567436349214058632603830394495548221403249818520855020397602702298881144444526972675887598504476681959777521420493375210129749627151599",
+ "-155032044456958560653742313851007803134963800248495609164183285804227615140653638264588439258316691251377924988538500569549816017742093617863981847156274851353234781166567436349214058632603830394495548221403249818520855020397602702298881144444526972675887598504476681959777521420493375210129749627151599",
+ "117",
+ "-117",
+ "31151175335",
+ "-31151175335",
+ "35374964788462894211615124919986334396217303170433399786403229831899783789349053619411986131305536842776505623498475004759495592581325624956208728845327562674600497034793430703900584828213353358028973193115581365893453195729236094397513635",
+ "-35374964788462894211615124919986334396217303170433399786403229831899783789349053619411986131305536842776505623498475004759495592581325624956208728845327562674600497034793430703900584828213353358028973193115581365893453195729236094397513635",
+ "11796859242834559349330645424007719279425086069437451547961817738176345052586077262730615110965711332407717403184353050831388270460861280643450803074302303211224953369570563468013937668078037503909168201005260137906679740236981824660385730820591421051254923150011711560287985553001992949325890751138512",
+ "-11796859242834559349330645424007719279425086069437451547961817738176345052586077262730615110965711332407717403184353050831388270460861280643450803074302303211224953369570563468013937668078037503909168201005260137906679740236981824660385730820591421051254923150011711560287985553001992949325890751138512",
+ "170647522893580509002975714845089353418304318223993041052613489603839464032767136346831417604396147862171608710351258359424720597066331032122844389758062085194297618983116731697591466836398130208912823480520907032976237477074428855652406620425725105496",
+ "-170647522893580509002975714845089353418304318223993041052613489603839464032767136346831417604396147862171608710351258359424720597066331032122844389758062085194297618983116731697591466836398130208912823480520907032976237477074428855652406620425725105496",
+ "5281478654865951520041163170269381080147277352244478257096792252048711710697114547916527006005288159091362187924",
+ "-5281478654865951520041163170269381080147277352244478257096792252048711710697114547916527006005288159091362187924",
+ "4612981530909908953399866319425198830164041651329116814589068706471983209837216442140437916749761739590696654721694691453248631167747384468652625616153898389404331335686814768720227658621123619760490072200457566243849427676890450504279708348832752925128591526859889728",
+ "-4612981530909908953399866319425198830164041651329116814589068706471983209837216442140437916749761739590696654721694691453248631167747384468652625616153898389404331335686814768720227658621123619760490072200457566243849427676890450504279708348832752925128591526859889728",
+ "230942413272730226530444519509994205060147713549648054777582719550812782352234600742222169014506643621109087605680440174002739494059492224354791764876753787909937534165450961813280650662325436679754051868455414",
+ "-230942413272730226530444519509994205060147713549648054777582719550812782352234600742222169014506643621109087605680440174002739494059492224354791764876753787909937534165450961813280650662325436679754051868455414",
+ "528690042093345595850504247",
+ "-528690042093345595850504247",
+ "31537765402865704303346035013066893813209666897703115111579537190812318360668479310525622135277986713283804",
+ "-31537765402865704303346035013066893813209666897703115111579537190812318360668479310525622135277986713283804",
+ "1599362772260782365940237955777469665833441883265981514825058091831969039328944925726126036206151420504388513842915084045761",
+ "-1599362772260782365940237955777469665833441883265981514825058091831969039328944925726126036206151420504388513842915084045761",
+ "22018294718309903690696646065850459504307668740106965970119563766751726997751841635147532383629353261767951801681466624415627829013290232821085001690020179707527003163210966668639431417007076432036482650137410011799888860384641536214437778644612376970907784011215",
+ "-22018294718309903690696646065850459504307668740106965970119563766751726997751841635147532383629353261767951801681466624415627829013290232821085001690020179707527003163210966668639431417007076432036482650137410011799888860384641536214437778644612376970907784011215",
+ "139228864110515195216553853606798559408959520596931103855825362443397424774758172",
+ "-139228864110515195216553853606798559408959520596931103855825362443397424774758172",
+ "438362563301076",
+ "-438362563301076",
+ "536477710240446158400855952047098861739032777002422842180036166459742934651199360607978321612514452622744911025658574877961214107174719449789017540265828279486524590338437269953368890994755662873267173870955360800125978287820421262971848425170065",
+ "-536477710240446158400855952047098861739032777002422842180036166459742934651199360607978321612514452622744911025658574877961214107174719449789017540265828279486524590338437269953368890994755662873267173870955360800125978287820421262971848425170065",
+ "498862087303189047484286815556440094292974761004818123941676688570935488959257235857771896260779999415327140115975996793571922312686472323161351487622438079274047587863856806852283080757914159158900221821",
+ "-498862087303189047484286815556440094292974761004818123941676688570935488959257235857771896260779999415327140115975996793571922312686472323161351487622438079274047587863856806852283080757914159158900221821",
+ "397485490350112467732556257997195088092587231213238688938663359508903507782996482344687130558398493814503644541315765003280501133111",
+ "-397485490350112467732556257997195088092587231213238688938663359508903507782996482344687130558398493814503644541315765003280501133111",
+ "849712043650971777004742171643106324862754090831744200814795006972518085972931752076874433562783731671435108431684162545599206785950669723461026526402295759448129538027792947274880743875232398841880484354651333627643180878756213653",
+ "-849712043650971777004742171643106324862754090831744200814795006972518085972931752076874433562783731671435108431684162545599206785950669723461026526402295759448129538027792947274880743875232398841880484354651333627643180878756213653",
+ "31939357424827970804026114453315327769012263471221072258182242042519626638563054352273477096407109171097657867287701617587164195568409977479696410846577473709461543239341493963739506308939662837999529461859333741861608567355869490150265338213466190360633042086859245316851129010609",
+ "-31939357424827970804026114453315327769012263471221072258182242042519626638563054352273477096407109171097657867287701617587164195568409977479696410846577473709461543239341493963739506308939662837999529461859333741861608567355869490150265338213466190360633042086859245316851129010609",
+ "59075219415446517463799317419672630289040",
+ "-59075219415446517463799317419672630289040",
+ "61544636348619846793635535253831658039274289566061329628",
+ "-61544636348619846793635535253831658039274289566061329628",
+ "470399936237982365631161793432085070263103572484796818885564848815758149943921811891860946060341559711899471195599373649384438242044515090831782134530922053677106020022279456123296157017910183495235140194390296804039743799564279602012304465862001339612585603213921336997140271860031180936085302533520084",
+ "-470399936237982365631161793432085070263103572484796818885564848815758149943921811891860946060341559711899471195599373649384438242044515090831782134530922053677106020022279456123296157017910183495235140194390296804039743799564279602012304465862001339612585603213921336997140271860031180936085302533520084",
+ "4263018257494613144043214865050835432323223259669979976818528797978364036590648420",
+ "-4263018257494613144043214865050835432323223259669979976818528797978364036590648420",
+ "1030364360168890027890816549580",
+ "-1030364360168890027890816549580",
+ "792685786141580556314148491833336274593743818",
+ "-792685786141580556314148491833336274593743818",
+ "641446086312126555467875106303989084781624843543297958597183735580271101775752996685163",
+ "-641446086312126555467875106303989084781624843543297958597183735580271101775752996685163",
+ "5495154319842093167496249323058689957423462",
+ "-5495154319842093167496249323058689957423462",
+ "11789599234651983989010071854908355935861398361186377696491616773407893531669446332781833177934487486443699554324479061335467496521890118734937498733191672611144989167953103344991959519028482263752023000602387955366518706202210024461852086754020196",
+ "-11789599234651983989010071854908355935861398361186377696491616773407893531669446332781833177934487486443699554324479061335467496521890118734937498733191672611144989167953103344991959519028482263752023000602387955366518706202210024461852086754020196",
+ "11868320247536683221143642841170454891656934116545619261841381472878070159790790558172360288429121201484338870667354265884102674537478716958516286215910855456088033052883980008436942265685062267471783017549551768359416886934474316919451518061351858590202914987178911670",
+ "-11868320247536683221143642841170454891656934116545619261841381472878070159790790558172360288429121201484338870667354265884102674537478716958516286215910855456088033052883980008436942265685062267471783017549551768359416886934474316919451518061351858590202914987178911670",
+ "1284156757531040914593221",
+ "-1284156757531040914593221",
+ "9523156885736314276851029956129745152608513178870686801769759111308470996123088771851122858908132203444859152976097503444227519069060806081448518797562327844612222984531692130770",
+ "-9523156885736314276851029956129745152608513178870686801769759111308470996123088771851122858908132203444859152976097503444227519069060806081448518797562327844612222984531692130770",
+ "31415032545650652773467205308921957370624743383488073117109921420678201637023554362493982589097031342230335705038785983149366806922747914694551472092848890719761600241693293020110370962350805350",
+ "-31415032545650652773467205308921957370624743383488073117109921420678201637023554362493982589097031342230335705038785983149366806922747914694551472092848890719761600241693293020110370962350805350",
+ "38540294830367981299370153716758943624066595675817723365819908936210186285351422767835324962411068698716556932780434832522209505361628036446058246936860795564022909013649",
+ "-38540294830367981299370153716758943624066595675817723365819908936210186285351422767835324962411068698716556932780434832522209505361628036446058246936860795564022909013649",
+ "1489",
+ "-1489",
+ "2270684970894467473228397152522666196967234885",
+ "-2270684970894467473228397152522666196967234885",
+ "623594270429426955031234189496487600662597646571928622449980935215346797035198838197888222869632091525558748378610334926140669245375114542239425712378426359715133474059991644743953906535538195465100677512751053",
+ "-623594270429426955031234189496487600662597646571928622449980935215346797035198838197888222869632091525558748378610334926140669245375114542239425712378426359715133474059991644743953906535538195465100677512751053",
+ "60223901057086672916139687208371207252559034742838976658538850201068490068101652675647609676435807962967919811849514616239086913537412970210091632651259826174103338368751134965303230126211398438698151879240977404460468186851886617548182773561840252412981638510923",
+ "-60223901057086672916139687208371207252559034742838976658538850201068490068101652675647609676435807962967919811849514616239086913537412970210091632651259826174103338368751134965303230126211398438698151879240977404460468186851886617548182773561840252412981638510923",
+ "352083164097278474078005845682075986531119761078051415723391468152762696096016941577257179144242535089572306180818322625093102190964224730315213843217203692079968682",
+ "-352083164097278474078005845682075986531119761078051415723391468152762696096016941577257179144242535089572306180818322625093102190964224730315213843217203692079968682",
+ "256914715526573594304760664453685512541013676570328830117752884150636769825195172277797835580253224279327546275273345112399482552434310216245805227544453571042746897560531287112979681556135355",
+ "-256914715526573594304760664453685512541013676570328830117752884150636769825195172277797835580253224279327546275273345112399482552434310216245805227544453571042746897560531287112979681556135355",
+ "3929812712463085187666519605941080752665430680003082969619532219612559124276337233356486033607557565841182562299051203553436156356748939",
+ "-3929812712463085187666519605941080752665430680003082969619532219612559124276337233356486033607557565841182562299051203553436156356748939",
+ "1342865274232326934240128816495975896816628726930390134403022164244814040962732527145178443776536620876592577",
+ "-1342865274232326934240128816495975896816628726930390134403022164244814040962732527145178443776536620876592577",
+ "75482499101235806844482700363651520608393572186840116071510831",
+ "-75482499101235806844482700363651520608393572186840116071510831",
+ "157079333706470320589362721287335446436100673921262275021919536009571391130921654202277262407403872423297032197476611916298599850639905615780935087993369908937",
+ "-157079333706470320589362721287335446436100673921262275021919536009571391130921654202277262407403872423297032197476611916298599850639905615780935087993369908937",
+ "21096758435207806377330934948465784354053655",
+ "-21096758435207806377330934948465784354053655",
+ "7296202760566732448484088809683111106213594240238214600327977304983210800704941723091693567279115428088283219305211898160182",
+ "-7296202760566732448484088809683111106213594240238214600327977304983210800704941723091693567279115428088283219305211898160182",
+ "9473711847689244707278408760608984165904137893454069938633516224794155238069623008814110071678551847797982066773376077",
+ "-9473711847689244707278408760608984165904137893454069938633516224794155238069623008814110071678551847797982066773376077",
+ "424157689387860814675639",
+ "-424157689387860814675639",
+ "2311915845008175998603844058297620909349923283750536586587937434312377733844702049651807722475434283757267961177665307169760829875889028168476878787006491399930630338344642910500797043234542368361571429181649829252175786093011520179318",
+ "-2311915845008175998603844058297620909349923283750536586587937434312377733844702049651807722475434283757267961177665307169760829875889028168476878787006491399930630338344642910500797043234542368361571429181649829252175786093011520179318",
+ "74548539487073557220326968093479867500276859338046876248826540472060313997",
+ "-74548539487073557220326968093479867500276859338046876248826540472060313997",
+ "11654322736763",
+ "-11654322736763",
+ "53007278098826078101002711940372616336",
+ "-53007278098826078101002711940372616336",
+ "79488890173950413261690334491844393856301694056413503617980571504653230048955",
+ "-79488890173950413261690334491844393856301694056413503617980571504653230048955",
+ "408713674815985937940894525901270256192656939969702057871",
+ "-408713674815985937940894525901270256192656939969702057871",
+ "793896474068238367668141234719022911425186020423846578406386752245064555357695445408188930726837363615519065571656957027286833070564842125230923415365473419",
+ "-793896474068238367668141234719022911425186020423846578406386752245064555357695445408188930726837363615519065571656957027286833070564842125230923415365473419",
+ "174808944301193943551146900431326706416195767876909997906726651518289372951",
+ "-174808944301193943551146900431326706416195767876909997906726651518289372951",
+ "15518425275704712437859509478557555507942868590674242179846381629609574039655947926978374551659365245896461352380663149726832850553382303285336261869176813113104452944002526144559297701143263522625331250816271032050756743914895178056748128568613436826595",
+ "-15518425275704712437859509478557555507942868590674242179846381629609574039655947926978374551659365245896461352380663149726832850553382303285336261869176813113104452944002526144559297701143263522625331250816271032050756743914895178056748128568613436826595",
+ "704584697906407199708590092378103021972791431202757824957775774072784740246334320005088181512002963310761780580704786814454975765",
+ "-704584697906407199708590092378103021972791431202757824957775774072784740246334320005088181512002963310761780580704786814454975765",
+ "657607704878895067543343694899228430336912631528241927302696775319590907402199923852512833112461947631065129028125536463067298383212071017877117414800369576545371975736320978897530313093703317591926126573581594016017999087405971954224745504107290022634832416486976440197266126685274050284770811156390509",
+ "-657607704878895067543343694899228430336912631528241927302696775319590907402199923852512833112461947631065129028125536463067298383212071017877117414800369576545371975736320978897530313093703317591926126573581594016017999087405971954224745504107290022634832416486976440197266126685274050284770811156390509",
+ "7494538701531220",
+ "-7494538701531220",
+ "7300727560805294687539012803042995909238449713032452769229667883869087209620881400305875438962218813943386360970483979638425963787311826059269116699436735359914333529525984293006337531416122388956292154685035813667508959604499191395591577891525195678171",
+ "-7300727560805294687539012803042995909238449713032452769229667883869087209620881400305875438962218813943386360970483979638425963787311826059269116699436735359914333529525984293006337531416122388956292154685035813667508959604499191395591577891525195678171",
+ "255504587698518445312717922712930691081197792561411090916056798257637114731417865482714584651043811829851492818242972929470506766333616107450122580899272969326648134119416080989201012163771767787520485155594757300555185954280304839051723173371630921394024027714555984796981691309",
+ "-255504587698518445312717922712930691081197792561411090916056798257637114731417865482714584651043811829851492818242972929470506766333616107450122580899272969326648134119416080989201012163771767787520485155594757300555185954280304839051723173371630921394024027714555984796981691309",
+ "1957270404535432491577732407654814296272924990076105665080976425316855184394075979033347631859",
+ "-1957270404535432491577732407654814296272924990076105665080976425316855184394075979033347631859",
+ "403660520770889026052145363858883993968408567876919963129339377184354008618147803968877043087318952555532301757740363864562971760902711427500126603597011858241477379568684342423222828785569617251693287873736233651273385183220731182322820758659074766543835657767799241434709242669340338048971",
+ "-403660520770889026052145363858883993968408567876919963129339377184354008618147803968877043087318952555532301757740363864562971760902711427500126603597011858241477379568684342423222828785569617251693287873736233651273385183220731182322820758659074766543835657767799241434709242669340338048971",
+ "1360462270574406",
+ "-1360462270574406",
+ "41324796834060083364741632465744604155931640433410301186397363904266930128665463361513275697352082859944863112972305377171961651196393476069297383272360",
+ "-41324796834060083364741632465744604155931640433410301186397363904266930128665463361513275697352082859944863112972305377171961651196393476069297383272360",
+ "3704475702528052685702177087226789799951985298635254026584051739803799717979",
+ "-3704475702528052685702177087226789799951985298635254026584051739803799717979",
+ "15324664249401045013727127578266722880923015582445744082290396086739217665923549238159714472241913755511109729288179218537980252473553017573593867710189",
+ "-15324664249401045013727127578266722880923015582445744082290396086739217665923549238159714472241913755511109729288179218537980252473553017573593867710189",
+ "991713895885660445361195566630120268552033337199519129194545503121325658310309321599773356998546067469176345858459212673467904704287664190684736527585420239571896710231",
+ "-991713895885660445361195566630120268552033337199519129194545503121325658310309321599773356998546067469176345858459212673467904704287664190684736527585420239571896710231",
+ "496917928889709928816019707237559067993121139550552680620307451932907944813916325593269613319259002416192",
+ "-496917928889709928816019707237559067993121139550552680620307451932907944813916325593269613319259002416192",
+ "5420780319939699155212032775979062279900280911343420051629512809105059842240345509925762577052334971725879572674586223682520124367213762780782010484201065072155930114824432335178466411605479995327050114745584339793378334895820002004268553531081904844570983717097867410603089",
+ "-5420780319939699155212032775979062279900280911343420051629512809105059842240345509925762577052334971725879572674586223682520124367213762780782010484201065072155930114824432335178466411605479995327050114745584339793378334895820002004268553531081904844570983717097867410603089",
+ "34178515956045799076849256172156569827315750483663840127186371829050429609564171778221768139311136758783705861242122641003313096493057103420927909105632095530710317446888521007163646123762242884609239534269531565599291518871943322912836596141732912619557997670259415580841015283",
+ "-34178515956045799076849256172156569827315750483663840127186371829050429609564171778221768139311136758783705861242122641003313096493057103420927909105632095530710317446888521007163646123762242884609239534269531565599291518871943322912836596141732912619557997670259415580841015283",
+ "24753103731553244306801885710094553322976800783421479907592940309642834383335499833992007826858595009726122",
+ "-24753103731553244306801885710094553322976800783421479907592940309642834383335499833992007826858595009726122",
+ "1303658351822779358400767265190404914258468501671414115714852481575404440331055726991532424857235529818287464081864",
+ "-1303658351822779358400767265190404914258468501671414115714852481575404440331055726991532424857235529818287464081864",
+ "82442525420",
+ "-82442525420",
+ "40181847350075911374014072545070982",
+ "-40181847350075911374014072545070982",
+ "6331081104259962585725418329411543440752124680199",
+ "-6331081104259962585725418329411543440752124680199",
+ "669444625991257897062056995037426293652388602030282843269573026219936289974215349592874907406715089995765108583608936617284270069188005340481379259012388729065198804182112491651898040335690016003489264765600281922569438256615076042625367641",
+ "-669444625991257897062056995037426293652388602030282843269573026219936289974215349592874907406715089995765108583608936617284270069188005340481379259012388729065198804182112491651898040335690016003489264765600281922569438256615076042625367641",
+ "1168675103592556804163240443883135991575851814861660107303310966160744170850036726911375287483597293098658196142018318809369957616827451967868069658172182991177709289250815148540710360498467949152008438530805196222119517692659923705203865993818359838900924606163081858543",
+ "-1168675103592556804163240443883135991575851814861660107303310966160744170850036726911375287483597293098658196142018318809369957616827451967868069658172182991177709289250815148540710360498467949152008438530805196222119517692659923705203865993818359838900924606163081858543",
+ "2496566005249030514809106685776267657051598627391700353125416989638685021308242404184826752692976528990582207413089494945",
+ "-2496566005249030514809106685776267657051598627391700353125416989638685021308242404184826752692976528990582207413089494945",
+ "75831002519613645538052701409851076434071446092420445852577692671",
+ "-75831002519613645538052701409851076434071446092420445852577692671",
+ "1595257514333333836407007696922732712451830781457969960247677871324618039799",
+ "-1595257514333333836407007696922732712451830781457969960247677871324618039799",
+ "2352103706291595728734823852677068972089963637096939637892631185119057636184628093243",
+ "-2352103706291595728734823852677068972089963637096939637892631185119057636184628093243",
+ "55150603036064305927003551612930888862894407146543079948823875920053285006001048840253371944560550042245523051895932284432859",
+ "-55150603036064305927003551612930888862894407146543079948823875920053285006001048840253371944560550042245523051895932284432859",
+ "183652285344198865127020235735671716726282119574663849914811753120306798386549535194663979983946501785937569600701888628541389188176220321121981286091051",
+ "-183652285344198865127020235735671716726282119574663849914811753120306798386549535194663979983946501785937569600701888628541389188176220321121981286091051",
+ "1670967627370678916184944999086",
+ "-1670967627370678916184944999086",
+ "1779553803107116970428487453385844908445190212603430402358107740295247",
+ "-1779553803107116970428487453385844908445190212603430402358107740295247",
+ "163081585689520939847508610298505981110843",
+ "-163081585689520939847508610298505981110843",
+ "24608823059620600828775541561806855624217762717902459681958610060078155650689789569089307408156194776319918700684027035605476736967141308737778808097438",
+ "-24608823059620600828775541561806855624217762717902459681958610060078155650689789569089307408156194776319918700684027035605476736967141308737778808097438",
+ "176229540909991348680999108287461921475890812511086227972678364382149132437628380310728470828832129727355735848528049467023561657293359463509078809812981500824290722272220174525789664137788219060477887820838690954729061422727025173596051655147380497411055372159528861310774057097642760262454",
+ "-176229540909991348680999108287461921475890812511086227972678364382149132437628380310728470828832129727355735848528049467023561657293359463509078809812981500824290722272220174525789664137788219060477887820838690954729061422727025173596051655147380497411055372159528861310774057097642760262454",
+ "1521679829312851456536026361859335013780557838686738466687399128709926436847394871570976840503705308125705873792672378389916115357657382793749503126640771533338992032259981620506047817865492352874670892991966609760209061301594191537869902100817987599206558753487441796712670736855202929172147294",
+ "-1521679829312851456536026361859335013780557838686738466687399128709926436847394871570976840503705308125705873792672378389916115357657382793749503126640771533338992032259981620506047817865492352874670892991966609760209061301594191537869902100817987599206558753487441796712670736855202929172147294",
+ "4157696366999482544605875019162016856282588665242578471972156413342580075270416675018859586511300869507848273592737229363773252760313860357749814761595582127449880857952033970115380383676900743584438652262171904692777471245621134891056589732734422433379524779439127971588536170244050150621694478",
+ "-4157696366999482544605875019162016856282588665242578471972156413342580075270416675018859586511300869507848273592737229363773252760313860357749814761595582127449880857952033970115380383676900743584438652262171904692777471245621134891056589732734422433379524779439127971588536170244050150621694478",
+ "1080490672913509861800536351320773525291317691569674170377657976498332490333353859955175522548201462648648619481614475899104059632553936657464424434357970937863187647621979084401315431140833788114037982",
+ "-1080490672913509861800536351320773525291317691569674170377657976498332490333353859955175522548201462648648619481614475899104059632553936657464424434357970937863187647621979084401315431140833788114037982",
+ "3194906436319924706167835645658948826079202290534790460576542221669512825113141647211107781595153842508704176837984748167835595231049849647151228364465638129922085890581512323653",
+ "-3194906436319924706167835645658948826079202290534790460576542221669512825113141647211107781595153842508704176837984748167835595231049849647151228364465638129922085890581512323653",
+ "66347107100300795802324266184385521196001191250641925506321442631467978776436571080979857829987956896197464196707824641007632965810482791998323932299431716570622215408517414037865201951734572676314196738287234254247520531646927798844",
+ "-66347107100300795802324266184385521196001191250641925506321442631467978776436571080979857829987956896197464196707824641007632965810482791998323932299431716570622215408517414037865201951734572676314196738287234254247520531646927798844",
+ "11755070349326455201",
+ "-11755070349326455201",
+ "156651043578414506824194498430628709042640792209942834690006663445469241908219457011408374641207896652700963717365255757469753081082784",
+ "-156651043578414506824194498430628709042640792209942834690006663445469241908219457011408374641207896652700963717365255757469753081082784",
+ "6564614203586776498688508944538260136293893809517937442849470545503761844",
+ "-6564614203586776498688508944538260136293893809517937442849470545503761844",
+ "598962115054858410821731842471416988283668169539322479066058751789827287104304434155465947780173527582423899421590786844022599493768874809775192652719882115272582161354987",
+ "-598962115054858410821731842471416988283668169539322479066058751789827287104304434155465947780173527582423899421590786844022599493768874809775192652719882115272582161354987",
+ "14443508661606107679701498958114275550218690763128482677663411487796540412372251008043398613017374358807500824",
+ "-14443508661606107679701498958114275550218690763128482677663411487796540412372251008043398613017374358807500824",
+ "39256841936111992",
+ "-39256841936111992",
+ "22003604980409010500616552575366573651583935479333537954768716122155414073009794841075971673796002258058407019824164705801672155808939681382770846685292342660131406075122591374505200827365481659521834044185780365112968118493953141135082476859603163146563",
+ "-22003604980409010500616552575366573651583935479333537954768716122155414073009794841075971673796002258058407019824164705801672155808939681382770846685292342660131406075122591374505200827365481659521834044185780365112968118493953141135082476859603163146563",
+ "892612825794032675237656399315067134384177542558409873295423125742291209107349193521326932311978865",
+ "-892612825794032675237656399315067134384177542558409873295423125742291209107349193521326932311978865",
+ "124621",
+ "-124621",
+ "39935862547719441432334200243323687785328282085889753818085154826607463592957499184719152632875679930608636031007549318604365",
+ "-39935862547719441432334200243323687785328282085889753818085154826607463592957499184719152632875679930608636031007549318604365",
+ "53150384435463",
+ "-53150384435463",
+ "5038617365140462881167623487900113792134127235018266576334866703847563260548724132738580936393867769669999269123356358833922994762144381270134211004782972194957315491988474542647182488355728455727224128393875804308265676177706683756178477181259888932449640561270717525443984031839",
+ "-5038617365140462881167623487900113792134127235018266576334866703847563260548724132738580936393867769669999269123356358833922994762144381270134211004782972194957315491988474542647182488355728455727224128393875804308265676177706683756178477181259888932449640561270717525443984031839",
+ "18681375094308610932506726878974665535026964461038388",
+ "-18681375094308610932506726878974665535026964461038388",
+ "1694490961016050821118863403337160606621945374045986683635096733891067660467665114977365173029439236924493435715113229950328428294138767438612886428848619529462540214870987656585503501640006260787493433146977269874730836153316545758154447988098965049",
+ "-1694490961016050821118863403337160606621945374045986683635096733891067660467665114977365173029439236924493435715113229950328428294138767438612886428848619529462540214870987656585503501640006260787493433146977269874730836153316545758154447988098965049",
+ "34981000632270288897102343437813403379909519445061202916917950066646896121823399718762441640573618996405513221104482936830650441434933771175014497076492252938974657476531072878259814088155492254761929",
+ "-34981000632270288897102343437813403379909519445061202916917950066646896121823399718762441640573618996405513221104482936830650441434933771175014497076492252938974657476531072878259814088155492254761929",
+ "68186095594637277569008966718516358384203015123161693897355580993692840848969688",
+ "-68186095594637277569008966718516358384203015123161693897355580993692840848969688",
+ "1134126702908819566229008255313053760389444389322516415435539141233919754193425951992416106929842896080872524876962976885893778825250951315557865558643443244064361902243653517585491772912650759627537475187929799073482588432081",
+ "-1134126702908819566229008255313053760389444389322516415435539141233919754193425951992416106929842896080872524876962976885893778825250951315557865558643443244064361902243653517585491772912650759627537475187929799073482588432081",
+ "1219660173804105678519644769228717229961",
+ "-1219660173804105678519644769228717229961",
+ "9337788234986472797155798668633720432652335098955723216110827539222560791046580758896359512684081023719629520191135356937552064341414985563338865755044029781700472823138498290646709782655770432472849",
+ "-9337788234986472797155798668633720432652335098955723216110827539222560791046580758896359512684081023719629520191135356937552064341414985563338865755044029781700472823138498290646709782655770432472849",
+ "150424008592708034173259810113475930440810989335879628469427925370034758050373228994166602606657381400670968588175849346743433462784970176019171026242734",
+ "-150424008592708034173259810113475930440810989335879628469427925370034758050373228994166602606657381400670968588175849346743433462784970176019171026242734",
+ "10709102135708711290774115917568703434210917471089837954174155027939142290457621570052339242896415391737492196297186964273273691467020576606",
+ "-10709102135708711290774115917568703434210917471089837954174155027939142290457621570052339242896415391737492196297186964273273691467020576606",
+ "590791035282122817187786741012881114662078084344037620155645055415644697693432897703240908766855757699902350106663298",
+ "-590791035282122817187786741012881114662078084344037620155645055415644697693432897703240908766855757699902350106663298",
+ "6644806769073273664533505828539666955754832084759883392732355768142191452695685189350231701935219212931529500767858294148963537439795792593286239876735316935797953104882",
+ "-6644806769073273664533505828539666955754832084759883392732355768142191452695685189350231701935219212931529500767858294148963537439795792593286239876735316935797953104882",
+ "176511387805688073718855394072841750443509085589889404547084544683339270522709736525152936011885659232618530216217042113370236595468110548243408426032715706575057369503893468170961068580632412998988853143083945510800966719",
+ "-176511387805688073718855394072841750443509085589889404547084544683339270522709736525152936011885659232618530216217042113370236595468110548243408426032715706575057369503893468170961068580632412998988853143083945510800966719",
+ "18197814169943971748763655537459580789924675680558018542859068281859940671016292870607058355",
+ "-18197814169943971748763655537459580789924675680558018542859068281859940671016292870607058355",
+ "53665744969332986906645019910160121106654070883148709396576439910412784742262054480460348",
+ "-53665744969332986906645019910160121106654070883148709396576439910412784742262054480460348",
+ "15114701057818447666738431676226302502804615316350076959331191793491140183426763779197478527183420304400143976231566802442732838190730866504640269901006105030291550705062305121857555495397899088813125248050183715824996357342602508",
+ "-15114701057818447666738431676226302502804615316350076959331191793491140183426763779197478527183420304400143976231566802442732838190730866504640269901006105030291550705062305121857555495397899088813125248050183715824996357342602508",
+ "4538684087847049584760102928758931951663047136365690317969652570682351595540576228149035948547456528545997589204036236408244581413584178489307193893093917026883317801237483886776457347545442242",
+ "-4538684087847049584760102928758931951663047136365690317969652570682351595540576228149035948547456528545997589204036236408244581413584178489307193893093917026883317801237483886776457347545442242",
+ "68104327977018907402564677909296985240865850899633815987571",
+ "-68104327977018907402564677909296985240865850899633815987571",
+ "21126389218307474702937983111939394337442364463717300558898463056361786715220551813192286109604739592089468027639535160949266165405455186969313451687709111127347596851523580180558147019220445717949314588542773729044755127625855190216933115799293871340",
+ "-21126389218307474702937983111939394337442364463717300558898463056361786715220551813192286109604739592089468027639535160949266165405455186969313451687709111127347596851523580180558147019220445717949314588542773729044755127625855190216933115799293871340",
+ "78222020599461507025837080263377239508386033815939450849751163859949403589369059725826445373571398499131861482443466775202688633343807807754044978711136865112845737811903231211872791854642958065042325855161499335",
+ "-78222020599461507025837080263377239508386033815939450849751163859949403589369059725826445373571398499131861482443466775202688633343807807754044978711136865112845737811903231211872791854642958065042325855161499335",
+ "4085759411276713693098232266986821269735231020974977020052575836176404619187789208196423060444205",
+ "-4085759411276713693098232266986821269735231020974977020052575836176404619187789208196423060444205",
+ "1184210350766462097978915832676647869625660103053116596342",
+ "-1184210350766462097978915832676647869625660103053116596342",
+ "194539222104802835983292205414714434524058762756885327380706701321718655745439492716048166059927935241719149428879885478",
+ "-194539222104802835983292205414714434524058762756885327380706701321718655745439492716048166059927935241719149428879885478",
+ "302225946492334746161844140625842416406247812604200025274581247745184222647724964120371508273766497009905662425211",
+ "-302225946492334746161844140625842416406247812604200025274581247745184222647724964120371508273766497009905662425211",
+ "28866482602752218187265274692665814018194886187165103251546083935605515506785082873738653268219928502362268",
+ "-28866482602752218187265274692665814018194886187165103251546083935605515506785082873738653268219928502362268",
+ "5544952079050015240077157700940320243659550435014574041421348665396935579816611507888574593385073797911479160663545693602347256422370826097076074812916781822541849687962368590784552937977886205",
+ "-5544952079050015240077157700940320243659550435014574041421348665396935579816611507888574593385073797911479160663545693602347256422370826097076074812916781822541849687962368590784552937977886205",
+ "323710452268087591982845307319501376132372316351918100708894690678941776259635618528227710164786257540427054071430282571860354523279847215012107332817795823639212909924515178824923234673149086462596636590350327539723310798213754665082582892561015344012",
+ "-323710452268087591982845307319501376132372316351918100708894690678941776259635618528227710164786257540427054071430282571860354523279847215012107332817795823639212909924515178824923234673149086462596636590350327539723310798213754665082582892561015344012",
+ "6298178214804809482382903740893261997309254126083786539013344521457218202089579665480198608566443109151164759409311083172285986019510870966646266562147239668466233708302275847273212515270194723859620577435475775917236877537636439092304144350",
+ "-6298178214804809482382903740893261997309254126083786539013344521457218202089579665480198608566443109151164759409311083172285986019510870966646266562147239668466233708302275847273212515270194723859620577435475775917236877537636439092304144350",
+ "577024710470352032965427500450059067959437337861971906117178872729996600387523062943239129117535935908310731558466601208272240830153365070900204066680943610473920336450708951789975218349225167580113063050191",
+ "-577024710470352032965427500450059067959437337861971906117178872729996600387523062943239129117535935908310731558466601208272240830153365070900204066680943610473920336450708951789975218349225167580113063050191",
+ "37972747755906620986262153",
+ "-37972747755906620986262153",
+ "183829698115229455555876942979003514516640128880295179243921716692283845612914437405435307612733660894727800824835948",
+ "-183829698115229455555876942979003514516640128880295179243921716692283845612914437405435307612733660894727800824835948",
+ "2423832959667360118257064702737609023425800632192836723430775336591100757144072935869557583342500327350488117394557246526227000890820814931134670064874494870718496008517213657614840456624436847012780602721278103167235601948187645617975091973272873241569047573971620372584048698612150640",
+ "-2423832959667360118257064702737609023425800632192836723430775336591100757144072935869557583342500327350488117394557246526227000890820814931134670064874494870718496008517213657614840456624436847012780602721278103167235601948187645617975091973272873241569047573971620372584048698612150640",
+ "3689827013849535585619411952203826247332426367647260820678883970327796902123440577075450728217270007491470250603087878349241859733492652613679",
+ "-3689827013849535585619411952203826247332426367647260820678883970327796902123440577075450728217270007491470250603087878349241859733492652613679",
+ "38998054937697595881540875647042048333681659113425435564641134367164935592905762620334835531916327661633470289669510511757807865630506235328273222918421117111281556873070254844441312814372799410820410797988722601761642743512387994633124078",
+ "-38998054937697595881540875647042048333681659113425435564641134367164935592905762620334835531916327661633470289669510511757807865630506235328273222918421117111281556873070254844441312814372799410820410797988722601761642743512387994633124078",
+ "1742133972499057105001733325633478018605566678002165515479191311988758932166961086848659714709",
+ "-1742133972499057105001733325633478018605566678002165515479191311988758932166961086848659714709",
+ "2553559760939673132290078919768155422943752579897989356503182382672252331377594911957598202962666902881961594758670198463065653145968650999812730247666",
+ "-2553559760939673132290078919768155422943752579897989356503182382672252331377594911957598202962666902881961594758670198463065653145968650999812730247666",
+ "51684745772714675394936241781816223514919452679364520537119434050698905337439734233644472369565180889405426257288782419010082579894095799847229362421193687113981266355014802762308095739808334529392234853485537967988890313769779739241401223407407962126345943032536670110549434751102",
+ "-51684745772714675394936241781816223514919452679364520537119434050698905337439734233644472369565180889405426257288782419010082579894095799847229362421193687113981266355014802762308095739808334529392234853485537967988890313769779739241401223407407962126345943032536670110549434751102",
+ "672712112462360351910518120594120040601436948606148058222300198559244738922266341042360305651450642724475561271288385956130680220169715",
+ "-672712112462360351910518120594120040601436948606148058222300198559244738922266341042360305651450642724475561271288385956130680220169715",
+ "813447070819324251037079581265526580292907576372477729204338404955584410222478934593619630935314222063003252993694281837026881675600656782635846343833",
+ "-813447070819324251037079581265526580292907576372477729204338404955584410222478934593619630935314222063003252993694281837026881675600656782635846343833",
+ "1117610225194419065337568894513493776564803226432743080986022521406296090276409739149656072953983798754546991402130235309864912523411568994",
+ "-1117610225194419065337568894513493776564803226432743080986022521406296090276409739149656072953983798754546991402130235309864912523411568994",
+ "54306983641232120685850754812687679873466315381427348676538013927626387380179070467333206768501131364932160162454016646002006230714059820560113529334910854401021111543333022008153795820172235468858146103351502311717114025204496145038",
+ "-54306983641232120685850754812687679873466315381427348676538013927626387380179070467333206768501131364932160162454016646002006230714059820560113529334910854401021111543333022008153795820172235468858146103351502311717114025204496145038",
+ "113450443712297816016750119935548807386514765087946158026225637996838314569438356054721778395168",
+ "-113450443712297816016750119935548807386514765087946158026225637996838314569438356054721778395168",
+ "7352437924947754601546368441398130",
+ "-7352437924947754601546368441398130",
+ "9846278286558101102640461230277730613939270868227307780570935600269093778822376992893008780014141741647103776048800092788896154696011762350215865588521108549",
+ "-9846278286558101102640461230277730613939270868227307780570935600269093778822376992893008780014141741647103776048800092788896154696011762350215865588521108549",
+ "73473583275712621559167315389071668112406649781987949641633299346855217310106910560443921944813054763213555679810164708505",
+ "-73473583275712621559167315389071668112406649781987949641633299346855217310106910560443921944813054763213555679810164708505",
+ "44337393529749818041445106472308772039346354808448275796454672077580119659002042203928900642842510640740800196651911559238276834896411685658708100385336014325",
+ "-44337393529749818041445106472308772039346354808448275796454672077580119659002042203928900642842510640740800196651911559238276834896411685658708100385336014325",
+ "3029057656526271554842230678161240050706458471766453329711413581607557927250588221517218424325311508555983065479955684772259815134067055583713776773155106422220131994155338255582516687249210697344355756374535219768311432253647445765860280496088041768667890441415297183",
+ "-3029057656526271554842230678161240050706458471766453329711413581607557927250588221517218424325311508555983065479955684772259815134067055583713776773155106422220131994155338255582516687249210697344355756374535219768311432253647445765860280496088041768667890441415297183",
+ "730896103566527607730753327836819245922931354292181064204035921357800084090450560460429017252539616543803713640582458341962589048267291080308369681271304618861351862971290465709198912575367354463123427808437784040240907793877567792057788579265909741136",
+ "-730896103566527607730753327836819245922931354292181064204035921357800084090450560460429017252539616543803713640582458341962589048267291080308369681271304618861351862971290465709198912575367354463123427808437784040240907793877567792057788579265909741136",
+ "875972480821342956908137350797672986141068914679963791517259506036957992167704898826150763674879737404204136150",
+ "-875972480821342956908137350797672986141068914679963791517259506036957992167704898826150763674879737404204136150",
+ "80978095866121182143792129768500985270760294511412625411940522384234727394805988434574920055266468176140927390504528795674710202014688877516082928870193399763361133821060656660414289111945500870045554749239179606901392281466574470956468260058934",
+ "-80978095866121182143792129768500985270760294511412625411940522384234727394805988434574920055266468176140927390504528795674710202014688877516082928870193399763361133821060656660414289111945500870045554749239179606901392281466574470956468260058934",
+ "5108366192611283244622529332098588886037670912044545212175942213533408183226647011059305581499429284848730575416013640342256910485443191764062474694987448384264155646101960915742145430768592056025304400156363995432483639209748602875976799644331086294285921358845745557709942066403846",
+ "-5108366192611283244622529332098588886037670912044545212175942213533408183226647011059305581499429284848730575416013640342256910485443191764062474694987448384264155646101960915742145430768592056025304400156363995432483639209748602875976799644331086294285921358845745557709942066403846",
+ "6930180124964356147220207591422279016208371685360099598238746492283122379172191493127595009844321810224523734815981086376030176488602168657385920504832784693281301596520980175713179280297526196841775",
+ "-6930180124964356147220207591422279016208371685360099598238746492283122379172191493127595009844321810224523734815981086376030176488602168657385920504832784693281301596520980175713179280297526196841775",
+ "127195984139760103169058839514903174746000769823723851981181127452175305070890259297605399965306923149188386831728624922603033165495625460062407066507409867399121450024",
+ "-127195984139760103169058839514903174746000769823723851981181127452175305070890259297605399965306923149188386831728624922603033165495625460062407066507409867399121450024",
+ "766856719860424381068595879781443086540018712198126893034614346925577170838696737465130140374926102571846639744916246",
+ "-766856719860424381068595879781443086540018712198126893034614346925577170838696737465130140374926102571846639744916246",
+ "24452524790653436824651691432192056396622748",
+ "-24452524790653436824651691432192056396622748",
+ "21600696784921267417096322615448095147085787610512586576154030214298480866233496998058741115961394009177458631301020467184235259516317585587331608708009650567889604390408691257559911506849475326601795863368339333809604283115447728657967640020590611529",
+ "-21600696784921267417096322615448095147085787610512586576154030214298480866233496998058741115961394009177458631301020467184235259516317585587331608708009650567889604390408691257559911506849475326601795863368339333809604283115447728657967640020590611529",
+ "3758893374497950117544956548495424355416942972081749559738750",
+ "-3758893374497950117544956548495424355416942972081749559738750",
+ "139402452879531227967305026093373374931960661729048047992046850704933112027363474989587334281949398194424695097699435389253833391313981068405251271500306551642365788",
+ "-139402452879531227967305026093373374931960661729048047992046850704933112027363474989587334281949398194424695097699435389253833391313981068405251271500306551642365788",
+ "25612506870374484873779089622294846964717659760278221279975070009760319283018786412097109135597197982352674303356191527475964885419517878154272980015867348900662204209918494643594136945278141027429152743583659050244679551461363259179124592558207169009059175419818764353589040423929215554316106",
+ "-25612506870374484873779089622294846964717659760278221279975070009760319283018786412097109135597197982352674303356191527475964885419517878154272980015867348900662204209918494643594136945278141027429152743583659050244679551461363259179124592558207169009059175419818764353589040423929215554316106",
+ "2947281537862409310348470927599528845929360328199550369835553099926787046871370053629653311891644595607839493",
+ "-2947281537862409310348470927599528845929360328199550369835553099926787046871370053629653311891644595607839493",
+ "5238370098473928109261593022401423141534005322972191017431019829640519389374820628584873426299810704519554264840639788753962805520465217577654353515132848032321812308255870691241084866912560646162061587045231920247690379479011365117594385434098375615768143923448693726900625714250700557084631365841487720",
+ "-5238370098473928109261593022401423141534005322972191017431019829640519389374820628584873426299810704519554264840639788753962805520465217577654353515132848032321812308255870691241084866912560646162061587045231920247690379479011365117594385434098375615768143923448693726900625714250700557084631365841487720",
+ "12442661493742591574470274906943075194519541250480406451734421223577085372382129292566795701869646895013888531785728273885219518563236237522720693500170071741905622101669444727271767185013757679737024246566421692125582577245793910930758790508707497799356723763185459314157218014300646936606",
+ "-12442661493742591574470274906943075194519541250480406451734421223577085372382129292566795701869646895013888531785728273885219518563236237522720693500170071741905622101669444727271767185013757679737024246566421692125582577245793910930758790508707497799356723763185459314157218014300646936606",
+ "196768397706108832434401218046908395079672619951322343962935515221968814879",
+ "-196768397706108832434401218046908395079672619951322343962935515221968814879",
+ "105448359738523054755775683879539460376932545724741416465977687344195271654833613392218097960778272870252224864512166575087075095234145517359783987574090392012176562600550144885565709822164722304408771214923078090216303447672907406306494260347265557611811281654313383497",
+ "-105448359738523054755775683879539460376932545724741416465977687344195271654833613392218097960778272870252224864512166575087075095234145517359783987574090392012176562600550144885565709822164722304408771214923078090216303447672907406306494260347265557611811281654313383497",
+ "427047",
+ "-427047",
+ "81856543863229949865307411717645038275510945758537814749232160844289351485471852172626662270166132792505150910334705532703104971400349296170150117058939300885252778996956",
+ "-81856543863229949865307411717645038275510945758537814749232160844289351485471852172626662270166132792505150910334705532703104971400349296170150117058939300885252778996956",
+ "1157793815124456718861516590400363995161915570086903147642852686851669744820819994596924330213342515606147016987948857909",
+ "-1157793815124456718861516590400363995161915570086903147642852686851669744820819994596924330213342515606147016987948857909",
+ "940896637988538567397975357071445094467989790092928263312671948706628805236843480432542018263224679720038185333011214261501267693681777878339707753984890375587248023646920869739576148750778030",
+ "-940896637988538567397975357071445094467989790092928263312671948706628805236843480432542018263224679720038185333011214261501267693681777878339707753984890375587248023646920869739576148750778030",
+ "1277092697774915455425325818506548913089778045288703511320462361515661192684081707471069783269077123507880082821996357021946680618631451261991566032521034200533398597806696743013088727321199529921154950435385831032453193119895011784079743410",
+ "-1277092697774915455425325818506548913089778045288703511320462361515661192684081707471069783269077123507880082821996357021946680618631451261991566032521034200533398597806696743013088727321199529921154950435385831032453193119895011784079743410",
+ "12484594365439504824667126116411560379532608011162188261784732952579595718551939216912931261112627180909253846258363935011877417495984302385508560070358584377699655038250487243650598",
+ "-12484594365439504824667126116411560379532608011162188261784732952579595718551939216912931261112627180909253846258363935011877417495984302385508560070358584377699655038250487243650598",
+ "1741383885783666349682975645698617932237500743715841391107227784204719855585223522172382200426887024717924383874873388819696857115564677905327552504",
+ "-1741383885783666349682975645698617932237500743715841391107227784204719855585223522172382200426887024717924383874873388819696857115564677905327552504",
+ "9368096919796958094889245340222417626105947858557433047800723019",
+ "-9368096919796958094889245340222417626105947858557433047800723019",
+ "76669478098694609561491577319843969528266563067895013521486786451595735010640930020326448743208375914951894083260394091483935932234283855098968632145970697415601093343",
+ "-76669478098694609561491577319843969528266563067895013521486786451595735010640930020326448743208375914951894083260394091483935932234283855098968632145970697415601093343",
+ "1876639712516985144893922794716264029310990922149953750634405350881578456885688177463809312620",
+ "-1876639712516985144893922794716264029310990922149953750634405350881578456885688177463809312620",
+ "186077",
+ "-186077",
+ "24038469015057796648084289920894727399732658423825146209930020877671076098132117966877846149087015358546337692428012385515366055633105998821389203",
+ "-24038469015057796648084289920894727399732658423825146209930020877671076098132117966877846149087015358546337692428012385515366055633105998821389203",
+ "20641259550745643346234485579665129143463532482322387615585139677830682894079763990366000612134891527828252798370386444670430513385825695220928137556290078834398139256712344468615779923734232143070994661634892049806652900001420233970754048793898042171067992448201191787158435561",
+ "-20641259550745643346234485579665129143463532482322387615585139677830682894079763990366000612134891527828252798370386444670430513385825695220928137556290078834398139256712344468615779923734232143070994661634892049806652900001420233970754048793898042171067992448201191787158435561",
+ "90558282393161622936261650596857143828421884875124973816361813844395166",
+ "-90558282393161622936261650596857143828421884875124973816361813844395166",
+ "893374152282726891992085958120127485743572202276100990922171",
+ "-893374152282726891992085958120127485743572202276100990922171",
+ "104601387324033669002784175389856736439866138446091862232274237956270168921868535320405566731385430625654533746364405250312870593863224985439702639684142355791792905233795969344981850689932028254291726954427057743196839190399880526778270712454970430735459654847",
+ "-104601387324033669002784175389856736439866138446091862232274237956270168921868535320405566731385430625654533746364405250312870593863224985439702639684142355791792905233795969344981850689932028254291726954427057743196839190399880526778270712454970430735459654847",
+ "1100640547822452822259608780637373041065326977053681954192776181527618577050122442455730624660403304296015412329954372289398853654524721225006003581004995451247487399511260858844108588935136691954558538445962684147337611140312567681054887671734241832035049841922672004195071",
+ "-1100640547822452822259608780637373041065326977053681954192776181527618577050122442455730624660403304296015412329954372289398853654524721225006003581004995451247487399511260858844108588935136691954558538445962684147337611140312567681054887671734241832035049841922672004195071",
+ "2967167885422023119778255262377939967247041745814218496240360",
+ "-2967167885422023119778255262377939967247041745814218496240360",
+ "2766027933722171046554231292404911532459570636916540872038932307272865118512724883948205112046666709093487559219830075352753072061667201",
+ "-2766027933722171046554231292404911532459570636916540872038932307272865118512724883948205112046666709093487559219830075352753072061667201",
+ "1003655344057107767912014692725976261732681876044961311820943946784371",
+ "-1003655344057107767912014692725976261732681876044961311820943946784371",
+ "21900502732037517315370094764239443613058564433",
+ "-21900502732037517315370094764239443613058564433",
+ "45583003657081227658306304711498324162428223935090104",
+ "-45583003657081227658306304711498324162428223935090104",
+ "204245432840569041148483982796093177932369679988233999329901019356075995960",
+ "-204245432840569041148483982796093177932369679988233999329901019356075995960",
+ "54884247902140437035368361407902527545416356458607442580170745253262030",
+ "-54884247902140437035368361407902527545416356458607442580170745253262030",
+ "5334518155628744158007803052398794311169463840470474113725097881874982744596886959948255678621385420985539108742608260405936297075345765000664456806209794363451383928857878909914356480954702762980348813177584480927161733854397043441077512115118243",
+ "-5334518155628744158007803052398794311169463840470474113725097881874982744596886959948255678621385420985539108742608260405936297075345765000664456806209794363451383928857878909914356480954702762980348813177584480927161733854397043441077512115118243",
+ "586483295964769639990961973863221490702912450472376751506581704396550840803536849728609056194074161983174132325139036388003751640146943",
+ "-586483295964769639990961973863221490702912450472376751506581704396550840803536849728609056194074161983174132325139036388003751640146943",
+ "5160489070412055213478248749143153314027313193274772183541029614946527505345515388990899156035333461408310459047357741425430914259324755065994103",
+ "-5160489070412055213478248749143153314027313193274772183541029614946527505345515388990899156035333461408310459047357741425430914259324755065994103",
+ "2027629455583867858236950998133711110883394281732352207813586603417947074456218393483520509566027",
+ "-2027629455583867858236950998133711110883394281732352207813586603417947074456218393483520509566027",
+ "5188557124098846103707325218",
+ "-5188557124098846103707325218",
+ "400020709349724273938863924454731823809936035083490166372176005731818513778095755824243823423942457408986667759613017098976884623086030827980554523509430858361367786615095252152639811158705182507617454882805400018345969632806081496172562211701111188286396198492796040003060705842273291",
+ "-400020709349724273938863924454731823809936035083490166372176005731818513778095755824243823423942457408986667759613017098976884623086030827980554523509430858361367786615095252152639811158705182507617454882805400018345969632806081496172562211701111188286396198492796040003060705842273291",
+ "5077741618469045793277646564358992920960476333244601450034145830501181786188670069707891777075377020328052369395749044352605314330803964782636667529924732654192256597972743806214879074858492363595605",
+ "-5077741618469045793277646564358992920960476333244601450034145830501181786188670069707891777075377020328052369395749044352605314330803964782636667529924732654192256597972743806214879074858492363595605",
+ "7696189909584112429236607890412659528293987626026266720440261172438548134466224807156242301070086176781584925647653568383958946454001",
+ "-7696189909584112429236607890412659528293987626026266720440261172438548134466224807156242301070086176781584925647653568383958946454001",
+ "417308020029030078568441933098093721107857721939799845259428192907357371830765301672126412079562811182564973992528737210195074535804805307396531464692210817793443042424312992541689337630019211372",
+ "-417308020029030078568441933098093721107857721939799845259428192907357371830765301672126412079562811182564973992528737210195074535804805307396531464692210817793443042424312992541689337630019211372",
+ "1322555438304138854190608504305314090997872332525802468309",
+ "-1322555438304138854190608504305314090997872332525802468309",
+ "2243252463390097730206022598597097545362441865345445435367208364900608574068701725911900977005694987837525981666534993121316833074810732688679185645071871012387337549509711648733018",
+ "-2243252463390097730206022598597097545362441865345445435367208364900608574068701725911900977005694987837525981666534993121316833074810732688679185645071871012387337549509711648733018",
+ "996999631246356886686476319402220462702895536107891846414650166937411337235327374798687258137003461594493394303654723633588050290355700009203863700819430055925538137094125943576776423062708423296431824562515335853105906638174471031706521164070138118239692600817313403027773040755",
+ "-996999631246356886686476319402220462702895536107891846414650166937411337235327374798687258137003461594493394303654723633588050290355700009203863700819430055925538137094125943576776423062708423296431824562515335853105906638174471031706521164070138118239692600817313403027773040755",
+ "7407232727584141857860413969133193973271286288996885370643743601041844697247425570485073230177615935516189249509933008589795827697527731537095440446937896691012576063103682886965547257404970422133160836803032660735755375228",
+ "-7407232727584141857860413969133193973271286288996885370643743601041844697247425570485073230177615935516189249509933008589795827697527731537095440446937896691012576063103682886965547257404970422133160836803032660735755375228",
+ "66507856432274251794176455954413617080912111625650403908424515766595169565610373272262880697471290673940957493067336542878127434500093321175322023848113318710961186458831481208336221616883931621941707175292010516439902743884847403671155360181449053131615233540637713255704186616742945621336873834200241",
+ "-66507856432274251794176455954413617080912111625650403908424515766595169565610373272262880697471290673940957493067336542878127434500093321175322023848113318710961186458831481208336221616883931621941707175292010516439902743884847403671155360181449053131615233540637713255704186616742945621336873834200241",
+ "31961863828553380988033812855214593359459211110640445946699728653449149746905536006308298520671497324063634041",
+ "-31961863828553380988033812855214593359459211110640445946699728653449149746905536006308298520671497324063634041",
+ "119618377523937755424839832529346904290447125277702998330825686745624714380165535983701718800753406524499580430492483313401840673306022",
+ "-119618377523937755424839832529346904290447125277702998330825686745624714380165535983701718800753406524499580430492483313401840673306022",
+ "405681915481957710524110670648088015005969944212725894176433228902381563426021784100141533714164168640878972504794623170560976727288628780986689105062652396339731589340681696758070055865849332874664598654305386",
+ "-405681915481957710524110670648088015005969944212725894176433228902381563426021784100141533714164168640878972504794623170560976727288628780986689105062652396339731589340681696758070055865849332874664598654305386",
+ "80071205989351736846133464673563483",
+ "-80071205989351736846133464673563483",
+ "9700773864531435625616214899914065324460851600463291968860331922457988802290698665249481817160070262860115617949877440060186269123630022169856579023685715276196199558700467573542360702057439871151548632003937134635666",
+ "-9700773864531435625616214899914065324460851600463291968860331922457988802290698665249481817160070262860115617949877440060186269123630022169856579023685715276196199558700467573542360702057439871151548632003937134635666",
+ "64944106993602113652248278796057650905995695388886180354923002182559697540323513",
+ "-64944106993602113652248278796057650905995695388886180354923002182559697540323513",
+ "37929576313535611121803978435959309812321783154717",
+ "-37929576313535611121803978435959309812321783154717",
+ "1201000338412478811264460901269015663629403940922465995711563366282532392888117164309460791962587700786925689531323402454933712",
+ "-1201000338412478811264460901269015663629403940922465995711563366282532392888117164309460791962587700786925689531323402454933712",
+ "470447114867440006531646544662395180489380",
+ "-470447114867440006531646544662395180489380",
+ "1886414975033222890759454788368278722523410826550821944244006726465034055937087351501071112805393425149681091697659539390880213755450593178650888546158680682861726300055346238147353584",
+ "-1886414975033222890759454788368278722523410826550821944244006726465034055937087351501071112805393425149681091697659539390880213755450593178650888546158680682861726300055346238147353584",
+ "4664892726074011412424061191534682518434402852534244066439859284421669515547644494221267860310050082413903960265959420616932209365599069348",
+ "-4664892726074011412424061191534682518434402852534244066439859284421669515547644494221267860310050082413903960265959420616932209365599069348",
+ "28780798756024002725983431800204693077146606485161761312577563898465001036018344",
+ "-28780798756024002725983431800204693077146606485161761312577563898465001036018344",
+ "32330329650876",
+ "-32330329650876",
+ "2119979291121167235646126537631495326938621591198105160016067466298282031395514388037592761773940160529230271536093864046314956321286102399202685013097514391108059946817681956440747156573",
+ "-2119979291121167235646126537631495326938621591198105160016067466298282031395514388037592761773940160529230271536093864046314956321286102399202685013097514391108059946817681956440747156573",
+ "263699852555513851494126759556555000194041870735492675256368970869569739794241286439438865360257448383332427174288750874993061959293095843277366404592822430413842608440069138162513296663098194916628650623285377787520407274835441660863529425698257",
+ "-263699852555513851494126759556555000194041870735492675256368970869569739794241286439438865360257448383332427174288750874993061959293095843277366404592822430413842608440069138162513296663098194916628650623285377787520407274835441660863529425698257",
+ "1128694221447083514833565943172494061961392351570236661606778701297263608082693757967704225149730415407045688293665284383612835316877341572601586213504558102647155013466806252198360829785603030320627697854353131933390896",
+ "-1128694221447083514833565943172494061961392351570236661606778701297263608082693757967704225149730415407045688293665284383612835316877341572601586213504558102647155013466806252198360829785603030320627697854353131933390896",
+ "6916983731776108089130775823204431120044571113273264",
+ "-6916983731776108089130775823204431120044571113273264",
+ "75914457793044064895413508037682032379902701971013411488690441608545",
+ "-75914457793044064895413508037682032379902701971013411488690441608545",
+ "8879499247714081140479921556021160510154213025912153490299817518668111141293995912780879974244590421191162074944570118497100570991099380592606670090324723096261264086252974733149488230484359814997329229447712203652808121303397231512080257394400660537777330",
+ "-8879499247714081140479921556021160510154213025912153490299817518668111141293995912780879974244590421191162074944570118497100570991099380592606670090324723096261264086252974733149488230484359814997329229447712203652808121303397231512080257394400660537777330",
+ "1724506383335075569722951957439066815",
+ "-1724506383335075569722951957439066815",
+ "1194371342067583821224146035467746385145120448082902327311395191487125759843115454058224224089457130",
+ "-1194371342067583821224146035467746385145120448082902327311395191487125759843115454058224224089457130",
+ "116571209611185337284731713897921002952811284109399364843701582086430272601727355870457693093",
+ "-116571209611185337284731713897921002952811284109399364843701582086430272601727355870457693093",
+ "26168929789567416417896877953711683735315284288420053745760833960409035809279614614583672230970848586995471196762264833662013726559369765619103011658619869727814614782931489481458661981043479676591818357",
+ "-26168929789567416417896877953711683735315284288420053745760833960409035809279614614583672230970848586995471196762264833662013726559369765619103011658619869727814614782931489481458661981043479676591818357",
+ "243012047985288247713378637185988647187985010392388570351653505841125573018162558460717652828862937",
+ "-243012047985288247713378637185988647187985010392388570351653505841125573018162558460717652828862937",
+ "10664054546419657059895154308389295209775305216580625182685797954089483388356503442301133821162999463846286618424679215827037042324",
+ "-10664054546419657059895154308389295209775305216580625182685797954089483388356503442301133821162999463846286618424679215827037042324",
+ "93382430984727342024648229617198660330774557968214720265565362040755873830899272200516094884487181897372100083086702655979998495443",
+ "-93382430984727342024648229617198660330774557968214720265565362040755873830899272200516094884487181897372100083086702655979998495443",
+ "13126062810625043063456380164790384012915764511630796458248365510538114092330596186281347044586364215270683612292866613952971844005196715563009674494624957852022027173471052976928718844001264455268592601375542242160924315548654836823549859553",
+ "-13126062810625043063456380164790384012915764511630796458248365510538114092330596186281347044586364215270683612292866613952971844005196715563009674494624957852022027173471052976928718844001264455268592601375542242160924315548654836823549859553",
+ "9368582362765814557187196024001227849888168077472266659772600971697428366492708926906258905590833059706396684592884687526358204703256054330603971127944678906",
+ "-9368582362765814557187196024001227849888168077472266659772600971697428366492708926906258905590833059706396684592884687526358204703256054330603971127944678906",
+ "278701771665221100457912961846034172",
+ "-278701771665221100457912961846034172",
+ "382464310254920012603200760",
+ "-382464310254920012603200760",
+ "1086701652931645659413181704075891369501487115000150234704055924790606399915277424771761502385407750848874457084738431566772206432850777390818546802908541311070886519070558468667864533850452989704316665227997074954119733405730362633188789872620053510199052652185571293239445061650299573526583634686290646340",
+ "-1086701652931645659413181704075891369501487115000150234704055924790606399915277424771761502385407750848874457084738431566772206432850777390818546802908541311070886519070558468667864533850452989704316665227997074954119733405730362633188789872620053510199052652185571293239445061650299573526583634686290646340",
+ "1436027919103852779047018224513001412434295916624702899496423156978055321701822379",
+ "-1436027919103852779047018224513001412434295916624702899496423156978055321701822379",
+ "358956740433261819154697401028765647885314537021358004573",
+ "-358956740433261819154697401028765647885314537021358004573",
+ "2570919810686260443090976956907911580117431201667893432876299852175711324820817103455438469322058313607578962386364736310503021461418759938196980029731001153192509640082331671491566785848363799371983266719541295357316341488191889371987260280114237",
+ "-2570919810686260443090976956907911580117431201667893432876299852175711324820817103455438469322058313607578962386364736310503021461418759938196980029731001153192509640082331671491566785848363799371983266719541295357316341488191889371987260280114237",
+ "25162923422743354542149586612896418135445747897968173426132346622460254031452425686287824478617146278670264713886155228992283141903843330748647605337845897726364270262270221388553425764365596646869122752625837519793121116201637138123589",
+ "-25162923422743354542149586612896418135445747897968173426132346622460254031452425686287824478617146278670264713886155228992283141903843330748647605337845897726364270262270221388553425764365596646869122752625837519793121116201637138123589",
+ "4278027626",
+ "-4278027626",
+ "13701895078474585475247137503379489809369496012756504256009512583880126487325483060",
+ "-13701895078474585475247137503379489809369496012756504256009512583880126487325483060",
+ "840786904525379769789300537711189060152537247097220818494507832789559514433741881148404020369408737305833463880040532404710981950433015449671738772090021173041178316879389133142755654332186395733035047829330146580877246938698632854141466195209370012956133251007728880713807067719044277",
+ "-840786904525379769789300537711189060152537247097220818494507832789559514433741881148404020369408737305833463880040532404710981950433015449671738772090021173041178316879389133142755654332186395733035047829330146580877246938698632854141466195209370012956133251007728880713807067719044277",
+ "3276292788321967735809171244238550320799741743618059640716169790896705284371",
+ "-3276292788321967735809171244238550320799741743618059640716169790896705284371",
+ "1444750318330952168038880813831551223482419869563017466378766743222046493652050967605113492030925684948366811229446235163057029451862026449099533578455062305802501669339640305034074716552601620379378463996993533643594750826540",
+ "-1444750318330952168038880813831551223482419869563017466378766743222046493652050967605113492030925684948366811229446235163057029451862026449099533578455062305802501669339640305034074716552601620379378463996993533643594750826540",
+ "24086541858702055427502392901637",
+ "-24086541858702055427502392901637",
+ "4330081338691920762224608526717824389301173480290111106078901689480766861452007892469366598230052182293662205113692558414456231710116801557663552676919",
+ "-4330081338691920762224608526717824389301173480290111106078901689480766861452007892469366598230052182293662205113692558414456231710116801557663552676919",
+ "27418448940760548112970686808757044592831257648000991603843244426565505080207854209562533723933529598541150",
+ "-27418448940760548112970686808757044592831257648000991603843244426565505080207854209562533723933529598541150",
+ "4864349348505372641735591623253935562079434294533303015906939805788562228545435455999490952132421630107381486091394263343039603335970384360527032450993718152333512135859319365168",
+ "-4864349348505372641735591623253935562079434294533303015906939805788562228545435455999490952132421630107381486091394263343039603335970384360527032450993718152333512135859319365168",
+ "1626611771502100547320818336906281142864525046004643066115702536679123387159152005305066",
+ "-1626611771502100547320818336906281142864525046004643066115702536679123387159152005305066",
+ "14293419224795219525714860242008460020503397376158988250120766700936504062",
+ "-14293419224795219525714860242008460020503397376158988250120766700936504062",
+ "8260753138917023233566421292298962764237807151943318525543970544500632597376493524337437826032865212814429643010352970402898369401423576606526232369458199913160215970566401517084565439231237176671986172844275163759328663201716196906130863901168073596480102005930047541965611641872232312988889482629",
+ "-8260753138917023233566421292298962764237807151943318525543970544500632597376493524337437826032865212814429643010352970402898369401423576606526232369458199913160215970566401517084565439231237176671986172844275163759328663201716196906130863901168073596480102005930047541965611641872232312988889482629",
+ "5277758874516137277732773354886538661032533122667342258245153872341673598212237223809452902009488931372563068631458175710208259076234089320690",
+ "-5277758874516137277732773354886538661032533122667342258245153872341673598212237223809452902009488931372563068631458175710208259076234089320690",
+ "1604105217156493424796219158328988017738562338480346273566670218046",
+ "-1604105217156493424796219158328988017738562338480346273566670218046",
+ };
+
+ boost::filesystem::ifstream is(root / "cpp_int1024_serial64.txt");
+ std::cout << "Testing cpp_int1024_serial64.txt with T=" << typeid(T).name() << std::endl;
+ is.peek();
+ BOOST_CHECK(is.good());
+ boost::archive::text_iarchive ia(is);
+ for(unsigned i = 0; i < sizeof(text_array) / sizeof(text_array[0]); ++i)
+ {
+ try
+ {
+ T val;
+ ia >> val;
+ BOOST_CHECK_EQUAL(val, T(text_array[i]));
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+ }
+
+ boost::filesystem::ifstream is2(root / "cpp_int1024_serial32.txt");
+ std::cout << "Testing cpp_int1024_serial32.txt with T=" << typeid(T).name() << std::endl;
+ is2.peek();
+ BOOST_CHECK(is2.good());
+ boost::archive::text_iarchive ia2(is2);
+ for(unsigned i = 0; i < sizeof(text_array) / sizeof(text_array[0]); ++i)
+ {
+ try
+ {
+ T val;
+ ia2 >> val;
+ BOOST_CHECK_EQUAL(val, T(text_array[i]));
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+ }
+}
+
+int main(int argc, char const* argv[])
+{
+ if(argc == 2)
+ {
+ root = argv[1];
+ std::cout << "Setting root directory to " << argv[1] << std::endl;
+ }
+ using namespace boost::multiprecision;
+ test64<cpp_int>();
+ test64<number<cpp_int_backend<64, 64> > >();
+ test128<cpp_int>();
+ test128<number<cpp_int_backend<128, 128> > >();
+ test1024<cpp_int>();
+ test1024<number<cpp_int_backend<1024, 1024> > >();
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_cpp_int_lit.cpp b/libs/multiprecision/test/test_cpp_int_lit.cpp
new file mode 100644
index 0000000000..366309d0f3
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_int_lit.cpp
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////////
+// 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)
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test.hpp"
+
+
+#ifdef BOOST_MP_USER_DEFINED_LITERALS
+
+
+using namespace boost::multiprecision;
+
+template <class T>
+void test_literal(T val, const char* p)
+{
+ BOOST_CHECK_EQUAL(val, cpp_int(p));
+}
+
+#define TEST_LITERAL(x)\
+{\
+ constexpr auto val1 = BOOST_JOIN(x, _cppi);\
+ constexpr int1024_t val2 = BOOST_JOIN(x, _cppi1024);\
+ constexpr auto val3 = BOOST_JOIN(x, _cppui);\
+ constexpr uint1024_t val4 = BOOST_JOIN(x, _cppui1024);\
+ test_literal(val1, BOOST_STRINGIZE(x));\
+ test_literal(val2, BOOST_STRINGIZE(x));\
+ test_literal(val3, BOOST_STRINGIZE(x));\
+ test_literal(val4, BOOST_STRINGIZE(x));\
+ /* Negative values: */\
+ constexpr auto val5 = -BOOST_JOIN(x, _cppi);\
+ constexpr int1024_t val6 = -BOOST_JOIN(x, _cppi1024);\
+ constexpr auto val7 = -val1;\
+ constexpr int1024_t val8 = -val2;\
+ BOOST_CHECK_EQUAL(val5, -cpp_int(val1));\
+ BOOST_CHECK_EQUAL(val6, -cpp_int(val1));\
+ BOOST_CHECK_EQUAL(val7, -cpp_int(val1));\
+ BOOST_CHECK_EQUAL(val8, -cpp_int(val1));\
+}\
+
+int main()
+{
+ using namespace boost::multiprecision::literals;
+ TEST_LITERAL(0x0);
+ TEST_LITERAL(0x00000);
+ TEST_LITERAL(0x10000000);
+ TEST_LITERAL(0x1234500000000123450000000123345000678000000456000000567000000fefabc00000000000000);
+ return boost::report_errors();
+}
+
+#else
+
+int main() { return 0; }
+
+
+#endif
diff --git a/libs/multiprecision/test/test_cpp_int_serial.cpp b/libs/multiprecision/test/test_cpp_int_serial.cpp
new file mode 100644
index 0000000000..915b68f897
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_int_serial.cpp
@@ -0,0 +1,177 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/timer.hpp>
+#include "test.hpp"
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/exception/all.hpp>
+
+template <class T>
+T generate_random(unsigned bits_wanted)
+{
+ static boost::random::mt19937 gen;
+ typedef boost::random::mt19937::result_type random_type;
+
+ T max_val;
+ unsigned digits;
+ if(std::numeric_limits<T>::is_bounded && (bits_wanted == (unsigned)std::numeric_limits<T>::digits))
+ {
+ max_val = (std::numeric_limits<T>::max)();
+ digits = std::numeric_limits<T>::digits;
+ }
+ else
+ {
+ max_val = T(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ T val = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ val %= max_val;
+ return val;
+}
+
+template <class T>
+void test_neg(const T& x, const boost::mpl::true_&)
+{
+ T val = -x;
+ try{
+ std::stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+
+ ss.clear();
+ boost::archive::binary_oarchive ob(ss);
+ ob << static_cast<const T&>(val);
+ boost::archive::binary_iarchive ib(ss);
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+}
+template <class T>
+void test_neg(const T& , const boost::mpl::false_&){}
+
+template <class T>
+void test()
+{
+ using namespace boost::multiprecision;
+
+ boost::random::mt19937 gen;
+ boost::uniform_int<> d(3, std::numeric_limits<T>::is_bounded ? std::numeric_limits<T>::digits : 3000);
+ boost::timer tim;
+
+ while(true)
+ {
+ T val = generate_random<T>(d(gen));
+ try
+ {
+ std::stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+
+ ss.clear();
+ boost::archive::binary_oarchive ob(ss);
+ ob << static_cast<const T&>(val);
+ boost::archive::binary_iarchive ib(ss);
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+
+ test_neg(val, boost::mpl::bool_<std::numeric_limits<T>::is_signed>());
+ //
+ // Check to see if test is taking too long.
+ // Tests run on the compiler farm time out after 300 seconds,
+ // so don't get too close to that:
+ //
+ if(tim.elapsed() > 150)
+ {
+ std::cout << "Timeout reached, aborting tests now....\n";
+ break;
+ }
+ }
+}
+
+#if !defined(TEST1) && !defined(TEST2) && !defined(TEST3) && !defined(TEST4)
+# define TEST1
+# define TEST2
+# define TEST3
+# define TEST4
+#endif
+
+int main()
+{
+ using namespace boost::multiprecision;
+#ifdef TEST1
+ test<cpp_int>();
+#endif
+#ifdef TEST2
+ test<number<cpp_int_backend<61, 61, unsigned_magnitude, unchecked, void> > >();
+#endif
+#ifdef TEST3
+ test<number<cpp_int_backend<120, 120, signed_magnitude, unchecked, void> > >();
+#endif
+#ifdef TEST4
+ test<int1024_t>();
+#endif
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_cpp_rat_serial.cpp b/libs/multiprecision/test/test_cpp_rat_serial.cpp
new file mode 100644
index 0000000000..6f4537be90
--- /dev/null
+++ b/libs/multiprecision/test/test_cpp_rat_serial.cpp
@@ -0,0 +1,163 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/timer.hpp>
+#include "test.hpp"
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/exception/all.hpp>
+
+template <class T>
+T generate_random(unsigned bits_wanted)
+{
+ static boost::random::mt19937 gen;
+ typedef boost::random::mt19937::result_type random_type;
+
+ T max_val;
+ unsigned digits;
+ if(std::numeric_limits<T>::is_bounded && (bits_wanted == (unsigned)std::numeric_limits<T>::digits))
+ {
+ max_val = (std::numeric_limits<T>::max)();
+ digits = std::numeric_limits<T>::digits;
+ }
+ else
+ {
+ max_val = T(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ T val = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ val %= max_val;
+ if(!val)
+ val = 1;
+ return val;
+}
+
+template <class T>
+void test_neg(const T& x, const boost::mpl::true_&)
+{
+ T val = -x;
+ try
+ {
+ std::stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+
+ ss.clear();
+ boost::archive::binary_oarchive ob(ss);
+ ob << static_cast<const T&>(val);
+ boost::archive::binary_iarchive ib(ss);
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+}
+template <class T>
+void test_neg(const T& , const boost::mpl::false_&){}
+
+template <class T>
+void test()
+{
+ using namespace boost::multiprecision;
+
+ boost::random::mt19937 gen;
+ boost::uniform_int<> d(3, std::numeric_limits<T>::is_bounded ? std::numeric_limits<T>::digits : 3000);
+ boost::timer tim;
+
+ while(true)
+ {
+ T val(generate_random<typename component_type<T>::type>(d(gen)), generate_random<typename component_type<T>::type>(d(gen)));
+ try
+ {
+ std::stringstream ss;
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+
+ ss.clear();
+ boost::archive::binary_oarchive ob(ss);
+ ob << static_cast<const T&>(val);
+ boost::archive::binary_iarchive ib(ss);
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ }
+
+ test_neg(val, boost::mpl::bool_<std::numeric_limits<T>::is_signed>());
+
+ //
+ // Check to see if test is taking too long.
+ // Tests run on the compiler farm time out after 300 seconds,
+ // so don't get too close to that:
+ //
+ if(tim.elapsed() > 150)
+ {
+ std::cout << "Timeout reached, aborting tests now....\n";
+ break;
+ }
+ }
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+ test<cpp_rational>();
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_exp.cpp b/libs/multiprecision/test/test_exp.cpp
new file mode 100644
index 0000000000..f3eae923f4
--- /dev/null
+++ b/libs/multiprecision/test/test_exp.cpp
@@ -0,0 +1,233 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 51u> data =
+ {{
+ "1.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "9.47747587596218770242116751705184563668845029215054154915126374673142219159548534317576897266130328412495991561490384353e76",
+ "8.98225489794452370997623936390755615068333094834545092387689795875746440121970819499035111276893290879203289092353747850e153",
+ "8.51291041070124257524798251795398355552294928156627848633073113916721592074889256105483993631579761345100284245144410506e230",
+ "8.06809030516483860484254925989129017112482132468761563276276594763374886826841745433660192438855214332469192411759402790e307",
+ "7.64651312322841630493169711336894888932951818957138997327518186691187347879142222644283389432604713409023263917264358401e384",
+ "7.24696436606255985380192585665173794455118215150711210905481870053193336336731228464367470327868286988180495111406609690e461",
+ "6.86829299533155197480610865771404565313986987801060270120621935139741577246731459024227828759564450034267891072352816870e538",
+ "6.50940811722948585242669672360741252715012399316164518226061001845519670701239429603657927628755169479689062519606799624e615",
+ "6.16927583978348964454665652571294215251327375137123272041877979478545511090085756858225302357977159539777447847855503405e692",
+ "5.84691629437043896753869572004324228849833391140408095171257918435296982661233664069534601413835876272500275725690968474e769",
+ "5.54140081286660645835370762406928689330724181979654545550204201113926269281603301564114980528619942840737770415885783439e846",
+ "5.25184925229805200184933663459660562493261505058724212670923083643709964294855282715531768162298567379648573804433968486e923",
+ "4.97742745928448409225535325233998957076879979440190164347796593390995994951755710667491911026476108957070504003155645761e1000",
+ "4.71734486697204622371883518659702954552385115723942808636490157561056417525827884479573988899517566587636669779645610803e1077",
+ "4.47085221753216236037602345430121605512330975424643767098987010800161616413051148037751552110081034066081309007796182114e1154",
+ "4.23723940366531198300986713567588008777043812458400705569721660157434941774066620870256745107265536124077734836797938268e1231",
+ "4.01583342289144005397455901781647949754375366066998182220342540048111140676724909947493787596336610499122085983712119281e1308",
+ "3.80599643873362813900306284477369187319506389058898599816705625750135796510808933786432614186155972485637939057212164098e1385",
+ "3.60712394320959592074309301816510372687695286650188776957291994751966018917404878612237961367128638199290387601511358836e1462",
+ "3.41864301533745457066062991907289263038319874930395315315257927161138360206596116102724713069518697248463965164712972907e1539",
+ "3.24001067063873569456703204286462007769933831045558617578289414699244767403736057931834775727420762410328297596596814910e1616",
+ "3.07071229688386868087623659761166306563170839771162347830514606977592027644137144160294469813988158463967740978461420862e1693",
+ "2.91026017157373047094077218552378456052150304677863670611408570458991015300131731261787644801415538043027268185097710615e1770",
+ "2.75819205688636078700279174380111581147323147951670302427494196210176478494486073721584055059489736040565979466551070179e1847",
+ "2.61406986804110104534167739704643351039975992759905579635058824027507742375380077276380178376470686987855503581867681046e1924",
+ "2.47747841124391945459619002346303925269640785743990333362087223895627681769816204236257960940497519376881830373722711456e2001",
+ "2.34802418757813746316913800667907927718925648696508255347624141597281474683823345136640610924639820192825966082309575303e2078",
+ "2.22533425939475124828943430510333464605535146852848680647615867629953075390889821397228584866395924176189346073006180260e2155",
+ "2.10905517593659363154553947631071808925462553114068144748077359132255993441363479041540672158497404660986163617828972963e2232",
+ "1.99885195510122536266653916064141606295420554580140619900425370702471778604391774578696867899999534265169574306808906810e2309",
+ "1.89440711840917173277691572886942144916664047407963356271198286654087884646102070148271284410118233470318337745546895603e2386",
+ "1.79541977639739687088375911648976940254141946934175300605485966288703931992861387257771264702798405630917098672594899744e2463",
+ "1.70160476180317540861346545791118106171203487587101437710693054174454895160403997508137760007058856854991413121389834429e2540",
+ "1.61269180804119796097157014527479883521656118500417752963675677684343588976915851637637232001139108420659882326614772004e2617",
+ "1.52842477060722969066998464046690349841548269556677423378408183476489015878816585045578141383463708674469365281537792914e2694",
+ "1.44856088916530600122626623629347336702026699647293500058111037526381692645547938577338582002157148103479049071921438452e2771",
+ "1.37287008819265239873777879432333192404914357037749380145412895230166352318128978403808382142784030558123748263528360645e2848",
+ "1.30113431416759441771790128053911040907207490879890145597562380328956450092799014856149474809345424672958343296615764490e2925",
+ "1.23314690739099822369963411660419632130352733806319401863570442920347696015409870236230656305563674376063778482449716744e3002",
+ "1.16871200663155636468514484039368694043851858077879103221831997264419096417014996945143145495038265243932745953706526253e3079",
+ "1.10764398487979357804590117089134596938734185016144401218934115168561552640448889215089150481162977776214124397487013110e3156",
+ "1.04976691458528698318220729857405616816444374000182094405930946710168752954926612218474430081526312018810817657409158490e3233",
+ "9.94914060836531582868347569174220216007647278536863127198023584205669825317884219144692385409156165042162234017403353704e3309",
+ "9.42927401023380446961314339401657458785389811652244742482194123119943160577946366372207045050095290781679375214307398844e3386",
+ "8.93657169598281164656322298275337750103095739790107943666668184304335665562867744740310577868880098719252549186849812451e3463",
+ "8.46961426624835911826517103631490619655296714141872141145089865045804196205328364155921945616925875458926717336478525196e3540",
+ "8.02705648870740089929294815816002943860908317454595055392168733404583122074223427054310572378841634984243492063192095337e3617",
+ "7.60762342267101369970765191988545810374824800500875923752736467467657167098026707905341603949108433696304383346239333297e3694",
+ "7.21010674617694221027190468649359000420209460539838589305387835463807416706224777302997789297329446308541513638035437482e3771",
+ "6.83336127500041943234365059231968669406267422759442985746460610830503287734479988530512309065240678799786759250323660701e3848",
+ }};
+
+ T pi = static_cast<T>("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609");
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = exp(sqrt((pi * (100 * k)) * (100 * k)));
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = exp(-sqrt((pi * (100 * k)) * (100 * k)));
+ e = relative_error(val, T(1/T(data[k])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ }
+ 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
+
+ static const boost::array<boost::array<T, 2>, 10> exact_data =
+ {{
+ {{ std::ldexp(1.0, -50), static_cast<T>("1.00000000000000088817841970012562676935794497867573073630970950828771105957980924149923657574337470594698012676100224953") }},
+ {{ std::ldexp(1.0, -20), static_cast<T>("1.00000095367477115374544678824955687428365188553281789775169686343569285229334215539516690752571791280462887427635269562") }},
+ {{ std::ldexp(1.0, -10), static_cast<T>("1.00097703949241653524284529261160650646585162918174419940186408264916250428896869173656853690882467186075613761065459261") }},
+ {{ 0.25, static_cast<T>("1.28402541668774148407342056806243645833628086528146308921750729687220776586723800275330641943955356890166283174967968731") }},
+ {{ 0.5, static_cast<T>("1.64872127070012814684865078781416357165377610071014801157507931164066102119421560863277652005636664300286663775630779700") }},
+ {{ 0.75, static_cast<T>("2.11700001661267466854536981983709561013449158470240342177913303081098453336401282000279156026661579821888590471901551426") }},
+ {{ 10, static_cast<T>("22026.4657948067165169579006452842443663535126185567810742354263552252028185707925751991209681645258954515555010924578367") }},
+ {{ 10.5, static_cast<T>("36315.5026742466377389120269013166179689315579671275857607480190550842856628099187749764427758174866310742771977376827512") }},
+ {{ 25, static_cast<T>("7.20048993373858725241613514661261579152235338133952787362213864472320593107782569745000325654258093194727871848859163684e10") }},
+ {{ 31.25, static_cast<T>("3.72994612957188849046766396046821396700589012875701157893019118883826370993674081486706667149871508642909416337810227575e13") }},
+ }};
+
+ max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = exp(exact_data[k][0]);
+ T e = relative_error(val, exact_data[k][1]);
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = exp(-exact_data[k][0]);
+ e = relative_error(val, T(1/exact_data[k][1]));
+ 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);
+
+ BOOST_TEST(exp(T(0)) == 1);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPILER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_fixed_int.cpp b/libs/multiprecision/test/test_fixed_int.cpp
new file mode 100644
index 0000000000..87a7239984
--- /dev/null
+++ b/libs/multiprecision/test/test_fixed_int.cpp
@@ -0,0 +1,165 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/gmp.hpp>
+#include <boost/multiprecision/fixed_int.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include "test.hpp"
+
+template <class T>
+T generate_random(unsigned bits_wanted)
+{
+ static boost::random::mt19937 gen;
+ typedef boost::random::mt19937::result_type random_type;
+
+ T max_val;
+ unsigned digits;
+ if(std::numeric_limits<T>::is_bounded && (bits_wanted == std::numeric_limits<T>::digits))
+ {
+ max_val = (std::numeric_limits<T>::max)();
+ digits = std::numeric_limits<T>::digits;
+ }
+ else
+ {
+ max_val = T(1) << bits_wanted;
+ digits = bits_wanted;
+ }
+
+ unsigned bits_per_r_val = std::numeric_limits<random_type>::digits - 1;
+ while((random_type(1) << bits_per_r_val) > (gen.max)()) --bits_per_r_val;
+
+ unsigned terms_needed = digits / bits_per_r_val + 1;
+
+ T val = 0;
+ for(unsigned i = 0; i < terms_needed; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ val %= max_val;
+ return val;
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+ typedef number<fixed_int<1024, true> > packed_type;
+ unsigned last_error_count = 0;
+ for(int i = 0; i < 1000; ++i)
+ {
+ mpz_int a = generate_random<mpz_int>(1000);
+ mpz_int b = generate_random<mpz_int>(512);
+ mpz_int c = generate_random<mpz_int>(256);
+ mpz_int d = generate_random<mpz_int>(32);
+
+ int si = d.convert_to<int>();
+
+ packed_type a1 = a.str();
+ packed_type b1 = b.str();
+ packed_type c1 = c.str();
+ packed_type d1 = d.str();
+
+ BOOST_CHECK_EQUAL(a.str(), a1.str());
+ BOOST_CHECK_EQUAL(b.str(), b1.str());
+ BOOST_CHECK_EQUAL(c.str(), c1.str());
+ BOOST_CHECK_EQUAL(d.str(), d1.str());
+ BOOST_CHECK_EQUAL(mpz_int(a+b).str(), packed_type(a1 + b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a-b).str(), packed_type(a1 - b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(mpz_int(-a)+b).str(), packed_type(packed_type(-a1) + b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(mpz_int(-a)-b).str(), packed_type(packed_type(-a1) - b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(c * d).str(), packed_type(c1 * d1).str());
+ BOOST_CHECK_EQUAL(mpz_int(c * -d).str(), packed_type(c1 * -d1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-c * d).str(), packed_type(-c1 * d1).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * c).str(), packed_type(b1 * c1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / b).str(), packed_type(a1 / b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / -b).str(), packed_type(a1 / -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a / b).str(), packed_type(-a1 / b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / d).str(), packed_type(a1 / d1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % b).str(), packed_type(a1 % b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % -b).str(), packed_type(a1 % -b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a % b).str(), packed_type(-a1 % b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % d).str(), packed_type(a1 % d1).str());
+ // bitwise ops:
+ BOOST_CHECK_EQUAL(mpz_int(a|b).str(), packed_type(a1 | b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a&b).str(), packed_type(a1 & b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a^b).str(), packed_type(a1 ^ b1).str());
+ // Now check operations involving integers:
+ BOOST_CHECK_EQUAL(mpz_int(a + si).str(), packed_type(a1 + si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a + -si).str(), packed_type(a1 + -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a + si).str(), packed_type(-a1 + si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si + a).str(), packed_type(si + a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a - si).str(), packed_type(a1 - si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a - -si).str(), packed_type(a1 - -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a - si).str(), packed_type(-a1 - si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si - a).str(), packed_type(si - a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * si).str(), packed_type(b1 * si).str());
+ BOOST_CHECK_EQUAL(mpz_int(b * -si).str(), packed_type(b1 * -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-b * si).str(), packed_type(-b1 * si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si * b).str(), packed_type(si * b1).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / si).str(), packed_type(a1 / si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a / -si).str(), packed_type(a1 / -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a / si).str(), packed_type(-a1 / si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % si).str(), packed_type(a1 % si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a % -si).str(), packed_type(a1 % -si).str());
+ BOOST_CHECK_EQUAL(mpz_int(-a % si).str(), packed_type(-a1 % si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a|si).str(), packed_type(a1 | si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a&si).str(), packed_type(a1 & si).str());
+ BOOST_CHECK_EQUAL(mpz_int(a^si).str(), packed_type(a1 ^ si).str());
+ BOOST_CHECK_EQUAL(mpz_int(si|a).str(), packed_type(si|a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(si&a).str(), packed_type(si&a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(si^a).str(), packed_type(si^a1).str());
+ BOOST_CHECK_EQUAL(mpz_int(gcd(a, b)).str(), packed_type(gcd(a1, b1)).str());
+ BOOST_CHECK_EQUAL(mpz_int(lcm(c, d)).str(), packed_type(lcm(c1, d1)).str());
+
+ if(last_error_count != boost::detail::test_errors())
+ {
+ last_error_count = boost::detail::test_errors();
+ std::cout << std::hex << std::showbase;
+
+ std::cout << "a = " << a << std::endl;
+ std::cout << "a1 = " << a1 << std::endl;
+ std::cout << "b = " << b << std::endl;
+ std::cout << "b1 = " << b1 << std::endl;
+ std::cout << "c = " << c << std::endl;
+ std::cout << "c1 = " << c1 << std::endl;
+ std::cout << "d = " << d << std::endl;
+ std::cout << "d1 = " << d1 << std::endl;
+ std::cout << "a + b = " << a+b << std::endl;
+ std::cout << "a1 + b1 = " << a1+b1 << std::endl;
+ std::cout << std::dec;
+ std::cout << "a - b = " << a-b << std::endl;
+ std::cout << "a1 - b1 = " << a1-b1 << std::endl;
+ std::cout << "-a + b = " << mpz_int(-a)+b << std::endl;
+ std::cout << "-a1 + b1 = " << packed_type(-a1)+b1 << std::endl;
+ std::cout << "-a - b = " << mpz_int(-a)-b << std::endl;
+ std::cout << "-a1 - b1 = " << packed_type(-a1)-b1 << std::endl;
+ std::cout << "c*d = " << c*d << std::endl;
+ std::cout << "c1*d1 = " << c1*d1 << std::endl;
+ std::cout << "b*c = " << b*c << std::endl;
+ std::cout << "b1*c1 = " << b1*c1 << std::endl;
+ std::cout << "a/b = " << a/b << std::endl;
+ std::cout << "a1/b1 = " << a1/b1 << std::endl;
+ std::cout << "a/d = " << a/d << std::endl;
+ std::cout << "a1/d1 = " << a1/d1 << std::endl;
+ std::cout << "a%b = " << a%b << std::endl;
+ std::cout << "a1%b1 = " << a1%b1 << std::endl;
+ std::cout << "a%d = " << a%d << std::endl;
+ std::cout << "a1%d1 = " << a1%d1 << std::endl;
+ }
+ }
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_float128_serial.cpp b/libs/multiprecision/test/test_float128_serial.cpp
new file mode 100644
index 0000000000..8966969fb2
--- /dev/null
+++ b/libs/multiprecision/test/test_float128_serial.cpp
@@ -0,0 +1,26 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/float128.hpp>
+#include "test_float_serial.hpp"
+
+
+int main()
+{
+ using namespace boost::multiprecision;
+ test<float128>();
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_float_io.cpp b/libs/multiprecision/test/test_float_io.cpp
new file mode 100644
index 0000000000..8ed9e9d4ba
--- /dev/null
+++ b/libs/multiprecision/test/test_float_io.cpp
@@ -0,0 +1,336 @@
+// Copyright John Maddock 2011.
+
+// 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
+
+#if !defined(TEST_MPF_50) && !defined(TEST_CPP_DEC_FLOAT) && !defined(TEST_MPFR_50) \
+ && !defined(TEST_MPFI_50) && !defined(TEST_FLOAT128)
+# define TEST_MPF_50
+# define TEST_CPP_DEC_FLOAT
+# define TEST_MPFR_50
+# define TEST_MPFI_50
+# define TEST_FLOAT128
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#ifdef TEST_FLOAT128
+#include <boost/multiprecision/float128.hpp>
+#endif
+
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include "test.hpp"
+#include <boost/array.hpp>
+#include <iostream>
+#include <iomanip>
+
+#ifdef BOOST_MSVC
+#pragma warning(disable:4127)
+#endif
+
+#if defined(TEST_MPF_50)
+template <unsigned N, boost::multiprecision::expression_template_option ET>
+bool has_bad_bankers_rounding(const boost::multiprecision::number<boost::multiprecision::gmp_float<N>, ET>&)
+{ return true; }
+#endif
+#if defined(TEST_FLOAT128) && defined(BOOST_INTEL)
+bool has_bad_bankers_rounding(const boost::multiprecision::float128&)
+{ return true; }
+#endif
+template <class T>
+bool has_bad_bankers_rounding(const T&) { return false; }
+
+bool is_bankers_rounding_error(const std::string& s, const char* expect)
+{
+ // This check isn't foolproof: that would require *much* more sophisticated code!!!
+ std::string::size_type l = std::strlen(expect);
+ if(l != s.size())
+ return false;
+ std::string::size_type len = s.find('e');
+ if(len == std::string::npos)
+ len = l - 1;
+ else
+ --len;
+ if(s.compare(0, len, expect, len))
+ return false;
+ if(s[len] != expect[len] + 1)
+ return false;
+ return true;
+}
+
+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)
+ {
+ if(has_bad_bankers_rounding(mp_t()) && is_bankers_rounding_error(ss.str(), expect))
+ {
+ std::cout << "Ignoring bankers-rounding error with GMP mp_f.\n";
+ }
+ else
+ {
+ 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));
+ }
+}
+
+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 - 10);
+ return ldexp(val, ui(gen));
+}
+
+template <class T>
+struct max_digits10_proxy
+{
+ static const unsigned value = std::numeric_limits<T>::digits10 + 5;
+};
+#ifdef TEST_CPP_DEC_FLOAT
+template <unsigned D, boost::multiprecision::expression_template_option ET>
+struct max_digits10_proxy<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<D>, ET> >
+{
+ static const unsigned value = std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<D>, ET> >::max_digits10;
+};
+#endif
+#ifdef TEST_MPF_50
+template <unsigned D, boost::multiprecision::expression_template_option ET>
+struct max_digits10_proxy<boost::multiprecision::number<boost::multiprecision::gmp_float<D>, ET> >
+{
+ static const unsigned value = std::numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<D>, ET> >::max_digits10;
+};
+#endif
+#ifdef TEST_MPFR_50
+template <unsigned D, boost::multiprecision::expression_template_option ET>
+struct max_digits10_proxy<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<D>, ET> >
+{
+ static const unsigned value = std::numeric_limits<boost::multiprecision::number<boost::multiprecision::mpfr_float_backend<D>, ET> >::max_digits10;
+};
+#endif
+
+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()
+{
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ 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));
+ }
+}
+
+int main()
+{
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+
+ test_round_trip<boost::multiprecision::mpfr_float_50>();
+ test_round_trip<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+
+ test_round_trip<boost::multiprecision::mpfr_float_50>();
+ test_round_trip<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+
+ // cpp_dec_float has extra guard digits that messes this up:
+ test_round_trip<boost::multiprecision::cpp_dec_float_50>();
+ test_round_trip<boost::multiprecision::cpp_dec_float_100>();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+ /*
+ // I can't get this to work with mpf_t - mpf_str appears
+ // not to actually print enough decimal digits:
+ test_round_trip<boost::multiprecision::mpf_float_50>();
+ test_round_trip<boost::multiprecision::mpf_float_100>();
+ */
+#endif
+#ifdef TEST_FLOAT128
+ test<boost::multiprecision::float128>();
+#ifndef BOOST_INTEL
+ test_round_trip<boost::multiprecision::float128>();
+#endif
+#endif
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_float_serial.hpp b/libs/multiprecision/test/test_float_serial.hpp
new file mode 100644
index 0000000000..cc560b256f
--- /dev/null
+++ b/libs/multiprecision/test/test_float_serial.hpp
@@ -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_
+
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/timer.hpp>
+#include "test.hpp"
+
+#include <iostream>
+#include <iomanip>
+#include <sstream>
+#include <boost/archive/text_iarchive.hpp>
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/binary_iarchive.hpp>
+#include <boost/archive/binary_oarchive.hpp>
+#include <boost/exception/all.hpp>
+
+
+#ifndef BOOST_MP_TEST_FLOAT_SERIAL_HPP
+#define BOOST_MP_TEST_FLOAT_SERIAL_HPP
+
+template <class T>
+T generate_random(unsigned bits_wanted)
+{
+ 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(std::numeric_limits<T>::min_exponent + 1, std::numeric_limits<T>::max_exponent - 1);
+ return ldexp(val, ui(gen));
+}
+
+template <class T>
+void test()
+{
+ boost::timer tim;
+
+ while(true)
+ {
+ T val = generate_random<T>(boost::math::tools::digits<T>());
+ int test_id = 0;
+ std::string stream_contents;
+ try{
+ test_id = 0;
+ {
+ std::stringstream ss(std::ios_base::in | std::ios_base::out | std::ios_base::binary);
+ boost::archive::text_oarchive oa(ss);
+ oa << static_cast<const T&>(val);
+ stream_contents = ss.str();
+ boost::archive::text_iarchive ia(ss);
+ T val2;
+ ia >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ {
+ std::stringstream ss(std::ios_base::in | std::ios_base::out | std::ios_base::binary);
+ ++test_id;
+ boost::archive::binary_oarchive ba(ss);
+ ba << static_cast<const T&>(val);
+ stream_contents = ss.str();
+ boost::archive::binary_iarchive ib(ss);
+ T val2;
+ ib >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ {
+ std::stringstream ss(std::ios_base::in | std::ios_base::out | std::ios_base::binary);
+ val = -val;
+ ++test_id;
+ boost::archive::text_oarchive oa2(ss);
+ oa2 << static_cast<const T&>(val);
+ stream_contents = ss.str();
+ boost::archive::text_iarchive ia2(ss);
+ T val2;
+ ia2 >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ {
+ std::stringstream ss(std::ios_base::in | std::ios_base::out | std::ios_base::binary);
+ ++test_id;
+ boost::archive::binary_oarchive ba2(ss);
+ ba2 << static_cast<const T&>(val);
+ stream_contents = ss.str();
+ boost::archive::binary_iarchive ib2(ss);
+ T val2;
+ ib2 >> val2;
+ BOOST_CHECK_EQUAL(val, val2);
+ }
+ }
+ catch(const boost::exception& e)
+ {
+ std::cout << "Caught boost::exception with:\n";
+ std::cout << diagnostic_information(e);
+ std::cout << "Failed test ID = " << test_id << std::endl;
+ std::cout << "Stream contents were: \n" << stream_contents << std::endl;
+ ++boost::detail::test_errors();
+ break;
+ }
+ catch(const std::exception& e)
+ {
+ std::cout << "Caught std::exception with:\n";
+ std::cout << e.what() << std::endl;
+ std::cout << "Failed test ID = " << test_id << std::endl;
+ std::cout << "Stream contents were: \n" << stream_contents << std::endl;
+ ++boost::detail::test_errors();
+ break;
+ }
+ //
+ // Check to see if test is taking too long.
+ // Tests run on the compiler farm time out after 300 seconds,
+ // so don't get too close to that:
+ //
+ if(tim.elapsed() > 150)
+ {
+ std::cout << "Timeout reached, aborting tests now....\n";
+ break;
+ }
+ }
+}
+
+#endif
diff --git a/libs/multiprecision/test/test_fpclassify.cpp b/libs/multiprecision/test/test_fpclassify.cpp
new file mode 100644
index 0000000000..dd5221cfc8
--- /dev/null
+++ b/libs/multiprecision/test/test_fpclassify.cpp
@@ -0,0 +1,342 @@
+// Copyright John Maddock 2006.
+// Copyright Paul A. Bristow 2007
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <cmath>
+#include <math.h>
+#include <boost/limits.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_MPFR_50
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_MPFI_50
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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
+#endif
+
+const char* method_name(const boost::math::detail::native_tag&)
+{
+ return "Native";
+}
+
+const char* method_name(const boost::math::detail::generic_tag<true>&)
+{
+ return "Generic (with numeric limits)";
+}
+
+const char* method_name(const boost::math::detail::generic_tag<false>&)
+{
+ return "Generic (without numeric limits)";
+}
+
+const char* method_name(const boost::math::detail::ieee_tag&)
+{
+ return "IEEE std";
+}
+
+const char* method_name(const boost::math::detail::ieee_copy_all_bits_tag&)
+{
+ return "IEEE std, copy all bits";
+}
+
+const char* method_name(const boost::math::detail::ieee_copy_leading_bits_tag&)
+{
+ return "IEEE std, copy leading bits";
+}
+
+template <class T>
+void test()
+{
+ typedef typename boost::math::detail::fp_traits<T>::type traits;
+
+ T t = 2;
+ T u = 2;
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_NORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_NORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ if(std::numeric_limits<T>::is_specialized)
+ {
+ t = (std::numeric_limits<T>::max)();
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_NORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_NORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ t = (std::numeric_limits<T>::min)();
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_NORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_NORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ }
+ if(std::numeric_limits<T>::has_denorm)
+ {
+ t = (std::numeric_limits<T>::min)();
+ t /= 2;
+ if(t != 0)
+ {
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_SUBNORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_SUBNORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ }
+ t = std::numeric_limits<T>::denorm_min();
+ if((t != 0) && (t < (std::numeric_limits<T>::min)()))
+ {
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_SUBNORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_SUBNORMAL);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ }
+ }
+ else
+ {
+ std::cout << "Denormalised forms not tested" << std::endl;
+ }
+ t = 0;
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_ZERO);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_ZERO);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ t /= -u; // create minus zero if it exists
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_ZERO);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_ZERO);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ // infinity:
+ if(std::numeric_limits<T>::has_infinity)
+ {
+ // At least one std::numeric_limits<T>::infinity)() returns zero
+ // (Compaq true64 cxx), hence the check.
+ t = (std::numeric_limits<T>::infinity)();
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_INFINITE);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_INFINITE);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+#if !defined(__BORLANDC__) && !(defined(__DECCXX) && !defined(_IEEE_FP))
+ // divide by zero on Borland triggers a C++ exception :-(
+ // divide by zero on Compaq CXX triggers a C style signal :-(
+ t = 2;
+ u = 0;
+ t /= u;
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_INFINITE);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_INFINITE);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+ t = -2;
+ t /= u;
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_INFINITE);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_INFINITE);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (::boost::math::fpclassify)(t + 0));
+#else
+ std::cout << "Infinities from divide by zero not tested" << std::endl;
+#endif
+ }
+ else
+ {
+ std::cout << "Infinity not tested" << std::endl;
+ }
+#ifndef __BORLANDC__
+ // NaN's:
+ // Note that Borland throws an exception if we even try to obtain a Nan
+ // by calling std::numeric_limits<T>::quiet_NaN() !!!!!!!
+ if(std::numeric_limits<T>::has_quiet_NaN)
+ {
+ t = std::numeric_limits<T>::quiet_NaN();
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_NAN);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_NAN);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ }
+ else
+ {
+ std::cout << "Quiet NaN's not tested" << std::endl;
+ }
+ if(std::numeric_limits<T>::has_signaling_NaN)
+ {
+ t = std::numeric_limits<T>::signaling_NaN();
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(t), (int)FP_NAN);
+ BOOST_CHECK_EQUAL((::boost::math::fpclassify)(-t), (int)FP_NAN);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isfinite)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isinf)(-t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnan)(-t), true);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(t), false);
+ BOOST_CHECK_EQUAL((::boost::math::isnormal)(-t), false);
+ }
+ else
+ {
+ std::cout << "Signaling NaN's not tested" << std::endl;
+ }
+#endif
+}
+
+int main()
+{
+ BOOST_MATH_CONTROL_FP;
+ // start by printing some information:
+#ifdef isnan
+ std::cout << "Platform has isnan macro." << std::endl;
+#endif
+#ifdef fpclassify
+ std::cout << "Platform has fpclassify macro." << std::endl;
+#endif
+#ifdef BOOST_HAS_FPCLASSIFY
+ std::cout << "Platform has FP_NORMAL macro." << std::endl;
+#endif
+ std::cout << "FP_ZERO: " << (int)FP_ZERO << std::endl;
+ std::cout << "FP_NORMAL: " << (int)FP_NORMAL << std::endl;
+ std::cout << "FP_INFINITE: " << (int)FP_INFINITE << std::endl;
+ std::cout << "FP_NAN: " << (int)FP_NAN << std::endl;
+ std::cout << "FP_SUBNORMAL: " << (int)FP_SUBNORMAL << std::endl;
+
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#endif
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#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();
+}
+
diff --git a/libs/multiprecision/test/test_generic_conv.cpp b/libs/multiprecision/test/test_generic_conv.cpp
new file mode 100644
index 0000000000..f23aa39c5d
--- /dev/null
+++ b/libs/multiprecision/test/test_generic_conv.cpp
@@ -0,0 +1,207 @@
+///////////////////////////////////////////////////////////////
+// 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/detail/lightweight_test.hpp>
+#include <boost/array.hpp>
+#include "test.hpp"
+
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/random.hpp>
+
+#ifdef TEST_GMP
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_TOMMATH
+#include <boost/multiprecision/tommath.hpp>
+#endif
+#ifdef TEST_MPFR
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+
+int main()
+{
+ using namespace boost::multiprecision;
+ using namespace boost::random;
+
+ independent_bits_engine<mt11213b, 1024, cpp_int> gen;
+ mt11213b small_gen;
+
+ for(unsigned i = 0; i < 100; ++i)
+ {
+ cpp_int c = gen();
+ //
+ // Integer to integer conversions first:
+ //
+#ifdef TEST_GMP
+ mpz_int z(c);
+ cpp_int t(z);
+ BOOST_CHECK_EQUAL(t, c);
+ z.assign(-c);
+ t.assign(-z);
+ BOOST_CHECK_EQUAL(t, c);
+#endif
+#ifdef TEST_TOMMATH
+ tom_int tom(c);
+ cpp_int t2(tom);
+ BOOST_CHECK_EQUAL(t2, c);
+ tom.assign(-c);
+ t2.assign(-tom);
+ BOOST_CHECK_EQUAL(t2, c);
+#endif
+ //
+ // Now integer to float:
+ //
+ typedef number<cpp_dec_float<500> > dec_float_500;
+ dec_float_500 df(c);
+ dec_float_500 df2(c.str());
+ BOOST_CHECK_EQUAL(df, df2);
+ df.assign(-c);
+ df2 = -df2;
+ BOOST_CHECK_EQUAL(df, df2);
+#ifdef TEST_GMP
+ typedef number<gmp_float<500> > mpf_type;
+ mpf_type mpf(c);
+ mpf_type mpf2(c.str());
+ BOOST_CHECK_EQUAL(mpf, mpf2);
+ mpf.assign(-c);
+ mpf2 = -mpf2;
+ BOOST_CHECK_EQUAL(mpf, mpf2);
+#endif
+#ifdef TEST_MPFR
+ typedef number<mpfr_float_backend<500> > mpfr_type;
+ mpfr_type mpfr(c);
+ mpfr_type mpfr2(c.str());
+ BOOST_CHECK_EQUAL(mpfr, mpfr2);
+ mpfr.assign(-c);
+ mpfr2 = -mpfr2;
+ BOOST_CHECK_EQUAL(mpfr, mpfr2);
+#endif
+ //
+ // Now float to float:
+ //
+ df.assign(c);
+ df /= dec_float_500(gen());
+ dec_float_500 tol("1e-500");
+#ifdef TEST_GMP
+ mpf.assign(df);
+ mpf2 = static_cast<mpf_type>(df.str());
+ BOOST_CHECK_EQUAL(mpf, mpf2);
+ df.assign(mpf);
+ df2 = static_cast<dec_float_500>(mpf.str());
+ BOOST_CHECK(fabs((df - df2) / df) < tol);
+#endif
+#ifdef TEST_MPFR
+ mpfr.assign(df);
+ mpfr2 = static_cast<mpfr_type>(df.str());
+ BOOST_CHECK_EQUAL(mpfr, mpfr2);
+ df.assign(mpfr);
+ df2 = static_cast<dec_float_500>(mpfr.str());
+ BOOST_CHECK(fabs((df - df2) / df) < tol);
+#endif
+ //
+ // Rational to rational conversions:
+ //
+ cpp_rational cppr(c, gen()), cppr2, cppr3;
+#ifdef TEST_GMP
+ mpq_rational mpq(cppr);
+ cppr2.assign(mpq);
+ BOOST_CHECK_EQUAL(cppr, cppr2);
+#endif
+#ifdef TEST_TOMMATH
+ tom_rational tr(cppr);
+ cppr3.assign(tr);
+ BOOST_CHECK_EQUAL(cppr, cppr3);
+#endif
+ //
+ // Integer to rational conversions:
+ //
+#ifdef TEST_GMP
+ mpq.assign(c);
+ mpq_rational mpq2 = static_cast<mpq_rational>(c.str());
+ BOOST_CHECK_EQUAL(mpq, mpq2);
+#endif
+#ifdef TEST_TOMMATH
+ tr.assign(c);
+ tom_rational tr2 = static_cast<tom_rational>(c.str());
+ BOOST_CHECK_EQUAL(tr, tr2);
+#endif
+ //
+ // Rational to float:
+ //
+ df.assign(cppr);
+ df2.assign(numerator(cppr));
+ df2 /= dec_float_500(denominator(cppr));
+ BOOST_CHECK(fabs(df - df2) / df2 < tol);
+ //
+ // Float to rational:
+ //
+ static const int max_range = std::numeric_limits<double>::digits >= std::numeric_limits<int>::digits ? std::numeric_limits<int>::max() : (1 << (std::numeric_limits<double>::digits - 1)) - 1;
+ static const int min_range = std::numeric_limits<double>::digits >= std::numeric_limits<int>::digits ? std::numeric_limits<int>::min() : -(1 << (std::numeric_limits<double>::digits - 1)) + 1;
+ static const boost::random::uniform_int_distribution<> i_val_dist(min_range, max_range);
+ static const boost::random::uniform_int_distribution<> i_exp_dist(std::numeric_limits<double>::min_exponent, std::numeric_limits<double>::max_exponent - 2 - std::numeric_limits<int>::digits);
+ int iv = i_val_dist(small_gen);
+ int eval = i_exp_dist(small_gen);
+ double dv = iv;
+ dv = ldexp(dv, eval);
+ cppr = dv;
+ cppr2 = iv;
+ cpp_int cppi = 1;
+ cppi <<= abs(eval);
+ if(eval < 0)
+ cppr2 /= cppi;
+ else
+ cppr2 *= cppi;
+ BOOST_CHECK_EQUAL(cppr, cppr2);
+ //
+ // Again but with bigger numbers:
+ //
+ cpp_int cppi2 = gen();
+ number<cpp_bin_float<1030> > cppbf(cppi2);
+ cppbf = ldexp(cppbf, eval);
+ cppr.assign(cppbf);
+ cppr2 = cppi2;
+ if(eval < 0)
+ cppr2 /= cppi;
+ else
+ cppr2 *= cppi;
+ BOOST_CHECK_EQUAL(cppr, cppr2);
+ //
+ // MSVC will compile either the code above, or
+ // the code below, but not both in the same file.
+ // Other compilers including Intel in msvc-compatibity
+ // mode have no such difficulty. Indeed the fact that
+ // the presence of the code below causes the code above to
+ // fail to compile strongly suggests a compiler bug.
+ //
+#if !defined(BOOST_MSVC)
+ //
+ // Again but with bigger base 10 numbers:
+ //
+ number<cpp_dec_float<std::numeric_limits<int1024_t>::digits10 + 2> > cppdec2(cppi2);
+ cppdec2 = scalbn(cppdec2, eval);
+ cppr.assign(cppdec2);
+ cppr2 = cppi2;
+ cppi = 10;
+ cppi = pow(cppi, abs(eval));
+ if(eval < 0)
+ cppr2 /= cppi;
+ else
+ cppr2 *= cppi;
+ BOOST_CHECK_EQUAL(cppr, cppr2);
+#endif
+ }
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_gmp_conversions.cpp b/libs/multiprecision/test/test_gmp_conversions.cpp
new file mode 100644
index 0000000000..3309b8a568
--- /dev/null
+++ b/libs/multiprecision/test/test_gmp_conversions.cpp
@@ -0,0 +1,158 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/array.hpp>
+#include "test.hpp"
+
+#include <boost/multiprecision/gmp.hpp>
+
+int main()
+{
+ using namespace boost::multiprecision;
+ //
+ // Test interconversions between GMP supported backends:
+ //
+ mpf_t mpf;
+ mpz_t mpz;
+ mpq_t mpq;
+ mpf_init2(mpf, 100);
+ mpf_set_ui(mpf, 2u);
+ mpz_init(mpz);
+ mpz_set_ui(mpz, 2u);
+ mpq_init(mpq);
+ mpq_set_ui(mpq, 2u, 1u);
+
+ BOOST_TEST(mpf_float(mpf) == 2);
+ BOOST_TEST(mpf_float_50(mpf) == 2);
+ BOOST_TEST(mpf_float(mpz) == 2);
+ BOOST_TEST(mpf_float_50(mpz) == 2);
+ BOOST_TEST(mpf_float(mpq) == 2);
+ BOOST_TEST(mpf_float_50(mpq) == 2);
+
+ mpf_float f0;
+ mpf_float_50 f50;
+ f0 = mpf;
+ BOOST_TEST(f0 == 2);
+ f0 = 0;
+ f0 = mpz;
+ BOOST_TEST(f0 == 2);
+ f0 = 0;
+ f0 = mpq;
+ BOOST_TEST(f0 == 2);
+
+ f50 = mpf;
+ BOOST_TEST(f50 == 2);
+ f50 = 0;
+ f50 = mpz;
+ BOOST_TEST(f50 == 2);
+ f50 = 0;
+ f50 = mpq;
+ BOOST_TEST(f50 == 2);
+
+ f50 = 4;
+ f0 = f50;
+ BOOST_TEST(f0 == 4);
+ f0 = 3;
+ f50 = f0;
+ BOOST_TEST(f50 == 3);
+ f50 = 4;
+ BOOST_TEST(mpf_float(f50) == 4);
+ BOOST_TEST(mpf_float_50(f0) == 3);
+
+ mpz_int iz(2);
+ mpq_rational rat(2);
+ f50 = iz;
+ BOOST_TEST(f50 == 2);
+ f0 = iz;
+ BOOST_TEST(f0 == 2);
+ BOOST_TEST(mpf_float(iz) == 2);
+ BOOST_TEST(mpf_float_50(iz) == 2);
+ BOOST_TEST(mpf_float(rat) == 2);
+ BOOST_TEST(mpf_float_50(rat) == 2);
+
+ BOOST_TEST(mpz_int(mpf) == 2);
+ BOOST_TEST(mpz_int(mpz) == 2);
+ BOOST_TEST(mpz_int(mpq) == 2);
+ iz = 3;
+ iz = mpz_int(mpf); // explicit conversion only
+ BOOST_TEST(iz == 2);
+ iz = 3;
+ iz = mpz;
+ BOOST_TEST(iz == 2);
+ iz = 4;
+ iz = mpz_int(mpq); // explicit conversion only
+ BOOST_TEST(iz == 2);
+ f0 = 2;
+ f50 = 2;
+
+ BOOST_TEST(mpz_int(f0) == 2);
+ BOOST_TEST(mpz_int(f50) == 2);
+ rat = 2;
+ BOOST_TEST(mpz_int(rat) == 2);
+ iz = 3;
+ iz = static_cast<mpz_int>(f0);
+ BOOST_TEST(iz == 2);
+ iz = 3;
+ iz = static_cast<mpz_int>(f50);
+ BOOST_TEST(iz == 2);
+ iz = 3;
+ iz = static_cast<mpz_int>(rat);
+ BOOST_TEST(iz == 2);
+
+ BOOST_TEST(mpq_rational(mpz) == 2);
+ BOOST_TEST(mpq_rational(mpq) == 2);
+ BOOST_TEST(mpq_rational(iz) == 2);
+ rat = 3;
+ rat = mpz;
+ BOOST_TEST(rat == 2);
+ rat = 3;
+ rat = mpq;
+ BOOST_TEST(rat == 2);
+ rat = 3;
+ rat = iz;
+ BOOST_TEST(rat == 2);
+
+ iz = numerator(rat);
+ BOOST_TEST(iz == 2);
+ iz = denominator(rat);
+ BOOST_TEST(iz == 1);
+
+ //
+ // Conversions involving precision only,
+ // note that mpf_t precisions are only approximate:
+ //
+ mpf_float::default_precision(30);
+ f50 = 2;
+ mpf_float_100 f100(3);
+ mpf_float f0a(4);
+ mpf_float f0b(f100);
+ BOOST_TEST(f0a.precision() >= 30);
+ BOOST_TEST(f0b.precision() >= 100);
+ f0a = f100;
+ BOOST_TEST(f0a == 3);
+ BOOST_TEST(f0a.precision() >= 100);
+
+ f100 = f50;
+ BOOST_TEST(f100 == 2);
+
+ mpf_clear(mpf);
+ mpz_clear(mpz);
+ mpq_clear(mpq);
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_int_io.cpp b/libs/multiprecision/test/test_int_io.cpp
new file mode 100644
index 0000000000..a1f01a3512
--- /dev/null
+++ b/libs/multiprecision/test/test_int_io.cpp
@@ -0,0 +1,169 @@
+// Copyright John Maddock 2011.
+
+// 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
+
+#if !defined(TEST_MPZ) && !defined(TEST_TOMMATH) && !defined(TEST_CPP_INT)
+# define TEST_TOMMATH
+# define TEST_MPZ
+# define TEST_CPP_INT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPZ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_TOMMATH)
+#include <boost/multiprecision/tommath.hpp>
+#endif
+#ifdef TEST_CPP_INT
+#include <boost/multiprecision/cpp_int.hpp>
+#endif
+
+#include <boost/algorithm/string/case_conv.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include "test.hpp"
+#include <iostream>
+#include <iomanip>
+
+#ifdef BOOST_MSVC
+#pragma warning(disable:4127)
+#endif
+
+template <class T>
+struct unchecked_type{ typedef T type; };
+
+#ifdef TEST_CPP_INT
+template <unsigned MinBits, unsigned MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
+struct unchecked_type<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >
+{
+ typedef boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, boost::multiprecision::unchecked, Allocator>, ExpressionTemplates> type;
+};
+#endif
+
+template <class T>
+T generate_random()
+{
+ typedef typename unchecked_type<T>::type unchecked_T;
+
+ static const unsigned limbs = std::numeric_limits<T>::is_specialized && std::numeric_limits<T>::is_bounded ? std::numeric_limits<T>::digits / std::numeric_limits<unsigned>::digits + 3 : 20;
+
+ static boost::random::uniform_int_distribution<unsigned> ui(0, limbs);
+ static boost::random::mt19937 gen;
+ unchecked_T val = gen();
+ unsigned lim = ui(gen);
+ for(unsigned i = 0; i < lim; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ return val;
+}
+
+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(std::numeric_limits<T>::digits10 + 5);
+#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));
+ if(val >= 0)
+ {
+ do_round_trip(val, std::ios_base::fmtflags(std::ios_base::showbase|std::ios_base::hex));
+ do_round_trip(val, std::ios_base::fmtflags(std::ios_base::showbase|std::ios_base::oct));
+ }
+}
+
+template <class T>
+void negative_round_trip(T val, const boost::mpl::true_&)
+{
+ do_round_trip(T(-val));
+}
+template <class T>
+void negative_round_trip(T, const boost::mpl::false_&)
+{
+}
+
+template <class T>
+void negative_spots(const boost::mpl::true_&)
+{
+ BOOST_CHECK_EQUAL(T(-1002).str(), "-1002");
+ if(!std::numeric_limits<T>::is_modulo)
+ {
+ BOOST_CHECK_THROW(T(-2).str(0, std::ios_base::oct), std::runtime_error);
+ BOOST_CHECK_THROW(T(-2).str(0, std::ios_base::hex), std::runtime_error);
+ }
+}
+template <class T>
+void negative_spots(const boost::mpl::false_&)
+{
+}
+
+template <class T>
+void test_round_trip()
+{
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ T val = generate_random<T>();
+ do_round_trip(val);
+ negative_round_trip(val, boost::mpl::bool_<std::numeric_limits<T>::is_signed>());
+ }
+
+ BOOST_CHECK_EQUAL(T(1002).str(), "1002");
+ BOOST_CHECK_EQUAL(T(1002).str(0, std::ios_base::showpos), "+1002");
+ BOOST_CHECK_EQUAL(T(1002).str(0, std::ios_base::oct), "1752");
+ BOOST_CHECK_EQUAL(T(1002).str(0, std::ios_base::oct|std::ios_base::showbase), "01752");
+ BOOST_CHECK_EQUAL(boost::to_lower_copy(T(1002).str(0, std::ios_base::hex)), "3ea");
+ BOOST_CHECK_EQUAL(boost::to_lower_copy(T(1002).str(0, std::ios_base::hex|std::ios_base::showbase)), "0x3ea");
+ BOOST_CHECK_EQUAL(T(1002).str(0, std::ios_base::dec), "1002");
+ BOOST_CHECK_EQUAL(T(1002).str(0, std::ios_base::dec|std::ios_base::showbase), "1002");
+
+ negative_spots<T>(boost::mpl::bool_<std::numeric_limits<T>::is_signed>());
+}
+
+int main()
+{
+#ifdef TEST_MPZ
+ test_round_trip<boost::multiprecision::mpz_int>();
+#endif
+#ifdef TEST_TOMMATH
+ test_round_trip<boost::multiprecision::tom_int>();
+#endif
+#ifdef TEST_CPP_INT
+ test_round_trip<boost::multiprecision::cpp_int>();
+ test_round_trip<boost::multiprecision::checked_int1024_t>();
+ test_round_trip<boost::multiprecision::checked_uint512_t >();
+ test_round_trip<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<32, 32, boost::multiprecision::signed_magnitude, boost::multiprecision::checked, void> > >();
+ test_round_trip<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<32, 32, boost::multiprecision::unsigned_magnitude, boost::multiprecision::checked, void> > >();
+#endif
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_log.cpp b/libs/multiprecision/test/test_log.cpp
new file mode 100644
index 0000000000..669deb1e81
--- /dev/null
+++ b/libs/multiprecision/test/test_log.cpp
@@ -0,0 +1,264 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_MPFR_50
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_MPFI_50
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 101> data =
+ {{
+ "-2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806",
+ "10.355073440919378699690477472036470469315794905372650461119520557405966250191554948388847794306923706128373152780234988638443954821327953543032075228882306893901540038156503265416950932549208174713640840670002321534598356631953006304821201484830902632165858733357596733427094375150860310219829690440417223992885533566388118595248523193740778052893647271700612136670114224280374211626787106078693643289",
+ "11.741365414719872359995630593475834957852130639032528348910839621576752378207582766840832626901446337859064321328454096088656817987112409176281442608184950888327275070356290649885618053367245169005379545357345645235094776018156840041023694466493107510640907700621694994008944652785168884717808235919056023540605910031676977750466679901495978099025342154131430098841939052890393197699093697421676686108",
+ "12.552295188839391064403078983058501313786961042419051509346988474726615643710688192053158471717695991904853941837387256340073310064341282022830248452137946273986542713154937759697687656073485311102053666502633006429446632794099471395918827441203897096147814416727830805903830888831170139661499031930347916453836121200110772307492771615813954882033814741470466415076136175748560866462690250372712624427",
+ "13.12765917900902322346243585913156826327069465639834188399662474212182724479008698347907678965083909936781641397385483495362268256360763444317213586059490467781653518008717313901614800566992248144716374322429987750723867821114358979404591879648104388637035609754399283274014767545593886580941165664957384975221949645055255781874944374229417864853289321901220692566918330756199433299461690335766708584",
+ "13.573946210017730027239177097297058651455670148127333215055495986565964988037166389618503523561570994165268599045375753512400565200059790703280760252213714757212213525833556727462647729566258301490115414864748436290794191111843775262434063842232241185107471214859854864335150887423144285468856056851239653315249148749701603523173627966758652109489308872414194066451074827802642589890222384815709071028",
+ "13.938589284701101831675037903832444894846690407420628610481163937380536465305805316181768586604603341197033655576371082304146219991693253987043452241307224478718013872459287813264283001906622959681872321576087143975972033651747378310838673897181549722528073649569290162541997276292708638316653324605571398691171391912961431088832002969546541039753774950645926800096854799942237644831671997679785482847",
+ "14.246890620897408672445451566098178524763429935510610216690355229695078778430708804421870639655370744549370273426124295240527401708361100923871708589722651960428863955835558634640426846383161118062310502176054546468600516588908689567134867002953229862887953032595529925511011383644740837050282379317993152702704798000312156694502691021267028423979454580574052732764336948692001989411724963233511159783",
+ "14.51395339092117324610526432755496036199337959182144260442491096061930765841595850793460014941610881052330595683873016973224744403781498772061971443926277312865243350174522677227134957935047605429941424114476598970997223505479765426888886686275495180653025817201214478249415383537946915840293549927935267010481189550187682053892807264533011114305883442850485847010726074555176479027986850883182954118",
+ "14.749519451795537716462643672888549370666057639128212044001868590062813335472483708120056955187220713486931180221186191741860718823347399129280491176499608998857949407351247432513825095161942372289203657231256344909997480732110798704027258108845584594081552703009126596026870753341888414903979390651641367952487019992866762344920748102417282166652161104367292712971759633790964534907923779335451109079",
+ "14.960240475644662390024535772058360495972689995692264619118050620984863397335883147741001175137837088856196207660064061839685086120444324885420172384357780225067863432546453923434326358834374021700709153791633034800554630092122384413882780201869241166113270104158152592921242256738530713688528178980864650875690860545577283508963373084295388766350046816560200649161822618828666606722223620871032632611",
+ "15.150860829728925816270269964092673433542841210964830162793225770535551518840933315190406262273098573795238063523955485390896001670839635976377071048140363687808579387495186737492639543519534774851635101169579614712607935494886581440494071142193798729857001548284675533558490478467589884332536443679208006567281631805562767928329937083844501800478013385969649342207304490375728237042482944784544838254",
+ "15.324883579506436493570233597448883519693351814374549397498489035148221882270042436654099306811313261346823941672888447313628931256927773946985727814886420570056552118783468127543676769633344136209500636666830026098080195180498059221494203817961212365532443050015541947762494604799890429565189588245725920948145579035449699519788465993549043152027361890729572024195346130030456992216388648768722394836",
+ "15.484968991583560712862164152602532972505596882865402498065644250737301955125596006515274461619204302558285733320299957799185995441209009451408808376560872924206710117585718578727591708553957297729203457443101522435265312291388453827953066056871634785359329503731609907767433693085428240202927311226115616775436485821324503901092891486358733365244513748729928672060637178808283856096451123227237766837",
+ "15.633184933296400322886411216914351313442169047575854720677392808712745585778888867637029115450088924031428350724038141381219620588274493330817678181565157141965018413952386880843987389414299029950277357119925470077396582940505069596480801954154029286187951921181728705116872415271634077604874063371227144842898712603028462623610688275714711124501733417572553751110494225479183571648948845731888607993",
+ "15.771170674177108994750017157264759379388540187789301748807798065200414118407271774235601089093934343495795521812477515931432709195503245641975701807702026215615357450518151317247119115864533992757135781852491298348627270712291588580073932563653614422839620206266586292520948221873093053975823776289996754936187304352159896156876771015468496811587576227636095095473566772184717633945339405330371627545",
+ "15.900247714739125237305645451417508966665591345786220672552302840334525160137723176098165167253830541655084109190400464710649206788771240950251243759258268060695212680017248831015574286848979270728739089100870231114250075432989803029255029492399141798408644860336753530942734586654467728627658977642688053752033223720047083446705808444218983029996407752310091763448795485193086044050699179075227514085",
+ "16.021496956952197922992283502641894579962626483154818954043789565712934054541190510263229676242727892630672492409948339732534439120465067507199758379167701667321617794907607307728874859663168072318224068053703928672394393376652024298292046951118253912008558176064907492479298408285769067404165601995001682495873893492451380569168665052480684672167775365328449822100602627386235888117607629689989295358",
+ "16.135813783442291449575041100809653925479234724736343542177079039059170241908162244448865517513646317913575323823536275208044355623776985732503939829900060864487127004364547143183319169525031486430688761890355067541570726092642869160866842639424318480923069734468346837396224375681293323049896437786794370196393419740684520457519876260717581058279975484300455393801884203407282602155622048760192869731",
+ "16.243948224975912162101874242338089698927747514172297963501304802721456885123447742525917146000081948350317670558217990170315910524955950657647628011646020228669505156094231753926456488583104510177838897523717492728937537629972877557426292386450904986250829454391823373783104867874948543639133365724217397301073161382317429508046689262594057712721480553629716238053162259132557499326959178271755311819",
+ "16.346534812891312020017737390565972522861639520956794183631801030677318559517349930264816297286373068267542772472219372292428845683416042271115312027071601889325060155482892443418582095080544516697369324049179348198348320350032057951783059238791085449471373733253488008998200818236407442435705194113745206455080467406424910471012832247972967952311217374959559350158619575075500673005632848486334892081",
+ "16.444115140490340128500589643685615592593325439192231430163649023292793816677629077048173396104592590442505550803932707806677495894373323443853064668488945973357469342360809555842080876327526869093152265593359032627507962690981132695345232937664935403696772586286371082469152648334224734697834132478315542287352614722743239776066558016553826776123247656549922477370984130115175375533899599151832866777",
+ "16.537155171118865136534989063582757364253199496897225305411818162632163606557745471767961160436879104964882723479325928591604518246962419687548390063992529356693298596378658322800277364077966826234091623459656551097008920549618056923279473982070326894236928331513682937597704431571923632859325944958271156630648510192786810276479282782233678225160061893949554276261365074478039201200141096034185340788",
+ "16.626058695701082390621404187251773798561764113151150041596109882112467488919141098521165822165293765039118029510544981683905860141438867442019067534265891760023149100317968826679154566584457042877767867250357368225093921585968539417839705388349710086788853906351301543791493808667435475597486845630653110450254081800953162013336880338884388603160347478448669890791767227275369657780841518987171046251",
+ "16.711177924047687436041681081297469757517395732698719962499711839818824068470368594816509809165130772248099176990649818696451892735033114399817499272685517472929769530848678764490613732856699010061350335113220658748043901782349324603111802594973838523650919828685995473213566914734286172266839140529583990377667556754261878256224596588519392559788652514828861263680954096492024398529162625680677258884",
+ "16.792821912654942574589969785414406627855177803111176492774370259331640542125643510644899208865670120639893723574191986313708664152776559897034386961403215067476041927571306948209653637016541256814370701598681758297129259567548154765775910932763810160923332344469835976310776610418278334876476195529920021337399751846302536974621623453741347064741080510495703994896565552519309503521053051550623483165",
+ "16.871263338577273117049933407315211807184894736082799946337588399915643695388836578819581481279897851015095335198849942961931601540668917787952832251688896660707943869197097893837964754891796695592066084995854170120209827918603483811654385230282025426754327077293929504883381435192439219366582495078959939830875435944938000044089717015334115741229281828493468876793032191535756728196375330663180727281",
+ "16.946743994200631806033476403925371852051109645526740171061759524387799979304956484613870531865187139791227191840781754383935422487885452369507952721547705027535773654885832127821314459521240798742974634464887793874048016231828535132695506414037947185201173465247385982934992490469404967587724592554548395276895353595409898385619478502390678687463962622836411208115179925881515699871702165077675857036",
+ "17.019479282236065828727803356580529388797042464710975507911282243104151862598751845439937481303609237769338953879291798328663979939210753132559510492288100384177867237190989151135211416672909332732482371326996189543048703303285313799031214641216166381411885795576234361808712082618702464622338883787915216150436372783047860816587095332458688921705641277515576461385290501276378977328383137813013202605",
+ "17.089661921583428533920885090473894674921519340994685086552627218992626938319872359613748323826158856027837200411438668460410538403836237956276065714403575420148736981655027235218177614075251822388622713232585428029969533906061654341819894513492491624632974192525592636008127939368987600981961744622054023981036109865947530952316809705151315101400446930619393266624895135955182323721805890693892489067",
+ "17.157465024686670167940702199808038440453826682770881229464136716214305217066325160993039686330328188786987064692354236198505670650108871009195717920051441546822338399371747349503874711833721760676087218038457960626001087951737722106836691584985009357268276351001658789309901363541541142239028890280836555429745898638761562947010206765922958485242984359891337645169887782296197402533921841201821435322",
+ "17.223044670108153088406971612680579462250390145455205711423224535559905829397735171751863831903325186673310251936245608147861310604382786127429364616442074955520795624793164764110780962566943990430036624945190166480864873260501647262851147587875798742974124100786387378932173276365815649310057053480347330487890156980245097594505867694166591312545929965230291418670445516669557156689966248314016354044",
+ "17.286542066533530981819924644041556546839394128235306235416269038138274222049809140847092268150839206354707638710275634022335650694777681817694798501418812448888688173373947001904190184008892957674606496333161081431327984331509197841574297574788702287443502123119313877415278877304866456565176360773848651195816021879148876985173267277031263646152871873014441183590471141901167533828621963866651938359",
+ "17.348085383681499172852340212837946913681349503319833895379599364916346996678774115472356552172467728498192423708290186696353892633802275272186862935888864564436104200250553583802585096479988444811879111645109656880728153108808638274341978968354895482288870990505393394330150686285205409461910256828313237800771316014620729111128197408712519655232673726993167731090657784157432284844410962540306871812",
+ "17.407791309811451413991402934776587727274692304168979758129844486195147501475844430031581045491342304862802756719012802717759227086944920237646742600183730387935914237410099970497154963215669635477250725760034883360834134873909027143784365748082991457136260982918509631214089379283854791699127985575276751950639814381413022404340898037317031344649130788109442934133748721229332612763230675387867060167",
+ "17.465766383402858316731575043043871754932551869660069657366289253587674381952187793692876332186097637634087898052217367730831337525450143144735163993701984235559102178727289467801811444923511321849112339058962832869205150513708620081533545907748750224381419445198858131583714181742840318906599828122743306582674187117835956409356596804579817623463035229848008072471150460106195548408352347746742847561",
+ "17.522108137193897711249955720342223562404817078270264273905715197834637314555104238731504974899534359198079882854402652102198388084110484760619705504323190957788898675675472299192322756141627162323541713415099172067523105704142354142286507565791349450889277448545966302507723270185283899864397011417078910276215036241179611950839739662625626455044878609357243901835302874736030320059872773022839076998",
+ "17.576906085439158795399613853863097303860835367703382634217979275105020336999327656009595436350031662565840865227976662242781789960872250051998481804897622287887086985238091438506085053631982050247194140738539987379268409303934286420729479452837709138518786355198810012076646196653084861659638299340083440855659993917810136693887499673110592919880225890667600561450738971059427382635508450091570097859",
+ "17.630242579482716539323837128846626753956194314343736063283695118187974605321998609676585457221722093540967455603842712855190915316171267768551204188316976169082878976713161041600921069589708836776259260899700342542761959107817464710887483018031112156977258240064220687983570300417350906046032596793701224117336432612122346984445322343505811317200044404325245524587348610225714892960184376194438742903",
+ "17.682193552177642930469311075041540632454794315173833851548924954045201903733019976720709429894183669091622069055829864963447674638381460850277690319942206492046322144914184638283615681017449686491773099947404077379395563267125512703092895031616346899622091168324459335139948282486097513426616067084251033517363717148785943762510534333490466778398817865864252996839848563898275763467374270388303474531",
+ "17.732829168042892302590066897013224260526349617442757064898532827287653373154374250085440081248759495538523122114463120786358068331952209807684385821625688206899889794184992102701935895298679767555036775735985597715341448247873700759325978422207409167388561946150223833135803435044691082980471455256218231653367433009869225710546713847446382266908465706428817510556416763430212167661925983678317689559",
+ "17.782214393127773091907390576928321922818609345162469668288248606737448584265787291899115365824350981071781548351963523796289812496283393676088371363622146243894946956855177324929267339605228930435844698103907214217720043808120931206339233299438914243909015437719067832873971853535761149326746352476616918607787268605165583917095714007024394600276277913067861955743579281638075879563801550521361400101",
+ "17.830409496196797333256263738087407756305793204876426547866274663003566432384680240879632999625725708300091127739268764655234592101254713785942646078437589939733647676861210608435791914827456291767449764007558390614584486670558546409061408823289149666666818024559557140308187730981247373784664587280435856629009596287509432264978977660915985852234235063815941899607957940727152099219426925372856581083",
+ "17.877470490934232288852811743259662703350866532641876235327240424382634438025700311951299570329496669487738366928514133455422447732866797861412283887178678146519925852345567722230587799483201967913067391020608007825990349366451164476805546339769760220805534987675878347990806759564468339408725207557557011408435539499579334714364702076041798486860978860009676392441269681660376828431489832998763783258",
+ "17.923449527306267869903426070004616586122783729793624019886904269965872168854615384174781325332961537402467089754136043237824345234828497017675462013908498436584882632257634259557543282397560432131425953734774375224901224027834174376390115551172850840545446370919691863863162138436779349056977625063368614038926314141157758995633570593909444840439875814859101692914284555504462737973961801589348562421",
+ "17.968395238938123096275003449517382823058653367901994410453731720353712579214128295617333869516953666517153266184450063833611730223713367177888956257642697863674682557764474491249664869634869467450632518845976225157445436929203774807794710993549169067538180609230496568688211520386012533845072853251411123534511690847284034061828924979836346301147669327210040586682352268581578885354613616677879192008",
+ "18.012353052308072938755867264876761138384940766536728123219303502872235608220456049765985905816906980541771912193578395286636524639567005562096644259687421270993689984646487799760867557580378976263785987858028882916593402367582926712749625025395229096162602944095765767003293442756802839571379406129666952518296572179431801499117577022831811590456125422748646995266409456422225586206021840322692382857",
+ "18.055365462686668331727160748231009519565746647193730385530909331597852334952578425145279427250887034166658709337134491235522678908221793937220809954557808901763389178392831492051282059480629151432246720826269576988663211852119754955967569929315382922357289706041278636253185833298598511399638105081736687620508948263244525471222947804257016135464845038301780535378180021273347494295813215232102999649",
+ "18.097472281022918092839876166164329437973263728374666387409900363304423095913608188979786368122872685324785740303523457754035383735336598870745063200445496969465305638435393742921093080855121166597064087151732410717510776813994536867846471600876935467557239720329955864393503091522335217308468551898804050931884864074974187930869095426636541733964836470414482229854405996155347764481217202728996408614",
+ "18.138710855372574931023279730094645378686287349356676919424498204049762635832652703081045863264164065707461503608812437952726945167389204858679677978907656542126675434222486013764292798698974541262372833651362936600851261171024940667498778746253799866490414715539561648775214507198558445051277115507846030240001071535504590488750762226492938922487331198045407471864288427126708589240674067562104543957",
+ "18.179116269955114571377487963612019905652085216126618591531831326851631273535837433851652060806307371522002942828348086254592323263632131183438294055667010855067061587674644272103122258118876651912890486407250279668447142712674562099014392095571206458285314302909409592642841502932705416119595372330139185232535836986175505626716905102551635720868328845059106716603941432470493828723765413424721976223",
+ "18.218721524498032554193215680552580137491683034589488437319060302272592206508827557611431375182704552154497537575444766904464774327453349109721410510507102426285778233008253433639863695380913463970388673098705619991229471182831382051550803100625573309055088036785775202381313835883262855970305798706681563291905495590616431781211404743717763365778127660253455212146746026811363929209719531660648504082",
+ "18.25755769616561915104320634671335949819923250838247367135480870103002754055972575277617781066800125225275977232426410882766773084485826986957597205108505829168630501177398318211279559799848433615486396320080576991739828304477785924273653352846964138446264644904849824507615174857436913763769835408524950658917536946876135419383532210821743200063786350760207420579200676223678007228393958258720083932",
+ "18.295654086063005239961930900603578763176327716162022442528659338478895027684612801134718048445578078864512023650622689532231640803798279071247213212940626166721703242773412064293396910008891332614727995930235839898502680907757808722725076622433926254807390507349193089487065273859422711581690536923283818694448490391002663699373577479984089586448960986922914070154319198856799480586814831572660049059",
+ "18.333038352045729366070360053860247416881993539906325936417001019639836810235521744851872438194534698737793818113182566661284551265375926400252096198917463166081789346386579278436021220544269108158036360716265068681920333271695665204550361645092770414267870574761534021576748772414710332296686656677922105572480136623006540318287771752403257225484193416375374630295739694584359181669584822144217946089",
+ "18.369736629342788833545154829965612197972030184654204521583836723612431388284128470120361520079152081604731214550025504583810749093225662462708297813392905679444268263153178673045591535099590243771860299493196201337328463166245762316637806913270164277457975112426005180292583426915918675383435395598215385153247994877265654873384456838948090969392401887506081626510459117637684719849016393221041720966",
+ "18.405773640310900146133080088261946202976690317466294344672811637024889157611521518848738302063682147953709444704912322724498748005402509152494514057803322060491136048741666988817114427555111210963923209356023892097003244960804568051496345885676927757469123572277620624446804627512970828422692616021227425852662243212443997074981005547833762050079432581680067106949297497692327125068990077901522226957",
+ "18.441172794474399698182030074721740031645602552534420544604120821167467838337449892992771747357276011553142091110875268371883702350672621604391781630952792517951394285585851496086739721764180588422789463043949353454011941863375479066641639870318143091000764755109263681792932398864353035859720611512874738125344871434992639512151401272538083058455878170262156351968871089395179837425273523581266914745",
+ "18.47595627986464597709414934346663732189241252367556916529377819718435871713823800089497791390570676646849082185155969226893554048129639509679051447135722658187695404706235925157146425104283059827944524324932672824661552843990966903508121362067629390223781365207266998003720499319458536728358620338853555386727837290179454339519141841532839938596761951045619471589862830891354308681626977577420483375",
+ "18.510145146551442627414905806735913567003712650812295077443330836708330498077617580007887630002806998527489958357928811323358164284670780912045286972377274734553167811143903532773133805470585887337986897779623231393980154689146471547983633489101760043708991315746940120025902341173853793429617026275691215584867628750464940410772709161351434979639911956946479201132978330304672548030931942250342827294",
+ "18.54375938315397840777373858913955248239941847920328667581513228848814216209238117867823746808674105485439472281080229047484288277191323337476914908731578203036561093352990739771860442165984753982600021729206737097284114048195126812337180690412756158211962923840645830361425158816448002373708570542607328640280411811505735178290827333249222248570577590327817428193141575383830773736064963674654660788",
+ "18.576817987027647186937851258336640937668818840595786321214115700990580993937301728456982569596955182509352640277092493549853424411966677818012248002654715239100874590037738307469713048325570874520232570867464224788639656453937494219294174471955373301736672685268384577575584576576899158917424074434177408506824723823546414342198182263466224674661649356568188397290822447447185825387180657594093708751",
+ "18.609339028743835443520046961477709286939310853034399826433866146117641838882532805452792636721283076369348347017617290496488517658040508081002292362699460963188796636919359563770588812590411785597112719721757265655201721601867128800954165396591923271771796713301912904158675092529178443570927414653982088273331584295588174225100793199329706639345162173054259175639620324704962515101988919574683797276",
+ "18.641339711410638424722499047013449967887089663871032284600678326435618587023360889502435665997102476809993062067289899429492640057255987173558009597289702007868879986681400023832856533473923548707096670227832737339287908558274044368146372966754230837592655179154123960009424338853507410779228164259856997555111697864450713171508666161000757176178710802248263025585993364498172063037657704404452535503",
+ "18.672836425322050368486113163967894536152542145032787472779137579977190277914128508177973702344749215422866489255932015284354044054928123475206880037062819389112504714106095639732288437854189846017324055713142277768438434138800721340366655917386856186887417022606078557020556496094324427190459240576788558291551699271849591355480496655647717244614207638067307680084952591605729876523430439516165337322",
+ "18.703844798370253311556748128890196309240890383998201893987314003630502067675284072677315790931434159739316058047067634433988116165753705089479010402482501330164866808933095532965233351834719435836698735379881853925522288987702030512098787246242665060494288818182785084700362957305908534097737840396555283267034806128689898134337131513408714563437722088348519474128730338455257510535561818243515295123",
+ "18.734379742609172948695846511449581634565683544125106511957075355113091757584835040550323433523983103087395353257534872811737536865777209110758107808331702363999663358869296693765232701087487872606287651215678117982769333263424530048349886338191672000649776344735688777038908317935895545479771750928675097454702913124841960320021274672197296187088995346243239131294305233657221950357770047779041168948",
+ "18.764455497316603659697964676682244441947566581055018250974850982088974686459881812049067093753928158863642280317022246479491132048354932411165733919156970301233277913734990931824860100667882748928084034147822613522025142522120240087012670818451468498896073922908905983528384054249374818979283244638542138214163225714979901542761366770616662189716515808719831023436094002277345660650710470976214503432",
+ "18.794085668866182740204823781307373749785233327862921970091261536522099678420128101122831261188800902247301052497120590553831148856384993334702795779266689462427228385943774192181671843132138022659399715350825905060669445319905454600530058604054055511420322690455781203696250448217551628254838303648547201462249630753150471851402187751539728462449395082445265630322991793425964521071134426892761087686",
+ "18.82328326768867946516209716586995768024335839807194833176766112965627616145648993732694510000805245875257813926012495009414082293067923695618654400188454857448056930551075037023425200611189368317293241290052197494133870263300149851324237139757643613913686228545143709137199633423670636305032456696459165988858650794045361585281861601603030153235699981659298052458840307661288883784791255308752353561",
+ "18.852060742573912900871064645288864648159675216435305629278797553184221367993840166607573470069267053513735624040087819326415506386854437946403720812228284865900153407303755694944652909440890918000505344963394853809579466102995490946923404655914747241389209313457700354163158136320973199396402856713949800424774426208733366034958384913000571799639761622099679737940788622933241370717844146251711932128",
+ "18.880430012539655701065719740012642650514689061888847292472446317260576484360479108374318422256748212928421929786176000015552730066213309405093412502424231235041703778572229968621812094224953783751727048234887878221529796434400738059144871066371011576734445290684672478932371976691435646196856591582073749970279840730554499319160664075936135140351358832332481792115613668240634181554442075595951874232",
+ "18.908402496471717232311467781165733233171140941896760455553034330908971709296619686804159498334964006649119069488646486948675866965781697617293443993292894960273992948681816600748607581132058645469709895004815813032481899164996133398853203604094641445335770040577643758444125343960451089873183667195183097301272165939070294009329717796749663916249651314647264543061678516229808974080105230884519025421",
+ "18.935989140719681524355183827184271883117018713616424044375161718824065979531438908152091359516789236304421957752893530968312896089478807820652680723918795442056690234785900341761515097938048245785367391810983836804772037480360220145546699221066508593371664219887047644628393373836620900288539062774663891696384999640649150431067240627749142322666676970274474792135970231868616050929898319819448939034",
+ "18.963200444815204167404888798469665227431788358892299847438551435971105813566329353339851076750530262901184430318825907802984559086828099838800823075902608236275943927671387049630228757166718632225359114181378374769186216486342164672374303171089906235756037703334480067642792992542669516647312965086899057259968955796081732571906843773036664256360263051447703790357359429377002031207739864979999279347",
+ "18.990046485464088033353325238570094871523592746407402454864447659438418650897352188003827603659585905257296788261872980663015351591030286798753545075312871886708540373690732957230479307213846083134185408782477823043603415914158563765104431367119681516469558190435321626296408405773925785846797696565762444462069369032104851518168840362055319574446706630124442642806832354006488607879109906061011225994",
+ "19.016536938949335590921908878972071081608578803308502271146163132935001206102423418117835863551157682291011036313549071538079474102791095379250735204641651869626255407971202952320707788423726057706822543117840676308428340234652209177652929619836857962138281947043694787969753375808877555756525156889419987622193160096718082756877689454214937644538436622120458515758071395625444960838247998451767464267",
+ "19.042681102069820040323211057777714109150558076228575985448688497208727928412122242888431932498284067180966108960090928128416538326586163291672353531766027111567123306015724614143020205136706498507055346813817986209642505418179828757157587146552894936306186818734849750397304488535715134906592464324381660408650130874094490704788761416060096501351661608424222204094369103147551037672603814369634649173",
+ "19.068487911727958175697030382906549671323284692477975980792892280404995909757933182996822232452584791269433004172376138676679805214029937405307084300414313959313789831600985178255638111559270519906326622715617717964168412002699242926437873012736620082535900009120622005729068876661407020205549742970102634687260159098231611555026386636952356914915597529253373429394903680674472796958663494038067669179",
+ "19.093965963269656159901801532857652686731313095114787279282350143184060615248880952958892345276101741792959203039945279273255821413683057071718873479055914318955623580559627285483449590741119271240498698177664589148961791164562328382134513604070535948997556425774535241433839196056647337630745324677877037589790564832932809741759428622931327986353687891898499439791429917840804474313864245639140963876",
+ "19.119123527670705331793258647026174473061813878914781070641605073424527485626683566355878191198143709838509389044950724156590593262994411423265514055870555330957166471517671117689943118929441254707396532385048466111853801352620946858612646592880180562600210076019427990165200479741063391057955342589569972650353707736819649707138135073772494722116787681314798945037658461538374603477221825614061123586",
+ "19.143968567655614969812922707872905228504499895574401195919290684664632292543319151929670686365568982588326143748358606442800755409560708661213139514248609009613770051771501624762852458893105259920477327438788243371302722213272226600736522283567127277667156871770413468147870394343816746792945999572244176333552811712447483231232773171106511438260175071145300046115843401710072061507331123043607901766",
+ "19.168508752827482780609154136923082745746771414212427034681109262302000645968087085215520638009496537393752178754873475983837687377025695010556483691979309217953419255985001727184619660158435191823702770674175581797631578786818852604111682506864006199186805540809913091091561814668081471402749434233431033452441548505582706019452955567976154397574205270457372773342241946969622998755580434262211071558",
+ "19.192751473880834042563713562225153433521577940186973776803866639536641104273721851582869330116346851241224039623128541122821371810756925681002641212419779923811384320279466454221232217629041792882431116499214977303106306157966687858071257893713340199820635963233697984370035461108601863346164084264967404520613456100656965925875472210769471793070984755357524002396981276686789870757739219539841324669",
+ "19.216703855963329593992083348877341510356872855419154524286060224198192164950344042194924570763041352943159776496534086655621090662648765929073480563926604513272233491262353914647091955902924297702861031248271549558718609763974479507490837350364617085882753391176792131259310397149374028556893735115741447201974608383790314541221313482249282941830681505989160209022143487123591182161037084387107577471",
+ "19.240372771246783136336288622974117018573581443774444767997147210768023102387819846722491865244820295698055584478151667485670300985795814036287612086238394489310685917822308982062485897587424683040075624404469719368214374255580054164790522993745386564072906888203344350441788631572056395846260169628655731587443716443908470481602481327796867951175756539602824534024677208143458306390998693538144276002",
+ "19.263764850762979509196317705761686108092922892356892210254799469999751475179529646750512177469718303426094538082717842694993912366018532429385996195100165328675330327321101942399890523238950583083919577089467043577581159099371618262297126999910295820866611740582812686480215151994304295620401944519281853807987442610790122820927006439539980791908595120476521299636624843377591628005484740938263373595",
+ "19.286886495555294522450851525927489255646333848651043717882790718796769943763203547772413744395083720600670009266257171342692898145198064660758379840502214228374875168690401725272168814130387964227940171355345107459707413634435078254467165459318134413588306046635342334572072865760417877208230914828250259039270224031775041480686581149991980042698893384296012208438178584526032640636530664689171174514",
+ "19.309743887193036513569909003754932688390195189494409126081957694707453295769725463252527373922995550848707616892717734716346726926003376949988744940329952938435722400261306789658518736487435455592323288866363564460056999876237001095092480820045715217327131479089102764865100373961878408215166685028270522348153253852064527393390794401890890932406298166622224431486187051653736399833197687524233000392",
+ "19.332342997691718269365647851051829244300572144237799985690236148794296859647334840581772744190077146167636205171422529047782401411481872480699008041273574144705390909628455554205882856537701103044535844002047328262877230706418721410147702147287802942241134713881576962004492246225067150128745210304021219616585555420191917418786300056829952680702638022710700076784220324428140020802898115083347702904",
+ "19.354689598879088211883278917315015191222443867565368209411861608347893184500809153071123456883339348988675265028178228103174790923741638364554293709103213239495123865898742141584076941660965692453426480770865774436380303703020587851939728834028918714275983773159730132531253761589283704592841895713231304417993106469276962707965968679020792759185611101812841427933459395519877074670185732532077876915",
+ "19.376789271243668798743209719830951710660724013826759987563467708214368337563307069810449676142525612003499201086112645501159094078378318648014400550345870757023544381773094826620272453238529286555419097429861755219673554476395943490245768513403194721941361801918811127988057063915654267554707302094460700078255016831241731287084620030531370389406858605301314913503432729894455360413554796057743624785",
+ "19.398647412299738536733101983020344760416543000933452586938357216391679714568872063480206587627849607725892049860100424409512218327903976557192129920072602449053963631370720893361294311430877864798057636106390383386608343478253049758287190639090148001663846660919016228401517981946486814580501445191763231914170223651871543954569563229752867364010807484149328122287932691728836607206296504503654291916",
+ "19.420269244500125639443026886412358511499173347101740173789245348545649777799992933455717128782979425999232096035698012165274922488616903998818326535687811364645463339885951676665882203155018792792505473796600843314336576346118972683035247786115152970665197263535031125663311669153219106967873840911780618890220192918885584791820817380351857621444438732170662912318105800373867459654881916254806601924",
+ "19.441659822725832764853886827062860938003360575287073851586808019473777348197590834815623551815029267586554639358825375063360984210103069003729612683914916394217674289812465439813541316938870999354861402160375582810342455043995730819816948505547453029096197833928688735935982538915244747599958654970407704104602569366784225221531104839626781845870092648147888203880688567605208831444945817857785153427",
+ "19.462824041379362514202453738329145059871795167945778128620896576209292571177865023083134487492542931078517939464890630420523665550799939651548618906955780515811541533057671943504991862669514142328738958049297858093270685582461594213632344682911288013670395835728596839923778216755784200501989248577166652556656745561631320914185098036550279972269808563352717494278133064808018424486494613581670904697",
+ "19.483766641106643718481178395114340475919752681994355643610181441860832131581914604665304968112958314746911243491535376957183544987386808635080341126118126364286470448001964590403332961518317007864293940732767763315935539659300785943459751426720740528037173390794501709108627539732588206226415399674048608843262175783293190807110169521287571898125826758063922707869247389042070537305271065057452360137",
+ "19.504492215170652185153425611551614568097792837031617515988255748353971463776213613651972980845739009653411602074763823583486335276886222365741099356087975815479321535979397651959714956358141934399110351847826398926624666313434326948757230737160647513320407575743953348133831681915668076630219831345596329489041495050445409516995558844346940248424949708046529076568535423815692145534030368195098701895",
+ "19.52500521549816144973266072401605164852396136071234571245810367391072812166019661923143396972741343266046339927362413412251126099193801965681827360699083448218860273549526903661234475357554150017778848244185893299525191263899191588797634058235164494448438674653809951435022502560679429105527325418829543863756825670476364629140951247734867887985343458291386040322597855003211338820555010939867273248",
+ "19.545309958419535630089123088329455125777373731767323301911891787605488456921558805681207304272616222501167615837357366396904683096528060072684210523189673108467018417135186800678628444987751206147451054525963839562634340820804697604369657105969423354842149829173951943549166420900709500398322624130365195674097282456714104812933002700523506427441210494461469512180706693823193924457440917371176532034",
+ "19.565410630120075532420489068555321524954362381908007338302983473268528473151341321768804731192210840056455228388636731122203200610869021021871133154865620432257415783302175345843898977949742849569372169004904667621738405749986270376895267386643049526766451459390277406632576412790748533372863644721976845168460840162066672290292749672668879524315410824251032084115058493720402881895485689493165441193",
+ }};
+
+ T pi = static_cast<T>("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609");
+ T tenth = 1;
+ tenth /= 10;
+ T logten = log(T(10));
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = boost::multiprecision::log(tenth + pi * (100 * k) * (100 * k));
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+
+ val = boost::multiprecision::log(1 / (tenth + pi * (100 * k) * (100 * k)));
+ e = relative_error(val, T(-T(data[k])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+
+ val = boost::multiprecision::log10(tenth + pi * (100 * k) * (100 * k));
+ e = relative_error(val, T(T(data[k]) / logten));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+
+ val = boost::multiprecision::log10(1 / (tenth + pi * (100 * k) * (100 * k)));
+ e = relative_error(val, T(-T(data[k]) / logten));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+#if defined(BOOST_INTEL) && defined(TEST_FLOAT128)
+ BOOST_TEST(max_err < 20);
+#else
+ 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)())));
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_miller_rabin.cpp b/libs/multiprecision/test/test_miller_rabin.cpp
new file mode 100644
index 0000000000..ec12ab8bd0
--- /dev/null
+++ b/libs/multiprecision/test/test_miller_rabin.cpp
@@ -0,0 +1,90 @@
+///////////////////////////////////////////////////////////////
+// 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/gmp.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#include <boost/multiprecision/miller_rabin.hpp>
+#include <boost/math/special_functions/prime.hpp>
+#include <iostream>
+#include <iomanip>
+#include "test.hpp"
+
+
+template <class I>
+void test()
+{
+ //
+ // Very simple test program to verify that the GMP's Miller-Rabin
+ // implementation and this one agree on whether some random numbers
+ // are prime or not. Of course these are probabilistic tests so there's
+ // no reason why they should actually agree - except the probability of
+ // disagreement for 25 trials is almost infinitely small.
+ //
+ using namespace boost::random;
+ using namespace boost::multiprecision;
+
+ typedef I test_type;
+
+ static const unsigned test_bits =
+ std::numeric_limits<test_type>::digits && (std::numeric_limits<test_type>::digits <= 256)
+ ? std::numeric_limits<test_type>::digits
+ : 128;
+
+ independent_bits_engine<mt11213b, test_bits, test_type> gen;
+ //
+ // We must use a different generator for the tests and number generation, otherwise
+ // we get false positives. Further we use the same random number engine for the
+ // Miller Rabin test as GMP uses internally:
+ //
+ mt19937 gen2;
+
+ //
+ // Begin by testing the primes in our table as all these should return true:
+ //
+ for(unsigned i = 1; i < boost::math::max_prime; ++i)
+ {
+ BOOST_TEST(miller_rabin_test(test_type(boost::math::prime(i)), 25, gen));
+ BOOST_TEST(mpz_probab_prime_p(mpz_int(boost::math::prime(i)).backend().data(), 25));
+ }
+ //
+ // Now test some random values and compare GMP's native routine with ours.
+ //
+ for(unsigned i = 0; i < 10000; ++i)
+ {
+ test_type n = gen();
+ bool is_prime_boost = miller_rabin_test(n, 25, gen2);
+ bool is_gmp_prime = mpz_probab_prime_p(mpz_int(n).backend().data(), 25) ? true : false;
+ if(is_prime_boost && is_gmp_prime)
+ {
+ std::cout << "We have a prime: " << std::hex << std::showbase << n << std::endl;
+ }
+ if(is_prime_boost != is_gmp_prime)
+ std::cout << std::hex << std::showbase << "n = " << n << std::endl;
+ BOOST_CHECK_EQUAL(is_prime_boost, is_gmp_prime);
+ }
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ test<mpz_int>();
+ test<number<gmp_int, et_off> >();
+ test<boost::uint64_t>();
+ test<boost::uint32_t>();
+
+ test<cpp_int>();
+ test<number<cpp_int_backend<64, 64, unsigned_magnitude, checked, void>, et_off> >();
+ test<checked_uint128_t>();
+ test<checked_uint1024_t>();
+
+ return boost::report_errors();
+}
+
+
diff --git a/libs/multiprecision/test/test_mixed_cpp_int.cpp b/libs/multiprecision/test/test_mixed_cpp_int.cpp
new file mode 100644
index 0000000000..b098e00be6
--- /dev/null
+++ b/libs/multiprecision/test/test_mixed_cpp_int.cpp
@@ -0,0 +1,119 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/cpp_int.hpp>
+#include "test.hpp"
+
+template <class Number, class BigNumber>
+void test()
+{
+ using namespace boost::multiprecision;
+ typedef Number test_type;
+
+ test_type h = (std::numeric_limits<test_type>::max)();
+ test_type l = (std::numeric_limits<test_type>::max)();
+ BigNumber r;
+
+ add(r, h, h);
+ BOOST_CHECK_EQUAL(r, cpp_int(h) + cpp_int(h));
+
+ multiply(r, h, h);
+ BOOST_CHECK_EQUAL(r, cpp_int(h) * cpp_int(h));
+
+ if(std::numeric_limits<test_type>::is_signed)
+ {
+ subtract(r, l, h);
+ BOOST_CHECK_EQUAL(r, cpp_int(l) - cpp_int(h));
+ subtract(r, h, l);
+ BOOST_CHECK_EQUAL(r, cpp_int(h) - cpp_int(l));
+ multiply(r, l, l);
+ BOOST_CHECK_EQUAL(r, cpp_int(l) * cpp_int(l));
+ }
+
+ //
+ // Try again with integer types as the source:
+ //
+ enum{ max_digits = std::numeric_limits<test_type>::is_signed ? std::numeric_limits<long long>::digits : std::numeric_limits<unsigned long long>::digits };
+ enum{ require_digits = std::numeric_limits<test_type>::digits <= 2 * max_digits ? std::numeric_limits<test_type>::digits / 2 : max_digits };
+ typedef typename boost::uint_t<require_digits>::least uint_least;
+ typedef typename boost::int_t<require_digits>::least int_least;
+ typedef typename boost::mpl::if_c<std::numeric_limits<test_type>::is_signed, int_least, uint_least>::type i_type;
+
+ i_type ih = (std::numeric_limits<i_type>::max)();
+ i_type il = (std::numeric_limits<i_type>::max)();
+
+ add(r, ih, ih);
+ BOOST_CHECK_EQUAL(r, cpp_int(ih) + cpp_int(ih));
+
+ multiply(r, ih, ih);
+ BOOST_CHECK_EQUAL(r, cpp_int(ih) * cpp_int(ih));
+
+ if(std::numeric_limits<test_type>::is_signed)
+ {
+ subtract(r, il, ih);
+ BOOST_CHECK_EQUAL(r, cpp_int(il) - cpp_int(ih));
+ subtract(r, ih, il);
+ BOOST_CHECK_EQUAL(r, cpp_int(ih) - cpp_int(il));
+ multiply(r, il, il);
+ BOOST_CHECK_EQUAL(r, cpp_int(il) * cpp_int(il));
+ }
+}
+
+void test_rational_mixed()
+{
+ using namespace boost::multiprecision;
+ cpp_int a(2);
+ cpp_rational r(10);
+
+ BOOST_CHECK_EQUAL(a + -r, -8);
+ BOOST_CHECK_EQUAL(-r + a, -8);
+ BOOST_CHECK_EQUAL(-a + r, 8);
+ BOOST_CHECK_EQUAL(r + -a, 8);
+
+ BOOST_CHECK_EQUAL(a - -r, 12);
+ BOOST_CHECK_EQUAL(-r - a, -12);
+ BOOST_CHECK_EQUAL(-a - r, -12);
+ BOOST_CHECK_EQUAL(r - -a, 12);
+
+ BOOST_CHECK_EQUAL(a * -r, -20);
+ BOOST_CHECK_EQUAL(-r * a, -20);
+ BOOST_CHECK_EQUAL(-a * r, -20);
+ BOOST_CHECK_EQUAL(r * -a, -20);
+
+ BOOST_CHECK_EQUAL(a / -r, cpp_rational(-2, 10));
+ BOOST_CHECK_EQUAL(-r / a, -5);
+ BOOST_CHECK_EQUAL(cpp_rational(-a / r), cpp_rational(-2, 10));
+ BOOST_CHECK_EQUAL(r / -a, -5);
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ test_rational_mixed();
+
+ test<checked_int512_t, checked_int1024_t>();
+ test<checked_int256_t, checked_int512_t>();
+ test<number<cpp_int_backend<64, 64, signed_magnitude, checked, void>, et_off>, checked_int128_t>();
+ test<boost::int64_t, checked_int128_t>();
+
+ test<checked_uint512_t, checked_uint1024_t>();
+ test<checked_uint256_t, checked_uint512_t>();
+ test<number<cpp_int_backend<64, 64, unsigned_magnitude, checked, void>, et_off>, checked_uint128_t>();
+ test<boost::uint64_t, checked_int128_t>();
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_mixed_float.cpp b/libs/multiprecision/test/test_mixed_float.cpp
new file mode 100644
index 0000000000..2b5aa6ffb2
--- /dev/null
+++ b/libs/multiprecision/test/test_mixed_float.cpp
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#ifdef TEST_GMP
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_MPFR
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#include "test.hpp"
+
+template <class Number, class BigNumber>
+void test()
+{
+ using namespace boost::multiprecision;
+ typedef Number test_type;
+
+ test_type a = 1;
+ a /= 3;
+ test_type b = -a;
+
+ BigNumber r;
+ BOOST_CHECK_EQUAL(add(r, a, a), BigNumber(a) + BigNumber(a));
+ BOOST_CHECK_EQUAL(subtract(r, a, b), BigNumber(a) - BigNumber(b));
+ BOOST_CHECK_EQUAL(subtract(r, b, a), BigNumber(b) - BigNumber(a));
+ BOOST_CHECK_EQUAL(multiply(r, a, a), BigNumber(a) * BigNumber(a));
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ test<cpp_dec_float_50, cpp_dec_float_100>();
+
+#ifdef TEST_GMP
+ test<mpf_float_50, mpf_float_100>();
+#endif
+#ifdef TEST_MPFR
+ test<mpfr_float_50, mpfr_float_100>();
+#endif
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_move.cpp b/libs/multiprecision/test/test_move.cpp
new file mode 100644
index 0000000000..c5c5ab3b9f
--- /dev/null
+++ b/libs/multiprecision/test/test_move.cpp
@@ -0,0 +1,336 @@
+// Copyright John Maddock 2012.
+
+// 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/config.hpp>
+
+#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
+
+#if !defined(TEST_GMP) && !defined(TEST_MPFR) && !defined(TEST_TOMMATH) && !defined(TEST_CPP_INT)
+# define TEST_GMP
+# define TEST_MPFR
+# define TEST_TOMMATH
+# define TEST_CPP_INT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_GMP)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_TOMMATH
+#include <boost/multiprecision/tommath.hpp>
+#endif
+#ifdef TEST_CPP_INT
+#include <boost/multiprecision/cpp_int.hpp>
+#endif
+
+#include "test.hpp"
+
+unsigned allocation_count = 0;
+
+void *(*alloc_func_ptr) (size_t);
+void *(*realloc_func_ptr) (void *, size_t, size_t);
+void (*free_func_ptr) (void *, size_t);
+
+void *alloc_func(size_t n)
+{
+ ++allocation_count;
+ return (*alloc_func_ptr)(n);
+}
+
+void free_func(void * p, size_t n)
+{
+ (*free_func_ptr)(p, n);
+}
+
+void * realloc_func(void * p, size_t old, size_t n)
+{
+ ++allocation_count;
+ return (*realloc_func_ptr)(p, old, n);
+}
+
+template <class T>
+void do_something(const T&)
+{
+}
+
+template <class T>
+void test_std_lib()
+{
+ std::vector<T> v;
+ for(unsigned i = 0; i < 100; ++i)
+ v.insert(v.begin(), i);
+
+ T a(2), b(3);
+ std::swap(a, b);
+ BOOST_TEST(a == 3);
+ BOOST_TEST(b == 2);
+}
+
+template <class T, class A>
+void test_move_and_assign(T x, A val)
+{
+ // move away from x, then assign val to x.
+ T z(x);
+ T y(std::move(x));
+ x.assign(val);
+ BOOST_CHECK_EQUAL(x, T(val));
+ BOOST_CHECK_EQUAL(z, y);
+}
+
+template <class T>
+void test_move_and_assign()
+{
+ T x(23);
+ test_move_and_assign(x, static_cast<short>(2));
+ test_move_and_assign(x, static_cast<int>(2));
+ test_move_and_assign(x, static_cast<long>(2));
+ test_move_and_assign(x, static_cast<long long>(2));
+ test_move_and_assign(x, static_cast<unsigned short>(2));
+ test_move_and_assign(x, static_cast<unsigned int>(2));
+ test_move_and_assign(x, static_cast<unsigned long>(2));
+ test_move_and_assign(x, static_cast<unsigned long long>(2));
+ test_move_and_assign(x, static_cast<float>(2));
+ test_move_and_assign(x, static_cast<double>(2));
+ test_move_and_assign(x, static_cast<long double>(2));
+ test_move_and_assign(x, x);
+ test_move_and_assign(x, "23");
+}
+
+
+int main()
+{
+#if defined(TEST_MPFR) || defined(TEST_GMP)
+ mp_get_memory_functions(&alloc_func_ptr, &realloc_func_ptr, &free_func_ptr);
+ mp_set_memory_functions(&alloc_func, &realloc_func, &free_func);
+#endif
+
+ using namespace boost::multiprecision;
+
+#ifdef TEST_MPFR
+ {
+ test_std_lib<mpfr_float_50>();
+ mpfr_float_50 a = 2;
+ BOOST_TEST(allocation_count); // sanity check that we are tracking allocations
+ allocation_count = 0;
+ mpfr_float_50 b = std::move(a);
+ BOOST_TEST(allocation_count == 0);
+ //
+ // Move assign - we rely on knowledge of the internals to make this test work!!
+ //
+ mpfr_float_50 c(3);
+ do_something(b);
+ do_something(c);
+ const void* p = b.backend().data()[0]._mpfr_d;
+ BOOST_TEST(c.backend().data()[0]._mpfr_d != p);
+ c = std::move(b);
+ BOOST_TEST(c.backend().data()[0]._mpfr_d == p);
+ BOOST_TEST(b.backend().data()[0]._mpfr_d != p);
+ //
+ // Again with variable precision, this we can test more easily:
+ //
+ mpfr_float d, e;
+ d.precision(100);
+ e.precision(1000);
+ d = 2;
+ e = 3;
+ allocation_count = 0;
+ BOOST_TEST(d == 2);
+ d = std::move(e);
+ BOOST_TEST(allocation_count == 0);
+ BOOST_TEST(d == 3);
+ e = 2;
+ BOOST_TEST(e == 2);
+ d = std::move(e);
+ e = d;
+ BOOST_TEST(e == d);
+
+ test_move_and_assign<mpfr_float>();
+ test_move_and_assign<mpfr_float_50>();
+ }
+#endif
+#ifdef TEST_GMP
+ {
+ test_std_lib<mpf_float_50>();
+ mpf_float_50 a = 2;
+ BOOST_TEST(allocation_count); // sanity check that we are tracking allocations
+ allocation_count = 0;
+ mpf_float_50 b = std::move(a);
+ BOOST_TEST(allocation_count == 0);
+ //
+ // Move assign: this requires knowledge of the internals to test!!
+ //
+ mpf_float_50 c(3);
+ do_something(b);
+ do_something(c);
+ const void* p = b.backend().data()[0]._mp_d;
+ BOOST_TEST(c.backend().data()[0]._mp_d != p);
+ c = std::move(b);
+ BOOST_TEST(c.backend().data()[0]._mp_d == p);
+ BOOST_TEST(b.backend().data()[0]._mp_d != p);
+ //
+ // Again with variable precision, this we can test more easily:
+ //
+ mpf_float d, e;
+ d.precision(100);
+ e.precision(1000);
+ d = 2;
+ e = 3;
+ allocation_count = 0;
+ BOOST_TEST(d == 2);
+ d = std::move(e);
+ BOOST_TEST(allocation_count == 0);
+ BOOST_TEST(d == 3);
+ e = 2;
+ BOOST_TEST(e == 2);
+ d = std::move(e);
+ e = d;
+ BOOST_TEST(e == d);
+
+ test_move_and_assign<mpf_float>();
+ test_move_and_assign<mpf_float_50>();
+ }
+ {
+ test_std_lib<mpz_int>();
+ mpz_int a = 2;
+ BOOST_TEST(allocation_count); // sanity check that we are tracking allocations
+ allocation_count = 0;
+ mpz_int b = std::move(a);
+ BOOST_TEST(allocation_count == 0);
+
+ //
+ // Move assign:
+ //
+ mpz_int d, e;
+ d = 2;
+ d <<= 1000;
+ e = 3;
+ allocation_count = 0;
+ e = std::move(d);
+ BOOST_TEST(allocation_count == 0);
+ e = 2;
+ BOOST_TEST(e == 2);
+ d = std::move(e);
+ e = d;
+ BOOST_TEST(e == d);
+
+ test_move_and_assign<mpz_int>();
+ }
+ {
+ test_std_lib<mpq_rational>();
+ mpq_rational a = 2;
+ BOOST_TEST(allocation_count); // sanity check that we are tracking allocations
+ allocation_count = 0;
+ mpq_rational b = std::move(a);
+ BOOST_TEST(allocation_count == 0);
+
+ //
+ // Move assign:
+ //
+ mpq_rational d, e;
+ d = mpz_int(2) << 1000;
+ e = 3;
+ allocation_count = 0;
+ e = std::move(d);
+ BOOST_TEST(allocation_count == 0);
+ d = 2;
+ BOOST_TEST(d == 2);
+ d = std::move(e);
+ e = d;
+ BOOST_TEST(e == d);
+
+ test_move_and_assign<mpq_rational>();
+ }
+#endif
+#ifdef TEST_TOMMATH
+ {
+ test_std_lib<tom_int>();
+ tom_int a = 2;
+ void const* p = a.backend().data().dp;
+ tom_int b = std::move(a);
+ BOOST_TEST(b.backend().data().dp == p);
+ // We can't test this, as it will assert inside data():
+ //BOOST_TEST(a.backend().data().dp == 0);
+
+ //
+ // Move assign:
+ //
+ tom_int d, e;
+ d = 2;
+ d <<= 1000;
+ e = 3;
+ p = d.backend().data().dp;
+ BOOST_TEST(p != e.backend().data().dp);
+ e = std::move(d);
+ BOOST_TEST(e.backend().data().dp == p);
+ d = 2;
+ BOOST_TEST(d == 2);
+ d = std::move(e);
+ e = d;
+ BOOST_TEST(e == d);
+
+ test_move_and_assign<tom_int>();
+ }
+#endif
+#ifdef TEST_CPP_INT
+ {
+ test_std_lib<cpp_int>();
+ cpp_int a = 2;
+ a <<= 1000; // Force dynamic allocation.
+ void const* p = a.backend().limbs();
+ cpp_int b = std::move(a);
+ BOOST_TEST(b.backend().limbs() == p);
+
+ //
+ // Move assign:
+ //
+ cpp_int d, e;
+ d = 2;
+ d <<= 1000;
+ e = 3;
+ e <<= 1000;
+ p = d.backend().limbs();
+ BOOST_TEST(p != e.backend().limbs());
+ e = std::move(d);
+ BOOST_TEST(e.backend().limbs() == p);
+ d = 2;
+ BOOST_TEST(d == 2);
+ d = std::move(e);
+ e = d;
+ BOOST_TEST(e == d);
+
+ test_move_and_assign<cpp_int>();
+ test_move_and_assign<int512_t>();
+ }
+#endif
+ return boost::report_errors();
+}
+
+#else
+//
+// No rvalue refs, nothing to test:
+//
+int main()
+{
+ return 0;
+}
+
+#endif
+
diff --git a/libs/multiprecision/test/test_mpfi.cpp b/libs/multiprecision/test/test_mpfi.cpp
new file mode 100644
index 0000000000..ed1084724b
--- /dev/null
+++ b/libs/multiprecision/test/test_mpfi.cpp
@@ -0,0 +1,284 @@
+///////////////////////////////////////////////////////////////
+// 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 "test.hpp"
+#include <boost/multiprecision/mpfi.hpp>
+#include <boost/multiprecision/random.hpp>
+
+using namespace boost::multiprecision;
+using namespace boost::random;
+
+void test_exp()
+{
+ std::cout << "Testing exp\n";
+
+ mpfr_float_50 val = 1.25;
+
+ for(unsigned i = 0; i < 2000; ++i)
+ {
+ mpfr_float_100 a(val);
+ mpfr_float_100 b = exp(a);
+ mpfi_float_50 in = val;
+ in = exp(in);
+ BOOST_CHECK((boost::math::isfinite)(in));
+ BOOST_CHECK(lower(in) <= b);
+ BOOST_CHECK(upper(in) >= b);
+ b = log(a);
+ in = val;
+ in = log(in);
+ BOOST_CHECK((boost::math::isfinite)(in));
+ BOOST_CHECK(lower(in) <= b);
+ BOOST_CHECK(upper(in) >= b);
+ val *= 1.01;
+ }
+ val = 1;
+ for(unsigned i = 0; i < 2000; ++i)
+ {
+ mpfr_float_100 a(val);
+ mpfr_float_100 b = exp(a);
+ mpfi_float_50 in = val;
+ in = exp(in);
+ BOOST_CHECK((boost::math::isfinite)(in));
+ BOOST_CHECK(lower(in) <= b);
+ BOOST_CHECK(upper(in) >= b);
+ b = log(a);
+ in = val;
+ in = log(in);
+ BOOST_CHECK((boost::math::isfinite)(in));
+ BOOST_CHECK(lower(in) <= b);
+ BOOST_CHECK(upper(in) >= b);
+ val /= 1.01;
+ }
+}
+
+void test_pow()
+{
+ std::cout << "Testing pow function\n";
+
+ mt19937 gen;
+ uniform_real_distribution<mpfr_float_50> dist1(0, 400);
+
+ for(unsigned i = 0; i < 5000; ++i)
+ {
+ mpfr_float_50 base, p;
+ base = dist1(gen);
+ p = dist1(gen);
+ mpfr_float_100 a, b, r;
+ a = base;
+ b = p;
+ r = pow(a, b);
+ mpfi_float_50 ai, bi, ri;
+ ai = base;
+ bi = p;
+ ri = pow(ai, bi);
+ BOOST_CHECK((boost::math::isfinite)(ri));
+ BOOST_CHECK(lower(ri) <= r);
+ BOOST_CHECK(upper(ri) >= r);
+ }
+}
+
+void test_trig()
+{
+ std::cout << "Testing trig functions\n";
+
+ mt19937 gen;
+ uniform_real_distribution<mpfr_float_50> dist1(-1.57079632679, 1.57079632679);
+ uniform_real_distribution<mpfr_float_50> dist2(-1, 1);
+
+ for(unsigned i = 0; i < 5000; ++i)
+ {
+ mpfr_float_50 val;
+ val = dist1(gen);
+ mpfr_float_100 a = val;
+ mpfr_float_100 b = sin(a);
+ mpfi_float_50 a2 = val;
+ mpfi_float_50 b2 = sin(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ b = cos(a);
+ b2 = cos(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ b = tan(a);
+ b2 = tan(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ }
+ for(unsigned i = 0; i < 5000; ++i)
+ {
+ mpfr_float_50 val;
+ val = dist2(gen);
+ mpfr_float_100 a = val;
+ mpfr_float_100 b = asin(a);
+ mpfi_float_50 a2 = val;
+ mpfi_float_50 b2 = asin(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ b = acos(a);
+ b2 = acos(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ b = atan(a);
+ b2 = atan(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ }
+}
+
+void test_hyp()
+{
+ std::cout << "Testing hyperbolic trig functions\n";
+
+ mt19937 gen;
+ uniform_real_distribution<mpfr_float_50> dist1(-10, 10);
+ uniform_real_distribution<mpfr_float_50> dist2(-1, 1);
+
+ for(unsigned i = 0; i < 5000; ++i)
+ {
+ mpfr_float_50 val;
+ val = dist1(gen);
+ mpfr_float_100 a = val;
+ mpfr_float_100 b = sinh(a);
+ mpfi_float_50 a2 = val;
+ mpfi_float_50 b2 = sinh(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ b = cosh(a);
+ b2 = cosh(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ b = tanh(a);
+ b2 = tanh(a2);
+ BOOST_CHECK((boost::math::isfinite)(b2));
+ BOOST_CHECK(lower(b2) <= b);
+ BOOST_CHECK(upper(b2) >= b);
+ }
+}
+
+void test_intervals()
+{
+ mpfi_float_50 a(1, 2);
+ mpfi_float_50 b(1.5, 2.5);
+ BOOST_CHECK_EQUAL(lower(a), 1);
+ BOOST_CHECK_EQUAL(upper(a), 2);
+ BOOST_CHECK_EQUAL(median(a), 1.5);
+ BOOST_CHECK_EQUAL(width(a), 1);
+ mpfi_float_50 r = intersect(a, b);
+ BOOST_CHECK_EQUAL(lower(r), 1.5);
+ BOOST_CHECK_EQUAL(upper(r), 2);
+ r = hull(a, b);
+ BOOST_CHECK_EQUAL(lower(r), 1);
+ BOOST_CHECK_EQUAL(upper(r), 2.5);
+ BOOST_CHECK(overlap(a, b));
+ BOOST_CHECK(in(mpfr_float_50(1.5), a));
+ BOOST_CHECK(in(mpfr_float_50(1), a));
+ BOOST_CHECK(in(mpfr_float_50(2), a));
+ BOOST_CHECK(!zero_in(a));
+ b = mpfi_float_50(1.5, 1.75);
+ BOOST_CHECK(subset(b, a));
+ BOOST_CHECK(proper_subset(b, a));
+ BOOST_CHECK(!empty(a));
+ BOOST_CHECK(!singleton(a));
+ b = mpfi_float_50(5, 6);
+ r = intersect(a, b);
+ BOOST_CHECK(empty(r));
+}
+
+#ifdef TEST_SPECIAL
+#include "math/table_type.hpp"
+#include <boost/math/special_functions.hpp>
+
+#define T mpfi_float_50
+
+typedef number<mpfi_float_backend<25> > mpfi_float_25;
+
+void test_log1p_expm1()
+{
+# include "../../math/test/log1p_expm1_data.ipp"
+
+ std::cout << std::setprecision(std::numeric_limits<mpfi_float_25>::max_digits10);
+ std::cout << "Testing log1p and expm1\n";
+
+ for(unsigned i = 0; i < log1p_expm1_data.size(); ++i)
+ {
+ mpfi_float_25 in(log1p_expm1_data[i][0]);
+ mpfi_float_25 out = boost::math::log1p(in);
+ mpfi_float_25 expected(log1p_expm1_data[i][1]);
+ if(!subset(expected, out))
+ {
+ std::cout << in << std::endl;
+ std::cout << out << std::endl;
+ std::cout << expected << std::endl;
+ BOOST_CHECK(lower(out) <= lower(expected));
+ BOOST_CHECK(upper(out) >= upper(expected));
+ }
+ out = boost::math::expm1(in);
+ expected = mpfi_float_25(log1p_expm1_data[i][2]);
+ if(!subset(expected, out))
+ {
+ std::cout << in << std::endl;
+ std::cout << out << std::endl;
+ std::cout << expected << std::endl;
+ BOOST_CHECK(lower(out) <= lower(expected));
+ BOOST_CHECK(upper(out) >= upper(expected));
+ }
+ }
+}
+
+void test_bessel()
+{
+#include "../../math/test/bessel_i_int_data.ipp"
+#include "../../math/test/bessel_i_data.ipp"
+
+ std::cout << std::setprecision(std::numeric_limits<mpfi_float_25>::max_digits10);
+ std::cout << "Testing Bessel Functions\n";
+
+ for(unsigned i = 0; i < bessel_i_int_data.size(); ++i)
+ {
+ int v = boost::lexical_cast<int>(static_cast<const char*>(bessel_i_int_data[i][0]));
+ mpfi_float_25 in(bessel_i_int_data[i][1]);
+ mpfi_float_25 out = boost::math::cyl_bessel_i(v, in);
+ mpfi_float_25 expected(bessel_i_int_data[i][2]);
+ if(!subset(expected, out))
+ {
+ std::cout << in << std::endl;
+ std::cout << out << std::endl;
+ std::cout << expected << std::endl;
+ BOOST_CHECK(lower(out) <= lower(expected));
+ BOOST_CHECK(upper(out) >= upper(expected));
+ }
+ }
+}
+
+#endif
+
+int main()
+{
+#ifdef TEST_SPECIAL
+ test_log1p_expm1();
+ test_bessel();
+#endif
+ test_intervals();
+ test_exp();
+ test_pow();
+ test_trig();
+ test_hyp();
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_mpfr_conversions.cpp b/libs/multiprecision/test/test_mpfr_conversions.cpp
new file mode 100644
index 0000000000..c7b878e4e0
--- /dev/null
+++ b/libs/multiprecision/test/test_mpfr_conversions.cpp
@@ -0,0 +1,131 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/array.hpp>
+#include "test.hpp"
+
+#include <boost/multiprecision/mpfr.hpp>
+#include <boost/multiprecision/gmp.hpp>
+
+int main()
+{
+ using namespace boost::multiprecision;
+ //
+ // Test interconversions between GMP supported backends:
+ //
+ mpf_t mpf;
+ mpz_t mpz;
+ mpq_t mpq;
+ mpfr_t mpfr;
+ mpf_init2(mpf, 100);
+ mpf_set_ui(mpf, 2u);
+ mpz_init(mpz);
+ mpz_set_ui(mpz, 2u);
+ mpq_init(mpq);
+ mpq_set_ui(mpq, 2u, 1u);
+ mpfr_init(mpfr);
+ mpfr_set_ui(mpfr, 2u, GMP_RNDN);
+
+ BOOST_TEST(mpfr_float(mpf) == 2);
+ BOOST_TEST(mpfr_float_50(mpf) == 2);
+ BOOST_TEST(mpfr_float(mpz) == 2);
+ BOOST_TEST(mpfr_float_50(mpz) == 2);
+ BOOST_TEST(mpfr_float(mpq) == 2);
+ BOOST_TEST(mpfr_float_50(mpq) == 2);
+ BOOST_TEST(mpfr_float(mpfr) == 2);
+ BOOST_TEST(mpfr_float_50(mpfr) == 2);
+
+ mpfr_float f0;
+ mpfr_float_50 f50;
+ f0 = mpf;
+ BOOST_TEST(f0 == 2);
+ f0 = 0;
+ f0 = mpz;
+ BOOST_TEST(f0 == 2);
+ f0 = 0;
+ f0 = mpq;
+ BOOST_TEST(f0 == 2);
+ f0 = mpfr;
+ BOOST_TEST(f0 == 2);
+
+ f50 = mpf;
+ BOOST_TEST(f50 == 2);
+ f50 = 0;
+ f50 = mpz;
+ BOOST_TEST(f50 == 2);
+ f50 = 0;
+ f50 = mpq;
+ BOOST_TEST(f50 == 2);
+ f50 = mpfr;
+ BOOST_TEST(f50 == 2);
+
+ f50 = 4;
+ f0 = f50;
+ BOOST_TEST(f0 == 4);
+ f0 = 3;
+ f50 = f0;
+ BOOST_TEST(f50 == 3);
+ f50 = 4;
+ BOOST_TEST(mpfr_float(f50) == 4);
+ BOOST_TEST(mpfr_float_50(f0) == 3);
+
+ mpz_int iz(2);
+ mpq_rational rat(2);
+ mpf_float gf(2);
+ f50 = 3;
+ f50 = iz;
+ BOOST_TEST(f50 == 2);
+ f50 = 3;
+ f0 = iz;
+ BOOST_TEST(f0 == 2);
+ f50 = 3;
+ f0 = gf;
+ BOOST_TEST(f0 == 2);
+ BOOST_TEST(mpfr_float(iz) == 2);
+ BOOST_TEST(mpfr_float_50(iz) == 2);
+ BOOST_TEST(mpfr_float(rat) == 2);
+ BOOST_TEST(mpfr_float_50(rat) == 2);
+ BOOST_TEST(mpfr_float(gf) == 2);
+ BOOST_TEST(mpfr_float_50(gf) == 2);
+
+ //
+ // Conversions involving precision only:
+ //
+ mpfr_float::default_precision(30);
+ f50 = 2;
+ mpfr_float_100 f100(3);
+ mpfr_float f0a(4);
+ mpfr_float f0b(f100);
+ BOOST_TEST(f0a.precision() == 30);
+ BOOST_TEST(f0b.precision() == 100);
+ f0a = f100;
+ BOOST_TEST(f0a == 3);
+ BOOST_TEST(f0a.precision() == 100);
+
+ f100 = f50;
+ BOOST_TEST(f100 == 2);
+
+ f50 = static_cast<mpfr_float_50>(f100);
+
+ mpf_clear(mpf);
+ mpz_clear(mpz);
+ mpq_clear(mpq);
+ mpfr_clear(mpfr);
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_native_integer.cpp b/libs/multiprecision/test/test_native_integer.cpp
new file mode 100644
index 0000000000..24ae85a553
--- /dev/null
+++ b/libs/multiprecision/test/test_native_integer.cpp
@@ -0,0 +1,101 @@
+///////////////////////////////////////////////////////////////
+// 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_
+
+//
+// Compare arithmetic results using fixed_int to GMP results.
+//
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/multiprecision/integer.hpp>
+#include "test.hpp"
+
+#ifdef BOOST_MSVC
+#pragma warning(disable:4146)
+#endif
+
+template <class I, class H>
+void test()
+{
+ using namespace boost::multiprecision;
+
+ I i(0);
+
+ BOOST_CHECK_THROW(lsb(i), std::range_error);
+ BOOST_CHECK(bit_test(bit_set(i, 0), 0));
+ BOOST_CHECK_EQUAL(bit_set(i, 0), 1);
+ BOOST_CHECK_EQUAL(bit_unset(i, 0), 0);
+ BOOST_CHECK_EQUAL(bit_flip(bit_set(i, 0), 0), 0);
+
+ unsigned max_index = (std::numeric_limits<I>::digits) - 1;
+ BOOST_CHECK(bit_test(bit_set(i, max_index), max_index));
+ BOOST_CHECK_EQUAL(bit_unset(i, max_index), 0);
+ BOOST_CHECK_EQUAL(bit_flip(bit_set(i, max_index), max_index), 0);
+ i = 0;
+ bit_set(i, max_index);
+ BOOST_CHECK_EQUAL(lsb(i), max_index);
+ BOOST_CHECK_EQUAL(msb(i), max_index);
+ bit_set(i, max_index / 2);
+ BOOST_CHECK_EQUAL(lsb(i), max_index / 2);
+ BOOST_CHECK_EQUAL(msb(i), max_index);
+
+ if(std::numeric_limits<I>::is_signed)
+ {
+ i = static_cast<I>(-1);
+ BOOST_CHECK_THROW(lsb(i), std::range_error);
+ }
+
+ H mx = (std::numeric_limits<H>::max)();
+
+ BOOST_CHECK_EQUAL(multiply(i, mx, mx), static_cast<I>(mx) * static_cast<I>(mx));
+ BOOST_CHECK_EQUAL(add(i, mx, mx), static_cast<I>(mx) + static_cast<I>(mx));
+ if(std::numeric_limits<I>::is_signed)
+ {
+ BOOST_CHECK_EQUAL(subtract(i, mx, static_cast<H>(-mx)), static_cast<I>(mx) - static_cast<I>(-mx));
+ BOOST_CHECK_EQUAL(add(i, static_cast<H>(-mx), static_cast<H>(-mx)), static_cast<I>(-mx) + static_cast<I>(-mx));
+ }
+
+ i = (std::numeric_limits<I>::max)();
+ I j = 12345;
+ I r, q;
+ divide_qr(i, j, q, r);
+ BOOST_CHECK_EQUAL(q, i / j);
+ BOOST_CHECK_EQUAL(r, i % j);
+ BOOST_CHECK_EQUAL(integer_modulus(i, j), i % j);
+ I p = 456;
+ BOOST_CHECK_EQUAL(powm(i, p, j), pow(cpp_int(i), static_cast<unsigned>(p)) % j);
+
+ for(I i = 0; i < (2 < 8) - 1; ++i)
+ {
+ I j = i * i;
+ I s, r;
+ s = sqrt(j, r);
+ BOOST_CHECK_EQUAL(s, i);
+ BOOST_CHECK(r == 0);
+ j += 3;
+ s = sqrt(i, r);
+ BOOST_CHECK_EQUAL(s, i);
+ BOOST_CHECK(r == 3);
+ }
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+
+ test<boost::int16_t, boost::int8_t>();
+ test<boost::int32_t, boost::int16_t>();
+ test<boost::int64_t, boost::int32_t>();
+ test<boost::uint16_t, boost::uint8_t>();
+ test<boost::uint32_t, boost::uint16_t>();
+ test<boost::uint64_t, boost::uint32_t>();
+
+ return boost::report_errors();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_numeric_limits.cpp b/libs/multiprecision/test/test_numeric_limits.cpp
new file mode 100644
index 0000000000..8b759dbc4b
--- /dev/null
+++ b/libs/multiprecision/test/test_numeric_limits.cpp
@@ -0,0 +1,288 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "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_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
+# define TEST_MPZ
+# define TEST_MPFR
+# define TEST_MPFR_50
+# define TEST_CPP_DEC_FLOAT
+# define TEST_MPQ
+# define TEST_TOMMATH
+# 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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50) || defined(TEST_MPF) || defined(TEST_MPZ) || defined(TEST_MPQ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#if defined(TEST_MPFR) || defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_TOMMATH
+#include <boost/multiprecision/tommath.hpp>
+#endif
+#ifdef TEST_CPP_INT
+#include <boost/multiprecision/cpp_int.hpp>
+#endif
+#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)
+#endif
+
+#define PRINT(x)\
+ std::cout << BOOST_STRINGIZE(x) << " = " << std::numeric_limits<Number>::x << std::endl;
+
+template <class Number>
+void test_specific(const boost::mpl::int_<boost::multiprecision::number_kind_floating_point>&)
+{
+ Number minv, maxv;
+ minv = (std::numeric_limits<Number>::min)();
+ maxv = (std::numeric_limits<Number>::max)();
+ BOOST_CHECK((boost::math::isnormal)(minv));
+ BOOST_CHECK((boost::math::isnormal)(maxv));
+ BOOST_CHECK((boost::math::isnormal)(log(minv)));
+ BOOST_CHECK((boost::math::isnormal)(log(maxv)));
+ BOOST_CHECK((boost::math::isnormal)(sqrt(minv)));
+ BOOST_CHECK((boost::math::isnormal)(sqrt(maxv)));
+
+ if(std::numeric_limits<Number>::is_specialized)
+ {
+ if(std::numeric_limits<Number>::has_quiet_NaN)
+ {
+ BOOST_TEST((boost::math::isnan)(std::numeric_limits<Number>::quiet_NaN()));
+ BOOST_TEST(FP_NAN == (boost::math::fpclassify)(std::numeric_limits<Number>::quiet_NaN()));
+ BOOST_TEST(!(boost::math::isfinite)(std::numeric_limits<Number>::quiet_NaN()));
+ BOOST_TEST(!(boost::math::isnormal)(std::numeric_limits<Number>::quiet_NaN()));
+ BOOST_TEST(!(boost::math::isinf)(std::numeric_limits<Number>::quiet_NaN()));
+ }
+ if(std::numeric_limits<Number>::has_signaling_NaN)
+ {
+ BOOST_TEST((boost::math::isnan)(std::numeric_limits<Number>::signaling_NaN()));
+ BOOST_TEST(FP_NAN == (boost::math::fpclassify)(std::numeric_limits<Number>::signaling_NaN()));
+ BOOST_TEST(!(boost::math::isfinite)(std::numeric_limits<Number>::signaling_NaN()));
+ BOOST_TEST(!(boost::math::isnormal)(std::numeric_limits<Number>::signaling_NaN()));
+ BOOST_TEST(!(boost::math::isinf)(std::numeric_limits<Number>::signaling_NaN()));
+ }
+ if(std::numeric_limits<Number>::has_infinity)
+ {
+ BOOST_TEST((boost::math::isinf)(std::numeric_limits<Number>::infinity()));
+ BOOST_TEST(FP_INFINITE == (boost::math::fpclassify)(std::numeric_limits<Number>::infinity()));
+ BOOST_TEST(!(boost::math::isfinite)(std::numeric_limits<Number>::infinity()));
+ BOOST_TEST(!(boost::math::isnormal)(std::numeric_limits<Number>::infinity()));
+ BOOST_TEST(!(boost::math::isnan)(std::numeric_limits<Number>::infinity()));
+ }
+ if(std::numeric_limits<Number>::has_denorm)
+ {
+ BOOST_TEST(FP_SUBNORMAL == (boost::math::fpclassify)(std::numeric_limits<Number>::denorm_min()));
+ BOOST_TEST((boost::math::isfinite)(std::numeric_limits<Number>::denorm_min()));
+ BOOST_TEST(!(boost::math::isnormal)(std::numeric_limits<Number>::denorm_min()));
+ BOOST_TEST(!(boost::math::isinf)(std::numeric_limits<Number>::denorm_min()));
+ BOOST_TEST(!(boost::math::isnan)(std::numeric_limits<Number>::denorm_min()));
+ }
+ }
+ Number n = 0;
+ BOOST_TEST((boost::math::fpclassify)(n) == FP_ZERO);
+ BOOST_TEST((boost::math::isfinite)(n));
+ BOOST_TEST(!(boost::math::isnormal)(n));
+ BOOST_TEST(!(boost::math::isinf)(n));
+ BOOST_TEST(!(boost::math::isnan)(n));
+ n = 2;
+ BOOST_TEST((boost::math::fpclassify)(n) == FP_NORMAL);
+ BOOST_TEST((boost::math::isfinite)(n));
+ 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>
+void test_specific(const boost::mpl::int_<boost::multiprecision::number_kind_integer>&)
+{
+ if(std::numeric_limits<Number>::is_modulo)
+ {
+ if(!std::numeric_limits<Number>::is_signed)
+ {
+ BOOST_TEST(1 + (std::numeric_limits<Number>::max)() == 0);
+ BOOST_TEST(--Number(0) == (std::numeric_limits<Number>::max)());
+ }
+ }
+}
+
+template <class Number, class T>
+void test_specific(const T&)
+{
+}
+
+template <class Number>
+void test()
+{
+ typedef typename boost::mpl::if_c<
+ std::numeric_limits<Number>::is_specialized,
+ typename boost::multiprecision::number_category<Number>::type,
+ boost::mpl::int_<500> // not a number type
+ >::type fp_test_type;
+
+ test_specific<Number>(fp_test_type());
+
+ //
+ // Note really a test just yet, but we can at least print out all the values:
+ //
+ std::cout << "numeric_limits values for type " << typeid(Number).name() << std::endl;
+
+ PRINT(is_specialized);
+ if(std::numeric_limits<Number>::is_integer)
+ {
+ std::cout << std::hex << std::showbase;
+ }
+ std::cout << "max()" << " = " << (std::numeric_limits<Number>::max)() << std::endl;
+ if(std::numeric_limits<Number>::is_integer)
+ {
+ std::cout << std::dec;
+ }
+ std::cout << "max()" << " = " << (std::numeric_limits<Number>::max)() << std::endl;
+ std::cout << "min()" << " = " << (std::numeric_limits<Number>::min)() << std::endl;
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ PRINT(lowest());
+#endif
+ PRINT(digits);
+ PRINT(digits10);
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ PRINT(max_digits10);
+#endif
+ PRINT(is_signed);
+ PRINT(is_integer);
+ PRINT(is_exact);
+ PRINT(radix);
+ PRINT(epsilon());
+ PRINT(round_error());
+ PRINT(min_exponent);
+ PRINT(min_exponent10);
+ PRINT(max_exponent);
+ PRINT(max_exponent10);
+ PRINT(has_infinity);
+ PRINT(has_quiet_NaN);
+ PRINT(has_signaling_NaN);
+ PRINT(has_denorm);
+ PRINT(has_denorm_loss);
+ PRINT(infinity());
+ PRINT(quiet_NaN());
+ PRINT(signaling_NaN());
+ PRINT(denorm_min());
+ PRINT(is_iec559);
+ PRINT(is_bounded);
+ PRINT(is_modulo);
+ PRINT(traps);
+ PRINT(tinyness_before);
+ PRINT(round_style);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+#endif
+#ifdef TEST_MPF
+ boost::multiprecision::mpf_float::default_precision(1000);
+ /*
+ boost::multiprecision::mpf_float r;
+ r.precision(50);
+ BOOST_TEST(r.precision() >= 50);
+ */
+ BOOST_TEST(boost::multiprecision::mpf_float::default_precision() == 1000);
+ test<boost::multiprecision::mpf_float>();
+#endif
+#ifdef TEST_MPZ
+ test<boost::multiprecision::mpz_int>();
+#endif
+#ifdef TEST_MPQ
+ test<boost::multiprecision::mpq_rational>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#endif
+#ifdef TEST_MPFR
+ test<boost::multiprecision::mpfr_float>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float>();
+#endif
+#ifdef TEST_TOMMATH
+ test<boost::multiprecision::tom_int>();
+#endif
+#ifdef TEST_CPP_INT
+ test<boost::multiprecision::cpp_int>();
+ test<boost::multiprecision::int256_t>();
+ test<boost::multiprecision::uint512_t>();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<200, 200, boost::multiprecision::unsigned_magnitude, boost::multiprecision::checked, void> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<70, 70, boost::multiprecision::signed_magnitude, boost::multiprecision::unchecked, void> > >();
+#endif
+#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();
+}
+
diff --git a/libs/multiprecision/test/test_pow.cpp b/libs/multiprecision/test/test_pow.cpp
new file mode 100644
index 0000000000..6f2afea132
--- /dev/null
+++ b/libs/multiprecision/test/test_pow.cpp
@@ -0,0 +1,848 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<boost::array<const char*, 3>, 702> data =
+ {{
+ {{ "9.85291419463953934609889984130859375e4", "8.4167086266170372255146503448486328125e2", "8.66781019918879108354226292713799369912745098619466567318041467361236175866573114777000418440761829061824953361563557580935951901405814080757565313129904800947783606850513184296612628910656615168927761935861462770335134108408073175949783551491164949747086136599355880600420490275164555515512645668845e4202" }},
+ {{ "1.652914355109703592461301013827323913574218750e1", "4.936528947862250937816952500725165009498596191406250e-2", "1.14852190138491736562279120519668390081141778746743826681517181158751264571350304943298501284647564489716027476004029804110782430201351750715968215799574772058637701195873519618784612525011353325208230847515250406858209757415407239793739704829281917272032288615255140733409015874140869835291148547238" }},
+ {{ "2.95673953882856110908505797851830720901489257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.3091550971799097169423475861549377441406250e2", "9.16137091634529046709182958669115589757019722367818747705232600776240821857227718551873067599347313641575272826830417174591636547915061517391300131065931465784194067711359196329143298499263726513131614582697830908424187934868152998838921216586737465291051289708299364409624364999366486746226077050764e249" }},
+ {{ "6.085814876798215132883140832120716368081048130989074707031250e-5", "7.65778516457987279864028096199035644531250e2", "5.27056224622668410282266686919173718609676411389459024877282902746284033954589536288634973757568176464096389580016576960309487231057438455595655805167665817497028295657665023126747065443986739792258870082022889306909488139458069146748438042701949551909468708242176394539901613782225328586614222105675e-3229" }},
+ {{ "2.722646144868545725614694674732163548469543457031250e-1", "4.8695443455590336004346063702996616484597325325012207031250e-4", "9.99366682241962146368589809577120011723198308450433185299366732500677873637460155970547267099719914327909694930518383012498797681761846242526638144261306834523078708261122471803832490341687603813336927181436827534082878781252668704774445437548691251936499670077735883150461534069270846997649139259014e-1" }},
+ {{ "1.15866069758449596882599053060403093695640563964843750e-1", "4.91253262757665787319183436920866370201110839843750e-1", "3.46868982488456565751167443881314840659743514173491612010770748877346398177489343237604160804413931931718223750314831998907846386274396179552445359933868165880372381338724806279781831953896898649659594755834925976964179275873971118494605322798850925802574178528777014182338769959249415096934378557388e-1" }},
+ {{ "4.72825938314130529761314392089843750e5", "1.228931327397812367507867747917771339416503906250e1", "5.47245157077269889091085696140795527282280334677569169487973419233796250189843816560261965111196061138868370890204338231535198008079068304184762140493830719955323588998399173073261634891767823614143691840392792367527470000847416054709559319143615840412839768396194451923527439592939735228732869467965e69" }},
+ {{ "1.2955657225533417658880352973937988281250e4", "1.81521083299418428680382930906489491462707519531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.91729899451736210436889587963352494969987265352294254442114149825297350300933403119961677078224257818567229354512108221647637427508041941647518586565006416113534560289731038664091154857692367872604020422463457596747145816854139701847749519264660326361171185139298113322096978245544144264234481020815e7" }},
+ {{ "1.7430590914513759344117715954780578613281250e3", "1.5572745970949500304847390452778199687600135803222656250e-2", "1.12324923143821767715038683964417533829057341785931080679952341815408539775130405061465897612861320390765996927155081774925717154208894105154455487856335006846587865128269477586014136390788140643457017602926503892493119037260205017744346004538379559837051387829449807650507431889923695496342461088404" }},
+ {{ "5.947230963297863581829005852341651916503906250e1", "2.4796058491402149168147950319962546927854418754577636718750e-4", "1.00101355895664265703253905800820834352012946978175213925289823900262226487475877307647753894219794796436589570196875943062842928843129407133278574235943906905626144071246066853301987332156463703818534415183682692042219695734377740067313312425523058170350486981674302932951851973390826740834796342180" }},
+ {{ "1.6890881194976660012148708678303421493183122947812080383300781250e-6", "7.315835005101905608171364292502403259277343750e1", "5.06485337562137503941405427253471002412719863672407294570575625371322654317127374055512455786988091092329605000808871766177184698431732837248355728401235010135527651826220232715652024742668291949645619992685612328535253252695622896976648954823150769316159100729259724133493553742448044299816541989455e-423" }},
+ {{ "4.72470471679805708838453814912838879536138847470283508300781250e-6", "1.9315009754541449638054473325610160827636718750e1", "1.36613880262643802742756290736395850668317512466586871167321608424137867570108690626258507320043808302565319397131444616166042735793688809613906106252620462557968555895414582976985576875374557668514391264049547180886976991031038592004458693177738810104222966751846844587127740341157319952915743398285e-103" }},
+ {{ "5.4204233294109713248154491793684428557753562927246093750e-3", "2.5117484913880550045917061652289703488349914550781250e-2", "8.77171703127754502681310204125715941650801721154976863870699221072355335125966565182666925044598746890911836338141033359039531496488403405876863230608143768785806156629534985369811294999635059473513624761915818310578096052710097713441725036078711101258417410421951107958524860020565804089659046743943e-1" }},
+ {{ "1.0381492965649719018017549387877807021141052246093750e-1", "4.02775539432865528274851918411059159552678465843200683593750e-5", "9.99908769642175788386137778958539300137602918424410284952085874015336769726750047569734816766197409755257562872230833189101650544474710424482558254479079319860825174137124403380959665595507587367668848404286717760343524270837960434045414179621713212480893218438355518348995643697164109731552178914851e-1" }},
+ {{ "3.826356416302296565845608711242675781250e3", "3.046966451443047785296869278681697323918342590332031250e-3", "1.02545504718938094372102791727911930176506035001600018053644429991055918696319033730794852043021666923875675436795843500904336366408589219201909169612259476814126333181168932741070039124737361896932592045285182764869916877379718622220890978571031406624988992549594836404906978120992311725853941493659" }},
+ {{ "1.3367248690647914877160928881494328379631042480468750e-1", "1.207016212032306157198036089539527893066406250e1", "2.82608741435940656086722594561546646099634760918110959565977761208896418216166536561903222226214939613599640463597249764023513875896636280664458251642404729724932181291845871312202787897768372355186920789243514016890287945724482698867187289280837997988218972650355222505584789955736058952829050123955e-11" }},
+ {{ "7.8880385490801472769817337393760681152343750e2", "1.46278561425722486433187441434711217880249023437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.72840141730863663391876877521764355960382145920572562742914162972208384723706307292705275033115082012368548682595775882643927894139786449383322664316773126131611883398659050539189893838100041408464889082404113404032943316931275847874983317572290683797208861989532362102600980996636385789799495020849e4" }},
+ {{ "6.0290844501169942759588593617081642150878906250e1", "2.73159824509963122807221225230023264884948730468750e-1", "3.06403097260563050081855800637166449495962164712719263330810086375883439970326530663445685346228862337912240907582664457942174627433334293660419014781254710335542481599007896808711916825623070383641755045318205803207383228319360990374222920104547227487223738392731388028498147565624523546346417715655" }},
+ {{ "5.2188207927001606378780707018449902534484863281250e-1", "1.00797343550563134328967862529680132865905761718750e-1", "9.36552325485277806964373331313098838333278330423455390715861973295876349888773267892681165876113176797510574847645252615081953879524429911159719101193921387688552351634752458416166446355778230365755243829643708299147847893065939954861919388676503519612640610354931769525373202729617723199328630093636e-1" }},
+ {{ "6.21172003041995424155174987390637397766113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8.6091943502081919400601914271753400953457457944750785827636718750e-7", "1.00000157241706535645559625081132898066253320364132991765749046567536915342813631920409642832019004224458248512335711478395060579077427182783938451114029622700384959716532968625901664719629811957905865676402174328291417935322613778738659214041802729741480722967793087943757739011593472415850478420639" }},
+ {{ "8.933489431168359015678070988997205859050154685974121093750e-4", "4.1532229397912578860996291041374206542968750e2", "4.91021563983953636397848520840523223624643742835964326188016961937573012460753870407293657436708430593126320103796954182972032017026192445957161066771807675200884423939605981304732630092257312925408813941089831976477439943114677798839623996214029155361569909503935179401196449493080818512569086682097e-1267" }},
+ {{ "5.55105519395504379644989967346191406250e4", "2.205612949903890118719118618173524737358093261718750e-1", "1.11282177288045201072507504088709286277978249266318510332909847928909226338145185595245293917086320817076726850666066198249106037631163063795831697507293260413136608221812252367908447186422344164553977681855896096040438700902356349275031836676568495994537852124264298684105398360497193752327260914137e1" }},
+ {{ "2.64139377644600310476863391784263512818142771720886230468750e-5", "7.78537344498752810831310178230069141136482357978820800781250e-5", "9.99179632299559171314926709030763809736309139005374052895886931807671532458904052556141342139885810036321222015645710865315806166952058325774560966552187527103940189373824279065702873017246336399071137612269219545181070886990906061668084063703411460250321467244169857420435253409159030432098292621067e-1" }},
+ {{ "1.04207364225271594477817416191101074218750e4", "9.490963248606765212400659947888925671577453613281250e-4", "1.00881927761618177965011845644574187803759898330801723609976606642566910129111150781463974721119043760111173993259232795682413324213317011846206782754096089290427628991647487342082014619699610677423897602146820644840945077548746946762791624180147374361784328110343084702444523109612274014821745626982" }},
+ {{ "3.3151932056626380942998544298916385741904377937316894531250e-4", "5.69130350190431280252290058285780105507001280784606933593750e-5", "9.99544126695324189746630737456946723361046661345027805407888971023026631339988056392642825478722792254481831582440796961181158845762815786131168245934078509438401554967954057934563178474479427510608187860234090448388699710858468168174057416883471915845617321874136073232354461932587707630236256378020e-1" }},
+ {{ "1.88337177923367888807137937590141518739983439445495605468750e-4", "4.32540268863411711208755150437355041503906250e2", "5.75229630554212330195665922771148699451829771147200356624805857657236782065140481467338634818457146889580617522654929450001033313425457042558128784684181381335537144806647956114444609625124141647264003246426211941949785732284342909061255617831919446477154897012961652269654460432165747451828975060062e-1612" }},
+ {{ "3.9545929052570905071206652792170643806457519531250e-1", "2.677916713784273921835146770042968000780092552304267883300781250e-6", "9.99997515679857005761440503886095927815406391244413835291624899797364615653895949902813000744851723242602512239539568754651988070279277456656779917196036522934849059282355864096704432345340316634144618927930200708582994637711792811242475638942101629267185320507818308058050356385241284795438747530570e-1" }},
+ {{ "4.18765706320910169324633898213505744934082031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.16291806714740175721090054139494895935058593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.21448401185251170746394861880464242649255630391558005989017991140563422704674077045117022763467561974222030061746655113958910240758539727055748249625892285904547489203480154655618632992990390332430221914382681227157928848406067945057161854616129785541408035327136685741399621377579757754012545382969e1" }},
+ {{ "1.28834086985551640736069600734481355175375938415527343750e-3", "3.5070592325596103289164773286756826564669609069824218750e-3", "9.76932835372685523370171735287063726416767225734834615849134547109660778793799398169080725972094573408844765674179657286895933198717192952354877012591779343412877647689917686841315165602494901218010719779271020694334581849406783713948998204010537229621398578990055098138781426451663477493080600789821e-1" }},
+ {{ "2.097206120446792887435094598913565278053283691406250e-2", "4.58040082173553630973117378744063898921012878417968750e-2", "8.37769288971832154015429547694831033608424622845142547611771987181607855769209591840464089347717993026475816138178319620101164703046235086673631394869476080594839931563796671833715053698127488579638544943331524253087769152813629459325853986427109398088052746438762088357925061124187186100435982047033e-1" }},
+ {{ "2.86348409095251425380765364359092473023338243365287780761718750e-6", "1.661473408152986941388462582835927605628967285156250e-1", "1.19957610695947876947018322120150143406142221469373757924519795345150006977773403730313023369079301615734601162566867121616810596830759956044509310651071485457850172811241087990683705383118703983140409701647142571470333867908682196499347683237058377349085352136214854181401946343510795949868835711429e-1" }},
+ {{ "1.43297873345568077638745307922363281250e5", "1.41681240009364082165985165850941029930254444479942321777343750e-5", "1.00016822776212044529668140515271000711944889104836686684000447554242511520504646895662976301872271981369559245931879055379226726537073846553544561947637792091890791964244339592472180091648456672557297620691698497967178088487062658421331764320606009571740080394934111049676474128724114098218934644280" }},
+ {{ "3.60098653144944158555063040694221854209899902343750e-1", "2.03376339210932499668160744477063417434692382812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.25275538744154336055615419863736730746930928726962752118772852620054361808569416481449220736645770958820155429279907622983889720952174836443567087662689941130263300184594808723215176724531461369529244321399979413684112346655770810116945662086924599874483949305102682382993398648882273436739947930631e-1" }},
+ {{ "5.295402011714999248107038631872001133160665631294250488281250e-5", "4.561361486960971434179157313337782397866249084472656250e-3", "9.56082033932816309081231125453071826327896674917466727856568147854623107132514590973229074834141556000908164346345063684708226886531162257152516511661460364047957606893852284251293056880030888612998267350454535860387161852393199580592248818623376237183284153405740445167284591706260229351268548628924e-1" }},
+ {{ "1.44301800298425852986383688403293490409851074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.143083929538946623763462362433074304135516285896301269531250e-6", "1.00000261963485792416853927136569198682383793838454319729684734973539039182323306199235318171814360855994012568229358281529883676852371448365509202038288834881570383584403906835594533516647281713968932211752518665238323196577224701747937440185305151190908616249351775361542696295892178890063882257116" }},
+ {{ "6.228038096295846273720009378394024679437279701232910156250e-4", "3.25094187232484732597015408828156068921089172363281250e-2", "7.86658469541403998034943500870243069476823132486007751990824694615782893644279173776512596334159142603325455113617967643461939139102971978114976150505918018758878971981207590718138194009315889095960072548673588879789986017926322494375432269097377546556386620403909103214427884440798206932883636297352e-1" }},
+ {{ "9.8555361955851549282670021057128906250e2", "2.19375835372379413001908687874674797058105468750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.69327012293708811121144971175263370083910101169553278058859848877086709080419562447585355719348842415619132355236627485649548952876411849102018675375354238273102815474095986357261970461229247085634624604985094330242448976955585994530902647027597520370418448678147789523361182103563378206595110636366e6" }},
+ {{ "3.5879392216430850207076197477817913750186562538146972656250e-4", "6.9182884453136028746200736350147053599357604980468750e-2", "5.77635990889125108309690852819112724262223736693646969131631611067612444282401471024845889526676870050656945639578159737127915466435929600368572355785708484463627825178182883323088006398240693308602881027224033181200011330121428663774743869527395379215026638702157803494202819893449358544841576526785e-1" }},
+ {{ "4.961468486142577603459358215332031250e3", "5.36919182658175953015700088144512847065925598144531250e-2", "1.57915370211935194723362359441601671775858730114448762856923579370262681814508708674839371719677055754578289843591415190008400693094242195743768201495967775525358591358166609121796030602701836084062498854380733868656008519376928763241674707747769169741392588580100945268376807756367217092609019332523" }},
+ {{ "4.24495621335822494657116776828331694559892639517784118652343750e-6", "2.412731330413380170796244783559814095497131347656250e-1", "5.05650148888948869811331120941963319541414375806822687983830138205938420862200064078576598469877831249406211581526927963122105281131255004573845222711684347603254852806653766035434125383812586900316395999300527269121533046942253679078218107723668449508163238533047093749711627477323541829484653131292e-2" }},
+ {{ "4.4864042703223833814263343811035156250e5", "1.57545512531989570200255390552968037809478119015693664550781250e-6", "1.00002050314697607659431018359659361183713303212753613120902527904331498111603138394334757418054814218670389608976827498549914166555768752494414195237102560486571709642923543196007200071132086884670852209514113439317507321835737223329599950365222037362534859303381396326717532288233329927808913598785" }},
+ {{ "6.497495709023816743865609169006347656250e3", "1.67233186866778105184039304731413722038269042968750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.37780724079840208711014533649991541109470796504084314835156759344214993302863952807171583660778803863957191115559320339273255056520571556246744533838811694006166732957726755945662570959533321672076547914911635593118101608294069731654269467619949055336628326621660012876406202543146880009002104821553e6" }},
+ {{ "6.0967436711242051217141124652698636054992675781250e-2", "1.5704484143598296556551541236501634557498618960380554199218750e-6", "9.99995606813099499267634389464438683850041060806908350269346321155672893761130577244819124593817984249660934044363638948086248241297434338993626965911693249278796597285537898160766381999495115463474497883772569241592760426493272254012575287314033420480717621539078495596903806489817283498263020744184e-1" }},
+ {{ "7.575034551306392138769751909421756863594055175781250e-2", "1.25659927896368083096931278497265793703263625502586364746093750e-5", "9.99967576340235983529748322865757677186118554170023614050204881657758768441183672920424294568610952334609747551908015545068832481235294176033402023954402315837530793201944548984799957607361928025651266738940647431602585783131780321746876553060340085541214977820888348264644079307051095179685852079945e-1" }},
+ {{ "7.230949225422644496830137939014093717560172080993652343750e-4", "1.59957635240683257102367598179171181982383131980895996093750e-4", "9.98843860017333489092110505899347130551976013147438321970353479326257793437223848104429707854561661175450570835038515201752789245106905767296900600611401551754756721658819816241278926439311942572630487380703760937536160330693843537976099522621025621041857521661138411993182809798954282325807746896512e-1" }},
+ {{ "2.22347866336470469832420349121093750e4", "2.67574314969844628819828358246013522148132324218750e-1", "1.45597650920700334896440864288586774552136744768533970151074149218272851829624764505239431335468131476208480181217427109189696065749387968903474055278714181692867425657254225967806378137696550459591101296481511902742572646395696145586249150843548288850238158312747067673295059110101209836587291678717e1" }},
+ {{ "1.6196975420412198717889928900603990769013762474060058593750e-5", "4.98433649539913870007978857756825163960456848144531250e-2", "5.77061455335439039778043359172467746025200146785630273407892949860314031306268447375871357416922980298986141833641561954857127992214135487677696097641048847861017455164355255934271546462888696419881919311556223441720520985938735112636787538160901409982382930452852563601752376961873325250302513132303e-1" }},
+ {{ "1.1078580283775937842527525845071068033576011657714843750e-2", "1.18652221207551884308087353225857896177330985665321350097656250e-5", "9.99946575396258084502018839446238846584110705812867877643924485585779113197512036317728340100285410504878437697437320927763146715271389949541429089452281046460116468251613835907291530307473134875676645637754443536935426771393775580503285493873005924313301673550096584687732186248324962291699197441007e-1" }},
+ {{ "4.0090085615093388029042675846369547798531129956245422363281250e-6", "1.5153243776850145379609183238223124590149382129311561584472656250e-6", "9.99981169291887424157759932262067246066753044936086128253970315838989839817149914187581608688565806547274970455207936904774502513857569845689591879527047150474914557088218340646463900082270385606124499095033110795779754466447281328092278318076549095302554108789079991538595665731579745334006426859960e-1" }},
+ {{ "1.19021350263737038868705475636033952469006180763244628906250e-4", "1.68290288542928294646117137745022773742675781250e1", "9.04852417540620009944566041453719467211390230149498516011819535440728246929538100576552383464173953438153608848998091884909329517100819960017904887302473398843345408874822800579053111675353115760245493436345787702548498655314405766561270926511701674435330529881522800583133171192665005622617374333010e-67" }},
+ {{ "3.242762654672085015491664328202148226409917697310447692871093750e-6", "4.4540895454217880808367446832107816589996218681335449218750e-4", "9.94386254687686946963322383552185492075977337531973213930838015838274376322044860137122810561067818353529641305366066211688682157075369267213623551618566522232634253178245524174116891287095569137130501326353904791232655125453161983083517758472031555434930112729665552915867163490039363051308443099856e-1" }},
+ {{ "6.15810616566200508259498747065663337707519531250e-1", "3.16615056291079111083774932922096922993659973144531250e-2", "9.84767212442093730437806115126470445228033445461780019945996712538430276008229376762120777978183512697217805509135802054380845495119030204478634136438561790634012659775242132306345870420149133737299397362388964674004273429551607587049902912378874846355087545159480302396357641147726629312485985544367e-1" }},
+ {{ "4.986398000750906066969037055969238281250e4", "1.7761072017031686345574573171468557575281010940670967102050781250e-6", "1.00001921243238237193183827489311170506446717993399056537282384027062526108337893488664380391849139457202726524784919352515463921911589077429652463880766791641171380378763553978844617450998857121720620679684506344842701809891676387117033562056914974016308650056416678855410514380179891286420315463385" }},
+ {{ "1.3982947813147638953523710370063781738281250e3", "3.4349953058313833706427509184777591144666075706481933593750e-5", "1.00024882796344591385461239880845260384691776851307067376321212831043330119768926261152601978474535337925904198175128520020096443925386965960197623129024285407478015708065567539370247164906581380771634920314388644089046167410745320267558557473972499677590220735439622489041126850128421653983634543138" }},
+ {{ "5.53823542724402595460730935883475467562675476074218750e-2", "3.895135030254805045060728652117632009321823716163635253906250e-5", "9.99887300842861835164017418113429559930804468019069798605482088141983665217815479503166341320807290829070352700865762573462007338287440579346738382811838185553843038382146930720875234411175792603385681200743384496310942148612050283753172718455515566946341846284557394785250850393323918755270713010620e-1" }},
+ {{ "1.4112136137383384630084037780761718750e5", "9.9875418797880222143703576875850558280944824218750e-1", "1.39052029796505087174799036572060834290339669936231503015871931355721722463161747207749930806516332386763841930651054884331973674982367750538370231486178766251016302345689298357523496706436693633349722362506875465430935461687316908940273568043577086452494403668755303085058972545116855832701160169233e5" }},
+ {{ "2.896681342684133284243533368318423981691012158989906311035156250e-6", "1.1586534546002158485578092950163409113883972167968750e-1", "2.28205556117411408113652874564375329933423424935399606070975188165013549346043442272013469493594176280229509402715241333520310808546934629428072668916547032154136142048364995378685732366063433675907163954131129548865718748066808278449447269502355535592014434886553141414017802588692926998785625006881e-1" }},
+ {{ "6.80370452266789652639999985694885253906250e3", "2.55585667546695538554502036276971921324729919433593750e-3", "1.02281231404359612151527353897929180348478744328820333025332541070807332704656155540376559985312945856024293947964716753864592850899748540597581561259020876390111605898100116321942106603048757052249826147692127068934907088939143183343054183800841834132202006495897859489577613318023621649632711626369" }},
+ {{ "4.625041131443131210351782378609186707763001322746276855468750e-5", "1.52163427846739888679716834474220377160236239433288574218750e-4", "9.98482342652643471998471847918276729621115291527655407478347392440646810723671728307137559792389469491363165496772939188998042052370839020230988405367662374022902953797332354477989367493245470167443057076807839721016298819277997067517609396627866901281229526562169916899579412733467953808761281274902e-1" }},
+ {{ "4.5082293215957577103836229071021080017089843750e1", "1.06839470475542444583005874392256373539566993713378906250e-3", "1.00407725957483558818239220892424948692876561612077691060007144800995480352451729509031292920021843587131856132257906499443064130817064638818765366250131236399994854411601609832821870319397908684888708832193783247348840517389795509100198832759307607589651546707827898198086014636944156848700425178047" }},
+ {{ "2.97403319008989266980513832550059305503964424133300781250e-3", "3.864747748818575523443996644346043467521667480468750e-1", "1.05563040619657475424023632617553458144221260647471757349470769600263284068856263065983919485584722356671096360406091314847188039821446085937501687228128412834520625095444394738723676139779119999762553228944695777339743845083698817002881418226410778165865331625883646946752393289471811888730325566680e-1" }},
+ {{ "2.383250807842116500978590920567512512207031250e2", "1.66302465811868707690202029425563523545861244201660156250e-3", "1.00914434741735633383477956146627482536171366958054332840551181784200344603582400731522959980543848217816660950109678863255860871237640121402147335369863635255623422637578873942180607947824451388135749116333642343887949089848641558138185462358132315292011403950110303162349396320495083970574820485984" }},
+ {{ "1.71423190201370800878066802397370338439941406250e1", "5.22776453453089651191021403064951300621032714843750e-1", "4.41715373496456388539324810858409600194977863833255435782643057881295200486872481370727134110261522844531904021514609023835218872201273620577170073750362820523072032985530745444647038907617563505404059737966630343043214665700476103118304785807103469358517871674775523305518419709923690374745267779192" }},
+ {{ "2.24202183750390773639082908630371093750e5", "2.8860613713892332640731375192899577086791396141052246093750e-4", "1.00356204426464651318381353366766656275190463831503522239513652128295092897680949875433153708401966246976000272332294389517143726474038495934684353460128449357504408039179941027444904612222505017810534008770086553370099204575810832664720970035523251219105643922854038752127247330051903230606763080754" }},
+ {{ "6.682549242769675323927458521211519837379455566406250e-2", "4.37453434835288135218434035778045654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.23884289615444976971058885660437787480627352137562427420631247881049437291942148842029267007686370097695430731343288589752635360722257432905786816202418979845289181427172830309982121527477449228884669859681103900842455539708329644639171581286590973017189366587396069226010533102477610964537380565038e-6" }},
+ {{ "7.08735989603501259637141629355028271675109863281250e-1", "4.931705772743737270502606406807899475097656250e1", "4.22994581178880428430588361219833883540463488675474104323353907511764504539625188516288826354093370529125373667749527512470360034116957923611728143647053700596011110669882224710437210488847861184277118067955181730553186100384807049379684590737156995709498402541295775367296456895644229479101255193586e-8" }},
+ {{ "2.320149423239581665256991982460021972656250e3", "4.4481031013119287642609833710594102740287780761718750e-2", "1.41156739924941071144222113991630683194620198146427652318978812945951687592217439817665385168004660248141475796965481088709894832854582569992290051260681221672250427616673943995167609515610097891251991676291118804434690243303234426750763059520585143335380969303297852505455054177640936866538646738978" }},
+ {{ "5.53282998141260031843557953834533691406250e3", "3.8412160262591260107001289725303649902343750e2", "5.58373770974866315239700400474362989477383658235694014601763955308120813900734144800418886820772189374330395186134971653113939250757648994415649668842051891937875262317539557069792723676293862948593761228728392700591159530165592758768030540795599964339740660316188438257430600649159884119157424191581e1437" }},
+ {{ "1.85718777739859418943524360656738281250e5", "5.22760764621501818278162532216413183050462976098060607910156250e-7", "1.00000634214788464577855189457084479231510812185767194037441581727975561469887723538341241488476848396809344125019310357146729535769441778199276860378224675705997700022744347653159656289098028240954603207536444605258988369343538458427994444681579339406242882282677673848923548267602318784029338545299" }},
+ {{ "2.26509465497761368624196620658040046691894531250e1", "1.03762510179397637877229954028734937310218811035156250e-2", "1.03290580019042823129797947218377400320349309579887379648069219653044521496312022139633395975447973076157177628011296170468228189168841156259900536323684747126636993787966799478738521263932697630770091216225209592893137197359045523997671979624680066252774430678393930591603773849047796785558663064178" }},
+ {{ "3.00476295219746433740048985328030539676547050476074218750e-3", "8.0240930815382398577639833092689514160156250e1", "4.14136997855533491337740509094908136487500777275671775674006769752964040924959289897651192452522290539206601428332553008348132654735739834724305690164751538343877568881013821199733121651153278576916744941958595422652696891642421407236449964345890318648778746090208231400439749942969896805715062234843e-203" }},
+ {{ "9.7079889666732196928933262825012207031250e3", "4.44245980458260469880826804001117125153541564941406250e-3", "1.04162803810086699019811359451605453492327199203637588333443087016790236547076001612983024940969264195708947484110311219661303765376669460085704437741732903824466154100734799424439147057676949660911617676769474501254927589549167841876728171722481679869607753266592648983928705022178056753619502736504" }},
+ {{ "4.66389224589813756668976729713449458358809351921081542968750e-5", "8.41598683219974930125317769125103950500488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.53382042139791789590459891074340066702060120383660058981707324170432197791546635984529280576877432127625617337120709804544743161881268886942872653531280982977576133511801284796672543413476367564502976743587063883733930418435751755822485352709171649159924126024328941448624940766411726855902924670549e-37" }},
+ {{ "3.5980841563362578328089114165777573361992835998535156250e-3", "3.89106070923696201191432919586077332496643066406250e-1", "1.11957324795765157901703029938063916662894000731995996196921601505519523032651152137148283098242267387419838627536448762986353433569901640648734154364900058234967711292575255307936095926242393050569604396410567616604312846123878721000606629431359673384574670669906697802557686478096291498804903738631e-1" }},
+ {{ "8.29546112810515936034083672723227209644392132759094238281250e-5", "2.58324466499312066503080131951719522476196289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.86659658288740565122000959721270284304946720479579271651550103638161205367495371607443353257219806398111103943515458202894485596325631197266478165244814107159447017816960534609382148164169335790367935277372018345236031109996214855557877416239874683021494253068006756484498147004540748744410389570461e-11" }},
+ {{ "8.633345938915559791837495140498504042625427246093750e-2", "1.53080323158965114771490334533154964447021484375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.35233729973545869852697007160756749812975339497681040282999017995032382608550729201580422775220111291799102420635253476809267746237352183450521514570985348430714476644398637263228584608977432119909919809882847191196859131282077491115028311403034792745466352775458252803189617423439193439791933123479e-2" }},
+ {{ "4.96802530016260956990947761369170621037483215332031250e-2", "7.025196835724334398776136367814615368843078613281250e-3", "9.79130174131074712614824707606461473196424333567411409743609116414751816130489331857231684597817414740294362613028844768413127008896909984819847802879905875872491406317289520166024819440680050252863090346899246519659384416734528764367429297819383807550500609868490474715994290375146313368129823880737e-1" }},
+ {{ "1.24702033554851823282660916447639465332031250e1", "1.710705957554977231852011421153747505741193890571594238281250e-5", "1.00004316789477874277620263489613820769653924396429221925198065527832144152145855155330213971456389989525794479500052652310504867952437063466242776820964127214900733034755428153463014611408545155223418498794841462940237893200540509678171081868776875097700422657888013910264387140255547155547751726595" }},
+ {{ "8.14130989781463318757936953318221640074625611305236816406250e-6", "5.476743603534721671621809946373105049133300781250e-1", "1.63199095965818056903859668356569903606584619352293451010588563431807635376986054905897873784109387681218165026966672415089273447045333707684197569751029547891913778442699838628510300753325723159251992398807517774034918042863197611983714480066975243968618918488213538490759809651966026386013669113012e-3" }},
+ {{ "9.4831604756264176181446146074449643492698669433593750e-2", "5.873187053422951808476226709387901792069897055625915527343750e-6", "9.99986164907695049446699147999970503354260553000953839878275159076458261755428730763560216631851642537174133195419034054495238529976374508256949441111167727864128507860277033299044051865971449902820004978297018651282279654117307535005136847959876138249613275046667240315151303933181873427450473536424e-1" }},
+ {{ "6.724396223986286655338595608100149547681212425231933593750e-4", "7.25371945127648842799317208118736743927001953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9.74287216286274945633266572714083322962101975717027023442493643122162512912802620909159732325958549010615659395950026917825109006470507725724883444926417334797999132724229966674370457592343778072797597317430071335665732334697884217471229705559230148495486170835726019893708870900510074940623722192258e-24" }},
+ {{ "2.30442309265876887366175651550292968750e5", "5.100776150045996035209405761179368710145354270935058593750e-6", "1.00006298512189780533426621327292231284630240394286315128868176668180396156679505765231684868863847590833570938788465357619602169740491681317033999860409913654411707265663879954547321897801703570651803262843624273611588702980486012373865440788314427239276089286730821085936329475836740228791493079509" }},
+ {{ "5.67608898683707252530439291149377822875976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.0768302191256316291401162743568420410156250e2", "1.67068196412266823466861212116241893055807436102731155140415238019317223182255528301301262470626159261154640191153443230288813541880287940859066915763205210708548641176944414442344483827370453800486623574896474317715521007693847769491979549043149389934860292588058888100428936865217794693086764880012e458" }},
+ {{ "2.8133724660645658150315284729003906250e5", "6.7634484407087152105231275811547675402835011482238769531250e-5", "1.00084899099059737772913859365556118027581054407285954758329055990529529377511066455820790791091871502993434775634942750452313898053395589443975739777882392931281046995883876066279980856281434476038018812014179817821871586805042023183706725376177160577170143175806815414662475357051404586743878413781" }},
+ {{ "3.3498352383764867443161072912971576442942023277282714843750e-4", "3.208520821056923266745286582590779289603233337402343750e-3", "9.74653990782509243550836183201075823369159155519692846798314436930630346572690178245424014813711682670551067058906680367646181984756645025448347553573937829174199564122446362713993201587207768412845129431576839987405545810458778769778400165994012026984577717831659943902405397254874487260228557294263e-1" }},
+ {{ "1.173650036641017777583329007029533386230468750e2", "3.780534896009259959726023225812241435050964355468750e-1", "6.05893503437891990856263354837986270829833882333366791751057714437977103925035624856886729661425365010268503431934637684230477655839134293793513971115798026793973457123299079643692631311303731259185411381265912635677151301389868547814580071368806352687212447229499485791883769033890017890187866384697" }},
+ {{ "6.35473191480731591582298278808593750e5", "8.153326462586494471906917169690132141113281250e1", "1.39785593586175436998336047723152633390674636830187065022507274459265394076960202352145842758484227495355755965560336623550772098175134115092702375767668586879200691996181864401350579269221993542974245130770033239773182375358583651870979382999043883377805409110023459275245515025837447884289450716490e473" }},
+ {{ "1.20953010742292040959000587463378906250e5", "1.81528620999166889760090271010994911193847656250e-1", "8.36836082188852137389175804388074236213762814888145199618983165421342520318145120542719392963440700570926350816427711317556249274733873103430368341047528787950522843632555485443202700694068291761260828423023146529348899979040923182831897371799138328552240635790031739904574931369069808189107688786563" }},
+ {{ "5.028268644236564069438522039945382857695221900939941406250e-4", "1.49148497614115050149963259684682270744815468788146972656250e-5", "9.99886724184991506266822294352662914256716265702852450641368490227402118731911016182228523518485801671330942930187800995820804252420406598640376923122551567922827288661396415930336442260706727249870079649992447995120206397679683465259479974096061438201134430443691684817587750638183840953282722156209e-1" }},
+ {{ "1.7762360570648558178927234330046758259413763880729675292968750e-5", "7.16881559843790408872998831668610364431515336036682128906250e-5", "9.99216151571584206550599285631558723279674057106881165894202136106399680298454020164284514110193651012658901118782805914666290560642145072003861919887611842296547047036059520963486973019219177746829500434614825844519776793639037139709040279058532565912742721673028532604681375807832044191447365386410e-1" }},
+ {{ "5.4447075299350728982972213998436927795410156250e1", "7.8942499435862384474802203038201753315661335363984107971191406250e-7", "1.00000315551756552929413349733123431754994533967419962917545562731445729245526256276165331606875912022797791137395975129631042701829381104269734643785979371368397149024305719491289967486350643357572991392648348784068298353851347894101762457227438358667841811859357203913787202416700523836489423208926" }},
+ {{ "3.479528655391823122045025229454040527343750e2", "1.706470553795544006780993129268608754500746726989746093750e-3", "1.01003641035516199003729871729172100472722683758579980406598003587323081240911466133797745466321375213116846128724578817241014105529656120259049841543565831847323023771528373536119517374544673647922841984354734790648175557634969225996223997613913923117328699599574593399806697328078695200917124733876" }},
+ {{ "4.8968324713172875495281743951636599376797676086425781250e-3", "1.965286254903626561628751656662927871366264298558235168457031250e-6", "9.99989546369402488423594127072150976413227845609208465040224219805251052465526350038203035493184013561718362361567469358800995276604754108514280603768744650567983276404672018483263585666869718723877857972643772304671740644914409892158811218430582592069739462405196179208350796857344173822141379782399e-1" }},
+ {{ "1.46846575134083542901741736841358942911028861999511718750e-6", "1.13961295777929194628086406737565994262695312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.25155431004176641664360564432608271749851863826540763464893400702786658931519008803678187122457752047812131114041410952546777155616546380522319343918668230249104290662019435519965989945104554644065424460926764956490748710036580200886547368376656130754697653950693222962392418484839778727280176131769e-7" }},
+ {{ "4.922583286355184384319727541878819465637207031250e-1", "2.167012857499329633870210898294317303225398063659667968750e-4", "9.99846424401823072211356827414998110501335375349159811161820098061831954942111055007312660415928636319873898347702590642507419097876493991759663677610295879480797600223758201686500279349159643821096880668703139199785910150322740521690695804135686666464835791331742866153491003010427701847514162106732e-1" }},
+ {{ "2.088918420244419849041150882840156555175781250e1", "1.3745112355220467925676075537921860814094543457031250e-1", "1.51853459491101499462028153198307960464036529321862426769066486207166171296494170498179583135034855145454026518293079000045567402865046530341818676848400774327944796661350087157800975247279219703171839848135584471839442165788564723636737356977396947188532339857132058951624239309379955278406455872013" }},
+ {{ "6.59693951898326247373915975913405418395996093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8.5839050428511724441515973182958987308666110038757324218750e-5", "1.00016195756688330761491474273615136423552556614577036197755742996689336001512360595235890000441982158893267294826116899101351409093661584157256387065246323209052057870928088601548025462625595893993027794606583868972654751596093207938303600634384394989635869479864226583469214082919105133232859648980" }},
+ {{ "4.721903022822039201855659484863281250e4", "1.3687261479564427624211475631454959511756896972656250e-1", "4.36273289377674003549552956596428296006868194528902491172931330043916572933784595495824585583342079403134944318241053700848989680616524963231553615168899405338957973320487490472555612135391925458093520067531657179731576065041675903036737870428047782297012296101361469066116145701281560378942697624754" }},
+ {{ "4.820349777574789310388703178489322453970089554786682128906250e-5", "1.201141639511502318474200912135074759135022759437561035156250e-4", "9.98806768192609411674337267672424056960083232464271360229113542018960233572696008296128150338304172594110837781004501757127999427554595909914289685513812993265024374119615672800606621652602006481141937435665444874495693840170640030665928027259502446424921700891997624978473239252852217099622859393453e-1" }},
+ {{ "9.54197957425642506734675407642498612403869628906250e-1", "3.34304142023469919031697372702183201909065246582031250e-4", "9.99984326565139803772938990236401058117431661922045573846220380640349699832779123098058540753008622857674232899802697126593866411818203678224123515319186907350469596960547397261912465753250671926347546302198056587430826863955515669743258039245240360599418185587449465990312391796474083173534248199413e-1" }},
+ {{ "6.409606992637384337285766378045082092285156250e1", "1.0081673204983155756053747609257698059082031250e2", "1.44157504422123306075307680246115279780269010737951173392922320903011026254261224810748434749033392788723902179648854339741924679540874536758451693815806813776859218948113244848659597589114467756894234559650445795659560796369660440795499707193716216403592941616722628011042403021580672267269382135734e182" }},
+ {{ "1.22311589009840382402671821182593703269958496093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.1046934915771231197623158948317723115906119346618652343750e-4", "1.00004238976442526402787977257335501538186147626008780569692886964327726967250839556988250363044075945205489441982444641281650300897861533023502296756146804366735904879346020295258735438264424281840920414740589412010520817925020516062766522452589181209496869654998063536725728358771467633669371863258" }},
+ {{ "6.3929111843020800733938813209533691406250e3", "1.28391975830675164615968242287635803222656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.69505481296349945509651870173004703548467117826619443587513918127052944692060859604078331125022112009253571107992368448403956917792261351644585277417570509975725723863004283151424512684410008159602519982839123505049564570077423370661622862250195728714873045142974264003278199036815752137105673556433e4" }},
+ {{ "9.8319065323364611685974523425102233886718750e1", "4.16849063361153184814611449837684631347656250e2", "4.25770980590636267172342833096299211879468172398651157530921609762966193936659345808702337762714296668889853763786019297633422123145533613492472992798929637639386760407400078511978818609469799050619387136981965857651597610392961103496543359101531210986834447630570812748220097342632073167798940478519e830" }},
+ {{ "5.473175005590576347458409145474433898925781250e1", "1.2556940190600926476882648330501979216933250427246093750e-2", "1.05154283217149739996322394073132732110285973177101672144476243536792403202554641841303821681674178605013975392578098758039213562899690576014988268448654777051869934823936115258309781471880324840875908371004233345043851515355481534420805940488435409518654838065662552503310797307929345306698760361427" }},
+ {{ "6.4912383638254911311094019765732809901237487792968750e-2", "1.850202617176646691099506369937444105744361877441406250e-2", "9.50660946670306311914365279482095005173354041210571854577128244379583503141132158648667793122314902465794942399303782457347308120094047863238127874892080844189140303644281120192942849585627941033052970332875969503978268193734299765207776684899260119431935484734340685682552324678913617232469193989216e-1" }},
+ {{ "2.2469270547648281062189101753290287888376042246818542480468750e-5", "3.52982695718321792810456827282905578613281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.90763013958916250310703922628537395346144248614383500040096138375431039104002049367585390738671354254176978486242291556216285278163895739264649656370403930009408842065500683071987767757954595210907449882232438368368764844630512751091553559176805208777768953085505825846870225770460080538105432353809e-17" }},
+ {{ "1.03776311938838771311566233634948730468750e4", "3.67758461032731062689826728728803573176264762878417968750e-3", "1.03459301282359622046275858130909175858605738103500377882461906122638713902728757596922241637837677972497613038491667511030599129584893938038824302224512570610802632172627579650514542361582967805126424931338365938119495726516045340017819117717607391845493489250022446019685368890472485823905828290701" }},
+ {{ "5.444635317520329920171207049861550331115722656250e-2", "2.08467925444702359527582302689552307128906250e2", "3.09056011709343327076534816446309237286970058275834540830372719698670511928227959632093780315386474610345825780828956917908117330975173563693122316666283875774232598613235043753932040992980072681882395580571647274880789017536786697004043527146342091119566202577901703268215449281872604307112909919335e-264" }},
+ {{ "4.321410913909301143576158210635185241699218750e1", "1.79962553627032728620349644188536331057548522949218750e-2", "1.07012654071632775332556853428357456635166481137753650401618414453228087751942869456669180112375507267782856652222749904765639096915852769878278766680206962666525967341796532563009425557062229126958039051450556007688280632610398536337196273409572525834486954342631282999563123455233960154445776600968" }},
+ {{ "8.8519539520932943865716424625134095549583435058593750e-2", "2.3201497260401708899735240265727043151855468750e1", "3.71305713463862717236321613646893663926389070764619904563621824742856237889605485601780242185666715109642520925666586793175066523791156636682971412268154170045092095602942426637119803498838588967096817482914325839210531169438704998222940708453881877588305201012231120626503012557840854056737490425114e-25" }},
+ {{ "5.118003582399178455139554522190792340552434325218200683593750e-5", "2.53194625802088957300384208792820572853088378906250e-2", "7.78675898815841251401603750577856756795950441245444722873452268896478608982683458941926503132911522781757532432483294128491039729829837206496101278313685758061174666050134299787052246310316361371623036791254936884792176693736621135978412809784428098496835040268753660201880757384305210529998116341854e-1" }},
+ {{ "2.3274146614903198568291564640730939572677016258239746093750e-4", "5.386407398328963954184378515321895974921062588691711425781250e-5", "9.99549497162550438458304414161333920701781715268855145062033883882900750111819551249273252859663946257284929221986573479403421187776431235203160677411657816941834327558315579342010850796902138914924928940560282841455433144115320935123004884062392612303227832917659972351800421646517607120651251528968e-1" }},
+ {{ "2.888209173418870195746421813964843750e5", "3.7267907937487687597410968010080978274345397949218750e-3", "1.04797427152199505899776613380207153019163891696040089708565511495563600355422445163531206665239877024907641710076156338867860992891601417074486301976244681251883409289427117509266966735400170413169626794460003914944960446253186507533452481416547111722260834345331494363350198444447590272333886931493" }},
+ {{ "9.1176907448884685436496511101722717285156250e2", "6.3428728361785488232271745800971984863281250e2", "2.61412399451200792430940441597911814328017657658519351363425803166936981320098511499093754150499459010245435176020174953699548406222107608392288974835149178057255386825625780361600243592099112823611022187187648569904297395013151014275208089987059198137284635106672418842688183845527005332642735224166e1877" }},
+ {{ "2.99902079785064756833889987319707870483398437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9.684975926456249788534802469541773461969569325447082519531250e-6", "1.00001063692844088210456002419855074011148005470079145471634788112628295771788190807123424233524759763995207569368229563514564551401717941193555837507092120724642714186373549513618453183103215293207086254916107790393722326161402579919794484826396299503609272588338890824693538523484869461094064640920" }},
+ {{ "7.728544599046511575579643249511718750e5", "4.4897834852120803786346137087548413546755909919738769531250e-4", "1.00610574384563796400321310101756992783528974702739913146260646865660943239706104030906315422031586966995536370399679280585793557349882649609015460449277306668457058524687099432479479161198093426061867258598346229732606275929747805949435342506588647203249401335413541148238532118555631296171613732580" }},
+ {{ "9.2977037287730581738287582993507385253906250e1", "8.3526187246175812375903468876003898913040757179260253906250e-5", "1.00037864179461996490975401602514900577512361928909810135170262283211442500106334885446423595314421485481346967556782507370070595069946883492382064486384013379235733594798086474310298773717536986583185147038897974675666723220012717870637206407697176312759927758943687773764377471241445265488722941855" }},
+ {{ "1.0859392704197159673640271648764610290527343750e2", "2.5420532850914867237235306163256609579548239707946777343750e-4", "1.00119232709184950657347355900529943667776581936561333029642844322931651851922987396688070423513516427393233449332830940932893802869470044377136541346608056612546712420915411514501773616973022311857494372432610405714927103499401270099666054931681878021711299630772502630342850129330691538468637467235" }},
+ {{ "6.089552101270304992794990539550781250e5", "3.93997641600216752522101160138845443725585937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.18201219777662049133348544929685038145294798461233898669466368271726917449741209374562376908881805268589020897308399041338055306698995074087125055703556791502100679603522120055594862139867723186128435543540272128120797808148788656196331354569711892744404054200303870971480027638854018077003767037387e22" }},
+ {{ "4.17002058199641822966441395692527294158935546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.276387753247702787221320996913220824353629723191261291503906250e-6", "1.00000325050709508111108865304342178215954684414490544574201155545551225580135488259163273316494247157849444894518301320733204512003009459708444645141220074915996395890189435364804366091830247042355490183040883445209891891864651638351487974364904897430627412415757188029347485931227191708441175016047" }},
+ {{ "7.67550081598081896869234519442670716671273112297058105468750e-5", "3.093588605415642511786700197262689471244812011718750e-1", "5.33361058888703312937877266409714100834748582910004102998779521040115944440359724219966898465717158230452195981198500825979353396690326287544928081118745655488492150353523103453131904616559184005975246310430624687681784477200062656846973772093687820868635241069192671298954998139357716654945366635020e-2" }},
+ {{ "9.119288514356249943375587463378906250e5", "7.77150273145831363419411275117454351857304573059082031250e-4", "1.01072215443565297495212875757828431150173416786594077990011283253611684077171961857977658555772993227256701225998130851047810587496804030395055038866276482446366864045774522304245866613460132889356389785400787106849829332460233953000396006079677394660376277801825929937944079178448460996666434091599" }},
+ {{ "5.4142012264591812709113582968711853027343750e1", "1.8952259288250325680938446204493175173411145806312561035156250e-5", "1.00007565289778675652984140979321399062757791371437603651125252179594586538728496280877795475718254343845999376499222253067347916841829323365254311918387151598991472092918535912843066893311920458448486904240767256448921472261918689220109607027673999114234655407258002618927723100761498362332050377153" }},
+ {{ "8.0087992188598966514234689384466037154197692871093750e-2", "9.651251454841747090540593490004539489746093750e1", "1.51542106881981491731489464208722559455080283729538316329978070693260585378415308395373558536702307332302792317627310748549719761801156867236663991267318247059438589418271824484275577584765219427298744283723772247523591169183694405713456066811755471408195734266771535080425449850856084868376311119689e-106" }},
+ {{ "1.09156997362350409730424871668219566345214843750e1", "8.10878062686337663933500152779743075370788574218750e-3", "1.01957066747628902940966302510092960488528925253540221172663471275503400990771789589916604068584334436432589666410671717466013196522730609847023637947764642131621149159485396625786863911618319465245064605684158683676154002669412578226202367577007287146331656090836085181386754790207143710478024828107" }},
+ {{ "5.27981737437816178726279758848249912261962890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.41970852096179633861083857482299208641052246093750e-1", "3.43686253241293502543031164235680564280493113934425702290586259672655229919415634458697404687915141160074152506872313697917935113169212018685900336128740210227144508079482606408290248099236632255964024354639101204012497824568760884660053718968331056137812934970479251589590682389747704367113989950745" }},
+ {{ "2.9763242468503051441075513139367103576660156250e1", "9.124583619162003742530941963195800781250e2", "4.69742603562041824153926447786929280716116286355510132564473072728789802885515779796188477871744149730979853211785348379587523589298115735526488355106077778856284664084128422453984824424076757383964141778964343798745285559893404942252682634909106936299245602255752362338032501973165524906979409622054e1344" }},
+ {{ "8.1227700762963667511940002441406250e5", "4.92673741168140821855558897368609905242919921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.30484996489149406381687564563779425178418692009670007244171321324888859123491778857160269626310259110411696125879945417306210294026918965107428093516365217530286177050990880067424193779915234192484015646474192080157981645949288654940510168136275269591421630149209078542082633232345605476593203338075e29" }},
+ {{ "6.75063843580995381898901541717350482940673828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.02748489106749621435632491284195566549897193908691406250e-3", "1.00196404947416174365030420006016203648060565955934806957206111637856432455172895201651727892958586584412299635092294986305134023877029915464080887124975616815060819276759381700802994334432976763795102196206567937500407359464356440088544622676160266170981561234435498384331071158546292310523236254753" }},
+ {{ "3.5017444416405400261282920837402343750e4", "7.802827554512200072811545226159068988636136054992675781250e-4", "1.00819798888901128629632317940565742032581044787310510298394051237610722547925779466083057852335930819436022531750188258730486171674268778076637531078630844955462136795806889121317307097195981029957098770479755079052235805500969330960373439119072852284817639069793570751583988153638659438922106591664" }},
+ {{ "1.2656495085348353768495144322514533996582031250e1", "1.553526777035119332782617251886847498099086806178092956542968750e-6", "1.00000394312365539989563625486331626137964273811834798695005780013495760538177217100805072673596190622159320905648378255454000218262505715454699578920413495174693604468418384665870032433868756106543653906692751058614669494849726609491390952522788637204327400613561970408136313418894648226391505731573" }},
+ {{ "2.15745882397261681817646206127392360940575599670410156250e-3", "2.37905683348865193416088459343882277607917785644531250e-2", "8.64117851649613850769514625497977880278916078343037571542452910699608639199334716242087257033679813405503457913766626678856765747940796988239184619492044398845847330875248279377691256718144764352787323595310916665202454075432835782224634142882556904024349917556799442289975480861859420905292552431968e-1" }},
+ {{ "1.041453721678808896911050396738573908805847167968750e-1", "8.37802182325172850596572970971465110778808593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.88526852493738132239113873166539203263138672058127955706951262195153797473038707601101237196070886256644090185553908945280688151557324839521372121066434881841798255953853902832020964805296391060444306684398308798244411237112095640393380398474592654522034844007881900667824504043884214270458892007901e-9" }},
+ {{ "3.07012551115110277066833077697083353996276855468750e-1", "2.688791941473964719477862672647461295127868652343750e-1", "7.27959056811329343392664000245431816256252125501370190635108304735068414726869009253945094404747463601079257760616120868020903017002340732110943618640264478113302579667971697324950504699622151612181100300886867598913337113652973737056690812163582367071363756081204514554722838161602803979904270771466e-1" }},
+ {{ "3.8785555274741909670410677790641784667968750e1", "3.6812395300311884227539849234744906425476074218750e-2", "1.14414942990692656452341784125767590353064260907248467847740571016135049928321189261126610028098851785915087403250818786340815261171401002033061136458109120291157079359913768807250954139969052510045722307049663169894534742927788300920701107994896596920105547258658675585904959114220585301112702429345" }},
+ {{ "7.2600458186699787233031599953392287716269493103027343750e-3", "3.0641341074503714025922818109393119812011718750e-1", "2.21086963011262781557962916039162488992600789192717542131434452153601149170623279185807445011140592247466432290015786700658875253434281122713288249913633617033214856219833669907164464033302015146556043425711342744639683355773156696931162767677537366527811567871143970446954952970890842842464186617910e-1" }},
+ {{ "4.11288422352877880427968193544074892997741699218750e-2", "2.51736412939929010690320865251123905181884765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.24565288563751822331299972603179488550349468370067144446751898852644002616709216207408151506565589257442807820798232055968358812640290558093447292295273379034573533601586226697268290915360691120466719143962043078879323957769794563236709847407432551615445562560818926972156677354022231138620495943375e-4" }},
+ {{ "3.834137867264226078987121582031250e5", "5.00384576840691153165607829578220844268798828125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8.70586881100241909365086281828106615321437784717557599878404325717613404517722842063862151116432421295729131945352592123500947115034261116251456345076603582494211858526398683989440066160175940760838173788310914276938532934671434380694237696835717084352874743706871899256563045584501545107582617433574e27" }},
+ {{ "1.45287638810286156079709662947152537526562809944152832031250e-5", "2.12685751933480298196330049442792642366839572787284851074218750e-6", "9.99976308406201382296511195677454028213966050559386949061001176100458674306535766658075727649858861936143578824990999294178518894376297296437371242014351633015801209221765213206140971726863151455918302666401442029878834264175629251102478211077868646609228275473662440136138981614575523961652841689231e-1" }},
+ {{ "1.060607787842173799219835927942767739295959472656250e-1", "3.6653855504344872232036500747653917642310261726379394531250e-6", "9.99991775850777769594805464682102392095766388724998006545282885743063065509840288039071353911521871815954556155694843177720505424196812072094678443706799908575637539974472545844157811962504294140635183658965312242832638263593804028788156476482121148602286677141129409544764834011834242854688050032534e-1" }},
+ {{ "5.8808637709003045920819197078799334121868014335632324218750e-5", "2.2895041482392727849592972688697045668959617614746093750e-4", "9.97772228399557115917897595553123200059617745525398631036747902716221825268917059130877148214691312502174434355597848183024102187672671321353149180399633699090375168044589993636218162674313714376215322688591337150653523844732601246528148296899452660176207080310884559549441104143585753370139662688312e-1" }},
+ {{ "1.82088437442942030486392468446865677833557128906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.18170819309718790101129681779923430440248921513557434082031250e-6", "1.00000130754723378331003328108523077660890480086159377400421770916129060299296337133805493313328717117334983973342138421022906982702012383037259191961910456959250943670084798790257349266900179703918444391347033677458675178576414635996649806132816647233201959427396166295868642002149628537093670669003" }},
+ {{ "1.81790864213692415773948596324771642684936523437500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4.11112317505943991591266239993274211883544921875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.16716616089260899158634927691311476940264689424270830038830803482761816779192664467113169986590716888439242048069862364270415910055880132349242712046577768880635878273030333655678293456983297487516817843334720432032181949191565525929129951842591644277698817197191950932369312197425519306770280944742e1" }},
+ {{ "3.1168221364156203344464302062988281250e5", "2.94098588905476396315741283160605235025286674499511718750e-3", "1.03790338780611240821364394096187689009151442337723127625883997000112224823851501188946812750320424873330954741819494803462494193607811995436113951374495986635400485180461374008937550605117989616259238001766980179462154007176099462553721961527948038831707776585902099492828100272597482214965326918683" }},
+ {{ "1.390878641265953438721503232500253943726420402526855468750e-3", "3.3010272380812644144043588312342762947082519531250e-1", "1.14022877396721831842223346046335424470246823884137406233750859143164782910052273120452909159294424816461360814736670369100321052363875210113861850087708357854957657313512898387152990311841659387594066789695419982631901574195401313785030478101180804642923588217360853722001240454059693137169086797197e-1" }},
+ {{ "2.70245297975474845853308125676051076879957690834999084472656250e-6", "2.27192418381639527069637551903724670410156250e2", "8.66297652134236153231549630311782646457435806521553869102045806271290140313907532572617601088189845177879703715370369231877915346831429034626669722739550299919960838955152823532091259662956246982857242736145549200749997723311019597549168518852317671248226020048798842889139150504890040937192852486477e-1266" }},
+ {{ "1.249171446812304111517732962965965270996093750e2", "1.151409165552330193804664304479956626892089843750e1", "1.38260599513773427745927397841453042338248242456988517458147773019568704658853879515960004076402277283883489795069346406439823839016514254977654510204974986928186171239215823810556312920621087546486393810430469767985081698483192169492133075210737954383435371131440185644678524564816434215238704654516e24" }},
+ {{ "3.118362310192143922904506325721740722656250e3", "2.07745884054014173791813391289906576275825500488281250e-2", "1.18191130436089764539875276066824383600066278177797976268794231640866698789531115667856789828761726794355968881132857750694814866048339710833375629295256557712732385065863487440162509225900966765667937759713986800012768351783498265785505802770202831716066805035224331887004845557896771449008224340669" }},
+ {{ "1.490792061643138310955691849812865257263183593750e1", "9.4237360550309404061408713459968566894531250e2", "6.27012834121533023666785182346229437241289754499051958039863912420351581912036946871768101343922573098899177777951053704877386501476998681242293961635818871027535060307630949907397555951449420495765047830618356183657814571149049220337636474144629773918060565875711712572574729922979876342390263324772e1105" }},
+ {{ "6.6662061859632616494727996858671303925802931189537048339843750e-7", "9.21273515382789454086776004260173067450523376464843750e-3", "8.7720486288821936974478857366077028717039276900173868840215586570851328800318849625174063894064299296365776744832842535347287057849725364966061157585147600109227112263672943360146015080190661943495120908398140804149413536576847081616293061568452054226035633596561472067627264621732339446631526745150e-1" }},
+ {{ "1.380789864323115345712267298949882388114929199218750e-1", "5.93562727297856326913461089134216308593750e2", "4.09060418138444387424424059062331178711979043905828333720448765913252697584689444873629369083510366476460104106313375773568706388071930121668811178870306890980290075045537520987441428335324653171796426529164093528427568372203611999068229147036397950044150945977202609787933363721956655499688121770967e-511" }},
+ {{ "2.1677105043294141069054603576660156250e3", "1.114162712132173898085807373092848138185217976570129394531250e-4", "1.00085620226622470905732844417905757963463091991631468675045664887604696934739150514381777470211904644648980514762573227291787791600677422794047913591269830095072415283470532919592193733010388187339828883232881043401853930198928232094973120867346831075681954343729371567448461485192448773328157967492" }},
+ {{ "8.66129276411148731409928025470890133874490857124328613281250e-5", "2.63230476162026535980054120500426506623625755310058593750e-3", "9.75677926316087201992937434104172212635183402081845367050961907386982900528845357336855433020027701890844425355924313158894887243517734179729721860852203216211626732274220956786288208809210677612308603888585509873354794360927290410971415768734554863757722931375046183502833124862440220040682623894401e-1" }},
+ {{ "3.350575803404289660855641663772530591813847422599792480468750e-5", "3.16747650803829827736990409903228282928466796875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.69762726818915994102636669640248641695258916516178220951615332541358403169898089796085534108216181605452622185779736827460245748311614902401628390881069582094010945399117381574868399439034359201699565625835678615787458358138834274021214751543009200113868243044350923559610553355961511493945076046223e-15" }},
+ {{ "6.533819307718820648678281770571629749611020088195800781250e-5", "5.88128239916411388321648701094090938568115234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.44239576906295172295161064728901353975092629051590219076800377900713837403284136783431262977433666893756151770251819781412876948522321366628456614260642901179077056688683539196520237460889892611407142177331136348438247424975172992629120895139251739138531630904163246094893508737465346231066931419052e-25" }},
+ {{ "9.58824111169796669855713844299316406250e4", "4.767758882233408712636446580290794372558593750e1", "3.29079715270199960942963556473318847100392035825806894633874834481890517355918139252275167622132083673533042352315135079499274198112245747602316235108479674713674202663546893395644195003527204518806401402778881498713093151993690595544754136969841959488665417573929913679381495568123074940059218587082e237" }},
+ {{ "9.8046254480724974803007576440450066002085804939270019531250e-5", "1.9238006181862110643976393475895747542381286621093750e-1", "1.69367957215417366534795032414092044927898150798664469523819577887485052498975506353682229088031835479896261249192998498541269057857290594440231095317424708287026045610877468508170913712129807960043309223866462243177903185979844369471346406937023243553333556543631914530281862882346915332974736594434e-1" }},
+ {{ "4.22715824828159014714401564560830593109130859375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.73237473383745509636355563998222351074218750e2", "2.85142181625610748727512967615608623642319089823180852116567338775155480625397140714648406228861247464456116191851444571000366236244452154069748412545940070600491678946250810802096421175871317523376451483012224450957973158915531091130907648484702974041033736125577265886371493322366154555363836169078e108" }},
+ {{ "6.9664712703758069345383319159736856818199157714843750e-2", "3.57526947921747250802582129836082458496093750e2", "2.21776552625627356590336877317582904052748969026951170943346144361121751863809186842688158978930311760773848599440472082708351294025960471667864592532594991999006914698692274398613842119283225752843571850040859177332114176284555447226936581391382855150937157990431287391269415649433263516860035782138e-414" }},
+ {{ "8.870316572117269515729276463389396667480468750e1", "1.340709584692019973317655967548489570617675781250e1", "1.30679204065692425620221532321916410120280977665891018935099692677903142836365793713310074103183167526509810778546217793360039724544105606790669360053805611269103519872268834740224972933178750433774433912507891375768945267742879488012985036171398185645729556921004734943776799979369402749984084043452e26" }},
+ {{ "1.38894800193875870772397540520159964216873049736022949218750e-4", "8.2883437025022566047027794411405920982360839843750e-1", "6.35222056499059860815119534190744388049132560559707635179974362835024292102863415735162094842301916959003527949486946878329851243593307281685479130665725517616797588026104563060365221513904192277451172225341242860418605162130720263571624685346061029050164764398879401328940031001593736913742594656342e-4" }},
+ {{ "1.09816947397275884975090254336294037784682586789131164550781250e-5", "5.58183945899629990446480509724835883389459922909736633300781250e-6", "9.99936261439304212269593793274631621066678586897953594510473482514688267255174393243589871913940083113695300948318689338051222055912287552167309726448706279958229666015743107592418824002439360290161725288760084420735569321637244499982204153705684126108823317986930400592132185032791247608619277879575e-1" }},
+ {{ "2.3109699651686566035380110406549647450447082519531250e-1", "8.05549814372709782617221208056434988975524902343750e-1", "3.07259003265165794231974650932471010325197411080114721904301457157547097334313567798534807882346741414784333355642286915364891740931795753032224983168581398136163731017251242792429565442336378918505638415347606482959367519064678452374991852143987534832456623394400259546622175052847902597251732867983e-1" }},
+ {{ "8.496704164419041638289797901961719617247581481933593750e-3", "5.06998079666728116224327926886417117202654480934143066406250e-5", "9.99758288631873273226282145885741739757443924805027385096536700548341955223394388330738555808413815209906793614975662061712919602993250011794563507497959691981853673962928960543216580974445772540799559436678586781978389593065105455927885069982188267742598791601651598840088278986439446428992363728811e-1" }},
+ {{ "1.5731138538713305024430155754089355468750e4", "3.280717754969959891160960485656516993913101032376289367675781250e-6", "1.00003170338187821543987107336746662729109295981087069294808638827112958850528655867141095917778641007871411889107729782401763128246612168904257048743190385169980528080025389670873111442583914650963121405799362630066123464254273948242629742051351814124726982856264616340030151043214382406894418159834" }},
+ {{ "2.39202138047558889866195386275649070739746093750e1", "5.4911818191854854376288130879402160644531250e2", "1.27339014094927962826314328575939814304054781018385168289190485168514741352754753149678911930165646861374735328175462043586928267957865268734389479790773849220996848074070389175534751472812216991107745875007249116250242613067032470443930894251972922681126465003519414999032823440924453088711434009253e757" }},
+ {{ "1.64634850170019781216979026794433593750e4", "1.580523129961241765584212259909691056236624717712402343750e-3", "1.01546348252503362826107105198333600916123885616351929759095090370675683807853397698537671019348523544289454424258903395372242729481623263158900841743559291226322042608326721672299094222138476822715326186152957264351608036142453170432188932360709929281850323115131827188070509946087921486355921396837" }},
+ {{ "1.29984771123733180422585298252613483782624825835227966308593750e-5", "5.486733068536071497578454625454469351097941398620605468750e-5", "9.99382895797564405052408771210317692764125583490813721738650031785719409851796983570805688722349822979681595897622086712994137349075757656980372150545265412692073900115244181782170626388308672797472118433651575906690160786295103594530704832482562910548180219532761382129979082146445301288761331520852e-1" }},
+ {{ "3.344994107622141221725087234517559409141540527343750e-1", "5.7036284170717499364400282502174377441406250e2", "5.40485852822901975442109716898610918193900542520961776863305069906497895793489542547982159745108266280524490077140951661552295048439266934614559790866489193897427949324691009938697269495988925070011169411841665487299534902136008055662912091113639828368592572760704050198717640286295766255031666140310e-272" }},
+ {{ "4.5876926668516091467608930543065071105957031250e1", "6.940088848410982599879126553332753246650099754333496093750e-4", "1.00265878013514519296809865295705868217393246867225559245606227172893223522667583594724300322356488286875380629025637162385262938162022625886814529504008804417980773476428819488610083450291142913844379562656183905757559036430981251862699509205398028210683848825112302095809741897956564300820095580866" }},
+ {{ "1.83659034529005538161072763614356517791748046875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4.28717719818835121259326115250587463378906250e2", "1.53726930767980134628351414040002163694004937538301878071492381306637265403593248974390687238745936146996356402451151949754817939176416474547668969917407094657482938942615901000965138448816198787619804034435155352704149778316444976717855180409986287616695020212770570197624985971189801426264668362739e113" }},
+ {{ "8.6965619711067474297341850508757943316595628857612609863281250e-6", "1.5347053247153283339621054892631946131587028503417968750e-2", "8.36245700894899388555856775460955394048641742342223378203581109445790321544636857502869379407622931929904915591813410010543421311751441003345169506628319334514393326009523930245673734273160199057057608984977895920935149203153332718973184503752228376603699406900321208889195409621350940486281346111426e-1" }},
+ {{ "4.77866412699338716230101908877259120345115661621093750e-2", "1.16847487332184418740155251725809648633003234863281250e-1", "7.00939095440309291336847802488312895385004430053772751642212203497067924870860269568166321148643247526572505972984054880543549485653717067216843154655077419087852705718322510631592242331848706588637404925586365121042986696317386544833327481602868949385627978856713298735650783856235081147982296346628e-1" }},
+ {{ "1.5496379919649280054727569222450256347656250e3", "2.11204960957075971172969275357900187373161315917968750e-2", "1.16782897318171377990330689886402903355059628193684114132825684051875757607797689933491076299185969963004000061078683006351157287011440524301691431503915118755080894616168235485089522630543579349054155603272650786560006738889360398191602249883148592535791585897969899944427735543027279681332101510149" }},
+ {{ "2.4700067947116121649742126464843750e5", "1.524990827307894439290869570413633482530713081359863281250e-3", "1.01911645804528060285295007365522901933244353571254108413776362642912835636609229733378877024828901273387523484327765744744502840827542422973162779826478327376782490303695679704814420712110588844007646988152318154340574171527693080085147287526207828218450010980129801914952299876654249129807403026665" }},
+ {{ "3.037235491867054356165955830704206164227798581123352050781250e-5", "4.511103232652476435760036110877990722656250e1", "1.62158625261315621796784260963880908165199570383258880752909601743905724906716730454255511124675934144867399204404978430279501754463613692043192608111413253272638040513583589571469911855611383025946828382761211165356334768347578605666178294674917101334371471550226399719868797818976469869780054171828e-204" }},
+ {{ "1.79856395286417303225334762828424572944641113281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.3205911557676336696770177936421930553478887304663658142089843750e-6", "1.00000077517217823836935248077849892691299847903424265238524662417641027601052147271170002075034613200815926835872160958521395863660559755851166354980024967551112970300127247095245969854003499125350435566412954660499861774431261483707515396163088724936940160199016889915664585852452649068941190636190" }},
+ {{ "4.4135593735414602178934728726744651794433593750e-1", "3.4264101814415937496960395947098731994628906250e1", "6.74548555036519520791276201322845305843766995125882533366758793048355043544777974793130718057932582612619627280143295972890756755586060864163343519807569602024123450673829021330095007485505005460893008699595178496760510808546265795771516348135206769564722897763853591915237047669941031110007831969575e-13" }},
+ {{ "5.6917199182992317219031974673271179199218750e2", "4.980431025421458990365408681100234389305114746093750e-1", "2.35629700595091638395832213480888201727086153567756638562745744247364577078732772888391063571800696941049290536498639573875131887930844892410621248852158649248884548273739508794634953342193256645662324249539648039244590505104994015484168576899587920875428234320711411322714373060714140422162212909132e1" }},
+ {{ "5.76954356011381364402468285845770878950133919715881347656250e-5", "5.2511187291456451475823996588587760925292968750e-1", "5.94463304445870155806025859667737584217029774659090091223865132706141204011793568374081383686497430278169952431756767677964164234313821914580067310902314296078439102264644178954457549643252195734243656729528702645014237867821529512634908260975861471735012585206572278726071364924835281322609605715766e-3" }},
+ {{ "1.0512376808920871428367285749239101733110146597027778625488281250e-6", "1.803264129332194443122716620564460754394531250e2", "9.01096635654174895730364890004274506998670967372315294988820585742497849923309225303695080415166238118944235696360277258545630995713146996451284285658251097270549397299546887024456736142173128664145649440632706184379221313274424739352233838868194748496986549948050292922466160812395403732938083994855e-1079" }},
+ {{ "1.281632386074353924243496294366195797920227050781250e-1", "1.1652410215525389958202140405774116516113281250e2", "1.07879719574926016494490747415323778012199705593394831943581938296777477488312425323506097154699459156568032482136467971947677672762383992541647262353219851774496336332221673599562229050781431336707003943210680119687255794953033119424826346843688505841414943672869216307940977860809662475253945553141e-104" }},
+ {{ "7.872022514530490298056975007057189941406250e2", "6.397605722050214716034588491311296820640563964843750e-2", "1.53207555977032989055018208938771579303277505887799197079806149426805566503858217166434829573392590992745607709024458374528640995879305116834709101892580164791296787623750765678369128997876794757719509455355831607218534572758406336319858307548393197701741434159035106328532033366541994641153056109739" }},
+ {{ "1.854131908725732955645071342587471008300781250e2", "5.69406846692120716113549860892817378044128417968750e-1", "1.95656735368615067592522859512955039643574891198504549379998394284320814651945584264960315505975008311532240586619468218955713277820799989277348072854744621874725681637220043518336051308494199906438625737004480910828551371454866506648373987268921256736551339157313351536645840751017335445520822528269e1" }},
+ {{ "3.99959450842199415454558675264706835150718688964843750e-3", "2.8670957835011812164793809643015265464782714843750e-1", "2.05340685717906270754605609530501932449443307474519553599524954021671059012176997891604734383935653924096296837478833892286774229478680952581431502458132810484806788952807655375243507984165689501659897282979828575230799553474262829100370309746639962529485962944150334131789310986002849666502428526895e-1" }},
+ {{ "1.84674139572777286713578526189394324319437146186828613281250e-4", "2.255716592993170510617062518576858565211296081542968750e-2", "8.23722070622293990830799081708429380180065314114356604329745073190591014971022286949735867992102290979570786194665670044964971913376468986554402193499702945966888241927569660743521069322430532256408138686743620372490125687831732257527068587575688326301178711197108267406944507908002982504230542257301e-1" }},
+ {{ "3.584739111909031635150313377380371093750e4", "7.602453022229758516914444044232368469238281250e1", "1.78031144785764416938612223102409855040299356306284612439958299013225825622202999580381834230141933121841779061836895061770649393695477680433223418771879979265527918578121214616513115300315506936777567650603403724811526574832706041635294702581230395655527148395841553708668562384577527922279281988840e346" }},
+ {{ "3.71269374692093090395417220861418172717094421386718750e-2", "5.327041985305960299741309671439637440926162526011466979980468750e-7", "9.99998245586875139489901271639028340713779059130027015276766418411283294006537627833255021572845938748168207820412482122290518617722205438714506223415635135045747382101925106285222804464701875561904552995223695133038388901912278020591663993121292169965721308487953050363811103359158918910384771899011e-1" }},
+ {{ "1.70108553436059684038639261416392400860786437988281250e-2", "5.1660750468378145586548222389922102593118324875831604003906250e-6", "9.99978954129792622644650032269094574319631975777438486754903659150962464082118122945419410503323172656817200054190506282421527117453082829189458035945776425795407971906137471812197621061779135748565507246203908206485915975691199432826508885650310574999400116127525787480206412253878273855862615753183e-1" }},
+ {{ "2.09225836667166789993643760681152343750e5", "6.8566937448334350224676825291680870577692985534667968750e-4", "1.00843563284699754528712961596450017035453860350588570410059871012011253379813933654529429045301434484839481489237559065322374683637748571974104032389976926103159187339564349254244671809494052575105796625285810628759847430784136996879048594191371809811836063684074535025913318716848524590469577859424" }},
+ {{ "1.21714727542868383913798879802925512194633483886718750e-1", "7.04024274981674075615800667549137870082631707191467285156250e-5", "9.99851738180285989619013743122680620229360476738383672375457223596142024538032582334141363701685216531955627726353087504478019029760906182307020379318817894422274668875967247480704625723584657033632048027924110460864147683431850155444025526123837240535234902995892523890236573378473187948012001689440e-1" }},
+ {{ "5.077368207710659725115376339488193480065092444419860839843750e-5", "3.97089812664133678943301219987915828824043273925781250e-3", "9.61496103531524292145269969904333508188364139708137329208759077302004651060803860997069231846146525416244529356233531058823752839075298907756560474430217361656059248345442657322781131236619023757967452575027788503647455091630937116588678330308533380860226144011143233073363114955647590755520397783133e-1" }},
+ {{ "1.05107095024027863416904438054189085960388183593750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.03411347779367872590228216722607612609863281250e1", "2.75435618440696236423847758785039217191601787351549036022831398969378880644344551767328463505949691251600586393797511528994909897140379260738080763330267660481025359227717949542759648019166102411005065795694130304853332521480946507674204615568889856249883941530835820527992056685661760535222848429821" }},
+ {{ "6.049918012597592072501773152737314376281574368476867675781250e-5", "8.188377133726698957616463303565979003906250e2", "8.65759593884760895858132938458504295554865358684199156580525629386190771627069601339728387260476959873950047671147626130674714736942807728977752816985626622779230687686049014608462755984076183185977629942323400832151270339085974963175219245006492664764899739861651980200882059489983917901390447959952e-3455" }},
+ {{ "6.5174474814096265617990866303443908691406250e2", "5.077102163366880004926814939913981561403488740324974060058593750e-7", "1.00000328979143507415685697811442096253363291297955720636385496027164054688294193762566482130745852122932064218776073663482596744861678935376393042841878114830402198126626873661961854660156517253426476105318520395463096676472118157780746408448524800033381676594338617857965937768629354079942055143731" }},
+ {{ "4.6388449163862754964782197930617257952690124511718750e-3", "1.588924357889719374270498519763350486755371093750e1", "8.33715260820791317269987064747412391800309849955602033217225409481400578667858265909262657939940738177907804353137088637745857746470695800199690029742037073210058760217313184489359114691758908649867287570270285365266943814797806817843515342646282514312200010453327035336204860831498248439822619093280e-38" }},
+ {{ "1.4905828579579060615481478357935429812641814351081848144531250e-5", "1.7031751825887083903743324242441303795203566551208496093750e-4", "9.98108922622050827087546461298822670842973092479525322691759952475540660272868395330655428828449033553950251437644999243615808527145214868010990354809843842150796169597464947831412602935689456012651060606674408759590837715937317107067113406559618224088301687347090716482594166112826991011166298362788e-1" }},
+ {{ "7.50315265219419380571252986555919051170349121093750e-1", "6.0622251774968738402549206512048840522766113281250e-1", "8.40175419689520964937445314051307565108961445693694723005043311860973648366068520257018285775532813235354539177271941463790001972938524250513944002301467776271129144936307452041012641877576914077850978415809262774052418002232753061586235460151777159128199018488311311211799819289180487350061980646390e-1" }},
+ {{ "4.268470367888721342733426844517907738918438553810119628906250e-5", "3.258430440221719658457424917408218334458069875836372375488281250e-6", "9.99967215285852515192073395540137950482554540502668958238310575910483321879481952698928091493628164541705483350832773369892703138436296385686888980010809861693571807457349075609182274750398269557656870778473684116326560067055000556274923680535552295628380182973673412404308833575096574012516864815095e-1" }},
+ {{ "2.62667296496937296979012899100780487060546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.98943432793326180699211569447015790501609444618225097656250e-7", "1.00000067498249093796554190906335150484537007905333805853084798522029363004660855846859261868482180160316566139837296027351379815963628562093199672797915615284584800543052123602981811247334355647141931097257473080865200634384690696676990980451941954802180365065774462909125574737179287520936788897430" }},
+ {{ "6.70966669446914210084287333302199840545654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9.1631038456329054128768341058730584336444735527038574218750e-6", "1.00001744257181843369125556914164986065767377720999640888705793438430385027106235014113094055738186706162642114104415940235112867181288621050157885040444050793876376258047873939583048138039901310315757778797936384132441774545886210926930901727852204521859059543099653693673834002390277355781829097039" }},
+ {{ "7.41203371899830177426338195800781250e5", "1.080452434978750069676303735555222829134436324238777160644531250e-6", "1.00001460353450390109753320201848917579634289514937879484407258848004890744776169944597998175250117503923620359242409184317540187082543653993640048666001395047165769964336795615132413269257911431079896523695358479509374941248440346987424514128254145411471716437568325046246372300034330801593929796699" }},
+ {{ "1.6915925563799362407735316082835197448730468750e1", "6.180263869277183297334943290479714050889015197753906250e-3", "1.01763302348245649415440222014057755125288511751974439494118531238495212343084716356590900135150471489029857630623786718849006602487868725615880115082270216521029606377055101314827010471252021762724425333126829904634616800319752383603387644619737656819562990847546393907303039685961266007323499371276" }},
+ {{ "4.71460529249768889314964326331391930580139160156250e-1", "3.65188827816496541345259174704551696777343750e2", "5.57039862156640741370099717884062397571736028728524050580037613318788846117662035095375103738860527021001943141141148597120492387251375648252287053831107964249223144395667696166786054472499439767489130687268705183565392558321079668035341534647161063188715235627145576677691259556611945549071489064974e-120" }},
+ {{ "6.649823635178329084283177508041262626647949218750e-1", "2.0412485989929366955730749566555459750816226005554199218750e-4", "9.99916721594674747376600569188805403610749202879145587384797447934876298553391460440217614450811626491475153827239769211949770987067539929764774811195211928780393852025574440532735397207179531706592529705918782911567387089221968997852275611755107175151890770337885129722749288992344581262036121822096e-1" }},
+ {{ "1.1689344174400408519431948661804199218750e4", "8.15678606859390242789231706410646438598632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.51388885705521092082676462955313303770964042418254877907252507964234420916080103781270109330079123766686738994000772870583969928581773756873588657991143050640555136731739608625215812170605441235916882843841833089297543893622016574335981753027769495373907938555110085958780955474425308783814139862813e33" }},
+ {{ "9.764006258263712920153487573315942427143454551696777343750e-4", "1.864429866329895268961536203278228640556335449218750e-1", "2.74623224798347601232565592691979711045580692330641567994756260200814740060669606546590062265074708542429821154943403107394779336685935160305728814542562226163058396994725320974264154815235226634053969860486205541938719842224052325659161610602552591765080618174794519808159266445853952938084827117419e-1" }},
+ {{ "1.87868482843651634084380930289626121520996093750e1", "7.1692987273281232774024829268455505371093750e1", "2.12028119371494031430335044645564708556145176065304647173808454044697019950167941050283479818252925468559303066000892193796628006878431527857608384081735638513924751307741786259324802053021768713537078672257166368405154064404708746524318561350343547073960189134086007775921344634528456932868446419630e91" }},
+ {{ "6.1095693489192053675651550292968750e4", "8.61245994668030334651120938360691070556640625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.657007928541288294811583817545569607832014464676038743964777536498999871997260503817641545878415793384542051422692777345680017433348671458013853303440317187339805594208064853234977344701458031672246519856148886015816160733326713509830759728307312465258659896898040851868954253501173778760212364320e41" }},
+ {{ "5.12940713132187653400251292623579502105712890625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.285644350198942550142847118799238614883506670594215393066406250e-6", "1.00000373701282973747520930655159796229096921541589463952802693848825441766023480118817224366828254246104620872707491850843628745742807472462411859435943238658855518813616022964453910564185237673973654468864102738810104394810487407665604967406614750596030541491730666890517480494969397423025082726828" }},
+ {{ "5.9691952797515383295377452976815391139098210260272026062011718750e-7", "1.5718058210615070579467891787039945938886376097798347473144531250e-6", "9.99977473944483761872828387581066184030968843746303338716635967128051482967926885604187120298468309076374477372898167140591203610593108721399453839682426096478159671434202750765691646383078954275710747248498138805135910075991839124150638583040898450493059066421550145802666193053679045930003027645237e-1" }},
+ {{ "3.686062142486083992309886525617912411689758300781250e-1", "1.49260037966346908013329231046384393266635015606880187988281250e-5", "9.9998510356549311348447592218399988108920778960674235069856751667182339392598123994325942355644458229974167672565122670312318271933327236417417637712072186685889850127900657063502042279027378895935315299539289874632736786085798675859434221092674392826093829832333880551302119483318252762377651960870e-1" }},
+ {{ "2.75108139709647048221086151897907257080078125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4.503704308271892386983381584286689758300781250e1", "6.22207684654158090072166193557643641149481975652647701708530399277363664695064351610680468504557225898194931419933867113331640493326162327026706800979963281990313857552256767561246682453632232432467037080629483164984556210425989798928121976072588554960434306958147259366170108308967342505596481568498e19" }},
+ {{ "1.811624556732920154900057241320610046386718750e1", "2.552600004410090513530875999670399778551654890179634094238281250e-6", "1.00000739442221122260724005033635770725844741914207974197964181739354726511926916714698090584379202017604302885037125163720681613028683344989131816590462063741786918631523895090976438946284620031268598318287495015673164204411596879025777677083658398098322196424671094954029116891354161564494388093193" }},
+ {{ "8.96493500879970817152297968277707695960998535156250e-1", "8.5687515754119067423744127154350280761718750e2", "2.18186472758714615747935532618938695169587522725634994323764763361322541875338494379271005378981383706775962465651100098009942121578720737172235160080858098630748438403135919432305006360154000115695658966205609995229485314131439314904570801339124033312271333615588491334684665719513845178970476180503e-41" }},
+ {{ "1.2661287980897948171610245537976879859343171119689941406250e-4", "4.90879340262861951771355961682274937629699707031250e-3", "9.56902896481771879143877379682638527882901861190229819789042792546979238367054331337767498254741605069110970147845996240165269976456347023401814558426675219095881612725781553874494895757386564444732770552998856125193687086542254594118439921159929235553297916239134941949770234940282427408194492643353e-1" }},
+ {{ "1.051797461093969659464905652690447368513559922575950622558593750e-6", "6.5937410071820754323135282959356118226423859596252441406250e-5", "9.99092782662380324729163640655313848714756101648128347661760755472309885143398472302956067855710190800993042892779094559399021527010697359107101541167758299014549008387517426503427862359734988159027154498990787998696863714462719474369182220777439814743092111459144669908819231194636468040015004769487e-1" }},
+ {{ "2.26677931802150922635519236791878938674926757812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.01284500605095928449372877366840839385986328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.04799524981909743425238268974274974124170089470250115095198088233403741098790024678291238778471336000887693628348108623078030852501843027636021269414992355439834109447548416843301419510567977485938290387496561912410461657784176868621026947292962832450377901755820567805673466030070278228671530695195e1" }},
+ {{ "1.47645383833588006439185846829786896705627441406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8.3477044596248651942005380988121032714843750e2", "1.81864953170833366001029957686457080479745389229343183507996187270256012032168347753440691289295163599099444007484206082939466510290612710007371495952373847856242772883552123786185299979765598455416935895627334117098932505280856391911876837712397381549095944110724452719067485663398985307194410072346e141" }},
+ {{ "6.8369046056257509746956202434375882148742675781250e-1", "3.83530767198103986204138493576465407386422157287597656250e-3", "9.98542687144721504190991783229244229904437024428948393594123834827455412276977464755147963505927618995184986289919531376928027005710396398910486083058794955925781790662773364003988254537015097017811287414007455159323257827799204950099119284414629154584347927772687791013118617040392415483793228615528e-1" }},
+ {{ "1.002053539055872133367586229724111035466194152832031250e-3", "4.21472319667746432969579473137855529785156250e2", "9.08953646324319429602818744612054042909432561532126770140572825180403651664408870454180981154606920328617475099247353850589948028434533205453640961164641456021776839621300753911422835934782850338468313312210488559936609343534193099022841479411388023651172446221865345603921529386692401675022261632417e-1265" }},
+ {{ "5.1523280283123824574431637302041053771972656250e1", "3.605102571810556155718074933247407898306846618652343750e-3", "1.01431289853951002532506377614168990948051280337886607436878494527645645147723859636940385995419356184615086203041458176935646525562258868511947236909026624331932959131571326296466151873473074426347666272446566573176007728397599624815497760954111152173140369195400219514948443921717606923360226206339" }},
+ {{ "1.50327863210486480966210365295410156250e5", "3.2592870520402448164531961083412170410156250e2", "2.21705224525603686559675227491858310594380597690754424568785114801297385692314088399732454361300955075549296567427255869777962816305497530312793581969492733775461667703068826501146498955373099052386164214730524062952781381010426318671419140310052915928431939434595652675036589780009141539593357125642e1687" }},
+ {{ "2.5210395048109605952227352254624292982043698430061340332031250e-5", "3.0457256960016615724914923468702454556478187441825866699218750e-5", "9.99677562816744661723525153627124442052964231793875730324917063167910023632186323828596851920875156111103787347156093646859907405739307639598484356543171131155872282222202848608366838457688692164646235280817749009555765844448651859985081286265963272205351701235959915053427147246220456364075290757788e-1" }},
+ {{ "6.69572868673203203115917858667671680450439453125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.1676327121801987523122545731268928648205474019050598144531250e-6", "1.00001172763619213033390863469162514923787137097731257478379858496528955583730797624990721270466292542630978166836841730894536953419182253636303821927335171827673847960943549331513055995583023583227615832251837950408037083523512010882821232754743304332778547391577736073428707081283889265580574098969" }},
+ {{ "3.90611154895943855080986395478248596191406250e2", "2.09392819734250876240189143118186620995402336120605468750e-3", "1.01257436238989364436740053785780748984877719711041249303794530677616720891994615335093220833940115128861191606642103642393403535957041953141054150817528925853538686389534782202437853737346681413564667163289005149907512827692491679645604032151505662903966426036149340526908388743360309704155643902314" }},
+ {{ "1.857389689084788551554083824157714843750e4", "7.3490044908232137962911245665509341051802039146423339843750e-6", "1.00007223974053029723271350039259412141636069806425386754509098025549121050837680692710943206684686658573776447604596802766176331791002163659401284496154417281082333498905606330772551902793976098371405853098920109852460783688567109865594724989116482969799710457089092798143235841330467446343910216945" }},
+ {{ "1.7607061517663445556536316871643066406250e4", "4.74889370868937987779645482078194618225097656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.45316765019878240189602403680427223818770335223288608146347951094991305163036799974448576646914163732716464031107846083674367407256925355345653200850687798959392811940414372053909694215614805160729642095127896071955737496902022738055554549005006428357198315347861922794020063710653902271293794797134e20" }},
+ {{ "8.59257176966675461152189718916361016454175114631652832031250e-5", "9.236406780605612709678098326548933982849121093750e-1", "1.75626791055079856222412335079669380796397627500002019826921615591957724636638189051537678939438100683331885757581588353701345439775420172078880839292692181866988352748585676000159933320197094086021294353349620582341779917757035411891306338495037492064154895428084541796948375617939605049956389592963e-4" }},
+ {{ "1.1837336674405312878085791417070993247762089595198631286621093750e-6", "1.6732627760162928912601384978664498248690506443381309509277343750e-6", "9.99977165516365318634154013098062676051482936340600676508115018286371174310194281664961388300484701624347701999911368618575116158865905431420415090042447533719781066713262060337264603666364847020671540664275635449461141562032657119830142469510330575908700332922190579477083626027776803818572001718803e-1" }},
+ {{ "2.7929704683754344451962481343798572197556495666503906250e-3", "2.9713508936206637842114552938710403395816683769226074218750e-4", "9.98254178388410952430693242810343707992963411946313883778028696826023938537768767830025754426281554000607392763511414140886618834915773502093937010404359418681811029932841236322654028803608283276794373781000755359892344545988755782370138251235941283542297935477464591913844965660089628462450619495872e-1" }},
+ {{ "3.38113855762533148663351312279701232910156250e1", "3.093016660149662663478742352651806868379935622215270996093750e-5", "1.00010890478594524709067739908022368917088132812449962876399165997211946438304504899291487317819472340328330375585022333633583894340550549675803507677712058170618442005704437605073252304959372965881786681685588681179433355904579852317919540925268445449423495866437480095339165546614783853750408452453" }},
+ {{ "2.06425930083115716229258396197110414505004882812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.22320068732874709382940636714920401573181152343750e-1", "1.56994381329744106645164401249639056164129850194015191524774235721349310749300345652229762055800940290782810800288250321003967654939060262541583665184611869025848444849240326580936044484294913651408991979990620894378054306407392449503735235963890733618686812461995281192108663576402590588669671991241" }},
+ {{ "1.340876954053071834493948699673637747764587402343750e-1", "1.4827341861663803634918679108523065224289894104003906250e-3", "9.97025233069613645577452155667707700431529405119046003459330154763708616924139333978711947517286910376855122315920165412886432318792826535847675162918439845483335638190760733366507881163660357422897573743052858674336878106847554903297760383077263299654131223242076136517464708165444087161451001347315e-1" }},
+ {{ "1.1379582983750003677414497360587120056152343750e2", "2.035002012363793124196179040730214637733297422528266906738281250e-6", "1.00000963457189792748049744783509653303667431326364869818483704842948351380610875652979437988682746278703117572921123081696661945181740330111308085604188704279357002138744426600265673193487995475006875655840336689027158444662492494587307695412667171074545903613666004574014189607190377465209019809696" }},
+ {{ "1.4373394351522417568614575777985464810626581311225891113281250e-5", "2.32214836393443135875713778659701347351074218750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.69028929542482647910462333162857910188985784876407542387662931701295222184216133407420608557785163630976401541135533394749225188544894532723554319205860877128881077879568220494222775086397987960274421371074192662130785663013334009285908262792624635778476059436229937151198221859566242280319019160525e-12" }},
+ {{ "1.4004427278933599154697731137275695800781250e2", "3.53744104780148727051880541694117709994316101074218750e-3", "1.01763558978681810389405573088195138451898513946030420888756116873548356901540068272802595421797514887115185086583712361722645481445016465906573909064890341678510048829617311165144452645678278211232399208153808746476971992206798944801345917584439323122735213774632862994806449009371980892407850308879" }},
+ {{ "3.3377061563606758021194309549173340201377868652343750e-2", "5.1634069105928119824966415762901306152343750e1", "5.74932879103617263287699269441230578657539752277509100498121992886363492927534654879230172186557771810338441534937330485904491247273189306610489852019997049552119104082607943340924820476508529648819831797793990936006114678588935819382061714015089476930073162215255275726210879447826384500950556498380e-77" }},
+ {{ "4.28996264268685627030208706855773925781250e3", "5.5584348273515146732215441716107307001948356628417968750e-3", "1.04758858160148749573207693865097611258682532053580644741708378607626299571741454781489071163331961478583318303704887429698138745438016282037356465726871543404600493318018423949357845164509841052287336032095968547544265578409278441961772371247405527391823186341452132702680834735192488255543508774968" }},
+ {{ "1.2811034459606310265122885994060197845101356506347656250e-2", "3.43418931353877687762121695413952693343162536621093750e-2", "8.61015280162581259611603041281312219714750672075712379519625520748837900282815093599469657102449329452585522609992906027038154076071639645146113938200595344162570525215006263974571317023675884323716943933613404725430584249433688012398115002318410911938391274174242791011414117839535968615208469771466e-1" }},
+ {{ "5.1667251794698457190158080720721045508980751037597656250e-3", "1.8038118503281862947023109211563962617219658568501472473144531250e-6", "9.99990502044552423124036840709042864832582112050272720529614683113869481837430803897286965523406403026476324601866776220157395635334324411401951420003880457537783083750584239021034205680737146324172685990190142433894632845319189846259349630351570776916287281796804645673831673367339618359511691534945e-1" }},
+ {{ "1.27899907316783210262656211853027343750e5", "5.2253602409032748332684548131510382518172264099121093750e-4", "1.00616341899333551359328361392752162344577264467244472586370749414301840554961173829121346442368844768868155278219296270614015234651325697529392935793355916715136924941286676982861345063267744784667777743656327428634674404454023683239192093835032100591051537658643852513812450455406749057692109035777" }},
+ {{ "7.11730850188353797420859336853027343750e4", "9.60788079495505627572460305430013249861076474189758300781250e-5", "1.00107405241322382059953913596876333435454811871669131165966566428674069591664017854016649566117750922070455790150785398980453750449040916943909541516125417685189264145037334413362116738563574347465747605135946915752491452923545893529316360034715492483804067411471432361687478500733144787639791290510" }},
+ {{ "7.253438265676650189561769366264343261718750e2", "3.29954091776851328177144750952720642089843750e2", "7.04970290589109038711395049954355776776342381310886782453562200726034000844667284742622588171082170563883520775218082400856123793786048177341878726458251943347876583569178437736653743701492064380769184875657546923031668880530296652280260428229230807500261114316496980898463695380987245993698126306466e943" }},
+ {{ "1.05425305597257192857796326279640197753906250e1", "9.4121156168923067464326948083908064290881156921386718750e-4", "1.00221940552517387456904940935153668768677803438018028587024892341085297549561710698873774378670329922261139925263482590967131460066291169951663366614190003024630959832086281000186573153943388176622129526851339850140935108594752581778544126368342198113455082270613501744317697800189856112116044092035" }},
+ {{ "2.06616686835977376654471804329205042449757456779479980468750e-4", "1.69516133890853029630996218202199088409543037414550781250e-3", "9.85720096393058346372084885893839606320554663169456270644249004310463500725457211657627998908535169742871675934174757999843761965159654941281377745862394591058408452525449223020548106433276286869407305925521861569746775217097838170535894284575048909646530082294345563168457886536304399266956794807072e-1" }},
+ {{ "3.64402451110348510332492821817140793427824974060058593750e-4", "3.20455824353290882888778412507235771045088768005371093750e-3", "9.74947852438644348963594070779458486239729374924703758041706549021145269914102751629698949629550481353884433142728878758835488685283460683679637491539837448325034596988851330419929610091798061933767303224300754233414005420110971299300889653323675957445130038468323617573447274322484402694978713617040e-1" }},
+ {{ "9.2924091843635910401401692415568334126874106004834175109863281250e-7", "1.10041539819032330171921785222366452217102050781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.30375096076042540689175588676000039497925847630595558133397707131285132566953633275113891277016515974090275087097707081223643727147456085023753621384884096242056199349318008502416132788061805089253485591443085259511013177192516510953942353610198267062490629651968866334656113567343023162640866499116e-7" }},
+ {{ "4.70374294317859518955657338601383798959432169795036315917968750e-6", "1.29316103610866321105277165770530700683593750e2", "1.15122965827666394521150958097124834553922749706241413675626621322918765539817839286128014659593143570942315119838489669350005299860384297452971974330427527438060831168176929743817135707477251203472467806027668891154074309800997369457141925072379579611854152032663703570089179850821080592817602489379e-689" }},
+ {{ "7.90111168678090834346927628928369813365861773490905761718750e-6", "2.50142935632569063386654306668788194656372070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.72554973148662694166759157160166169303284736393781157514352684466477860400705537599392645875431865905681445772161441577785663278326674184262006684080907675404076284363331862467589217294540329968481020258307213288969704999028809892457240851077890832023610976308448700744934847296072460694151132193050e-13" }},
+ {{ "2.1947022453851494638854546792572364211082458496093750e-3", "4.5540294660816549310311529552564024925231933593750e-1", "6.15537644035230762511257501642891052274838428807882763659106583075479589103986905326616108567723817554261320425463998387402938492727716723367633134645452074625478383896044161060182209094299460842378984988424538062120485203568234956869861031978112571715328186447068917826940102237728367749115256994036e-2" }},
+ {{ "9.5937575276791223601383085117788596107857301831245422363281250e-7", "4.7060044781868145946646109223365783691406250e2", "8.34074971005352694977724271428304704379730503069979006543824421982543154474277701862893673330086806692863058917258547615336829675716810145864841475235135109391399496144355613620559781473891279309689200469472005874869702401500915898827498117462493418903426151104912981808366378491461635507492430973906e-2833" }},
+ {{ "2.2073016502121220128174172714352607727050781250e1", "1.0681513883705921275427130900936845137039199471473693847656250e-5", "1.00003305295163452281794976529673484400203041012190269638476184821369788032078572490628055955783906515975070132315405678121749687518303529356301281556543290455691541229667405975677836660331331546866945589821129205572181796808319706436826468956587053252695087454167269382499127173288396374118362076812" }},
+ {{ "1.857807898420785932103171944618225097656250e3", "1.30823413709633314283564686775207519531250e2", "4.59033859659617126254628613087390514142443448071790104857905386498498208916927300817260750485505223182216712213534955208892328370772179606978553650153083374335774046910050899642665243305280141884413167811281876091816572586748238812963621916941228650345907682195313189327181720960131248296641667634950e427" }},
+ {{ "1.28002693604745983830747735332522552198497578501701354980468750e-5", "8.28203848010336862728308915393427014350891113281250e-1", "8.86706798756547273034023259748332998697114154360428093064398895642136945343512222443801509462788398508116083101485126653725181025691107909977090006260480711914768000641955268595050193784354949171562687163857371073429271907026305099383798868693635018067191669439164014101281294813574568021616736489720e-5" }},
+ {{ "2.0022337970233214377024921759584685787558555603027343750e-3", "3.62365481395694466471013583941385149955749511718750e-1", "1.0523546079739996170682601256693200584550474946824826454017096763153491367530797919426756788342306442393933513442225888083878538329106122737524305933086973617593454993892855732284108545200057872375959005456512921309099752780291866382542273850296660218802026761451051971279229272132557960744013745380e-1" }},
+ {{ "1.469752780871477591687415675814065707527333870530128479003906250e-6", "5.86458989513311337860024252677249023690819740295410156250e-4", "9.92154549068701501199366439766982295808371482320630816324433379463381296202639580495789257638722760912167367897485745357403740992265341544963450873213458100774396760614353635868165234585261876587876465994053070011062897736386668244554072898747895651881702386350638799402464850863950102149208151366166e-1" }},
+ {{ "1.69869769328567166155607992550358176231384277343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.0945166435334793483824533666393108433112502098083496093750e-4", "1.00005799594795372584357977768556944656253178249587480331145989344864034282666379944361611058467140259982713730781408566683105999320504528967383185252941819780496432948156779669264240460517640856647134097150209519411486934323027426354907715934579141058953345456267906766103552413735697517517849566921" }},
+ {{ "3.151839759293328825151547789573669433593750e3", "1.023840290841496539209209970522351795807480812072753906250e-3", "1.00828189958217090945616829239889322422890752450091752768664294850744665096849748731214361917701488824218313674215416049035608435896320044761285630475680013499593324921963112908846599652343142683769107300940314664453753090942709855630290654440762603604322610449245678270429752911593206005276375357381" }},
+ {{ "3.55087476619042874403930909465998411178588867187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.9895693178775673004565760493278503417968750e1", "9.32018908151418417859876732852718049962350652342105850490583184901223805273843023839695354873994074279947349253543933474250055215956442663452932535132575000870445343325403706967004656960749057879238157659107219147411710899538754744145348815414311088777452109665676822468399972746650501593917415911950e43" }},
+ {{ "1.267754887968159891897812485694885253906250e3", "1.00502285798295979898919760842090909136459231376647949218750e-4", "1.00071834700218288240776940900136375146363527699090847426981092022769405513480212911323057036382071349683106853880233005923304991341200308955960878969600681793506999384869035120625501911973134511693383019876699301926591009688967553141397068289179934328294897849913598948019612426308123680588484240861" }},
+ {{ "8.1522004810576163436053320765495300292968750e2", "5.7502531130550421992198018017461436102166771888732910156250e-5", "1.00038554010810039170759525901230037332621377704113376782308969416671995519944631372963790226541075839243378526551356024850278824940678165140037685990966568856425831851096416371162933528342527414028064433797747326021549595783932074419350022816349807211737168691836224208314746714465025589975731455428" }},
+ {{ "2.65027968976974648285249713808298110961914062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.003165491246268459235579939559102058410644531250e1", "1.76325996094662828651112161237788953415887952374670102134300653855113287125254830377423982732034899162480399742930099350206403828614662703257591959653574878666923823464038672614887656376458325931158457664475267311806542914278433869759036943522883194636568041344283954333960707999807543121267715345128e4" }},
+ {{ "3.651827512952488177688792347908020019531250e3", "1.675564512656399074330693110823631286621093750e1", "4.92218138915478317609234268428449378609898504811886050861657038624663939529613919692032879990877291035109701590929770282532279774612429349026418707716959296859399988519535881353467118924067126621065164445440389423581971051504964356883522778929468170495170856030672143818408689238481847643503940756672e59" }},
+ {{ "3.0606423484740545451834869972174146823817864060401916503906250e-6", "2.20328027949478477687250688177300617098808288574218750e-2", "7.55974238261708442675674596584944622380379860666888634356645875331625278958028151760326676909826129760886331850336797218123658397234427228603106790759796963957806080469839015421053939928057033567772138680185158581228274260396763090865346625773393191666291620910582819221973998350912562080963747333068e-1" }},
+ {{ "2.04040793254407122731208801269531250e5", "2.86284726793166655056666058953851461410522460937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.58821325525680163465105847555152044190569200388116750112228338962598195492329497459385020613020256287552717930952139248724578086838832538138376726496296560875204247514233017557960719338882649967806582509446295835645176351140001109236587197833843059204085625918013701386357232953416141714287393580849e15" }},
+ {{ "3.02716069476693064643768593668937683105468750e2", "6.040399597266724041055852012505056336522102355957031250e-3", "1.03510986044313446578771317219744132510998690381352607017246273580247626695630046904160285453167383058665284858123740052884532347981837364373948718495188424769656549948930405672217230120189497151355681193015659186537151773454794215525893522934864014682466868462268390720016762737891468184834184088104" }},
+ {{ "4.4755257017978976818994851782917976379394531250e1", "4.42494522046174552087904885411262512207031250e1", "1.11929646387532568976168597828914488086907276576025509760458985730962224619833220482536328707584889009590311478709195034015122056954215000823555978179815671349373291996702460104546989380293121918158085134301955237814810326108959984625471199876172816491246653847194071812034535823558646590118729075911e73" }},
+ {{ "7.8992094491693660529563203454017639160156250e2", "1.043723953933383654657518491148948669433593750e2", "2.67759107384668464385278885844815795751161179367906982405379998416580527424480738041217566954239691080320039512890036456504748798096287871747642118148076943027438116523332662829876900574449886819108021138850402281937549768122792675121441618853423616832699349260369305453263152392638804725787763327554e302" }},
+ {{ "2.548011737897549686127085522002744255587458610534667968750e-4", "5.159276612773364134589826335286488756537437438964843750e-3", "9.58205367007949169809279999461100360912902896399937272021332641770690450812544971532999275755132753113048328902348279538087441845456071781043743985319802898282971020600433571724744632298362925010469603804610543751544460798372376992115798540860563907814359172789945116001784572399034814979737998689779e-1" }},
+ {{ "1.899287505000893725082278251647949218750e4", "5.41078495521190028227920265635475516319274902343750e-1", "2.06563424507714690167714042623337538555278963530996591844954713364193688715643758076458567982650781640747670966188519005031306885869355129425908043628325745338231076914378682618756362764508582923824741998110533664940173863055464267380496758389944654061554957122449256611900453680459384297799878623896e2" }},
+ {{ "2.910204774159799723243224889301927760243415832519531250e-2", "3.10728022839575198851824744394889421528205275535583496093750e-5", "9.99890103192413085441074667861315652249320196657611339570482857071941674209639709864703891665811884603908304481549592842627180817065779143546842079140388383757073035382383336415119892457712538117493661547669850819233137331852231641783994865993482070326235283184181541427573679758103030801595943776744e-1" }},
+ {{ "3.148720015370035980595275759696960449218750e3", "3.43125111933481261039524667921796208247542381286621093750e-3", "1.02802334347014804115203210525086340106221839607209085819487247743041255274944512485633547164774253058201682853956553615818500164452268935135547407521495805328007119673698391733155607980906430692803512122247717040507439060960157575458288088753689807084410223837216910150868125550872659514690258206478" }},
+ {{ "7.5756156366840954807448382801737807312747463583946228027343750e-6", "5.5077687409354258996074804599629715085029602050781250e-2", "5.22360322691615293009344442522576915365414410103567546362459956848539698481031529793394942148327475172323264893580159766513287240943753652400314434832413344966940876720610075372213401767379175382193046077868122711719538872402153088637192089166340900530573304907112834730373371836607562222448960151481e-1" }},
+ {{ "2.627455089699745616194093145168153569102287292480468750e-2", "1.541165243980346986063523218035697937011718750e2", "2.65627927121210139869453772647172972010233396005753285235163657937204725700240182301143436917519389589272478600896823141333467649759723515447005854045233682059842082604402664004516169590843725236432591088329366055949159027684989904142732333954835416376354569871287255391194720780011944013876616447352e-244" }},
+ {{ "4.808176103728658290492603555321693420410156250e1", "3.8367829196169225269841263070702552795410156250e1", "3.41928564331678515981471338829811408659000181192686008443981749115702769340722053174798292070290561882896008338642826088125297911559295342634515669888076588557229523820060662923011009955171952757056636448724507715649589034168433634032429475749149003931613573665241664071010924406015748971161354696738e64" }},
+ {{ "3.205378732913250132696703076362609863281250e3", "9.12063633247133534681996835935535727912792935967445373535156250e-7", "1.00000736273879463173771441699203291296246037525214803383466819484064993717806192280443913585501602480713195981402804796752564583674811227808842648414027111557663920686825861938638104671353044668858964832448138218436863850713355695690765716750462185486284733337309942715764828383697583139810455212638" }},
+ {{ "3.6191217634682889062180954908853891538456082344055175781250e-4", "4.522771028821393922078608618164707877440378069877624511718750e-5", "9.99641674908429772727741716066692522684337586976236285526703123104244360091941899419901468194625324926731894302874406101537005325420303987745335631550541398216024526757166654981325659490102941309976706722307972204026369136295841549401634445497494285259254938938876164197916350437289297642860805084296e-1" }},
+ {{ "5.477271508647585385176626004977151751518249511718750e-2", "3.5462262102851867034622457275361284700920805335044860839843750e-6", "9.99989699815221047195237797415460745692681672883768835967449812852073485700626675461871958759788593113792388910307095890907937872017129700062714402629139690850899327106043179965950904385626167111246937006767223675683130961170323257583625795510235931710927527056466356951973276658601609644129515473818e-1" }},
+ {{ "3.15637438341709639644250273704528808593750e3", "4.72407848923734441370925196679309010505676269531250e-1", "4.49825547286670319702380922050187415294618434375837006137892453203122331928047047306492172079078511814726958266726273319242885369558258257128888847286538356045014816657847217085941522774109065130033471139571270092091883178037417387674630454737070888538218688730956097543661382768897165490297639608102e1" }},
+ {{ "3.4350329493606416508555412292480468750e5", "1.27250150145350989297488020213222625898197293281555175781250e-4", "1.00162336779090582285668555617540990956375149416793870895822616882369079038963730293631724525621870732184904017056404166569755879690536542415147024291651047693012257723344966042105272046767388935297934745863474716190137901174215179659999117641456704254362366255369408392878120515423933846401645588741" }},
+ {{ "1.0507424512953348312294110655784606933593750e3", "1.445127440723827295281436744467384869494708254933357238769531250e-6", "1.00001005416673874970641874885661095503816717227379033676876612730865335989893449582345456543451081149107465171659175604293715962189257810117721711365871006508720993220186972724366817623975260748578680835030711473739357905906032894783455531711583331359705157662673931729626022752940417931688341732378" }},
+ {{ "8.1865791008610611827547853813769052067073062062263488769531250e-6", "5.695354392083072300745349991757393581792712211608886718750e-4", "9.93351224746448996937113594504910401882994345207771800323049779691276470148213924723483955246436042747455629177564845224233210837232201105509371449087604601761437328836060853287056217115691403748052298316839138971392756481564106383080155540424716692745736592178985310629391299501759133150627938918074e-1" }},
+ {{ "6.947962131099967922343019210984493838623166084289550781250e-4", "4.0103218964951963698695180937647819519042968750e1", "2.23006490342279217571806140077665886981099414044595093418295957860943720284086984665743578056568297229139299500245761284073691802977046208070538242215508979634862568996291341587581554469156573033924350089621252836592701785348565193758908337598409016657851371246098654329684058361927838809573986193758e-127" }},
+ {{ "1.10592794589664117665961384773254394531250e3", "3.2526082185098381671650713542476296424865722656250e-1", "9.77248676688621920044634297401786442645385941311525110002800741928600473067163385046961591455772161080604895545524410628330763921136911631698147157554500689676133210576592147935248743333122279013651774018515939625427205237675732186795164784795174668611013924030393724917154265078516887725307445272803" }},
+ {{ "1.253916421410064036988038504993880906113190576434135437011718750e-6", "7.335796045204858728538965806365013122558593750e-1", "4.68392795308248572652843135364969720382138943730339914636303299072150410868121378543408470390954010868594468316840003936924097765196715356527524435528061810352989069642830612407823386666008449194429503821925534277567874494596141278120854458833913072506701454712189004957264318701887957792196559450829e-5" }},
+ {{ "1.4312473954279103516284976649330928921699523925781250e-1", "6.20942048850905869983307638904079794883728027343750e-1", "2.99052723424150661886931649071103918452644460542298398165637531920915224385808227208964029010419121462212498905692527594903577506198009266794868206489817939747878141799591393368960481067737790483228614343187263432824490432996787531286395390254093241449602142598445964130129975312810018929887788198701e-1" }},
+ {{ "3.43751575420593244447609038161317585036158561706542968750e-3", "1.512066870517058703171642264351248741149902343750e1", "5.57663597564430277353448388417312985615626273703902768815220625590828356254147933705830400685411299593103143556639123246778758775852967467852603984265071153374722320323459885871194691907711626373620710017973655475923376123554952810313797438555025227910644691182176423627488188876492434022067149277036e-38" }},
+ {{ "2.1747239559097812774610125607921418122714385390281677246093750e-5", "2.91971825175046888034557923674583435058593750e2", "4.50169709235325052632986882192448754882997090613648358141414144591089112598426944965520244801106015239482741658118850562377407270011579313225688643981938806077750575133252661340927273680933994486522267294226372481412223764992202845720067257372057887189374997685336348698935086839444322249450808054944e-1362" }},
+ {{ "5.6185681578075793003940532899243009978818008676171302795410156250e-7", "1.298760937531341988493416295114002423360943794250488281250e-3", "9.81481816351315594384727007893186507859436644672331091167617928065788693663352781510746621160037607384076966766971591864898782687655354341611390803359295084395315487119152362491516158659729010541073082819881189326119491997777097209681555255784910126963441436697354364542857530552913114970532656768045e-1" }},
+ {{ "2.69252008622562698292313143610954284667968750e2", "1.153305143347518879615165587892988696694374084472656250e-2", "1.06666279730568497198113724274678005155752498157046477782004178363192374164474721840040331312046115275560496984877594971350062701246211629447728806246316863840490103633689163217579393790965785864180257773316151663393300617519826348688668218517932804149442470238145344903593621930871763066878050548745" }},
+ {{ "3.16092590727489834989683004096150398254394531250e1", "3.48064997212848559193787423282628878951072692871093750e-2", "1.12772520348616005115304677929962056919100702599904589876944000234727659228749834981600423100421009690523247572724398560756474248595294433046382239886297029833469577515642633205214954504439619606667497183510745512915018311469959758235733226013623764492488909973197069967553629996698907871574676780407" }},
+ {{ "1.1141752247844277428842629795724405994405969977378845214843750e-5", "2.0751562277949120449704878410557284951210021972656250e-1", "9.37919294955190238371406645550683331410621638917073656116684574199081255090910984115004225393137968138900076398279876623105976571541314203892497339063273916638860131717065142379547629145053297558185567155580289078804833133323155623898592227362901992618266649001082738287327625009340169715002810953003e-2" }},
+ {{ "1.548186783606525160350564362943259766325354576110839843750e-4", "5.6206047199489783281964316863366093457443639636039733886718750e-6", "9.99950690212005897959136097299917160482075781519044088208212676575453006587694459400083447882136665068803314657182010357110987268971672741796887858729353234727108572424227132082469362733286450718291677866426969142840900462763239110268260519434037322501413834614893396154343681850902784948541773957467e-1" }},
+ {{ "2.28067710108071286176367742370985070010647177696228027343750e-4", "4.22516467629786623624865704584863124182447791099548339843750e-5", "9.99645746030268443121474912265456530387059240825775542503945117534294341852612112033263023994402497137577664903179947031417093395690539107266054577344864123860512144985801819409282408928976825661093887120497669159146596001826170808186934642139325551337232119779982282458342982953928951761806573163414e-1" }},
+ {{ "2.207390838128851555666187778115272521972656250e2", "1.6363542834888315915869635985835373048757901415228843688964843750e-6", "1.00000883141260854728883702175584015782702915499431300231183450474406119123947650012070542489465023521252692179702983050986429423066780728766911719282820886407479657520041375764406817735028802434658714254220988205387649994799335160542734586791578044041036401530550092162441750788372567864862832251789" }},
+ {{ "2.11115639194152252336444952618421666556969285011291503906250e-4", "4.9161117879115010964596876874566078186035156250e1", "2.03851749220927707096105838017357917405034340382528308320810037826391303266735158295669708446462859180309945589089175400795292926848603356140832744578280150360981737396616217244331933441226205091493168502347016694353942358220609837333188158011389094568440922575728826317171755408132992139505746448351e-181" }},
+ {{ "2.38633916347037029481725767254829406738281250e2", "2.4735015620527917690196773037314414978027343750e1", "6.50492562190358454748346649100342667975057580840217621906828483604765156733043048058740688210262627421835218492853562454601684989325985386603026971417507963657922417960947826930994787046883004260577743222590669257927836671693436821127356903028204248621426323317746936948905014560414890048500518981483e58" }},
+ {{ "4.1649649013569605901508019485390832414850592613220214843750e-5", "3.075261121906532935099676251411437988281250e1", "1.95708970459274514353705613356165057031575229424640773311770967490560575262481854947938662630918869775857057855329254545872812061129308665775656748897011265399787487814796202063476887242748791769330372489092700441649278984973352735989854637536188114328280137258357850310518955976767163293227505459553e-135" }},
+ {{ "5.60807874972006062050389196826927218353375792503356933593750e-5", "2.702445063506279812962085351557561807567253708839416503906250e-5", "9.99735500279497094553640363695299701240525058593455541261394700469821111611056791299453732067954961427582921898800842237144105286658409494042658058247679724238096009700396852983653186891371272750369926281385138909360300419604531575348226930671075101518323161673992501032516753200240811209353821343888e-1" }},
+ {{ "5.00853676861336616008002486921668605646118521690368652343750e-6", "4.006455503457152644841698929667472839355468750e1", "4.42868005311869594653291738037482789532744928595938052618021862026535850449639612018073258671047578104461913132613998217526422325806836712765473733283115693708797988431341752008408657974271055896785613419004497755473106128411938210880970972796033569804407750025332012993610194266901383355037197031359e-213" }},
+ {{ "5.353231678137881681323051452636718750e5", "3.62778514750403147104407253209501504898071289062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.05603230256580909333512613256181086069213372778044080861620436376260245170503316441303581724403388552683668422287401763124771418367914789920284987220255387646685601968642931765033670724000770308127910918065433865509022691461489073952236533017504964013454255542118759406756885123664390687006240095440e20" }},
+ {{ "3.229767642669518004638895547486754367128014564514160156250e-5", "1.890503050233357953402446582913398742675781250e2", "1.01732691727954660011725367716319147371899471036670702622303272300897410300692262400537048572027256759129565470020582895602617924506137374758437886475976576037363655165839084170315722377939735400391371695808916328159137254265306017499308291350722410467152148965233006027461767679652965168830636324127e-849" }},
+ {{ "1.090489414238134486367926001548767089843750e3", "4.65254774353689448673776496434584259986877441406250e-1", "2.58980988503590960516637371738014660727349100194484396379725478994088734700803526572947540745308063381145664972855458934861597057007568531182327714420486870282357356343021375166932444789575430439279485545025094851301007569967666444995213425647227644871269194317170084391746473828083433195180432304317e1" }},
+ {{ "2.447434794350212996505433693528175354003906250e2", "4.8299511254984222805020088742367079248651862144470214843750e-4", "1.00266010667859458204491495940561046268243246346579041029260554228176172232635197593622622290922199036969298596977304010218474771392718302157017833152484401953670784025973565870850532277945591072432075029519001358625355897190571211275599240174542923282378185576537237233948130696870807231732661924935" }},
+ {{ "1.51488749663457274436950683593750e4", "1.02354275702668705760531309145733303012093529105186462402343750e-6", "1.00000985234516448019885473896561732145157443536520866911511897918118736186775473199587722487758817093449012349451559620294147840372481518705271731392645893056248771116553702829600792931868987911801336627246125357506584399976395776801325943965572049289654345210028541577738692060413098304903948601150" }},
+ {{ "2.67331385687573711007480881107767345383763313293457031250e-3", "4.37764930215238656785459170350804924964904785156250e-1", "7.47571438862309533743624874136133366541454712127562663177399504286662183346894197246880043192629661657584457838166576178504996182224295507635623850476949534360416194135273172780271343507597813231256012656614579448387095352094197763495149376101171772035626900389244626161777607049448871411562278802652e-2" }},
+ {{ "1.018085344443409034909109323052689433097839355468750e-2", "2.7221184783694063469283719314262270927429199218750e-2", "8.82611384964605354323505795669056920339301763307089989948479130915805719954810517867370884785746904749334148062069679398152101779177523464996450923425943206891878509254410570738031307822715129842441609577961369156460374327926946469260053825787159767563643637983753386908235973617270978178126680100594e-1" }},
+ {{ "1.00731276656660706514401226741028949618339538574218750e-1", "5.18228984435489814508457584452116861939430236816406250e-3", "9.88175560346904726742930639398687086396036352224271818500936901685374885901648764892385495076288151387225190990418969616688304224966648010000551417499596854632379457426863173605879611399961688292945890600044144991480340984880181190619092493192482621545694847376381337620163394916517599662918605010835e-1" }},
+ {{ "9.8780468779964552975339509011121208459371700882911682128906250e-7", "8.4829576004481441486859694123268127441406250e2", "5.06922896545426989764243576324057040501874322165012440675766666713649225255160119756183042369835830558457195704471707778294936068250116736974227601059618844500705991834404101497665868066256287785153513125539305523985206318973305432078184236844170690028706643163133079135912179653756316354134757605909e-5095" }},
+ {{ "4.41825747491548099787905812263488769531250e1", "7.7982746222263199520341458992334082722663879394531250e-2", "1.34369652134197483793288072833308732535658609465509415675669768410932243039179437886058214288267645007975345260332874670014492568423533076540783205684921434471069515293441857790677592200203989418352589897685209311617733829289352336172155226574531882652742067029068005584363117523423189997997484568014" }},
+ {{ "1.5296844845662072032155265333130955696105957031250e-1", "1.634608212615425469138932812462883248372236266732215881347656250e-6", "9.99996930989216600191785450269008898634303181250066938686025190496179003638914112281154344493820093586185759774048968741774280050131382009162499732926045936023057461223555387483027406180587409400576483490119308402153097647327397891029914779646839934539999749442740222968027612552511977099477561837845e-1" }},
+ {{ "1.5459068196982534573180601000785827636718750e3", "5.8071194443214402269859419902786612510681152343750e-2", "1.53179160234960851931903141810390484338949709737193408192930930410912781308171727424842710235568081208824229115859793069399719735722193263870374052840504012604354910230724690998586625239385836126384899034476217672957422789468436133936022499041037971795682906772214055897416212584774512114169944288303" }},
+ {{ "1.06149875426708788185223286681946319731650874018669128417968750e-5", "7.825390041638166649384800166444620117545127868652343750e-3", "9.14272969225465289903926091127128136862591595250320697667906487225773277795209213908946435749298160698748843670986774816760975159538180372090105486573778335998950914987159909756145213525174507361115992516851061441846585401483368166991251261491681595295047033029078105940961946982855869715287402727788e-1" }},
+ {{ "1.7094285962280424476245066500723623903468251228332519531250e-4", "1.450141513690568874708763935643673903541639447212219238281250e-5", "9.99874220008245006855542326558513156408919554643242887993818629193137080289456989925446796371679686209603602304321606023129900225876158421172053263787015124593801332165057745276555467837973732533352070833078756655605565367486807321355073518225701436176826535604183999704696382097767183866284922545237e-1" }},
+ {{ "6.8916512912179988745164926911002112319692969322204589843750e-5", "5.0330071326271585974154731957241892814636230468750e-1", "8.0431310666453857009883974778955214813162656180917019674667856365061641342629676408687942955216557038170696029057610396511938999928187929291101943535550497469155161289193841088940635225677546354860358907449034170591377521605530181623881365718072538006198487060738937169647737729128339219664578636910e-3" }},
+ {{ "4.27946433404347626492381095886230468750e4", "6.700893693973940896599361671803762874333187937736511230468750e-6", "1.00007146201085226752984788738357625307865767014027631803309640949680577376696724418376175136252913773532105485594068985474036691750060444806287575074228772867146937453568465581121950409526897590340390497454647087617789150538474509489560078795836109491866150406233412810302502603589419003168433407796" }},
+ {{ "5.40162932367991470775092643918924295576289296150207519531250e-5", "8.23362153160343446245406084926798939704895019531250e-1", "3.06423742747299574139652654980590788059822860773454214351500321781043318590458743790589432652553137712034307825892416077869655718345307052092676953436188880309769835515354046500269913785918625489459139881331406660934866445646807527177908193314853725313276753369974838311556362819425625446719126859340e-4" }},
+ {{ "6.98480482930233392835361883044242858886718750e1", "4.824235502562374379789678080499015777604654431343078613281250e-5", "1.00020487356414235503163915728935712973913169358041240146118411664231468676920896629650395007895636986611826729763726166983962518312776000911959157822099221405201493001705233813919293314432879950393142137203274049451871519519207057550355386892818843802770417350657588091700213982000763521441126819299" }},
+ {{ "1.011744866879515029722824692726135253906250e3", "2.80096038819214743220697982906131073832511901855468750e-2", "1.21386628363111930567875501391228231832773971221469956618940994372919354601446271218977478634940587702534597215097311823723977361204234536761437991482874205192547888855528921579052205936359371957155208181288324241439984156409711039174371275245144079425493549183603159162251977135775037801563222969321" }},
+ {{ "4.585276426770756863504630018724128603935241699218750e-3", "3.2042680303031754671105879594961152179166674613952636718750e-4", "9.98276019906690498641979219227000354726256121309260540509550375256349346398739094196651394582546860191649946783658447448964727247382391275461932541094336719168645988397711787831199214881092736264632640564846015317413042211277375865471754751928875230345189863352333606975129830522964976988522205012182e-1" }},
+ {{ "7.605178759788278064490896213101223111152648925781250e-2", "4.478670111360627537067102821310982108116149902343750e-2", "8.91022318181765750138709868330053023824369950588567785742389327678334961200987486582852651651749970246817747258718976307116965890616698349626417133054222982034680094324870404036435780314465221090580409266996951521555820905007542674615310907131989836681135988524628981589839950536317534105789412104573e-1" }},
+ {{ "8.7444178759210960467018400321670412722596665844321250915527343750e-7", "9.167217375397957368141077516554560133954510092735290527343750e-6", "9.99872128426369981492114383609632051952305521589536821086005990494116094292173923739983506376030713210025133335713606540746004193037337306885070775500980783374129579854971973151969528024543815880504327167057351706595072153954661171897742253459693134310482723707663819212838281958152922341896338434956e-1" }},
+ {{ "1.91138738236028468236327171325683593750e5", "1.41870493681337528357744304230436682701110839843750e-1", "5.61393719165089070084284302313399424679983675134163509852591590498735859530953368982681984829992497504960254661066913076235623948356021050016415986014420596315994017260378613566207333104954408470522228787617243604128057260092817202582188202107977088110567991555379686212833460754614025473450009263444" }},
+ {{ "3.9593580509452585829421877861022949218750e3", "9.6634279823755485708258738952736166538670659065246582031250e-5", "1.00080082312808327988582209522378397852005304579172107085124537382297137225033557828343923139785908077173538670582197264674005612125502043965115623737220659926592486850580770115661984729610019606048664824477525628872443957605574420631353398611478369946179434030057548832782863477926163435959118485879" }},
+ {{ "9.527494822481512651290991300356836291030049324035644531250e-4", "7.36644237252481737243670067982748150825500488281250e-2", "5.99043290744436080750367189311776962864514898582236218043546095145053426015403970275978470316955018068268507145854768132371105755976745328665490014149700831691054362640281890694866429566348288921720874015164835895723114083232661342953621394611916380955923119767515256749281015210664840084139488728470e-1" }},
+ {{ "2.484228956307928110188928960688770075648790225386619567871093750e-6", "9.5599312498941491078596754960017278790473937988281250e-2", "2.91195173359063670429359403048505978785219394151399979472770021116863735850753993687072273831783588580026886709426140199445066463954822741869299289627867228462101496659941594784834735871174181621098355725481647468654367330416914560339262972917390166297854884128515599346578674725441419457079115897184e-1" }},
+ {{ "4.9491118980876490240916609764099121093750e2", "3.004862775930479124042449257103726267814636230468750e-1", "6.45161540440045450223953783783894469144373503171768310299316311211396701039652476264548018632004490940551121650475174226555299061745541449779441170912616150358121670452871969103360706271231784736206842228875578338918267487091360709713844820843854370488212897734417544669039756642667411365232861750622" }},
+ {{ "5.86830898821921187469285996485268697142601013183593750e-2", "5.157145004755338615898274667870282428339123725891113281250e-4", "9.98538706799650092346821769070662036641738082636479009372539733284347573229317564170016552698886694627816395005478215973507005929122925461962335439146679105934195547032542346569150966461707254588652749552262131982196536881226818665443124490222705261425197752741794319954946333545210933092733146260794e-1" }},
+ {{ "7.83501026710203586844727396965026855468750e3", "3.3878804079488164524569526747654890641570091247558593750e-3", "1.03084303369653734759444079184018763110189145271757350290747789171120440011979438908956047437954061198621891331998729346005011749200857634828740000563446280260144290233886419978479827799434112209614567540357757105949708290107985650241181647155069956615108211465282807906696708079090952998142539773200" }},
+ {{ "7.24040157384670202134202554589137434959411621093750e-1", "3.2139750306174955096771839180291863158345222473144531250e-3", "9.98962718742601158545306104847042012373529894592940838744141601234699871358047935296869274717524339141323620050266212255881930805755665793284647269071772742030623661802389270250239007055699061760303889999391509361560603832488400525248124730452423718749922363976939807153833465852271516354356322016570e-1" }},
+ {{ "2.3773749185601933398004348418908193707466125488281250e-1", "4.166703987089275251776143704773858189582824707031250e-1", "5.49589428217805567802447379970866851398217501608629580197067814528656191899243702632356211673360505654178344944705028006574948563210523891802606219873940153904076904718577079606890006710252221715434732369471615966209956056482424699085238332051063676105524207191799310422842401999054890360978090765282e-1" }},
+ {{ "3.0164787400072270884265890344977378845214843750e1", "1.92136460953186087863286957144737243652343750e1", "2.67051217459346602496477010560417251705712700254048639078839264060325224717762633346441800378240849611262512392424682983226473649608304764571881449403455973384432668551726106109236708017847884189936294979084049530151497877322166267026808199785689058092334141134841250691148642129989881676444005953065e28" }},
+ {{ "2.6354055582639710278436417922875989461317658424377441406250e-4", "4.228204328677160894756070774747058749198913574218750e-1", "3.06662853666315384518454771688957273896640018166337060934230580664851581626370131366235045252515485872195142490483479220526746937459904335480861408290098145258297721984393013560504944686230699800648442282165588666276252945193146150539010418085408269547841393316042913883904363908615604194055289620194e-2" }},
+ {{ "2.26046063075346914672536513535305857658386230468750e-2", "1.3627038921997222664650450951739912852644920349121093750e-2", "9.49669691356986597021713215820093379236513850713669538194655152931335203737791678558428932820631859896635045077055245394317491407809178976243739664980597540207413635355482092381212167318467695663002155241642388129246468412919845420697165678187848016391630764936016535264450983179524692369001196616367e-1" }},
+ {{ "7.443698646524410378333413973450660705566406250e-2", "7.9213801433691943820747383142588660120964050292968750e-2", "8.14010675669123183496921521116811427733135459824631474903189627969592690975861278168724266785431509343760131532834105760648359541103464859507378780843287835638142981311936553660415847409900494706845746029735940277531884780112929935900839635096070137371899495277565868989524061668633390669303733877713e-1" }},
+ {{ "2.587073658438795997760450973146362230181694030761718750e-2", "1.947141104726958928949898108839988708496093750e2", "8.94285469588168562425042075510651649105332456874498432065780910860149873485515925490595348642217083245456881656394030092730262652761300876175697759058061470631341983801941103052127203347591729319027059625352617883993869442078699806792081819748879905962225386908139580991345038356748418452094703929970e-310" }},
+ {{ "5.98084615325454649337189039215445518493652343750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.54141705573080567892238490479428492108127102255821228027343750e-7", "1.00000134883014846657688131845485191611848674206835683154280061306464539283951337684813473177431132125670490032207511582839375165363167348982592154407605611359695341748966890300250815981718309647127029989133813099179248600056821756358657145575917892530126627067999467459186401635829661375435200555943" }},
+ {{ "6.95026071869872530406553323700791224837303161621093750e-4", "7.3122523971193590860973010592260834528133273124694824218750e-6", "9.99946829922765932774347186827261089119719545372876939189761602548364480617029835514052044796339343249676137993597737045638155557799285710458997819509839368231591299591459306098956962406996519241338464726435617191918273092870466980318418139849371272285377732672340181070589663937610591450209282798517e-1" }},
+ {{ "2.240734448249001586894735282839974388480186462402343750e-2", "5.72011372485644930879419844949040907522430643439292907714843750e-6", "9.99978273147710365618565727465750018434266860028552780634511158239820481200127637360576082082285493761515451879661983436902590331857062933298024957408602175417434650700857480478630047039957552639826605254005583176460691229891227955796802817287827361621819443402008175782397464338976239485836367013797e-1" }},
+ {{ "1.026963361521984101701332470213401393266394734382629394531250e-4", "2.11791001950321867638993289517657103715464472770690917968750e-4", "9.98056858099165538580460452287541225753365554206313892868475688098072267264713973803329319240088967254425048329384938932204820454762680502689447633583472338302047491675207245782389326788006117820440333632657775030341985234164850042741621548603372080092391251779877542034296864156086357253603371919108e-1" }},
+ {{ "8.6703705286307886090924057498341426253318786621093750e-3", "1.52133920341677693691129213959811750100925564765930175781250e-4", "9.99277952718489198651035604747543743540115676651768417733688848831717723612326298765655588890670608573536137096893609251918929861039853578444897886108139617036413401117695629638378951997111811960041138307910848973294872108144596558607179052633028242671568000242144929604511881481654385461936722413631e-1" }},
+ {{ "2.52535597921406917976128170266747474670410156250e1", "1.67545906951556844433071091771125793457031250e2", "8.98282264364143312494924261974141234695472294090992155155562018911995536275433125782292778674260525238398016330461123980463532873852775335243553615531641077025771609462191107211129184970987736565747180479720790198029098762244705019025351383419378700872375798060833692002857187730789356240125924455777e234" }},
+ {{ "2.616405991228279162896797060966491699218750e3", "1.04737226836765842108434299007058143615722656250e1", "6.25310610377006493866619672909110501466370730517133791833746014957247005356303121141646462034804208859942897670276612700251850886627624409691966399085604959689485003780186276442904234165384933316935452289326908453230024435075360037297385764282630607352032826861327915100978947458904222670931759368924e35" }},
+ {{ "2.820025944394430328365785953792510554194450378417968750e-2", "5.2890336039443846876881294427619195630541071295738220214843750e-6", "9.99981126663120663978315445418195178347518855090095327320928958000002380082757914082726230053423120527749961157170801907113926659877545130473348116514066094356797962151622116993547396704816898570832090901788549840104993042307779674567777216024811187461718618588120530554820575895739988590245022632269e-1" }},
+ {{ "1.05597237376428054744792461860924959182739257812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9.74456803510535429779793048510327935218811035156250e-1", "1.05450439582280470237419243848514333965208787934652393730167951372955494178606431812200728304139567804628971230701860498398849175230634941866518705534394558725303044357497118657164159909944927143807152603979711611331658711835035945317940163428557910521645089962892594811777021284923659424445609434015" }},
+ {{ "1.9223890780950902978929661912843585014343261718750e-1", "1.08349612860076613971363479471676782850408926606178283691406250e-5", "9.99982133131096723846335477747571205458555360592772378989843831769539959961315480174186773210831188200236203659966289556452394505676789152783853641019895730138295352465651299769502538786481056285110475730395967855975688507419189456451422446526295567348482093213471867865722148473015661603656725132323e-1" }},
+ {{ "1.0463193386008525267243385314941406250e6", "7.4762865805834757826353609289071755483746528625488281250e-3", "1.10918690854877106790971565776367526216180983995819057803660864422406143847654780992569076690586240873186597255294638451033694659817944978005382660886521706741399259776875547778479274738700590433170032223482808245749786294093246294856718197278358866518098957741521257199802713807166809120449267805013" }},
+ {{ "6.36259548895734333359697210141803225269541144371032714843750e-6", "1.228097727883958611982961883768439292907714843750e1", "1.52598782338450286286135450458954573598472802663327374811636800203700927786701774385033841837545251692421774984587119423266677067201879737268514092791650544542213882071172025510515697098553107823303332247548034598510867132891098061561608401432719775239528846321974734634143406918807796517003534735158e-64" }},
+ {{ "2.130622669214181965626972448113463087793206796050071716308593750e-6", "2.38534614031968601466360269114375114440917968750e1", "5.19098455118066498520013706754490677591984461696830181149035955535619874262474066374087254218809585126187088590005269981305550987677753928730521021427525334082765124171365549957770314171493849134109885501003714622689267145862269434956103582260650590467252136804225198053437675495933201621005291059680e-136" }},
+ {{ "1.402904015919878020213218405842781066894531250e2", "1.13722689335705595681247359607368707656860351562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.76476316747050528850692000246200519522360470716902181350858525854503943786512297020242024222896565430817144786078487939900580658865175044648134728561580288938753166434593435107710997858417174150763109875175878816362192204521588377137231081824131646740939989148534654273494711671253618986609286323224e2" }},
+ {{ "4.372017573127668583765625953674316406250e4", "5.5089836882907093240646645426750183105468750e2", "3.50016375413563777673770541325000240347503109832508653488647336857427144256430628344920480322962866090482161278435394130795573385145704869750655237320185554045574687208211132875092396633526114578443250901360527371315672281676871350085960576744972765455104647558784495896122434499365424664074824652372e2556" }},
+ {{ "2.826577182614404106300587393718615203397348523139953613281250e-5", "1.0106583572245043299792435775863452818157384172081947326660156250e-6", "9.99989414562934374733570123984537478193847375990023521202992404597564318809152441993727777418090556514104681985844118458823465596529403699968559686663737740106923387493303105200565503166558779713221587331443491180025140468746214432126679720477339697928392369627582889524402889778083449486287091857918e-1" }},
+ {{ "1.8213158806543649700926401635570073267444968223571777343750e-6", "4.6651819945007291789984549268410773947834968566894531250e-3", "9.40207373373989750079079577094631199620167306803671706440022399491116271902378455342284164919251165911009699545436187010204381502830971843813249510091499154307328869929569251004649662529059388775244320275509563520973233815719214546857449027774185623555318990471004404713606927167122651605783870374832e-1" }},
+ {{ "1.46755915364810964092612266540527343750e5", "7.890436978365517006750451400876045227050781250e1", "4.64484232464543513497888195163429809804134777698713994865506287396508104602871734408178720046618390944324170991778876210342419644694461221793882529660281950244593440074231456401876196827229747637594809904497759425267031152839358279700896103069795279548051852526590187125738047135851503597639320208298e407" }},
+ {{ "8.3043328767694905400276184082031250e5", "2.526375713999676198007193761441158130764961242675781250e-3", "1.03503345548731106338710812130725055986503423501253010837510324365889248445099107670056377581266593900575457325985155519568071726317821696776190852210129272438899726884098324950090040468317646989831449979292183766681690581501814228892321721246601040936202160676525600474705308542633568308584316650080" }},
+ {{ "8.810761098079578951001167297363281250e5", "7.333727906319231770737587794428691267967224121093750e-2", "2.72892191263152309368418398483858745615162148917317277888912958706672096823639413941816735201743610855503568372158123380568416223942437204395543055191166267974357638190306465483077702922759360128463612732981531386413914170095452050612671264384868877433570747466951378322325020744405691770060335633788" }},
+ {{ "7.53729022560753492143703624606132507324218750e1", "1.44997674051331170439263495985926510911667719483375549316406250e-6", "1.00000626746844722828444925305995099577313805301524404103686494009081743532235207019307339151083010194102029079910572707461595043287395038108777455456317947638812268175715959797135803525856300281211049078122806988241700281453385528141559419083370029575853474851945010647429584718991721854559935746944" }},
+ {{ "9.29196125311857485939981415867805480957031250e1", "2.8736407594167267740004056975067214807495474815368652343750e-4", "1.00130310607123242618493657884019907082179077698498276221909900016213891825242765534255421206798520599892641330780794108614272121210817595736511473642012182311222406630247676600611837624670300497417793849558413334183751618128852678982366003027694097779362865347129226028454653385495003448455051752341" }},
+ {{ "1.43727353532569850358413532376289367675781250e1", "2.29608176142756548188117449171841144561767578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4.54783993491495810650470280449947427623348347028981499281421336796280567779408506141109574684107695839213640033321254129078108321583824176685378348816016878194065833488610016432724082665467588150668096361892027109844713789484964974482948538692616206482165899790288506924374902752205806598101379280087e2" }},
+ {{ "2.70759640224985531631318735890090465545654296875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7.3053673155641374314939184841932728886604309082031250e-2", "1.07547877767428083419096142604570911700485352561609679581466039671852713698452759329634869067401784752327384511745999840407965753203664746748858043080448574928987130431330974864221970333531951352649388383982665219131905566066113253186390249711325528920747650049981618690921655600270254173866304929129" }},
+ {{ "4.86911459659213416298687016059432153269881382584571838378906250e-6", "4.644152955186586773095314129022881388664245605468750e-1", "3.4101267379164705515949071061179798401970959719776627431996781118094045712804741707881326020834426423441290104362376100384993102590570489653592904886896014643278015566215567423158647343389452934468386848973834157280506928166240077741426052002687656557079088494350099594841014879134383100929203824540e-3" }},
+ {{ "7.848546904342432184442657217005034908652305603027343750e-3", "1.462948744347492002759736351436004042625427246093750e-2", "9.31540724563669307320322491667157973956200661651434919571593303846115863894103669513415833366999982869469042192760040827577397824232012793869428364179080549290195624467934132481201575233560543620306283174662613044511585064238810137330925608875093333350849757044686376810419383361338035393598016327803e-1" }},
+ {{ "3.721202627829229459166526794433593750e4", "3.94908530795382262112980242818593978881835937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.12206584334504219728846621264973553250302703946785171831645645721830894010675262018545815052840050758849380777393422282576480781495344500008748097426459462508969278927821357065182790433439566919608820582252667225317461885443234193297904549706413625058399088149505555110903375380342716569207812657836e18" }},
+ {{ "2.37172835747338208930989900125041458522900938987731933593750e-4", "6.407577645033786170603029574976972071453928947448730468750e-5", "9.99465320336479719185464362393617871174305860472162937262848024567759736497677820188393809529906684006391677099787283285239332531375600773760223206100883246634220752238455329498878968166316454533321577818353913376078773928516840980584615525022113173652501922620733886925072518116022140332545581471584e-1" }},
+ {{ "3.53605103337158652720972895622253417968750e2", "2.8458247691311680682701990008354187011718750e2", "1.83532969791885885135620378353794410619553188299174712267165316998085251325072529407513466403156971688912550231810700054288873685181499788137652636209514628912399831379317778239395084315052983947372535292000124065735878003968456173427606734312841500343489942261612441073694733682134245803236657004841e725" }},
+ {{ "8.3104808982436933329331421593799689162551658228039741516113281250e-7", "4.155393517188396557138219122862210497260093688964843750e-3", "9.43482075927723057531497663442495255886217925614713738709933378320005101165593393456330280592636199704470243210249220699112677280162135519833702952111992891673206729843009842099688221317242192847449764385413153153282253151503752131156497992327652425308884952829049613144312048128169217759285595530627e-1" }},
+ {{ "1.1466602000178882008185610175132751464843750e3", "3.3412765154888893448514863848686218261718750e2", "1.74479451169065114507177142090694649425184490446641781570460948781576584635840991601731927655494758023459925015377386019778946251375096661299820054396659345784163916943122911769409035509491324432205386045800229510005976694475685559497072577311014446199955236237444975977941360792089045512126998703937e1022" }},
+ {{ "1.592844639464667579886736348271369934082031250e2", "2.373685961415714085198658267472637817263603210449218750e-2", "1.12790541394790276732931574594592716168427963234746835691403175587826006982488095536822241070760245600803352183137207993347315747261870544496930500337717553335079860285134922718636682581363247953489931749833309595523465412068635376914524529775388476847978990731073661981262435307448746968442209991247" }},
+ {{ "1.010374635480884575322590990253956988453865051269531250e-3", "3.8335008475018355511565459892153739929199218750e1", "1.46827959515471898774763024079995706113716782750728469166998382738205474672874505408339070961454993286360763402251395607969974201963555866889613983970569781895238062738547839409015372756811222082668539050479266568911339662981230077013588037391296361362960017408451588351832195207411208108858157498757e-115" }},
+ {{ "1.66695565004290529032004997134208679199218750e1", "8.71804015666434395370743004605174064636230468750e-1", "1.16219309185108283690353246115834277672387666007297244563945515894098174972467389980428784832971321037184548414733298149740082669071577857913503517445753714679820984984835536300423998074680014379718142053804437180632038614386541542054507333387434066222641647278889877313111291185910035634611028423893e1" }},
+ {{ "1.2846460229611635440960526466369628906250e4", "2.3245763842937037679803324863314628601074218750e1", "3.24945391385140670639469572823424256394544549042741674612450176003078448450232834405677926416541827735839125915448795224664876170676948629996836691342006517593947756961464160491430339434651171508096026536520981556090838358776179831242252299597098299062165399439487062435923683313278394249407345431587e95" }},
+ {{ "1.04339649065651030425752598951305571972625330090522766113281250e-5", "1.573485708305823038699600147083401679992675781250e1", "4.13059686908080605126564483508274490473647130063580548021629986277623406548383789633827569651948273474979014022501027829260141472868965231700274633764760142846471542740886183449424861759202613481741450387488820213753956013540876031520080117102079251759436887925675362188501650887210343405664270909838e-79" }},
+ {{ "5.98527292754746476077798433834686875343322753906250e-1", "5.92842618905841398438405498438896756852045655250549316406250e-5", "9.99969570850103897852254602475534171540024098089888531491644885537022647868647455296214377097624078476427734613966180360314627711193584708132475074727707481960045949327090840155765239976195485323033627665295521041657350135494380406033384926325020170964497589858453537791112107981125863527921983931294e-1" }},
+ {{ "1.201708216294719881386821036528544937027618288993835449218750e-5", "1.83573171858579975435077358270063996315002441406250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9.28605001646404799122123246583375017811401439409264242217956456924187147921073178601773640157007541107990624712528914809901097933653148466740296742087373566926721281981068789281547799916665066119657434350735735616423796448248252402292977828214490771898387468010213868209841336736006316556313401379158e-10" }},
+ {{ "1.790278581302762177074328064918518066406250e3", "1.03754584982387711988849332556128501892089843750e1", "5.63044664995037750836987820374386953646551425036186940515842751543311970070428773125366390621088048509415536569966741084563251083225715464442813762547476523458275835451374563942157742199280762833831415410370539590912680755089996665637460577287883121257390441169299493248423283996313182295602073608455e33" }},
+ {{ "7.710751773353188842641259270749287679791450500488281250e-3", "2.641820563533838139846920967102050781250e2", "6.43972399050369154988520798910605088410360743083682368257478281007222478749780386934407011016164443028717189065642983648339942330570417348717676304330188520673656075843370307967688074309785894752170432378373350782687762813282030251151752809306457995236444306078641839344649086096494148698382826630683e-559" }},
+ {{ "1.225859617238612845540046691894531250e5", "1.01372669446815572924860959780346547631779685616493225097656250e-5", "1.00011878102928302779143036441761880708224532433147368168056931216968198406137164127175122694955536795144107173837990207593653143943257391177552069467355860858316175819319731322452047752960070552385154812027281420138955970684262089648831370958477699568344849874652831370849460274952408206982772881433" }},
+ {{ "5.82595149644963838930777910718461498618125915527343750e-2", "4.8505876863872399547749844628263815593527397140860557556152343750e-7", "9.99998621052671820010209082288722125377109323080442152434584440919377662337625060557131747020218413297035621822998191924210038600199853200536989949496907248450515440309961142400248274163420688419892365590086355187405743025995286488853302886303794885670413483577122364857720736276931131470386157699818e-1" }},
+ {{ "9.01125395544224438992841896833851933479309082031250e-2", "8.218060702910854331548762274906039237976074218750e-1", "1.38368157061396129371090614663532617206257134398324144105974743560347038187851945959992361814602150755480311739774866352614225040566667708793196627370259194113771020229764238603211377558658426209396490633521450588911944454397547213176293597692411663128824894095155297793732492904564527595779976674988e-1" }},
+ {{ "4.409654394722450909682720521232113242149353027343750e-1", "1.024539904317003369271787960315123200416564941406250e-1", "9.19534075097294910062427312364961024864527797483767863624171403928319226867976521096128692940847528103007338680691678979870596291215052686966371603169090630798213135736273205172476019108353742027081191692977102801637543740660392501627319952653856947188066651067307484842658131091249553304134437847486e-1" }},
+ {{ "1.93717944386320728433759086328791454434394836425781250e-2", "7.08574263216941169218898721737787127494812011718750e-2", "7.56194064144518235667018224449588679976819296337783156090494451036523029483949448332763991177580492553296509263765798810431727918219796862387760870580577134565230417714219352767669331762365217747400655499790736729474440290141888015988952364748907315410294417222286566628219298383793200309754712308589e-1" }},
+ {{ "3.6647989268164383247494697570800781250e2", "7.71145011595037033202970633283257484436035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.92304236247268349096312573893392045307545699411902317264880124837981164329935084560551082257778103184407170649203234984204658334295355705120603551098245781624244872037069412927213696722873101986921044921101077821551960590243440000669839151585453297946266135519928259442687204452169702512081165606273e19" }},
+ {{ "1.32708985351551091298460960388183593750e5", "6.56531833894015816668887630669360078172758221626281738281250e-5", "1.00077473925602097877583679698815018000110220247989590351745049914772258652489667683543311902850183669682134777670514222872443151397469262756195899010288195180434965887160900063533882057343026426147190468334739066751949659071732450855977621834587152702675615140712006936143437739732339126497413250346" }},
+ {{ "3.5277504526489622094231890514492988586425781250e1", "2.2020744129417768597534177388297393918037414550781250e-1", "2.19164668712694362712251058826210564533792000244902438405631163228898011483361552530774835675890492313952004188178746361986328169935055931569379688204574777223286241370824460769287348812931304022631646073013552253933784290828875633916987679684918077103703055564642008994164871305721849760321403415697" }},
+ {{ "5.2672115056769689545035362243652343750e2", "4.0259402110544599204255966640175756765529513359069824218750e-4", "1.00252610964243996116042029581448234570507107619387893463104238190901401098561255564385433004137657583567661490188312636640964083001255112695679226528406143723662756570159800308402030438165398677929717369572388554610405821138849352686065896479954227526563362385890018562652478441542017212666618852941" }},
+ {{ "2.85382232656423795447153679560869932174682617187500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.216220843310176213947215728694573044776916503906250e-1", "1.13603045090195516704596534175318401579207918841598587146324536013529784552205952203801294482696233870522877138037982641276177183524409958004888324787356863626406890600708780844863240402886258989044381114275612277702992295412653204859730899096318397139691123133990243168861782693287239971524166152533" }},
+ {{ "3.9338169463328451214145786707376828417181968688964843750e-3", "1.02640519319720624480396509170532226562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.39863675434390989723351064011214037513398262547140577736762821607782111942948883337093856726075063500818067573716198405459606323946322650536233861891286348318106161892821504014313663700097828008365436512713907896457061009150442887680100088324705807016079909429412724343222986472982422270499720872159e-3" }},
+ {{ "1.9072397321581938740564510226249694824218750e3", "5.1298095404607061765026032595926608337322250008583068847656250e-6", "1.00003874831722429751496737922917004435479965257235816453591525868492670813319281541168275796018004391940278219820598993631669244673032352035813333397881915928790424205764915135090114218540888704442481908590391442502493189810976009897523082978954781479402200004590037271385433077485827559023806478611" }},
+ {{ "2.083523763392070122790755704045295715332031250e2", "5.7732837226565194486916851590585508802178082987666130065917968750e-7", "1.00000308249415661310193935943862153702303875909245307529450912006821815453371252563642757366042171762708256721399309832054533722706035892679765533583739735266608823632317266441068592608135365434098808509810551746075126687287986572543900322800829577692516676548344312574211742425657072976921014511642" }},
+ {{ "9.71724513689399464055895805358886718750e3", "1.5360000160986392791703791793622713157674297690391540527343750e-5", "1.00014104020491665960642725547509974756116986496973147973056122194845971531406444606607453003866992922578566310810305178136382912507500272971783788119308610688740112803511843108270710764262658648334376396166426766278251188688321297859103006142315969456950763638190401996565523343208463418705191958244" }},
+ {{ "1.398026293941192073040993837373946462321327999234199523925781250e-6", "3.51936644048749802671238740003900602459907531738281250e-2", "6.22241870897130620142553713444278896319414844301127628403550478555392596780554049192378201563747768162180873879073883732945738916895322915439456198565943172406197196260279982663959045275534018807122490359500452521705604768928620538202140216274727339329295923594705918674314862791990908520063913560002e-1" }},
+ {{ "1.827650077322046442973579871704714605584740638732910156250e-3", "4.8431895026975723794748773798346519470214843750e1", "2.44507161334831975914976330209249902713146345349963201960249788428960802366282255229864854849664361912073985037641790912699757539023105844864929631975643935921225809946412808629805438733741027621604921419911409131275740749522537202228860884159853851509071131465735369871648912668689687943767400944117e-133" }},
+ {{ "2.4987224228926152136409655213356018066406250e1", "4.7047570824358175833879158744821324944496154785156250e-2", "1.16348084392128872602170011561254935010976642009637548196335495165701186585536416597718806964461847864028617635977334329848073696152520245124091137376311572172062522206250814543168673719325221226847866492589752767830775399781911226358430095279351842770613889036173222279808875420192058143269430231674" }},
+ {{ "9.7372871127818103271014948951744827354559674859046936035156250e-7", "6.491316379063438724017487402306869626045227050781250e-2", "4.07165047632947683093273589058329846367047057355046748020009102510780065766705586588667687646255828190502946698129852184038457736930348397388946238687402139213354445146888181529201139114650892414118512134805367250310852437034078342906915160983796227481872425495472151960083249503055095175373933146792e-1" }},
+ {{ "4.4155834567063219006644025910190975992009043693542480468750e-4", "4.025802670302487543466107844380985625321045517921447753906250e-6", "9.99968900351231822950433739312428495072856038776486153703336951900488129027691896751286362525813536862927182360156159008954621569331770038862723809677808006540779343891491372231781933232571078612298233285052166498857617406809139173150092488738015228536389093793575323664246229233166651636689627818170e-1" }},
+ {{ "1.694399654820086253970146117353579029440879821777343750e-3", "2.7072429437320841283387551357009215280413627624511718750e-3", "9.82874963902734961145255850699575978876746826231267390332055952052622176060893943203741788304684214781121351119738947541263489494899175563981247061980860747331222509426652450764505228926170316851952179492921780437496906593243321687842665376169899786546461700589626075813241454757704572169462564574837e-1" }},
+ {{ "1.033763461817003553733229637145996093750e4", "1.289890172095206274938128387930191820487380027770996093750e-3", "1.01199452382152846374481951076631164582584661608322894290555407864227990207508639820617740715279797178581146570337346215682655494757376897027306747771093102874076785395996716253897920655609144243672317898938847395985100637001354712944101351050038536687079382428227717980685264632621156939159222226580" }},
+ {{ "3.112833052343313977594618791044922545552253723144531250e-2", "4.01353477046427009958251552745878143468871712684631347656250e-6", "9.99986074588519454560640521673442935641990554362956049271045530697088039943872329332770296441408515271037076808977915428133116228156704302455915102356256867263136007644093137679299480159178566422686424390921886424606676712277018147908640199369062110318937373042728100659267805929813035245614797996696e-1" }},
+ {{ "5.28149186098080924978148686932399868965148925781250e-1", "9.1665797514525820588460192084312438964843750e2", "7.28853014056156731737794697397317103994217559431541111572375406126519183769444357872853226505354592130101907012445487770770781129901235873025553849331106253792412404560306141938477978026852566898693906386886543485615404988699045603447639500571979436388663669239796393481965967462640474331680310932353e-255" }},
+ {{ "2.2225059936295621376700637483736500144004821777343750e-1", "4.642048948494684736942872405052185058593750e2", "6.32843078440077439221637641999286892206805235377727400014747144482178933184733036820827184969102097810334387052048590277206436733653974464975608297721942370810634826788083279979408768576378602999295622590369226553818034587114239802440932660296228167167346743576531361276267309223102513376997022773121e-304" }},
+ {{ "2.6440159763177344575524330139160156250e5", "2.48515468216955248692556779133155941963195800781250e-1", "2.22595558957063988125039996231413212457799685089809815878697787456948885300739760428233740293311835672030485009491199517382307607053064251483492857230753137256332086797523013500249415836024187602707789116720162609479623122987122977570646771495383250532455162474303561808394969890452286012410188771582e1" }},
+ {{ "1.09582116879168154355284059420228004455566406250e1", "5.1206272980605938016651634825393557548522949218750e-1", "3.40731230607113577867418131365007953849097556433032366687124266265609534681297061468250410931194577479128955229993084028648709681104213544161468193428670594705798621530529153971465865443890890717329532471903443507290510241292018220973611927868861647858691705199882686680328023542042496509604517393163" }},
+ {{ "2.8765032923235537509754067286849021911621093750e1", "3.296369943075922037678537890315055847167968750e1", "1.22908880787878338117870181426636174855444573322349359087228723914632875946311491878034980145023441888073390972797385266938998183475968716718276000295270333868881283934630328911650991709812223171518435502540229986453603655260898220094106548795285001784222894626512051690586979041086530161063766088286e48" }},
+ {{ "5.4319233558115521650136447995294020074652507901191711425781250e-6", "7.054908153364996056941191304723304256185656413435935974121093750e-7", "9.99991447218133598413920881391105179265568552579320617946001886143605253717825160221002770761833078341617996929941439664383856515269642825892255570319730959451798678974258583863414985420861854967974576953145352608585972242996479479728931155364675877878808323939895254383920003458645959690646207544957e-1" }},
+ {{ "4.2445062073765684948489784744651842629536986351013183593750e-4", "2.426176577767188979883883348520612344145774841308593750e-2", "8.28295177297287815001307142572162153750668927480049029937221930255174310738192949066940496577252702629998657734311395912708887847618250337367575924375521236807234588840327753338387239581722861162855798729933237542178055913633273793008757291901196363208416962469352000552707123078294608807586649015685e-1" }},
+ {{ "1.307332736315109170122106263534078607335686683654785156250e-3", "5.28858724063975630660591753517962843034183606505393981933593750e-6", "9.99964885633207072968580726334787422174518544602461721143383625224899368056665861649907581709049484723249000855383620986446956783244965088674964206494776757278305799759524067667215395257158003498553463221431113016348494389058271382782227321845047125985119505752219731349818937084514014330356212827292e-1" }},
+ {{ "5.05693319148356598344284940083070978289470076560974121093750e-5", "3.71295988486159203589842547899024793878197669982910156250e-3", "9.63937121881680868303835544307084885674388908256423717510775350630463810161245157254316013064889945722190309457613724784742119883122943867724213022530021363225255978426044946346577578461808416905152263622045415849140604671011655772958990313726815312540544848648362428160986497782665450731113127323529e-1" }},
+ {{ "4.844239692035090411081910133361816406250e4", "3.984134589118280486697010189800494117662310600280761718750e-4", "1.00430738669558002031403659131744896728312485313631409231096866927631637993851247415735380222493024677897434245013356617271278547792035688620287749522586547267897264556329014249359221662180556496497208175354676304526200770138492165863545577626683932270268515447259703077574615595169323328662157853185" }},
+ {{ "3.7078480365654198358527082746149972081184387207031250e-2", "5.5250170899286410453044027235591784119606018066406250e-2", "8.33573197351168666887962631201029384882638323647836131662987813863879776215233605661322116050262224430353678691583537529582375506359810080440891529163886160078411813398386404062767305381544566179454141780145518165423921596307439563187082576279320332050551415851387221311994490392675793780232895364275e-1" }},
+ {{ "9.716555147724156995536759495735168457031250e2", "4.591663841877569041116657899692654609680175781250e-1", "2.35377653844658353569031679679735299370922232948810544763027212743048187579990164187893014793934410534408779634667801500692064187926463087757507629287841868368096408503740782370080191376158895711024144836742418575636184986247750729343991462010937031402061673932392367262371858670977341473615463130359e1" }},
+ {{ "2.192645859365482010616688057780265808105468750e2", "6.96729316179001942387419288316152687912108376622200012207031250e-6", "1.00003755636032301823537943813016356575902489314188145066916221494580392625081472816947024292161874513732270899683702071327371665141574567958235034154797657204764921080200596842458370044167411926333595258330617813605034939486089552138840272033589961004832483480269032835319807553392086565465392533307" }},
+ {{ "3.079132493049849261801398370153037831187248229980468750e-3", "5.05463804011641570923529798164963722229003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.01796919571840276681288861157787148204747502682382876961304668410493347723226232435621763407251840958497596600197906374696494268910490419389807332560043086656936398322936521311486726743408171670806339766715147358441693728848925652781609216889389399280179459317545232154188799226490332505068768929180e-13" }},
+ {{ "2.72793625008602248271927237510681152343750e2", "3.45107876494454290927649253717390820384025573730468750e-2", "1.21356364414706225993709314217781803611734556534595777181951409142649823132949473277169982486320740015805393683502787636048469072138860871755431959907851351864995912275227191432009279405103766593019141570051245200073079914866268809278471723253071227068595740039873872137154853304817823898235004618070" }},
+ {{ "7.23608622250063859837609925307333469390869140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9.31713845716947162145515903830528259277343750e1", "1.20546015073919711264373148066122758661068546232444031541084969085534241548251886930568813690809866385000095984750691172127616802373754602142656508934912781801862005537086317665378844206989588374435568687107987862008034665185792976330120721552229886514045101504253350965371418298181204870517230728955e80" }},
+ {{ "2.570723035364298993954434990882873535156250e3", "2.69790274993758974475532852466130862012505531311035156250e-3", "1.02140974620888944930305959435799702728843289682449376214925750857783066006891649041158724227299321084257799199351924992147805951706584524451302681812312203333848599297059927350897068391576429287666840858314350106940048605718179391844174140189607359928083054157216235380992076831905704302805940691484" }},
+ {{ "6.270713787727346643805503845214843750e5", "9.7721370519921515454195293237660280283307656645774841308593750e-6", "1.00013045496457016358902387902369248820481792505684604793782357003458740283012026953971512527832247937686018956926918760579827820618149654974789601261789353438501933209142889274324701479760186259188286221595702693452369288516143444427753506877231697874469255361407264955531595418134590240336559943863" }},
+ {{ "1.22109376852135853575020973948994651436805725097656250e-1", "2.11543635047828820815521422282756702770711854100227355957031250e-6", "9.99995551589729160336804918676630911396340574056049766519068518427735361038006808700598379055737548489964622176597729664945550621782605173209704608243388212974829930345797712949588621847644770093271093043600103623962707878170666514346008821208975619634087411931268385031450753049330763535153583731711e-1" }},
+ {{ "1.529009903540106893315986269499262562021613121032714843750e-3", "4.07910792856703210418345406651496887207031250e2", "3.09437152552687759915144210042422837004776738858769798785362828201158918075365450163702134968526881164477730298716543350719085306748967317190021537573795780001155496528795641888775374745803795044275135632851107711558035622505495812638847592959079891240357223230602055612544312975892640303394964825816e-1149" }},
+ {{ "3.3357488035001949810975929722189903259277343750e1", "2.224099109229280202271183952689170837402343750e1", "7.53927322890034742368017335227292720005783821228941858003370629012694382557138392281089806659775813675293365836774015539525201899124038456550795641920581579865504101847353382339574548922971435920120403286201070202878099356466592276232925556211910029587973272230882852354333961947656943741233580547242e33" }},
+ {{ "2.938860932228841704727528849616646766662597656250e-1", "2.8315213921096252973688689458242606633575633168220520019531250e-5", "9.99965326837122789351065801513643019379691746234431978717545032882563543159129029000520238088911519893688798595680083260598269929340163335960195938697476035130411906261845669886681524297055544969116053569875568029319976030656002722062158836225698022385486930605555120535915405105091329811282147529892e-1" }},
+ {{ "1.0536390034124033263651654124259948730468750e3", "4.51733416318811920042719521006802096962928771972656250e-2", "1.36944656525417845173858897538026176879580880507614615066496128471220543538723767528991906038383446820702565624708556443997649629495841259671527437077527127938789704415913380536996498286764720566639200198900869760387706475703380674649201567096875423075710829719565752777057995176317511826228555593581" }},
+ {{ "7.04420993592731428016920358636809851304860785603523254394531250e-7", "1.8351438488835314366554030129918828606605529785156250e-1", "7.42999851704960956730922360017793140547106959683768718211070193339741510527923658661871542385815054985958418322575081567325471819065963185600217971978825670497003073742499873659741487280818814513977323524960437583297927902838999554519027556228317521167236540123085211060151247184818776639943050911394e-2" }},
+ {{ "1.364533448228305205702781677246093750e5", "3.64161706602405751964646185570018133148550987243652343750e-3", "1.04399795038635921897857958256316651977445152567453727222518284598769789391999595233661749274120961391885225992798836625746470159354169324537076101684572935560321844745400772917299981122731280255675880379891143456808614768985468915540339803333726839718219814716863124296189939533443325484535601906033" }},
+ {{ "2.96565824250737205147743225097656250e3", "2.516110448737411964259536034660413861274719238281250e-1", "7.47522068392867838732450708572135930567101005550555468267204809080882851453167258980507378379243415338266777301093835073449659828508711197010120745211201439735694186362327003324753635700543968787946652069972776477402704033680932298818937199049452926851734709666219333409709557278942834445272506685923" }},
+ {{ "3.49571885007329983636736869812011718750e4", "4.0503044287507061760322812915546819567680358886718750e-4", "1.00424637003637001346519445137047903985527298734444205998841513031143713650570988838061609722582515075163633719319500702266902153041674931227041528924269656845803454259997891649918404783522081199789884938037449889035577760958358376931686006190221056227385652828889051574541455553647177469994824093880" }},
+ {{ "3.48704350707848789170384407043457031250e2", "5.94470451369696548105103772741131251677870750427246093750e-4", "1.00348622623956426654419790365515385008204532308719120294458056691444071691627567637464093877906643804041743573926720499607391861016395825332249134843376717727039444569339034648222083969616342813466476442089528251404075917497087087133158228565604726619218594367232783173627524996497743616209681950686" }},
+ {{ "1.568663540524837252121415076544508337974548339843750e-1", "2.923824443941481013298222535468084970489144325256347656250e-4", "9.99458548775941655985641049562781270043468152203580071617312952591624765716886645437516907451083025631663787001723138256606416990037410952933773901687094742927210507959414283830075225958048767485241813607677989510714884949211624158456814965576504829085206941026015695802504061055800475236320588403791e-1" }},
+ {{ "3.02555496695998127343329997529508545994758605957031250e-2", "7.43476200926107111399687710218131542205810546875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.07162439112148019358772224877510168973399161717373536875684406796915754460308189843582561832996734392043166689610197386058626738901780367190433337506557349349095623450517180395264699151519926104197461968535179024894054340573408793813826035189319052898390671701445304365679647915192850527101155372317e-12" }},
+ {{ "1.1330105736971599981188774108886718750e4", "1.63391498739915612750661644270167016657069325447082519531250e-4", "1.00152645922689671305334533143447522531808487470636607472600090062282095427316474560067944838274073843864628772883486893974636361201579261003896147984190781801313303984627253458134496161410984325183430174864002871499528387099093919980953756534711057395376377803880481128200568335684903772454493560544" }},
+ {{ "2.0028908021549927070736885070800781250e4", "8.6391933296204024372855201363563537597656250e2", "1.92699766759603617897105296135509926340232009672802063778499835631207758035200425882438232730073541633716557508264570905405926283429555595877466543065569320408150504538307810614249593452939955155496934950121411097262064539453295031460705244148452908856502571794692573823194011760644101511653087442625e3716" }},
+ {{ "1.32507839540064445080225219442127126967534422874450683593750e-4", "1.518878628834884239040547981858253479003906250e2", "1.03647722584318600030967144335207527953463651392633257231597431308252840118498779108498324584815641015064709374407448575779770810144009458027431983385495055750280990347720737478088901276233575808268895728220588756650828610378844764861577519796740508015409537773234457412772265295624580311112182954835e-589" }},
+ {{ "3.5760343141490902318935241055442020297050476074218750e-2", "5.25925527701659852259155614184749083506176248192787170410156250e-6", "9.99982482017295343923291140868824543861889706024267738325920940955163642168596277387382324596268313941030962899361898533933991225186157467591500415565798572470081783136017764613428509329263882432996891459823007909353566621634663513526224023265569627278594547455316883257611223218894909706813593928661e-1" }},
+ {{ "6.37895215316995745524764060974121093750e3", "1.3360686442100041778149877025327896262751892209053039550781250e-5", "1.00011705660623425091805720617137318115223118739797033368829524572193511821979599497313069101487866374165387923697805554918674050522785359139471078208862147954503878603840716656103170817064574728416607854591674468869938491395161398773239010400175784333016262331344116781579064223044329496394945074676" }},
+ {{ "7.381043432400802295489938842365518212318420410156250e-2", "2.785260961407158135936038001467807134758913889527320861816406250e-6", "9.99992740925564330652806516420746938988010148239633275154076421571630454719695668630175026322867662102076692387029189869547293172340508820534949790931051258505036554857756821592275590340005422029182367955076901146714768419205676755504470790282646601620852828276821380880075367804416790635127471984294e-1" }},
+ {{ "2.2460666646297293482348322868347167968750e4", "3.5622485300151595311035634949803352355957031250e1", "1.01973918494886267810001894567464669163247766970377570638787946610322435627850446066260492108701967988500602281478606685233882133420407449502588207373547970434356681888963673609480451591224779378429762251379481389292664486026843607177275521955621777327928762357765933587555111806380884809909558908126e155" }},
+ {{ "9.008001827101250191809356238081818446516990661621093750e-4", "9.6443272576535524209795369188213953748345375061035156250e-4", "9.93259995118943779913113450886803213157300236441759177808360979990670369813799397673229074691051859756881735508284831070803950318509897851789286938821324800564473083981421925321740139076048924264684734691750703913517330543410997193207195299362629750503027996358069377923999788650279477370768077765657e-1" }},
+ {{ "9.4182003413893980905413627624511718750e4", "7.774193002886642601045527611880459062376758083701133728027343750e-7", "1.00000890381075384949081595209139696411199492416870417459364082687864113657489926105641478106668362778068330268736600393352152923274282322515415108939987073582719187381060734722668227714154297709452559911296248629890116220184188866083605360898785001127921221360852853375996265543887873427220880943937" }},
+ {{ "3.7369273199951797900797423324092960683628916740417480468750e-5", "5.54122149350758519403825630433857440948486328125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.92632813942166735469252865298175146289395053013193471532530902730842579927583105349449489218906918310069151271847219223504300355763614013961247019308729802033635205970100220700085021558381217246935232153985446384879850169504304149149649141113162707552300166988589633450196697040655835196191118606631e-25" }},
+ {{ "1.3620738122341888645672192126312438631430268287658691406250e-4", "2.62468618182947011518990620970726013183593750e2", "2.23349312978912488484797519539255018773821880984944037182332190114599517402131412348320914129812507474815113624208263309735483442308554370722059051755362465566371079854655405434396337539491832247301779055162543337811300162664812836135792078898777055591459214033387458633919871456241380657515870584905e-1015" }},
+ {{ "4.9943935269132489338517189025878906250e4", "3.826691408876888544909888878464698791503906250e1", "6.25800762575108176129137940894321369236803059535403474287787709049193999989553876351149791249607106743078893765328229169808063556877194151113548299740103775991789375636892691914854010648529483996498522632062568652379746122433944483375027665116468292026500341138320088041194003298397510386237462266236e179" }},
+ {{ "6.485392961276647838531062006950378417968750e1", "4.190817698307106042854286442889133468270301818847656250e-3", "1.01763841928646063179945311430619776672100366204545937731495139936077193534063748395270846081233643612207997993464082794803985613863394615181696471224069637239381759785944556677466232970035407360811317566511537057177507901702757204703329800142152099723806486139061978862458791045685416916469263617024" }},
+ {{ "1.261853587411265742446175863733515143394470214843750e-3", "4.1870787456376986138129048242717544781044125556945800781250e-4", "9.97208954505633083962348848418154736485944843062550245347612203304547965531131555025237286475690843458460809325029245321285039436520603179307117618768371875438665250167675789128497710216048233584274468422162333906486838232593986287174975031846178589748114260487176217087771250070897293526267935699686e-1" }},
+ {{ "4.35488942342848749831318855285644531250e4", "4.98678835531215099763358011841773986816406250e2", "2.28936120581079817550967747499324146341809782859497306106568788729215792440868081012592482836115918565108733027645928062811796100015424546044055914594061783213133483941275372186699846142681689537346156745852091720729474664315028859269079769914368203114147150204153490030106741528606576208240181832379e2313" }},
+ {{ "9.5207914036902785426264017587527632713317871093750e-1", "1.08107909706786978198955750940513098612427711486816406250e-3", "9.99946912731466247972527890006754510895764819973853843000662583785640845446566388520861934833991540886888853432324685563515222422612660717906957938307798158191679485565611171204322088502967506340693425660800080176478497228519680488062210430869030836704176100634086409155754383655120084467598988079204e-1" }},
+ {{ "1.0409068401303045448003103956580162048339843750e1", "1.936739214855335831089178100228309631347656250e2", "1.11210338662691592819619664979726597449100163292683513479170961681889868927958630114518483290408310841588879531996056535646660865328863109763975044243074863201932805945130071457158971557983161341534770079019284360491414192422030250649176833692020314068650401152520803465262499102820988511235853988648e197" }},
+ {{ "1.971498010271299783369158831192180514335632324218750e-1", "5.08739590531112617632913952547824010252952575683593750e-3", "9.91773157361409781701715493663763866515090466561690289420891165770114164193580683686846646130438934752909209919079027125210567061374829822112866779201464446464651026659338435230202216580437945262368984290532688736997482187636274012593325315635831427955296981578931251003363149110123293975764983649974e-1" }},
+ {{ "2.79971511541740710526937618851661682128906250e2", "5.787218752022283210778574868982104817405343055725097656250e-4", "1.00326623969490901566461359485954800182836515927200276988639325398663724684484176518830065683294723102506600723636309590040090118084917994679575687454329398419185701984750026134555302778342008308134679599723649132979721129657717437355628051914400727321111879908949789141417261266151891576137055521720" }},
+ {{ "6.471802775221924264315020991489291191101074218750e-2", "3.54396046637904049703138298355042934417724609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6.11393159288848940315388484390073955173736785149894558116032886653088516351969818186256818732041463123159800744120590173108691581334056179094211775690837141959813271450679799058611736101514220405786918675156348944553549256908731766892776136986705072991002327432436231317606705791658862062772822668961e-5" }},
+ {{ "4.6847849382473068544641137123107910156250e3", "8.085034584903098675567889586091041564941406250e1", "5.97762155395492793734284548790084346203097684458052431296538227291993735975496781864258983550151454075639982388971649044469779839674940147551147838593024539580668837295332526092577626791361518961708496544368414553255175123291725694241746786254191457634438577633532650001615818789185478534006606741407e296" }},
+ {{ "1.5439145955192981607417834766238229349255561828613281250e-2", "9.3029150204543831215175941906636580824851989746093750e-3", "9.61942064374907006758472323953419672912600288860094391695046538452658427001421356899386802781741233841276963853691331000772213773371503948038327239870459585412114416103967368390201886001946927622637207918880459451317082626408706757400699845882572764664471363683650469561537447695573432201521718527705e-1" }},
+ {{ "6.48003875925739691865601344034075736999511718750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.261210824526329004127700450510474183829501271247863769531250e-5", "1.00006094496769763278820872383817879036100529479018908630432836412716347076273911182394224909321200839758060396148281450949863621182268008379068612869939290370399199699187329868380547441347229000962054100848350577521278040241049817698210922858722233509600098748764436396006044192563867258556456726002" }},
+ {{ "1.02255146268133501052943756803870201110839843750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5.8993269109875526301500769932317780330777168273925781250e-3", "1.00013156917767091552599892235129254853484398955770015153844565825349128084659104946293310766324345122756751921898192510410177121820174080396618577123202206891707775599129806431636068338328182197155856712217515198962725685962829886150997851437588418591804207516238583892908865355284748545102405714042" }},
+ {{ "2.81888129121324254811042919754981994628906250e2", "4.073526023631882098108292211691150441765785217285156250e-3", "1.02324693289074461806065314601130588099455748535483252525100029761881094483032981058215632709470546862166291555062468221229877852679809354657976457141823806639541535849041446001105725715917762334478759524935613974359759936992996718201195710259035985781666122257084622777055529931477121573215140197696" }},
+ {{ "2.0718540452792653982008741486708913726033642888069152832031250e-5", "5.35292300705978618680092040449380874633789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8.48850440195174823298359540121818302112603372945421421598869878434979555804675505735326375593302973038814914197710751833892726619856756218734694899102028024355384042325664532283875944124268902285546831042825514027899847395159917919088321233227951525026080119430650746383889735094027434636578283016912e-26" }},
+ {{ "4.31935286049695476781606906513388821622356772422790527343750e-5", "2.674460276028911646364547016752055696997558698058128356933593750e-6", "9.99973122517169758868298611393816315674468708382437784046013092517874934197350186005397961789565235843871109955511656116413964407693637441952651815512224774438246717669200447114406421198392169132912944363201879586414171509537947822165122722681222879324770937027844102716000158168894762456660415032672e-1" }},
+ {{ "5.6072865956525586847219652653073751480405917391180992126464843750e-7", "6.380308531301886202031017902847054301673779264092445373535156250e-7", "9.99990816207746297627000228090032149940299388165914304992280548917955938225443662692605137525666097388080408339273626056667955459490552137971306327684500228508064672496432612203803093818358636762048072433804065084080756285538210846111127149390742779965190790248566867146590543170273767758612958658971e-1" }},
+ {{ "4.943658727909295636307462906700038729468360543251037597656250e-5", "6.081072865861608534032711759209632873535156250e1", "1.41889634080305711655291544430541860422410170311666966191109605478799772032330347327796646352426019590688459329571978188218768772574725991603534645626444629132445446486278236532522655245444099755490849273965885852698636839519891473821647868673766453693048753250768728056307822453273785810806442880557e-262" }},
+ {{ "4.578630412410618737339973449707031250e5", "1.279961392849584456143929855898022651672363281250e1", "2.85252911535679891073378835901479886089967576299789401385670015780551662533990060451545346245206661914640102653229509656129118798311517873586006356564037704026911300448200277564257378774264510533411693099418541902845247573044373703549276907520323049567611007543654341177174512295005876331502328496351e72" }},
+ {{ "2.08423524510303792567356140352785587310791015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.35070210371325316600632504560053348541259765625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.69650994818884808551478851790421398330849110943521821889862054443832715742450095948994740658527477301306542925058870703929885411081233767845292798598894899925369153906803097693018622562446710881324699679389099964263723003154543262693904642747226514772235244787350437914151428906711221635213885798789" }},
+ {{ "7.0350735533994179782268929557176306843757629394531250e-2", "8.66736311094788106856867671012878417968750e2", "7.68909935340978860422757035820741960584342288164122209394216788923406587897458745269054408633969378408300698489680800368145152233150125878615072546588959342193206959268161227822392820692595901101440058139059566058188384350410226233241151749648406111214064140648607944967440645591239738930953785109368e-1000" }},
+ {{ "4.44777561798017704859375953674316406250e4", "4.37314005329937316446375916711986064910888671875000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.12314549862845492717877595964768115546325186339715764453604920761210996544623734651949041265076846799054130789000520895961692269440989421981634150513113011053879079524507516981642085862682964932699084859566571367826867471772759871670601934760070910316789800074922999274803369631048113774053097073929e20" }},
+ {{ "4.78949184649386006640270352363586425781250e3", "1.791833511743041071895277127623558044433593750e2", "2.79637132177375382162263956935980813855595791264327736518378404210637984016731507340572257630052502643907564502937056932274446805895054500000116906646009851736492937513833076602489625307279653461589071484812740516746714953908730424736460829219077432204380475346934742691432944334479643432469277088306e659" }},
+ {{ "6.22325830215437599690631031990051269531250e3", "2.25225952793516384642380501190928043797612190246582031250e-3", "1.01987069469372759270453628912642728954230513534833089604954661995171725801656380902963421144934906141234552439696120736550210382743489449329697576830407056888118360526079463661066722214220114165138840831176499526985462507289995825151030297233511088604059436353741508088143154130210563278515547311543" }},
+ {{ "9.1240044070163778613946625739572482416406273841857910156250e-5", "2.34400553054916376341521022652614192338660359382629394531250e-4", "9.97821977486950583166084719161557689663568325790003522306021158417755185644936647878316368235185593329253132043532554677812935724747863173935255764658313396824835230126055857216828346612262350441572667853382236006603976105644273478945602579828808105896550462847104108659412377316272488653010471184196e-1" }},
+ {{ "1.33795627811531119277788093313574790954589843750e1", "1.4818381285251529879158291502783129089948488399386405944824218750e-6", "1.00000384349299045776862801360403732363545774843774701655200272080627739941386437175886379606902727479191090187794979610761904053274682140855025508483613322969568848488035529156236560186742600966591613965074184599845133474883618868818832890976311295886503114503738779326119140373893527826165039256344" }},
+ {{ "7.0693904131002636859193444252014160156250e3", "7.520701131772273129172390326857566833496093750e1", "3.16601617096668251300410633861451144300904853213668949893514704576723535839139585890152639279492333481781656085682222252609689619088940700517823681224990153082715763605916833922234577262387169239662906567674441665483003247288718595609022710170750805174093013421029787059183231600348513197446175716344e289" }},
+ {{ "1.4680947481997885795124147989554330706596374511718750e-1", "6.551502580580362278261929986911127343773841857910156250e-3", "9.87508829078291473496350060709599928627355203095913409392108636898471105714839831302147923025254259824329731513966469918955762532776229610929533035120642195606951641982085398951090528368050382553009140996960228822308531093162518295270230167711636888797942089811261515649759631850124542086583338696866e-1" }},
+ {{ "2.13403424835757107302924850955605506896972656250e1", "6.748819597020269678289139392290962859988212585449218750e-3", "1.02087023232278898673025082821180943357336233310089987611387411667231521549575677239762600896132782138671932320359043850059141855317509884880628897347559802452573752440941620827448739200875424446592178873469737214134752340014718109265906882735838254335143242217171430272779729156476847140495477447567" }},
+ {{ "7.9523384475269076610004503891104832291603088378906250e-3", "2.848516784813468483150700194528326392173767089843750e-1", "2.52320441273088937482705455163451804728010853035570734024869989669472225400000323970014547943529070869582874785761555559916107563529628329435884632549334664560080647778917243975126257892837384804686623525333256233581024540617818741704180357848449262419278792476592443919338009722004675820379508226554e-1" }},
+ {{ "4.86469155616132400629658683044453937327489256858825683593750e-5", "5.2287743444463866127058793153992155566811561584472656250e-3", "9.49398596693121402232511551773946216238940594887656584112333721649128338309222255715733045830942439483758414668436262063880698192055748811167639524982228502529443333539688201437948685066022343441584667892362197265423697997073104183476242310932155094648160217817878533689247152065556146288540676206268e-1" }},
+ {{ "9.97061023610679164619341463549062609672546386718750e-2", "5.8806435521089213125378591939806938171386718750e1", "1.31339250305317586137103280435203540286641209041963686984564977317675267872546421630007855518104235103746292194256810045376453068069833982650717834727768128915903290190711155087191155109113681049655966851631090461344965018352997694452739029417934674832819743056725077543693812469593253205921308221308e-59" }},
+ {{ "9.250672288777586627084303927404107525944709777832031250e-3", "6.580410957004390049007724883267655968666076660156250e-2", "7.3479441170322764076883455903714667808123745049715180864128469285725740507392126144584630714483987624811982136825764300996419478406647597069868650694836325508907243957328574154916156467594981153576656803869050960269309839419957622805799157028500973756402769602128058256241358541254395091132685326210e-1" }},
+ {{ "1.2714451115926221973495557904243469238281250e3", "6.1883631944992800733018611936131492257118225097656250e-2", "1.55634262177085310455272777009125596103461766420555774353254576944288801886851836915203973701385795773437574206488784269131348804974222211728133676956373754063980028710578189114584286886146802067657659439377822750677886486205610448378645450751753499248735236114037268909383185086028320044219137753422" }},
+ {{ "1.422058718410514757124474272131919860839843750e2", "2.49175822061007323782177991233766078948974609375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.31499443769464065089935605375459683035642863575091614297392875457512297919442473147075015935528487370816930373009973708163470195938036050657595355692444453780282744702410807810566482106290630446087507470829783752836539009991223629616484834464198297022741851935670638283977884632514115384409382379451e5" }},
+ {{ "1.7983084647168379888171330094337463378906250e2", "5.15740741801222002740900940409574104705825448036193847656250e-5", "1.00026780930725147708425182905646433452420215464014520968261578887024273841780021979940791064143678705875846798937060716374571767664452465951073901977576420551043883735274454852404885141087100496560513919957329201186421887438051030917217421635429456043545707951122601188323754670287140035060211268236" }},
+ {{ "1.416174937472059980336780427023768424987792968750e1", "8.06659473408631241819755075539433164522051811218261718750e-4", "1.00214037426842670551611147350147052752193345171802567422360034056719592273707967867550926051192650203531759829732673928643729296057128383914827597014066465351929167430158631190618779931772000386360976972135737607634338444086468691888473748375182457345550820744493891034677687786078596412978684852640" }},
+ {{ "3.036204456962959472021701401445170631632208824157714843750e-4", "1.777555595293553447611145656992448493838310241699218750e-2", "8.65907453809699509460147409829901675941527854788885630333979265214696163822247505595008528776776735251807610239492515526114770917079309768787319965003601255566849812163333057688474056980168539317656182802355025321396669769362336327872219770789870937515083196007462468888621524361865732646086424336453e-1" }},
+ {{ "1.8815079698449000716209411621093750e4", "1.96075222779542400530772283673286437988281250e2", "1.33268783679377583213014321394305562443708551652324893198731298378098553656636607906131354129802125769805603337990709647117721910862833606977379369954861887407787985331605230823250624512728814254652735899657072127956911865541366861599183456838203731048557393074731179271410020592240238165188774584943e838" }},
+ {{ "8.89727582886910006720881938235834240913391113281250e-1", "1.041279960771747739589621062350488500669598579406738281250e-3", "9.9987834430235824472224814411122243776265486577981177293571821321821517441659311658576556678112989769575007643432909365063217328716826322973493501036244864951726160136161783061801068077323413577888781728469725649419290963386640028890564993827733767871754809898250945769328951487990853772174957746180e-1" }},
+ {{ "1.83083205221824460440238624414632795378565788269042968750e-5", "8.5130581526808327907929196953773498535156250e1", "5.08759465190948202575969824985581134108808966132826957045953621966485495100532942367792704772987024490520063202480279983957515910756497430137889290866515761789926914423548570454774810411630371091100113544891279153106437138536746735808516608107152208446229082973737250416694137957514739571766896873306e-404" }},
+ {{ "3.346653408259039663751391313617489231546642258763313293457031250e-6", "3.7868598858803215989610180258750915527343750e2", "3.52212078787830927194297643296251781134291925779877466674871728836105722487573580131785145484495276918545575844013070305855330551951353365366550132397674036846629030890995284036782751533644901503503905390007269189142085867922573306793968734446410118933272999821289312420310855129959801669881803865858e-2074" }},
+ {{ "5.3392773503090527415166147151559528083453187718987464904785156250e-7", "6.207661898675727671229399029506623719498747959733009338378906250e-7", "9.99991034310800110010707678195555035460840436574922962233018600570397473321611757701145927433415065972844383465094874922585959664097551124468322387734536918015102243687653110114625528443011692213994065730522520240541725522418247328328568974843758308408263849244150678651666777627782107985602066092068e-1" }},
+ {{ "2.19994195074324068173154955729842185974121093750e1", "3.06707480325778616969678580517211230471730232238769531250e-3", "1.00952545862365855685219042115608145190455235613268820530406120489310419092421063376518661644406509494089174786391890344365290616699827245940846567812410266752069452669091303167176618868615804832415636793311353407444727299687139263635273616648724056070625009496090575286667611858626054037393426920940" }},
+ {{ "9.494261316265068537459392850053063739323988556861877441406250e-6", "3.33658593189578134285966370953246951103210449218750e-1", "2.10953513637051167906362488703903898283324995313357160919327331939686921714903739192273840983847338772103005796728222224591772689334463276313863779738778665022741134644128703431090827473653846081611135627094959784765932765625500258444912393296945910143335619574776807349923037475968356403544804516261e-2" }},
+ {{ "1.58204381201744226359551248606294393539428710937500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1.699670888752343416014042865036515195242827758193016052246093750e-6", "1.00000077966919198536118506000604021848342587459233214812502825319036185927111842640720441778472762148840769009480654434988580516960635247026640481971290957649218368276357248615028690535272593446475039055115505472342603119011692356413204456935489635677140077206818440909527541341514742179392759484948" }},
+ {{ "7.89159836081502775182242026552614788670325651764869689941406250e-7", "4.816961061463680380256846547126770019531250e2", "1.94147359401180853490618926342983857830809890106752620847948172427377774972592621604834694930262822082783398795004418901297871494637794539318032606545630879764294273346094400196886499691750495365869112152459387957968585556903274684614177896724684391146995388586545846815713970966406314356957705636188e-2940" }},
+ {{ "1.289097083842133870348334312438964843750e5", "6.9303987741382092058195496520056622102856636047363281250e-3", "1.08496647090160629262865176257751429047729744058064486558757367783712447981236338124011887293782800275409466363098994983981904989007840757365461380428739706364354348918768376442904733609028311603151255847131247523710764847675936168535507206845244124708518371354311381017836653040028826211975497871572" }},
+ {{ "1.88979339146257488413205294364161090925335884094238281250e-3", "1.507462797900369366743689170107245445251464843750e1", "8.76918423991144038304021445193438173201942067819279237648900596695575024236585474624026460405210909663314261583560910578839787952809598740673148266220449752385049510413309645447866767727463403580780664879153239139760411591518829772808581212853680494395035365090735562853954119264286528501466090236373e-42" }},
+ {{ "8.41517212362860789198748534545302391052246093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3.64690954096749919699504971504211425781250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.36385641555849335879047779054573450503531219143280186506059811952516602814802026798922317458022305556248077861115239238036534162971730930403784483407045473794360984711531633071954017599185535725837014265828161774595330813847033913388549400091383297967089159291617295023155265969142242902513558326176e3" }},
+ {{ "7.794539153729454028507461771368980407714843750e1", "1.375701859744113164651935221627354621887207031250e1", "1.06022076559461302576262215724290203547920286581395364873074659478022575993646868223512587189711310741927159850526321306597320278985726000202501743927791980296512242522543006053260060771089791556404973296770985910119125940674256012428243689156025466514102435785983398909290409351186888763744330929933e26" }},
+ {{ "1.53996830801468109712004661560058593750e5", "1.5575394558063157535165998979209689423441886901855468750e-2", "1.20447431374301175187511662239775886280442123057569989101048717965641664163683965122530380365781626549245733448495292659434928101251174655724999866929500920292760069066534315397658186379331270528348085084759405281722204998903474609597521346801285181467380964556686904383585877178604246579963496131145" }},
+ {{ "1.58292085642406949773430824279785156250e5", "2.39839658341223938009534322191029787063598632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.95369184630899349835322600435195771430552393938403392920497743251505007693757163085390208500076347439614593692001276141903681987497427879862172599262551403341684739246319058993775975522937386429303489479759146923528741632009619169067978673180741577543638362298805900307916877489621750277562246056785e12" }},
+ {{ "1.3400796278978785267099738121032714843750e4", "1.930784873528596304326221400060603627935051918029785156250e-3", "1.01851774851557016267678896947673493426952146980838508956199625705868791978344101642179134412654468177801448310465798049263061832294449615311708734175434429497593168411288076223275335865898358255932555661831601275564405349791579099870920484601878548075981946266790952650050188664408833668093366337128" }},
+ {{ "6.575650904605106461531249806284904479980468750e1", "2.95349579102368409166956553235650062561035156250e1", "4.92883670959819008737323351550818895693909971573197862669756297233542900030950953480711710193053129535412775508169382249001427538228339649766961919628309117712145393012207284297044617755253176225355208718450804357511545954540599873761726532747435308616642768909463909723766874135347528684022648860560e53" }},
+ {{ "7.73401481707858096115160151384770870208740234375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2.491481202776960799383232370018959045410156250e2", "2.21022119284238444262099118632640694751857489911985882302778583637174384391251394588072250813144879442061174245455228341031066580984347413608919792407019123272438031870871777573323381609534176617167457318208979616222032754767955294734636001910121462806120247278470491361024670390806812831433737112379e221" }},
+ {{ "1.109788988632283901134001347088542388519272208213806152343750e-5", "1.3221937740391638271830743178725242614746093750e1", "3.07947867569658321194458380597181231565685445537647073748124994390202466909582021155440785847623999110729024670271166064504654713592331835440877924887265726281088902886492996205474623955394661696347608605548560131153946508949187941058346142181719469523416895370937975489878692955467549849494731965625e-66" }},
+ {{ "6.01388538493091151515557157836155965924263000488281250e-2", "2.600229311077009085274511224206150927784619852900505065917968750e-6", "9.99992690524283092045041727666257712294170472055655983655789156306985603524706361035867762480294454684826579379760817381252880474747063748101481751389649370586878847928039436815138481244723824252557644191693486953238362877605577315573573222917218930477592061427550313462645068276263623663297863327092e-1" }},
+ {{ "2.155348014323840710737556491949362680315971374511718750e-2", "4.0581281467163221599037115083774551749229431152343750e-2", "8.55799445393602464144976083125961944702079982479924287374752573999342183140040918969698718557087349720031284500593972794455976395816766982409031253828819168807248785638632014800512514311905184872890032777260194266023572565329278809193542262172193713145497824126566400120337339261082686915643720103934e-1" }},
+ // Integer exponents:
+ {{ "1.250e-01", "0.0e+00", "1.0e+00" }},
+ {{ "-1.250e-01", "0.0e+00", "1.0e+00" }},
+ {{ "7.50e-01", "0.0e+00", "1.0e+00" }},
+ {{ "-7.50e-01", "0.0e+00", "1.0e+00" }},
+ {{ "1.0e+00", "0.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "0.0e+00", "1.0e+00" }},
+ {{ "1.250e+00", "0.0e+00", "1.0e+00" }},
+ {{ "-1.250e+00", "0.0e+00", "1.0e+00" }},
+ {{ "5.5250e+01", "0.0e+00", "1.0e+00" }},
+ {{ "-5.5250e+01", "0.0e+00", "1.0e+00" }},
+ {{ "1.250e-01", "1.0e+00", "1.250e-01" }},
+ {{ "-1.250e-01", "1.0e+00", "-1.250e-01" }},
+ {{ "7.50e-01", "1.0e+00", "7.50e-01" }},
+ {{ "-7.50e-01", "1.0e+00", "-7.50e-01" }},
+ {{ "1.0e+00", "1.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "1.0e+00", "-1.0e+00" }},
+ {{ "1.250e+00", "1.0e+00", "1.250e+00" }},
+ {{ "-1.250e+00", "1.0e+00", "-1.250e+00" }},
+ {{ "5.5250e+01", "1.0e+00", "5.5250e+01" }},
+ {{ "-5.5250e+01", "1.0e+00", "-5.5250e+01" }},
+ {{ "1.250e-01", "2.0e+00", "1.56250e-02" }},
+ {{ "-1.250e-01", "2.0e+00", "1.56250e-02" }},
+ {{ "7.50e-01", "2.0e+00", "5.6250e-01" }},
+ {{ "-7.50e-01", "2.0e+00", "5.6250e-01" }},
+ {{ "1.0e+00", "2.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "2.0e+00", "1.0e+00" }},
+ {{ "1.250e+00", "2.0e+00", "1.56250e+00" }},
+ {{ "-1.250e+00", "2.0e+00", "1.56250e+00" }},
+ {{ "5.5250e+01", "2.0e+00", "3.05256250e+03" }},
+ {{ "-5.5250e+01", "2.0e+00", "3.05256250e+03" }},
+ {{ "1.250e-01", "3.0e+00", "1.9531250e-03" }},
+ {{ "-1.250e-01", "3.0e+00", "-1.9531250e-03" }},
+ {{ "7.50e-01", "3.0e+00", "4.218750e-01" }},
+ {{ "-7.50e-01", "3.0e+00", "-4.218750e-01" }},
+ {{ "1.0e+00", "3.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "3.0e+00", "-1.0e+00" }},
+ {{ "1.250e+00", "3.0e+00", "1.9531250e+00" }},
+ {{ "-1.250e+00", "3.0e+00", "-1.9531250e+00" }},
+ {{ "5.5250e+01", "3.0e+00", "1.686540781250e+05" }},
+ {{ "-5.5250e+01", "3.0e+00", "-1.686540781250e+05" }},
+ {{ "1.250e-01", "4.0e+00", "2.441406250e-04" }},
+ {{ "-1.250e-01", "4.0e+00", "2.441406250e-04" }},
+ {{ "7.50e-01", "4.0e+00", "3.16406250e-01" }},
+ {{ "-7.50e-01", "4.0e+00", "3.16406250e-01" }},
+ {{ "1.0e+00", "4.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "4.0e+00", "1.0e+00" }},
+ {{ "1.250e+00", "4.0e+00", "2.441406250e+00" }},
+ {{ "-1.250e+00", "4.0e+00", "2.441406250e+00" }},
+ {{ "5.5250e+01", "4.0e+00", "9.318137816406250e+06" }},
+ {{ "-5.5250e+01", "4.0e+00", "9.318137816406250e+06" }},
+ {{ "1.250e-01", "5.0e+00", "3.05175781250e-05" }},
+ {{ "-1.250e-01", "5.0e+00", "-3.05175781250e-05" }},
+ {{ "7.50e-01", "5.0e+00", "2.3730468750e-01" }},
+ {{ "-7.50e-01", "5.0e+00", "-2.3730468750e-01" }},
+ {{ "1.0e+00", "5.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "5.0e+00", "-1.0e+00" }},
+ {{ "1.250e+00", "5.0e+00", "3.05175781250e+00" }},
+ {{ "-1.250e+00", "5.0e+00", "-3.05175781250e+00" }},
+ {{ "5.5250e+01", "5.0e+00", "5.1482711435644531250e+08" }},
+ {{ "-5.5250e+01", "5.0e+00", "-5.1482711435644531250e+08" }},
+ {{ "1.250e-01", "6.0e+00", "3.8146972656250e-06" }},
+ {{ "-1.250e-01", "6.0e+00", "3.8146972656250e-06" }},
+ {{ "7.50e-01", "6.0e+00", "1.779785156250e-01" }},
+ {{ "-7.50e-01", "6.0e+00", "1.779785156250e-01" }},
+ {{ "1.0e+00", "6.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "6.0e+00", "1.0e+00" }},
+ {{ "1.250e+00", "6.0e+00", "3.8146972656250e+00" }},
+ {{ "-1.250e+00", "6.0e+00", "3.8146972656250e+00" }},
+ {{ "5.5250e+01", "6.0e+00", "2.84441980681936035156250e+10" }},
+ {{ "-5.5250e+01", "6.0e+00", "2.84441980681936035156250e+10" }},
+ {{ "1.250e-01", "7.0e+00", "4.768371582031250e-07" }},
+ {{ "-1.250e-01", "7.0e+00", "-4.768371582031250e-07" }},
+ {{ "7.50e-01", "7.0e+00", "1.33483886718750e-01" }},
+ {{ "-7.50e-01", "7.0e+00", "-1.33483886718750e-01" }},
+ {{ "1.0e+00", "7.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "7.0e+00", "-1.0e+00" }},
+ {{ "1.250e+00", "7.0e+00", "4.768371582031250e+00" }},
+ {{ "-1.250e+00", "7.0e+00", "-4.768371582031250e+00" }},
+ {{ "5.5250e+01", "7.0e+00", "1.571541943267696594238281250e+12" }},
+ {{ "-5.5250e+01", "7.0e+00", "-1.571541943267696594238281250e+12" }},
+ {{ "1.250e-01", "8.0e+00", "5.96046447753906250e-08" }},
+ {{ "-1.250e-01", "8.0e+00", "5.96046447753906250e-08" }},
+ {{ "7.50e-01", "8.0e+00", "1.0011291503906250e-01" }},
+ {{ "-7.50e-01", "8.0e+00", "1.0011291503906250e-01" }},
+ {{ "1.0e+00", "8.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "8.0e+00", "1.0e+00" }},
+ {{ "1.250e+00", "8.0e+00", "5.96046447753906250e+00" }},
+ {{ "-1.250e+00", "8.0e+00", "5.96046447753906250e+00" }},
+ {{ "5.5250e+01", "8.0e+00", "8.682769236554023683166503906250e+13" }},
+ {{ "-5.5250e+01", "8.0e+00", "8.682769236554023683166503906250e+13" }},
+ {{ "1.250e-01", "9.0e+00", "7.4505805969238281250e-09" }},
+ {{ "-1.250e-01", "9.0e+00", "-7.4505805969238281250e-09" }},
+ {{ "7.50e-01", "9.0e+00", "7.50846862792968750e-02" }},
+ {{ "-7.50e-01", "9.0e+00", "-7.50846862792968750e-02" }},
+ {{ "1.0e+00", "9.0e+00", "1.0e+00" }},
+ {{ "-1.0e+00", "9.0e+00", "-1.0e+00" }},
+ {{ "1.250e+00", "9.0e+00", "7.4505805969238281250e+00" }},
+ {{ "-1.250e+00", "9.0e+00", "-7.4505805969238281250e+00" }},
+ {{ "5.5250e+01", "9.0e+00", "4.7972300031960980849494934082031250e+15" }},
+ {{ "-5.5250e+01", "9.0e+00", "-4.7972300031960980849494934082031250e+15" }},
+ {{ "1.250e-01", "1.0e+01", "9.313225746154785156250e-10" }},
+ {{ "-1.250e-01", "1.0e+01", "9.313225746154785156250e-10" }},
+ {{ "7.50e-01", "1.0e+01", "5.6313514709472656250e-02" }},
+ {{ "-7.50e-01", "1.0e+01", "5.6313514709472656250e-02" }},
+ {{ "1.0e+00", "1.0e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.0e+01", "1.0e+00" }},
+ {{ "1.250e+00", "1.0e+01", "9.313225746154785156250e+00" }},
+ {{ "-1.250e+00", "1.0e+01", "9.313225746154785156250e+00" }},
+ {{ "5.5250e+01", "1.0e+01", "2.65046957676584419193459510803222656250e+17" }},
+ {{ "-5.5250e+01", "1.0e+01", "2.65046957676584419193459510803222656250e+17" }},
+ {{ "1.250e-01", "1.10e+01", "1.164153218269348144531250e-10" }},
+ {{ "-1.250e-01", "1.10e+01", "-1.164153218269348144531250e-10" }},
+ {{ "7.50e-01", "1.10e+01", "4.223513603210449218750e-02" }},
+ {{ "-7.50e-01", "1.10e+01", "-4.223513603210449218750e-02" }},
+ {{ "1.0e+00", "1.10e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.10e+01", "-1.0e+00" }},
+ {{ "1.250e+00", "1.10e+01", "1.164153218269348144531250e+01" }},
+ {{ "-1.250e+00", "1.10e+01", "-1.164153218269348144531250e+01" }},
+ {{ "5.5250e+01", "1.10e+01", "1.464384441163128916043863797187805175781250e+19" }},
+ {{ "-5.5250e+01", "1.10e+01", "-1.464384441163128916043863797187805175781250e+19" }},
+ {{ "1.250e-01", "1.20e+01", "1.45519152283668518066406250e-11" }},
+ {{ "-1.250e-01", "1.20e+01", "1.45519152283668518066406250e-11" }},
+ {{ "7.50e-01", "1.20e+01", "3.16763520240783691406250e-02" }},
+ {{ "-7.50e-01", "1.20e+01", "3.16763520240783691406250e-02" }},
+ {{ "1.0e+00", "1.20e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.20e+01", "1.0e+00" }},
+ {{ "1.250e+00", "1.20e+01", "1.45519152283668518066406250e+01" }},
+ {{ "-1.250e+00", "1.20e+01", "1.45519152283668518066406250e+01" }},
+ {{ "5.5250e+01", "1.20e+01", "8.090724037426287261142347479462623596191406250e+20" }},
+ {{ "-5.5250e+01", "1.20e+01", "8.090724037426287261142347479462623596191406250e+20" }},
+ {{ "1.250e-01", "1.30e+01", "1.8189894035458564758300781250e-12" }},
+ {{ "-1.250e-01", "1.30e+01", "-1.8189894035458564758300781250e-12" }},
+ {{ "7.50e-01", "1.30e+01", "2.3757264018058776855468750e-02" }},
+ {{ "-7.50e-01", "1.30e+01", "-2.3757264018058776855468750e-02" }},
+ {{ "1.0e+00", "1.30e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.30e+01", "-1.0e+00" }},
+ {{ "1.250e+00", "1.30e+01", "1.8189894035458564758300781250e+01" }},
+ {{ "-1.250e+00", "1.30e+01", "-1.8189894035458564758300781250e+01" }},
+ {{ "5.5250e+01", "1.30e+01", "4.4701250306780237117811469824030995368957519531250e+22" }},
+ {{ "-5.5250e+01", "1.30e+01", "-4.4701250306780237117811469824030995368957519531250e+22" }},
+ {{ "1.250e-01", "1.40e+01", "2.273736754432320594787597656250e-13" }},
+ {{ "-1.250e-01", "1.40e+01", "2.273736754432320594787597656250e-13" }},
+ {{ "7.50e-01", "1.40e+01", "1.781794801354408264160156250e-02" }},
+ {{ "-7.50e-01", "1.40e+01", "1.781794801354408264160156250e-02" }},
+ {{ "1.0e+00", "1.40e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.40e+01", "1.0e+00" }},
+ {{ "1.250e+00", "1.40e+01", "2.273736754432320594787597656250e+01" }},
+ {{ "-1.250e+00", "1.40e+01", "2.273736754432320594787597656250e+01" }},
+ {{ "5.5250e+01", "1.40e+01", "2.46974407944960810075908370777771249413490295410156250e+24" }},
+ {{ "-5.5250e+01", "1.40e+01", "2.46974407944960810075908370777771249413490295410156250e+24" }},
+ {{ "1.250e-01", "1.50e+01", "2.84217094304040074348449707031250e-14" }},
+ {{ "-1.250e-01", "1.50e+01", "-2.84217094304040074348449707031250e-14" }},
+ {{ "7.50e-01", "1.50e+01", "1.33634610101580619812011718750e-02" }},
+ {{ "-7.50e-01", "1.50e+01", "-1.33634610101580619812011718750e-02" }},
+ {{ "1.0e+00", "1.50e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.50e+01", "-1.0e+00" }},
+ {{ "1.250e+00", "1.50e+01", "2.84217094304040074348449707031250e+01" }},
+ {{ "-1.250e+00", "1.50e+01", "-2.84217094304040074348449707031250e+01" }},
+ {{ "5.5250e+01", "1.50e+01", "1.364533603895908475669393748547186153009533882141113281250e+26" }},
+ {{ "-5.5250e+01", "1.50e+01", "-1.364533603895908475669393748547186153009533882141113281250e+26" }},
+ {{ "1.250e-01", "1.60e+01", "3.5527136788005009293556213378906250e-15" }},
+ {{ "-1.250e-01", "1.60e+01", "3.5527136788005009293556213378906250e-15" }},
+ {{ "7.50e-01", "1.60e+01", "1.0022595757618546485900878906250e-02" }},
+ {{ "-7.50e-01", "1.60e+01", "1.0022595757618546485900878906250e-02" }},
+ {{ "1.0e+00", "1.60e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.60e+01", "1.0e+00" }},
+ {{ "1.250e+00", "1.60e+01", "3.5527136788005009293556213378906250e+01" }},
+ {{ "-1.250e+00", "1.60e+01", "3.5527136788005009293556213378906250e+01" }},
+ {{ "5.5250e+01", "1.60e+01", "7.539048161524894328073400460723203495377674698829650878906250e+27" }},
+ {{ "-5.5250e+01", "1.60e+01", "7.539048161524894328073400460723203495377674698829650878906250e+27" }},
+ {{ "1.250e-01", "1.70e+01", "4.440892098500626161694526672363281250e-16" }},
+ {{ "-1.250e-01", "1.70e+01", "-4.440892098500626161694526672363281250e-16" }},
+ {{ "7.50e-01", "1.70e+01", "7.51694681821390986442565917968750e-03" }},
+ {{ "-7.50e-01", "1.70e+01", "-7.51694681821390986442565917968750e-03" }},
+ {{ "1.0e+00", "1.70e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.70e+01", "-1.0e+00" }},
+ {{ "1.250e+00", "1.70e+01", "4.440892098500626161694526672363281250e+01" }},
+ {{ "-1.250e+00", "1.70e+01", "-4.440892098500626161694526672363281250e+01" }},
+ {{ "5.5250e+01", "1.70e+01", "4.1653241092425041162605537545495699311961652711033821105957031250e+29" }},
+ {{ "-5.5250e+01", "1.70e+01", "-4.1653241092425041162605537545495699311961652711033821105957031250e+29" }},
+ {{ "1.250e-01", "1.80e+01", "5.55111512312578270211815834045410156250e-17" }},
+ {{ "-1.250e-01", "1.80e+01", "5.55111512312578270211815834045410156250e-17" }},
+ {{ "7.50e-01", "1.80e+01", "5.6377101136604323983192443847656250e-03" }},
+ {{ "-7.50e-01", "1.80e+01", "5.6377101136604323983192443847656250e-03" }},
+ {{ "1.0e+00", "1.80e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.80e+01", "1.0e+00" }},
+ {{ "1.250e+00", "1.80e+01", "5.55111512312578270211815834045410156250e+01" }},
+ {{ "-1.250e+00", "1.80e+01", "5.55111512312578270211815834045410156250e+01" }},
+ {{ "5.5250e+01", "1.80e+01", "2.30134157035648352423395594938863738698588131228461861610412597656250e+31" }},
+ {{ "-5.5250e+01", "1.80e+01", "2.30134157035648352423395594938863738698588131228461861610412597656250e+31" }},
+ {{ "1.250e-01", "1.90e+01", "6.9388939039072283776476979255676269531250e-18" }},
+ {{ "-1.250e-01", "1.90e+01", "-6.9388939039072283776476979255676269531250e-18" }},
+ {{ "7.50e-01", "1.90e+01", "4.228282585245324298739433288574218750e-03" }},
+ {{ "-7.50e-01", "1.90e+01", "-4.228282585245324298739433288574218750e-03" }},
+ {{ "1.0e+00", "1.90e+01", "1.0e+00" }},
+ {{ "-1.0e+00", "1.90e+01", "-1.0e+00" }},
+ {{ "1.250e+00", "1.90e+01", "6.9388939039072283776476979255676269531250e+01" }},
+ {{ "-1.250e+00", "1.90e+01", "-6.9388939039072283776476979255676269531250e+01" }},
+ {{ "5.5250e+01", "1.90e+01", "1.271491217621957147139260662037222156309699425037251785397529602050781250e+33" }},
+ {{ "-5.5250e+01", "1.90e+01", "-1.271491217621957147139260662037222156309699425037251785397529602050781250e+33" }},
+ {{ "-1", "18446744073709551615", "-1", }},
+ {{ "-1", "18446744073709551614", "1", }},
+ }};
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = pow(T(data[k][0]), T(data[k][1]));
+ T e = relative_error(val, T(data[k][2]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = pow(T(data[k][0]), -T(data[k][1]));
+ e = relative_error(val, T(1/T(data[k][2])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+ //
+ // Special cases come last:
+ //
+ BOOST_CHECK_EQUAL(pow(T(0), T(0)), 1);
+ BOOST_CHECK_EQUAL(pow(T(0), 0), 1);
+ BOOST_CHECK_EQUAL(pow(T(0), T(2)), 0);
+ BOOST_CHECK_EQUAL(pow(T(0), 2), 0);
+ BOOST_CHECK_EQUAL(pow(T(1), T(0)), 1);
+ BOOST_CHECK_EQUAL(pow(T(1), 0), 1);
+ BOOST_CHECK_EQUAL(pow(T(1), T(2)), 1);
+ BOOST_CHECK_EQUAL(pow(T(1), 2), 1);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_rat_float_interconv.cpp b/libs/multiprecision/test/test_rat_float_interconv.cpp
new file mode 100644
index 0000000000..618797c2ff
--- /dev/null
+++ b/libs/multiprecision/test/test_rat_float_interconv.cpp
@@ -0,0 +1,260 @@
+// 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
+
+#if defined(TEST1) || defined(TEST2) || defined(TEST3) || defined(TEST4)
+#include <boost/multiprecision/cpp_bin_float.hpp>
+#include <boost/multiprecision/cpp_int.hpp>
+#else
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#include <boost/math/special_functions/next.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;
+};
+
+template <class T>
+struct exponent_type
+{
+ typedef int type;
+};
+template <class T, boost::multiprecision::expression_template_option ET>
+struct exponent_type<boost::multiprecision::number<T, ET> >
+{
+ typedef typename T::exponent_type type;
+};
+
+template <class T>
+T generate_random_float()
+{
+ BOOST_MATH_STD_USING
+ typedef typename exponent_type<T>::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 const int max_exponent_value = (std::min)(static_cast<int>(std::numeric_limits<T>::max_exponent - std::numeric_limits<T>::digits - 20), 2000);
+ static boost::random::uniform_int_distribution<e_type> ui(0, max_exponent_value);
+ return ldexp(val, ui(gen));
+}
+
+template <class Float, class Rat>
+void do_round_trip(const Float& val)
+{
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+ BOOST_MATH_STD_USING
+ Rat rat(val);
+ Float new_f(rat);
+ BOOST_CHECK_EQUAL(val, new_f);
+ //
+ // Try adding or subtracting an insignificant amount
+ // (0.25ulp) from rat and check that it rounds to the same value:
+ //
+ typename exponent_type<Float>::type e;
+ Float t = frexp(val, &e);
+ (void)t; // warning suppression
+ e -= std::numeric_limits<Float>::digits + 2;
+ BOOST_ASSERT(val == (val + ldexp(Float(1), e)));
+ Rat delta, rounded;
+ typedef typename boost::multiprecision::component_type<Rat>::type i_type;
+ i_type i(1);
+ i <<= (e < 0 ? -e : e);
+ if(e > 0)
+ delta.assign(i);
+ else
+ delta = Rat(i_type(1), i);
+ rounded = rat + delta;
+ new_f = static_cast<Float>(rounded);
+ BOOST_CHECK_EQUAL(val, new_f);
+ rounded = rat - delta;
+ new_f = static_cast<Float>(rounded);
+ BOOST_CHECK_EQUAL(val, new_f);
+
+ delta /= 2;
+ rounded = rat + delta;
+ new_f = static_cast<Float>(rounded);
+ BOOST_CHECK_EQUAL(val, new_f);
+ rounded = rat - delta;
+ new_f = static_cast<Float>(rounded);
+ BOOST_CHECK_EQUAL(val, new_f);
+
+ delta /= 2;
+ rounded = rat + delta;
+ new_f = static_cast<Float>(rounded);
+ BOOST_CHECK_EQUAL(val, new_f);
+ rounded = rat - delta;
+ new_f = static_cast<Float>(rounded);
+ BOOST_CHECK_EQUAL(val, new_f);
+#endif
+}
+
+template <class Float, class Rat>
+void test_round_trip()
+{
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+ std::cout << "Testing types " << typeid(Float).name() << " <<==>> " << typeid(Rat).name() << std::endl;
+ std::cout << "digits = " << std::numeric_limits<Float>::digits << std::endl;
+ std::cout << "digits10 = " << std::numeric_limits<Float>::digits10 << std::endl;
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ std::cout << "max_digits10 = " << std::numeric_limits<Float>::max_digits10 << std::endl;
+#endif
+
+ stopwatch<boost::chrono::high_resolution_clock> w;
+
+ int count = 0;
+
+ while(boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 200)
+ {
+ Float val = generate_random_float<Float>();
+ do_round_trip<Float, Rat>(val);
+ do_round_trip<Float, Rat>(Float(-val));
+ do_round_trip<Float, Rat>(Float(1/val));
+ do_round_trip<Float, Rat>(Float(-1/val));
+ count += 4;
+ if(boost::detail::test_errors() > 100)
+ break;
+ }
+
+ std::cout << "Execution time = " << boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() << "s" << std::endl;
+ std::cout << "Total values tested: " << count << std::endl;
+#endif
+}
+
+template <class Int>
+Int generate_random_int()
+{
+ static boost::random::mt19937 gen;
+ static boost::random::uniform_int_distribution<boost::random::mt19937::result_type> d(1, 20);
+
+ int lim;
+ Int cppi(0);
+
+ lim = d(gen);
+
+ for(int i = 0; i < lim; ++i)
+ {
+ cppi *= (gen.max)();
+ cppi += gen();
+ }
+ return cppi;
+}
+
+template <class Float, class Rat>
+void test_random_rationals()
+{
+#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
+ std::cout << "Testing types " << typeid(Float).name() << " <<==>> " << typeid(Rat).name() << std::endl;
+ std::cout << "digits = " << std::numeric_limits<Float>::digits << std::endl;
+ std::cout << "digits10 = " << std::numeric_limits<Float>::digits10 << std::endl;
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ std::cout << "max_digits10 = " << std::numeric_limits<Float>::max_digits10 << std::endl;
+#endif
+
+ typedef typename boost::multiprecision::component_type<Rat>::type i_type;
+ stopwatch<boost::chrono::high_resolution_clock> w;
+
+ int count = 0;
+
+ while(boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() < 200)
+ {
+ Rat rat(generate_random_int<i_type>(), generate_random_int<i_type>());
+ Float f(rat);
+ Rat new_rat(f); // rounded value
+ int c = new_rat.compare(rat);
+ if(c < 0)
+ {
+ // If f was rounded down, next float up must be above the original value:
+ f = boost::math::float_next(f);
+ new_rat.assign(f);
+ BOOST_CHECK(new_rat >= rat);
+ }
+ else if(c > 0)
+ {
+ // If f was rounded up, next float down must be below the original value:
+ f = boost::math::float_prior(f);
+ new_rat.assign(f);
+ BOOST_CHECK(new_rat <= rat);
+ }
+ else
+ {
+ // Values were equal... nothing to test.
+ }
+ if(boost::detail::test_errors() > 100)
+ break;
+ }
+
+ std::cout << "Execution time = " << boost::chrono::duration_cast<boost::chrono::duration<double> >(w.elapsed()).count() << "s" << std::endl;
+ std::cout << "Total values tested: " << count << std::endl;
+#endif
+}
+
+int main()
+{
+ using namespace boost::multiprecision;
+#if defined(TEST1) && !defined(BOOST_MSVC)
+ test_round_trip<number<cpp_bin_float<113, digit_base_2, void, boost::int16_t> >, cpp_rational>();
+#elif defined(TEST2)
+ test_round_trip<double, cpp_rational>();
+#elif defined(TEST3) && !defined(BOOST_MSVC)
+ test_random_rationals<number<cpp_bin_float<113, digit_base_2, void, boost::int16_t> >, cpp_rational>();
+#elif defined(TEST4)
+ test_random_rationals<double, cpp_rational>();
+#elif defined(TEST5)
+ // This does not work: gmp does not correctly round integer to float or
+ // rational to float conversions:
+ test_round_trip<double, mpq_rational>();
+#elif defined(TEST6)
+ test_round_trip<mpfr_float_100, mpq_rational>();
+#elif defined(TEST7)
+ test_random_rationals<mpfr_float_100, mpq_rational>();
+#elif defined(TEST8)
+ test_random_rationals<double, mpq_rational>();
+#endif
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_rational_io.cpp b/libs/multiprecision/test/test_rational_io.cpp
new file mode 100644
index 0000000000..05e5a9ba52
--- /dev/null
+++ b/libs/multiprecision/test/test_rational_io.cpp
@@ -0,0 +1,146 @@
+// Copyright John Maddock 2011.
+
+// 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
+
+#if !defined(TEST_MPQ) && !defined(TEST_TOMMATH) && !defined(TEST_CPP_INT)
+# define TEST_MPQ
+# define TEST_TOMMATH
+# define TEST_CPP_INT
+
+#ifdef _MSC_VER
+#pragma message("CAUTION!!: No backend type specified so testing everything.... this will take some time!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPQ)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_TOMMATH)
+#include <boost/multiprecision/tommath.hpp>
+#endif
+#ifdef TEST_CPP_INT
+#include <boost/multiprecision/cpp_int.hpp>
+#endif
+
+#include <boost/algorithm/string/case_conv.hpp>
+#include <boost/random/mersenne_twister.hpp>
+#include <boost/random/uniform_int.hpp>
+#include <boost/multiprecision/rational_adaptor.hpp>
+#include "test.hpp"
+#include <iostream>
+#include <iomanip>
+
+template <class T>
+T generate_random()
+{
+ typedef typename boost::multiprecision::component_type<T>::type int_type;
+ static boost::random::uniform_int_distribution<unsigned> ui(0, 20);
+ static boost::random::mt19937 gen;
+ int_type val = int_type(gen());
+ unsigned lim = ui(gen);
+ for(unsigned i = 0; i < lim; ++i)
+ {
+ val *= (gen.max)();
+ val += gen();
+ }
+ int_type denom = int_type(gen());
+ lim = ui(gen);
+ for(unsigned i = 0; i < lim; ++i)
+ {
+ denom *= (gen.max)();
+ denom += gen();
+ }
+ return T(val, denom);
+}
+
+template <class T>
+void do_round_trip(const T& val, std::ios_base::fmtflags f, const boost::mpl::true_&)
+{
+ std::stringstream ss;
+#ifndef BOOST_NO_CXX11_NUMERIC_LIMITS
+ ss << std::setprecision(std::numeric_limits<T>::max_digits10);
+#else
+ ss << std::setprecision(std::numeric_limits<T>::digits10 + 5);
+#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, std::ios_base::fmtflags f, const boost::mpl::false_&)
+{
+ std::stringstream ss;
+ ss << std::setprecision(std::numeric_limits<T>::digits10 + 4);
+ ss.flags(f);
+ ss << val;
+ T new_val;
+ ss >> new_val;
+ BOOST_CHECK_EQUAL(new_val, val);
+}
+
+template <class T>
+struct is_number : public boost::mpl::false_{};
+template <class T>
+struct is_number<boost::multiprecision::number<T> > : public boost::mpl::true_{};
+
+template <class T>
+void do_round_trip(const T& val, std::ios_base::fmtflags f)
+{
+ do_round_trip(val, f, is_number<T>());
+}
+
+template <class T>
+void do_round_trip(const T& val)
+{
+ do_round_trip(val, std::ios_base::fmtflags(0));
+ if(val >= 0)
+ {
+ do_round_trip(val, std::ios_base::fmtflags(std::ios_base::showbase|std::ios_base::hex));
+ do_round_trip(val, std::ios_base::fmtflags(std::ios_base::showbase|std::ios_base::oct));
+ }
+}
+
+template <class T>
+void test_round_trip()
+{
+ for(unsigned i = 0; i < 1000; ++i)
+ {
+ T val = generate_random<T>();
+ do_round_trip(val);
+ do_round_trip(T(-val));
+ }
+}
+
+int main()
+{
+#ifdef TEST_MPQ
+ test_round_trip<boost::multiprecision::mpq_rational>();
+ test_round_trip<boost::rational<boost::multiprecision::mpz_int> >();
+ test_round_trip<boost::multiprecision::number<boost::multiprecision::rational_adaptor<boost::multiprecision::gmp_int> > >();
+#endif
+#ifdef TEST_TOMMATH
+ test_round_trip<boost::rational<boost::multiprecision::tom_int> >();
+ test_round_trip<boost::multiprecision::tom_rational >();
+#endif
+#ifdef TEST_CPP_INT
+ test_round_trip<boost::rational<boost::multiprecision::cpp_int> >();
+ test_round_trip<boost::multiprecision::cpp_rational >();
+#endif
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/test_round.cpp b/libs/multiprecision/test/test_round.cpp
new file mode 100644
index 0000000000..5009dd06f2
--- /dev/null
+++ b/libs/multiprecision/test/test_round.cpp
@@ -0,0 +1,468 @@
+// (C) Copyright John Maddock 2007.
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#include <boost/math/special_functions/round.hpp>
+#include <boost/math/special_functions/trunc.hpp>
+#include <boost/math/special_functions/modf.hpp>
+#include <boost/math/special_functions/sign.hpp>
+#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)\
+ && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#ifdef TEST_MPFR_50
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#ifdef TEST_MPFI_50
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#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
+
+#ifdef BOOST_MSVC
+#pragma warning(disable:4127)
+#endif
+
+boost::mt19937 rng;
+
+template <class T>
+T get_random()
+{
+ //
+ // Fill all the bits in T with random values,
+ // likewise set the exponent to a random value
+ // that will still fit inside a T, and always
+ // have a remainder as well as an integer part.
+ //
+ int bits = boost::math::tools::digits<T>();
+ int shift = 0;
+ int exponent = rng() % (bits - 4);
+ T result = 0;
+ while(bits > 0)
+ {
+ result += ldexp(static_cast<T>(rng()), shift);
+ shift += std::numeric_limits<int>::digits;
+ bits -= std::numeric_limits<int>::digits;
+ }
+ return rng() & 1u ? T(-ldexp(frexp(result, &bits), exponent)) : T(ldexp(frexp(result, &bits), exponent));
+}
+
+template <class T, class U>
+typename boost::disable_if_c<boost::multiprecision::is_interval_number<T>::value>::type check_within_half(T a, U u)
+{
+ BOOST_MATH_STD_USING
+ if(fabs(a-u) > 0.5f)
+ {
+ BOOST_ERROR("Rounded result differed by more than 0.5 from the original");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+ if((fabs(a - u) == 0.5f) && (fabs(static_cast<T>(u)) < fabs(a)))
+ {
+ BOOST_ERROR("Rounded result was towards zero with boost::round");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+}
+template <class T, class U>
+typename boost::enable_if_c<boost::multiprecision::is_interval_number<T>::value>::type check_within_half(T a, U u)
+{
+ BOOST_MATH_STD_USING
+ if(upper(T(fabs(a-u))) > 0.5f)
+ {
+ BOOST_ERROR("Rounded result differed by more than 0.5 from the original");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+ if((upper(T(fabs(a - u))) == 0.5f) && (fabs(static_cast<T>(u)) < fabs(a)))
+ {
+ BOOST_ERROR("Rounded result was towards zero with boost::round");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+}
+
+//
+// We may not have an abs overload for long long so provide a fall back:
+//
+inline unsigned safe_abs(int const& v)
+{
+ return v < 0 ? static_cast<unsigned>(1u) + static_cast<unsigned>(-(v+1)) : v;
+}
+inline unsigned long safe_abs(long const& v)
+{
+ return v < 0 ? static_cast<unsigned long>(1u) + static_cast<unsigned long>(-(v+1)) : v;
+}
+inline unsigned long long safe_abs(long long const& v)
+{
+ return v < 0 ? static_cast<unsigned long long>(1u) + static_cast<unsigned long long>(-(v+1)) : v;
+}
+template <class T>
+inline typename boost::disable_if_c<boost::is_integral<T>::value, T>::type safe_abs(T const& v)
+{
+ return v < 0 ? -v : v;
+}
+
+template <class T, class U>
+void check_trunc_result(T a, U u)
+{
+ BOOST_MATH_STD_USING
+ if(fabs(a-u) >= 1)
+ {
+ BOOST_ERROR("Rounded result differed by more than 1 from the original");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+ if(abs(a) < safe_abs(u))
+ {
+ BOOST_ERROR("Truncated result had larger absolute value than the original");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+ if(fabs(static_cast<T>(u)) > fabs(a))
+ {
+ BOOST_ERROR("Rounded result was away from zero with boost::trunc");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << u << std::endl;
+ }
+}
+
+template <class T, class U>
+void check_modf_result(T a, T fract, U ipart)
+{
+ BOOST_MATH_STD_USING
+ if(fract + ipart != a)
+ {
+ BOOST_ERROR("Fractional and integer results do not add up to the original value");
+ std::cerr << "Values were: " << std::setprecision(35) << " "
+ << std::left << a << ipart << " " << fract << std::endl;
+ }
+ if((boost::math::sign(a) != boost::math::sign(fract)) && boost::math::sign(fract))
+ {
+ BOOST_ERROR("Original and fractional parts have differing signs");
+ std::cerr << "Values were: " << std::setprecision(35) << " "
+ << std::left << a << ipart << " " << fract << std::endl;
+ }
+ if((boost::math::sign(a) != boost::math::sign(ipart)) && boost::math::sign(ipart))
+ {
+ BOOST_ERROR("Original and integer parts have differing signs");
+ std::cerr << "Values were: " << std::setprecision(35) << " "
+ << std::left << a << ipart << " " << ipart << std::endl;
+ }
+ if(fabs(a-ipart) >= 1)
+ {
+ BOOST_ERROR("Rounded result differed by more than 1 from the original");
+ std::cerr << "Values were: " << std::setprecision(35) << std::setw(40)
+ << std::left << a << ipart << std::endl;
+ }
+}
+
+template <class T>
+void test()
+{
+ BOOST_MATH_STD_USING
+
+ for(int i = 0; i < 1000; ++i)
+ {
+ T arg = get_random<T>();
+ T r = round(arg);
+ check_within_half(arg, r);
+ BOOST_TEST(r == round(arg + 0));
+ r = trunc(arg);
+ check_trunc_result(arg, r);
+ BOOST_TEST(r == trunc(arg + 0));
+ T frac = modf(arg, &r);
+ check_modf_result(arg, frac, r);
+
+ if(abs(r) < (std::numeric_limits<int>::max)())
+ {
+ int i = iround(arg);
+ check_within_half(arg, i);
+ BOOST_TEST(i == iround(arg + 0));
+ i = itrunc(arg);
+ check_trunc_result(arg, i);
+ BOOST_TEST(i == itrunc(arg + 0));
+ r = modf(arg, &i);
+ check_modf_result(arg, r, i);
+ }
+ if(abs(r) < (std::numeric_limits<long>::max)())
+ {
+ long l = lround(arg);
+ check_within_half(arg, l);
+ BOOST_TEST(l == lround(arg + 0));
+ l = ltrunc(arg);
+ check_trunc_result(arg, l);
+ BOOST_TEST(l == ltrunc(arg + 0));
+ r = modf(arg, &l);
+ check_modf_result(arg, r, l);
+ }
+
+#ifdef BOOST_HAS_LONG_LONG
+ if(abs(r) < (std::numeric_limits<boost::long_long_type>::max)())
+ {
+ boost::long_long_type ll = llround(arg);
+ check_within_half(arg, ll);
+ BOOST_TEST(ll == llround(arg + 0));
+ ll = lltrunc(arg);
+ check_trunc_result(arg, ll);
+ BOOST_TEST(ll == lltrunc(arg + 0));
+ r = modf(arg, &ll);
+ check_modf_result(arg, r, ll);
+ }
+#endif
+ }
+ //
+ // Test boundary cases:
+ //
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<int>::digits)
+ {
+ int si = iround(static_cast<T>((std::numeric_limits<int>::max)()));
+ check_within_half(static_cast<T>((std::numeric_limits<int>::max)()), si);
+ BOOST_TEST(si == iround(static_cast<T>((std::numeric_limits<int>::max)()) + 0));
+ si = iround(static_cast<T>((std::numeric_limits<int>::min)()));
+ check_within_half(static_cast<T>((std::numeric_limits<int>::min)()), si);
+ BOOST_TEST(si == iround(static_cast<T>((std::numeric_limits<int>::min)()) + 0));
+ si = itrunc(static_cast<T>((std::numeric_limits<int>::max)()));
+ check_trunc_result(static_cast<T>((std::numeric_limits<int>::max)()), si);
+ BOOST_TEST(si == itrunc(static_cast<T>((std::numeric_limits<int>::max)()) + 0));
+ si = itrunc(static_cast<T>((std::numeric_limits<int>::min)()));
+ check_trunc_result(static_cast<T>((std::numeric_limits<int>::min)()), si);
+ BOOST_TEST(si == itrunc(static_cast<T>((std::numeric_limits<int>::min)()) + 0));
+
+ si = iround(static_cast<T>((std::numeric_limits<int>::max)() - 1));
+ check_within_half(static_cast<T>((std::numeric_limits<int>::max)() - 1), si);
+ si = iround(static_cast<T>((std::numeric_limits<int>::min)() + 1));
+ check_within_half(static_cast<T>((std::numeric_limits<int>::min)() + 1), si);
+ si = itrunc(static_cast<T>((std::numeric_limits<int>::max)() - 1));
+ check_trunc_result(static_cast<T>((std::numeric_limits<int>::max)() - 1), si);
+ si = itrunc(static_cast<T>((std::numeric_limits<int>::min)() + 1));
+ check_trunc_result(static_cast<T>((std::numeric_limits<int>::min)() + 1), si);
+ }
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<long>::digits)
+ {
+ long k = lround(static_cast<T>((std::numeric_limits<long>::max)()));
+ check_within_half(static_cast<T>((std::numeric_limits<long>::max)()), k);
+ BOOST_TEST(k == lround(static_cast<T>((std::numeric_limits<long>::max)()) + 0));
+ k = lround(static_cast<T>((std::numeric_limits<long>::min)()));
+ check_within_half(static_cast<T>((std::numeric_limits<long>::min)()), k);
+ BOOST_TEST(k == lround(static_cast<T>((std::numeric_limits<long>::min)()) + 0));
+ k = ltrunc(static_cast<T>((std::numeric_limits<long>::max)()));
+ check_trunc_result(static_cast<T>((std::numeric_limits<long>::max)()), k);
+ BOOST_TEST(k == ltrunc(static_cast<T>((std::numeric_limits<long>::max)()) + 0));
+ k = ltrunc(static_cast<T>((std::numeric_limits<long>::min)()));
+ check_trunc_result(static_cast<T>((std::numeric_limits<long>::min)()), k);
+ BOOST_TEST(k == ltrunc(static_cast<T>((std::numeric_limits<long>::min)()) + 0));
+
+ k = lround(static_cast<T>((std::numeric_limits<long>::max)() - 1));
+ check_within_half(static_cast<T>((std::numeric_limits<long>::max)() - 1), k);
+ k = lround(static_cast<T>((std::numeric_limits<long>::min)() + 1));
+ check_within_half(static_cast<T>((std::numeric_limits<long>::min)() + 1), k);
+ k = ltrunc(static_cast<T>((std::numeric_limits<long>::max)() - 1));
+ check_trunc_result(static_cast<T>((std::numeric_limits<long>::max)() - 1), k);
+ k = ltrunc(static_cast<T>((std::numeric_limits<long>::min)() + 1));
+ check_trunc_result(static_cast<T>((std::numeric_limits<long>::min)() + 1), k);
+ }
+#ifndef BOOST_NO_LONG_LONG
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<boost::long_long_type>::digits)
+ {
+ boost::long_long_type j = llround(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)()));
+ check_within_half(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)()), j);
+ BOOST_TEST(j == llround(static_cast<T>((std::numeric_limits<long long>::max)()) + 0));
+ j = llround(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)()));
+ check_within_half(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)()), j);
+ BOOST_TEST(j == llround(static_cast<T>((std::numeric_limits<long long>::min)()) + 0));
+ j = lltrunc(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)()));
+ check_trunc_result(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)()), j);
+ BOOST_TEST(j == lltrunc(static_cast<T>((std::numeric_limits<long long>::max)()) + 0));
+ j = lltrunc(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)()));
+ check_trunc_result(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)()), j);
+ BOOST_TEST(j == lltrunc(static_cast<T>((std::numeric_limits<long long>::min)()) + 0));
+
+ j = llround(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)() - 1));
+ check_within_half(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)() - 1), j);
+ j = llround(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)() + 1));
+ check_within_half(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)() + 1), j);
+ j = lltrunc(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)() - 1));
+ check_trunc_result(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)() - 1), j);
+ j = lltrunc(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)() + 1));
+ check_trunc_result(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)() + 1), j);
+ }
+#endif
+ //
+ // Finish off by testing the error handlers:
+ //
+ BOOST_CHECK_THROW(static_cast<T>(iround(static_cast<T>(1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(iround(static_cast<T>(-1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lround(static_cast<T>(1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lround(static_cast<T>(-1e20))), boost::math::rounding_error);
+#ifdef BOOST_HAS_LONG_LONG
+ BOOST_CHECK_THROW(static_cast<T>(llround(static_cast<T>(1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(llround(static_cast<T>(-1e20))), boost::math::rounding_error);
+#endif
+ if(std::numeric_limits<T>::has_infinity)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(round(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(iround(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(iround(-std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lround(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lround(-std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ #ifdef BOOST_HAS_LONG_LONG
+ BOOST_CHECK_THROW(static_cast<T>(llround(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(llround(-std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ #endif
+ }
+ if(std::numeric_limits<T>::has_quiet_NaN)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(round(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(iround(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lround(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ #ifdef BOOST_HAS_LONG_LONG
+ BOOST_CHECK_THROW(static_cast<T>(llround(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ #endif
+ }
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(static_cast<T>(1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(static_cast<T>(-1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(static_cast<T>(1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(static_cast<T>(-1e20))), boost::math::rounding_error);
+#ifdef BOOST_HAS_LONG_LONG
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(static_cast<T>(1e20))), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(static_cast<T>(-1e20))), boost::math::rounding_error);
+#endif
+ if(std::numeric_limits<T>::has_infinity)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(trunc(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(-std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(-std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ #ifdef BOOST_HAS_LONG_LONG
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(-std::numeric_limits<T>::infinity())), boost::math::rounding_error);
+ #endif
+ }
+ if(std::numeric_limits<T>::has_quiet_NaN)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(trunc(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ #ifdef BOOST_HAS_LONG_LONG
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(std::numeric_limits<T>::quiet_NaN())), boost::math::rounding_error);
+ #endif
+ }
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<int>::digits)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(static_cast<T>((std::numeric_limits<int>::max)()) + 1)), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(itrunc(static_cast<T>((std::numeric_limits<int>::min)()) - 1)), boost::math::rounding_error);
+ }
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<long>::digits)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(static_cast<T>((std::numeric_limits<long>::max)()) + 1)), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(ltrunc(static_cast<T>((std::numeric_limits<long>::min)()) - 1)), boost::math::rounding_error);
+ }
+#ifndef BOOST_NO_LONG_LONG
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<boost::long_long_type>::digits)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)()) + 1)), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lltrunc(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)()) - 1)), boost::math::rounding_error);
+ }
+#endif
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<int>::digits)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(iround(static_cast<T>((std::numeric_limits<int>::max)()) + 1)), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(iround(static_cast<T>((std::numeric_limits<int>::min)()) - 1)), boost::math::rounding_error);
+ }
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<long>::digits)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(lround(static_cast<T>((std::numeric_limits<long>::max)()) + 1)), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(lround(static_cast<T>((std::numeric_limits<long>::min)()) - 1)), boost::math::rounding_error);
+ }
+#ifndef BOOST_NO_LONG_LONG
+ if(std::numeric_limits<T>::digits >= std::numeric_limits<boost::long_long_type>::digits)
+ {
+ BOOST_CHECK_THROW(static_cast<T>(llround(static_cast<T>((std::numeric_limits<boost::long_long_type>::max)()) + 1)), boost::math::rounding_error);
+ BOOST_CHECK_THROW(static_cast<T>(llround(static_cast<T>((std::numeric_limits<boost::long_long_type>::min)()) - 1)), boost::math::rounding_error);
+ }
+#endif
+}
+
+int main()
+{
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ 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
+#ifdef TEST_FLOAT128
+ test<boost::multiprecision::float128>();
+#endif
+ return boost::report_errors();
+}
+
+
diff --git a/libs/multiprecision/test/test_sin.cpp b/libs/multiprecision/test/test_sin.cpp
new file mode 100644
index 0000000000..bfdb9ff34f
--- /dev/null
+++ b/libs/multiprecision/test/test_sin.cpp
@@ -0,0 +1,351 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 101u> data =
+ {{
+ "-9.71360659712083391437631022096936715962104815777147739346439739644168480837178969413799829610404829247283169084501281105e-1",
+ "-5.95431113317256105006804890684659010940293672390817519158205264611725147142085353698349092164137652363446368483953564682e-1",
+ "5.09924118934356013545988500545586843463766955556781588535384546070893806324487181574368899833574915659357543038822935347e-1",
+ "9.90602974910637417521410554344955057938063175873799034495811832851567842600306335485818201417146475654562543760051881571e-1",
+ "2.57755634110962773819397192502372718147953063328591480930319110437537556577887190430547163274290595074462686853519200826e-1",
+ "-7.90852129665907861812449876176102241731921451584589870529143390612597378289323905030142878920134443274067663564142249906e-1",
+ "-8.70636054394434218558219672958497111094237434037462776135170928197514857325641761722162169311905082223410873872693125021e-1",
+ "1.16142192225871586802402588799179588339908282696987123538816621894316618250692422106879105583060486278819650782761165055e-1",
+ "9.60641850565339311654365605083646127348817546384991780755200411966145627086231307074524787693440076802209868233548778731e-1",
+ "6.28318825240308217440049590303028869715272770671179428040549526344092598897275498972932981684079339892035243316790587027e-1",
+ "-4.73718579778960595001132927360485548840577209745936881040433718918629103032639945353908537818475936329314134212199346978e-1",
+ "-9.95432766494621395340223548609251497842694553405493731879049259799325119533316838972006879914623359183523219011870805961e-1",
+ "-2.97704078652633309130390182393607392013126109733352620573058826659738026681661456497779386104992235762190242017128767206e-1",
+ "7.64723391125286889782047394187107836056829439952009227196240883193721606229047061163517791688110517783506991004016374431e-1",
+ "8.90335717074674250432504838435892622513509178529392798127561987551398090841490265311069534613651712468228001675091153605e-1",
+ "-7.47469618974513669394515485690188234127771130501791709462887130373371023385813212165673231177548426835629029005547008861e-2",
+ "-9.48261778982069330544079494960981900232314056127899219497335245577354566418258722147558010380033694835705634428764954401e-1",
+ "-6.60119969404606610211922488494059074732492583049845598285779387022002845776084527598443564095143849120847643366330179739e-1",
+ "4.36693827009658961576344650626557410722590226545637608661764593658572210930294024902150766064738444736422263939746970132e-1",
+ "9.98541130824430070642243744636010968399851408459030982248969144276197147611376115185206245742327729890090526273555800490e-1",
+ "3.37137695943362070360548307779555944485385294617304662646987679063953108310365389494460188124285214040163147170304540339e-1",
+ "-7.37272196933518190054375156317136276073182897209685319124536092629865074949247291797880288692223977281455156619510259042e-1",
+ "-9.08495699506960201290293288218820500948312195353635174830883006841931398581001427066173033535720385301624330783999899511e-1",
+ "3.32224697427099307204044509056982627738295866011152619834749776109067529453431741767996787924292629814505731320175556430e-2",
+ "9.34241854135599266375493853147210486293657026766576383005045752264274587199837314096798394557243705656211732557069413970e-1",
+ "6.90779551281016826784976005137338585011513089446563025258584317423906941741640583083551185645679047405447557105684226754e-1",
+ "-3.98913888475082839741071010629509607776766095858433376450534753556286110518195743624946499527251336022805096741714382999e-1",
+ "-9.99922692526403520897313527841668431397204867244750030781062964701898557028332255650446046614062333174844253917288331438e-1",
+ "-3.75988292423704532504216998833472116186771022412627192871974303806891208635376610998425108046077306043945435504842144332e-1",
+ "7.08546019140379445669962535829318394094758212505515423960726677977484727061149949358051741627739138448760095710063342839e-1",
+ "9.25084597170819667485373176055260044057716794391569156042799693611964098948722923916237050181882167134906470192542857299e-1",
+ "8.35947487571472125423673177137150279693224632368449469153892167972732129345714981936363891382927399742266512920038864004e-3",
+ "-9.18606321039298722214219289469027246078943851192917449117591801249272620492502932760495762195965214412326830491755901723e-1",
+ "-7.20244550473164405555518647469765134103488938825118543602681358279149452868549672550326500728323814331193184035259160414e-1",
+ "3.60444097985855629825697367385029316833790934188475151408740160657889784929257301330229580694580194294034115152177674537e-1",
+ "9.99575062430677992414643463029115424067356090568060307410717467085018957489304987413609313388961297483138454662118061646e-1",
+ "4.14188682766963304833862149212585018360876819555612195218295874225032162838027842720351664698295767693697842043579048219e-1",
+ "-6.78594534657286312316409269272929566493548786915986771929001823358451551885758307761400157853363173388867780400090112946e-1",
+ "-9.40073722462713282312837596921874850901167502371739429501407718251639587081137893231736511487958940802467918593519005653e-1",
+ "-4.99269632411748222821310824324558181913141458235676771744322439351386139493233963671531219603373207564905654915871172017e-2",
+ "9.01382218619061521491363679812206948759377256420255657634443270431495336446996377562469573885297156497163691224107230524e-1",
+ "7.48464012406957686684753003872919309910943477238245908909177973105841950470333390670719219379167068809799710776770734833e-1",
+ "-3.21350982331168500558883709193541886146178412146971245706190880193067020283050714591560922441331235332970961845050217575e-1",
+ "-9.97498841702838239659412520756556451623238132913559678626409839807628110807613195403956929948379909495726426243705794281e-1",
+ "-4.51672806064485973599605876288778011355969815150135195358334589946828629430271875346142404286368814526016297993583170592e-1",
+ "6.47469539349743367777844577149239337681085253251300560380374646379682072633705733561446355539618404778987844138766238618e-1",
+ "9.53437154306238691456130012770111782377503876017231780889420296856266641153714110120975772709549811845909173386912105405e-1",
+ "9.14081116365893107669584386407698218216480671014671832303147213716318806206478591012619084058741626713939006968851852873e-2",
+ "-8.82599332954202005638662236444958997569939600897565089251125658458817750203393016337212996488633688567918453254294067039e-1",
+ "-7.75389136447631492669594511701990356678047393586968390929688701894781023967621486245394406725747074772996680491766725244e-1",
+ "0",
+ "9.21877670451674413245307018032333288624288893879527153976730741889055419244554390143014969580425598422296522787223865492e-1",
+ "7.14420247379307162288182477560228852605155250738051326022559557923361829606843109334201812861061126243914893718333771523e-1",
+ "-3.68229061503980158220203193441625324286779814470455045264018328963975686564161509474566417124652588774892207244798533238e-1",
+ "-9.99783810945210864429782835782052003838999970584938136857974918523615732378678641269300999292060748749245257644847852880e-1",
+ "-4.06565491434208630299086167510578859920684132980243005899494321151205958987020300473732138517681916554185382528057861016e-1",
+ "6.84710967469127345624707128760638003100107237269026812211460044517359789036617753689648451870956943571853410785082804567e-1",
+ "9.37190534692875414284475879207349713030454322911019395907169592096165438597133651606167760904128838721803617281109050826e-1",
+ "4.15761692057244148543310701200534576325308397337003695681679007540324069366547327722258885686349619359915993749152386902e-2",
+ "-9.04970579658619470380865991258110513843850446973806499697900678159194774744593408797468966041695053471205276923200577190e-1",
+ "-7.42894062146919717307486895770712177633720181625852464705801879158549930143011385755502810839808877188169347497140463278e-1",
+ "3.29255843672460745277513964057060067396377984587222455665841087186879420769340447084849343957766905952270152874052907066e-1",
+ "9.98054859318969984153930327705164465077718593220578997216979734167429154849012382322757855259404199572095265136279871773e-1",
+ "4.44198837297768694342150710437773511448850303134514239359160353596186338967438818161771076138440975975069051604632938785e-1",
+ "-6.53817599431343721060913145888825198919543068369083977787231740776950274433927919565042681494795499030972133972973154991e-1",
+ "-9.50882691455803790808811011811129940528171185220498569922200361836899859377942311459807744784166538095896117442350480286e-1",
+ "-8.30804396823694462619418608693397504202900045660409997788297791645107264729830105800672434941805906654953509298579082883e-2",
+ "8.86498500176738212245618093138553877114943127333459437678466772704535139826656179981455385901664422134192971441152486596e-1",
+ "7.70083171278361495868782270594413506070341191348346709317329019377797940394556787220273230008072684372906392335068211595e-1",
+ "-2.89713235318575682157337623325710322388267200178020040738121279630672170355171163891332847251952971324782327373734923025e-1",
+ "-9.94599945986602107902462030221489305674036413322184167100620086215068494963807086265519051279456167270901961176645890910e-1",
+ "-4.81064018790479216363003919039401079745827607566793090566247167201506427394383426836725220489510187378030886775425254046e-1",
+ "6.21793567954698234151923123976248746751871911018984490371928031737872104124834908200003970971778452547150523318639635937e-1",
+ "9.62930462544790791995256817531759605974030310743258985429278608944994805716203043054967792555227147404499205611680348343e-1",
+ "1.24441037037160425420824052419427892644210865386492893504553391973646623439822770473194845274620957661128504291608680469e-1",
+ "-8.66493376243885476034533210550037276824055111358129259572484897399197578809821587005093985112028866251515011805996119334e-1",
+ "-7.95940555954229526911811786010975888490876487056728372525209250018208474961217211282867562886053609351620626802054272020e-1",
+ "2.49669618482792917975718339302754781070461300705127317300546100189317933291972223791458678771914034385073586648459580423e-1",
+ "9.89425045617789945796335206411736550560149597573171983909624851636680028232543261568285131480585113303281176722731984359e-1",
+ "5.17097284014384149171097163430722725596083616428334032893201431916692899725128152827282357887267679461332587145165393473e-1",
+ "-5.88694253013035419947972745515246684318073372460957150709985237608958241550865774225576562359889367149484593966586261944e-1",
+ "-9.73313013442224866478107643999632554759604190263325143130961313777287157745245701134838602677190253924612391775436901182e-1",
+ "-1.65586435334914172055850479429458408174448669771862313204835451683387762284114799645762688524058144409210946183564694437e-1",
+ "8.44989803230758608979729460217254170202748876564967551526138387646760352687916491884649142029664716335759879232648284164e-1",
+ "8.20421500340164168068753907367027481963552257850283600606773656660614708517253273174848291641569969886126754639035754147e-1",
+ "-2.09194241612317592929856274655591551278574667482924447651723415490434554354833563537792618079275726893013991849104465053e-1",
+ "-9.82539107299636472172005507105476251789057582568202763534005396813858490465264145708502581273803767931004018272989858624e-1",
+ "-5.52236319725534543207688775430217404447704139560595336544456138148662731976576062425879410116209671353021251780801885578e-1",
+ "5.54576894095302137473562870411642498454159878739464625116831971740997730359915227524075717328436463081497500485416831879e-1",
+ "9.82012389338213987427432686899213579991770436451929205950504261612336440523069987734051927060071228336651935114247230018e-1",
+ "2.06445480789661722781085666935934466710665000093111315471318244086154187788240397407764949071589419997001126229699279918e-1",
+ "-8.22024967814241172490083350373664443948382772873119098939533117836179462362265599942085298240078400862839510315401568501e-1",
+ "-8.43483668915081157881609334416452212500481988371373212797897630926101856989377353686006695443683562952698091745372956064e-1",
+ "1.68357099807987317797633647903674089665368628422558854222230995142941489911909308417314277825877040168111682241442337249e-1",
+ "9.73954039060780508698548127540108987785881109985102169990241290387386676882934112332475075476604334818263785540220696343e-1",
+ "5.86420359093869515237687266954561200160006212641211187483350874672859136679499954407470935299385535928011115437979374327e-1",
+ "-5.19500491219840443397382144913775579016253538466887540765306393159738082663675375499840773403952929977354698339617261390e-1",
+ "-9.89013546180296021750901758474634735102493497248279924875522015911873550276888689676425102442986261848126775556194306727e-1",
+ "-2.46947514812703938169894550153319655995779907820829748198209521180129269232387596803077057086642606505827139155491603712e-1",
+ "7.97638583669534812597149574893980942155226403291812660315816507318428697361476484505958849067790885048775312980075497096e-1",
+ "8.65087179683067252708187359165577777305998628817518314353161876891989239932835217904989326717355654871984067712207255166e-1",
+ }};
+
+ boost::uintmax_t max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ static const T euler_gamma = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+ T val = sin(euler_gamma * ((100 * k) - 5000));
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = sin(-euler_gamma * ((100 * k) - 5000));
+ e = relative_error(val, T(-T(data[k])));
+ 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 < 5000000000uLL);
+
+ static const boost::array<const char*, 51u> small_data =
+ {{
+ "0.010890646307437399028563191160252839599929232814970922208664909237494716181484215717644776933044418903207919912063594159099133490979634344811936925144447725948305353257042599564404885434349760121009797816724142318243738364307036155852011004353462651092012819894667485840322627440332163428546845499107471983896711023161969130462687924045508477090891879273259947713367290982391204265694893491531721581439",
+ "0.029754394000520972141380267705677256353702996169858414168445272181777338962866552847084800544086743338130195210005002660881957584567978770485056322086472328896988088721899728258224129935989180857437073412730903070983582129359565450458299328041955729258476583848159389714290107649243089149974776893563078190705561325124542669960182002956940545214147678093802442811362846262655415145897575707676223535749",
+ "0.04860754948595027759689273751438643634234576398271158524070718139962965653841137425728738193533514318422431877217110239554743968609870039776938201724688048349972662394084789924867267405853696017478160702683117974766657840965270625814482422398422216605490620054574252910928068433847115132429726072853170339113804838625536981361490008602432476302086066307320875870985443111858828925332085101376920451257",
+ "0.067443401266329792365583268418977022587089806595860818790246293104463576184436096833111903064801552379988362224633198052490234517656318474005568709048710308123967082103235230201516378834855764348740505470176912466587139988300259624310153055247378188811239571439869254255368050758213303082097176168650573121101094016896349982672715603054645687782535250201448606757920212668324401846105554332382154705308",
+ "0.086255244004175604199645786226683865650130764638142939010554245919172299560583634262067769465886944689883333394099120765964771092069938753689253686543017871063587988437235057514131760587649504670117933814486942187589706655157340717185354058186603027300571692666150552274324933749082047517987509942119060274537912867956274549119040817359639741746006374702951412541338483858389306953539029174581171144916",
+ "0.10503638090893519164596691292161072193010174143933600597680115817738720676321226654184308409972393036413684625874294713490753271261380987552528236660688624108474124469034444076627315674234385578608111398112242272762722849083801773818689342174907858373883192220827687618321085007917387951532673599267211035785307947515638810735621964273183425401191468313574763898720597251843424536611952986478638938787",
+ "0.12378012612096459891996422671239906394195356627713556749926735466337892925173796651675302282473738808218327028589606894825728784823540605065317506645900565980161901287116410208049542818796994171203890952761651470187834173644651508025088970034800067245131759655003164127161058084682831906406941473650395873577925901419536540828468001386512234321890242266327761400155849351025221609783793228816606096155",
+ "0.14247980709161433833827358255114404185333478069639957369769805221957506649654851981837061160249376538785737485777248817812720592537597263252706422066438137522011148566625861552209380620325080441618503257506798981598559897331754555335688284111417797211888381141445522536739542765207936516297907076923899840216864191777039028622886076254231994264908278499537587536902686114072117102531777746791366147472",
+ "0.16112876695857673825462942280040873226725445145336882995544646098546697397681955191516861690559627281570477802647683153249828731761062718487424104325152088763220776831248566486363299448443795266104568555186977695939803420793575204146124697832793773870449082377964029658283741910741804550762511379894890589132658450368609377005630322641674351408014813725947288936865021810537922503050280596331958949813",
+ "0.17972036691564914131189073707203611766536704952071818203835281740755093560444625679032703078557333645546302532200674729781663838075105196332695024246509042831095553050804767663788014113177991938252225120228302734228632787082072480689719322299247090887229731260135165819595797392665106642595359433094386743214852929965104946276195924300495453775467378376551444126292108291215861133471208854009513721707",
+ "0.19824798857606934571352609051549058593435535174283382080060738672122306773474119459815363636791069253463660528114022041674780565798655265640072669329819802234483545444085426470661233958030668844326674768815456315879868376252722369574694411591080512527683145774214215193268992508938562109669843137270238454905091555179756374512457742554641355319960601765568460966738628365652972463731882673979926092423",
+ "0.2167050363285819704223187876642169717474346025766606244643176750460657731203611217470241676182041675112171974414875203007374497968642376196256262296063879827128970901451226217571636202438144440234868076467587220541438440149682254317134405302648426790500751310485432990930185087578150399032543990173811106465656404530116032387260432178319507278340110997943206401370789106214680733463126804159766688178",
+ "0.23508493968539701289801441539326267060915175918342580386836036980227948313782327655061004506711767031388143537081826986030990557707922203603349984851809173788402101756510017046639631528282698404857654444279509591873678208318484036337040837844539190863615310872984455261973647897667843302241773795592355085118273592671348602240382153223466391512738221253451636183066773121830262978729780866153048605159",
+ "0.2533811556212047542679161173582151227103672187769971543582388259784795155332622779547839459016647290250036005712168909799523370471647322112833886051217950625710683025675691585734514265087749450457714578451290681140064635291501640395753290532318406110106892218388811781561305402570000283806458134435822529043797962340420841850011846648265787470508569124672250211852546600514370101687713861131209463861",
+ "0.27158717090241435065755609312085387589073221253701701142877476904254125053252466469600403650634482409879186635717002370089097070045821182432642232618427944489732133359996899812980722107011126957850576210476679069162561257167921627603536603943342268770727524690332400255408587654094512383349857596775777725888982277559281982571487656535560758087235441872907962373375423740325723506626374882319859924962",
+ "0.28969650440578692965912855479777150523900698183973110358010443581781966348171378962307935462457921708108325003566673849851640304571019200113280406744551445148200341554501141174444530008329262826786160080931309057528673711507934822659456861163197618813727062179453555460400169858233923358238607875306523866767536243361049306545596678120228677505849040202788510059415993219975440657979707947898632705847",
+ "0.30770270942563778634443222550824378057595253208974144909939396933701715445493088586920897452838893301853350676955400357197838773823140696209649573828382477454711986806154497998912926265388494228459988323524548750870702083339285969468391846533348589851520262990720843670148790211009236063622194282315540801467216625666505663699480592080398449845511909092071640909885054719301078547683325662349532658001",
+ "0.32559937596878634249263192973385963275552570142977727375619908690982968889531407133936548327912894149757305868454394002531385820341045863161146695151908269553629121372700695833373968533510661265854738947940689721812230819575490874211279007289828369964583273676393398981064015459284982970048174649094549631109312941188691838118955683939990881732219088392629316401227525790752712758279892546851835776728",
+ "0.34338013303643689435259984865624959352259286039436985939426483729323987764837568376066164703227630278807584950278626035763399164177429894322425866236150336898079573258157833074772287354310049676029566569737995054499018518699450946056626536479822852758163848528920078247789349605898976290484284018984355696648190967701849464571286257873661615051036433297599097073117151941857301740816310919312668936753",
+ "0.36103865089217782674224266392907326208964452822379102503439414768728197653534265911503054023760783622236800804794470785631737993143180071550223728801984904852623160397230839644629077782630949486339104760008566935013234195735777070582106661423219379374522941522832331186147905332977726043795737008218909226025962294880541867964419424128310806148008435847967256901208159302482322730929744194185143496647",
+ "0.37856864331529191294683302986737462527422720295203122486985051910813389831630458742420433021640718832999264813674938157273375290592788753133996741859965258034273428657399863159488519434113093863042179261649202584979828347495161391780592433454809420632605178105958049630938532568156789806946629309375790343585791884755866400295470651281289167454617624179556306285775538273640784278475358303871406797294",
+ "0.3959638698385755489557710011250921602780605301308457595569865098132061251227321128681128349835212212508810246299921462519655630208347321575504292305860152320513799100372630595769065936291506594220617567642210250680560302662459931036815131767702563357378794733903424219866581554015722958062178902473414883933807190920961687912191470152974845756609418554739641361171541363409996648143043979357302190703",
+ "0.41321813796987028521091431473013916161596830805293649687424341688961507413716621591649879163383882641673238540682782626959358955002216003316726344623613626809950993449214457071292961126188761860214007662067345193545393653191742497646193189677890657992964660139924463087072704096969748995358605459064076775540679952182100013584273877612509536257834358450242426357122974687246428904315337788603554112487",
+ "0.43032530539651581726649227346608528709372859200683817125277384462849187532000288969537766724897319030479860713591459932866508254904869456423088312945970943686450425589907227275358186473310644458353392107693439475272544181726520566221333846008220008702070460626739342310039148106649726719665728169819714333172605016313499067227953767878741853545763313707499816244740855778447731454065384788859848319503",
+ "0.44727928217193967651655712666040617006236300257644793444619887007723922383970962870988815495150987337761018019128790177957898245520422485269324604484642139354461290347689315448558082058132330317789105861674569680430563377440355102600184370927625450804550114009478901349833826102470780452480255838220723171955252412104006070322080932915859579006653276371401264439817338080069936810866666557553662506811",
+ "0.46407403288360522126660904671571257203469668709200603873826642103612288853249598361813813213381052968904786566929537791978751985511297321991996818974870946807510786919602279514706154473236597480481149516597293844121405001964448599792635426082163120478756812832932606227610137817312140031064078333902425335570730565173883252754294319888872518149175050583958244086010074110878967984441526026195572046031",
+ "0.48070357880154616464768530714893198018226307768872832018696934136162055774617690112915494983829868655926209174893609677823844628976682666861087174925649829592164380174433963170047900751735818142724368678683601091750819984658303806035572915499999180599872513173096429390456178642478189724903758698238722978406369084171804020040246631229610021517925007543961283845124822740019511921386188934760298241688",
+ "0.49716200000672278683141570737786924159326600032981923078600441023882683095816876734389429898823686013764499093454507915253215528870989821318738227798745591597923864925733083640574132559603114206682739488541451077277291582357627881380008066440685837422009543184722898767087492264154499861112499590934108906196324393034778681622285346845867860458748417916763883649390228287689107774312170267691257606116",
+ "0.51344343749844216224309565441486087365890516381683759696704839526386373494321578458551193514743669178342420835082611868891019193801223760604220552152028015878259509179672236586872004169442377393342941368136686044214656339879518691219516228434732537186028321245942076903928921929607502848888640267094590400556200402256089794954485061564115688273804254406706725374971267431122825004095102239220991848356",
+ "0.52954209528009218542956877037980380998240467111773187487177084701668417706002935457309027480414979338624119758863233287969233845786459113619958146654397106933375312089626001011352424174223416515118670901639015699899005014886945323983797633471828049323917701068414699189471811508040323789047713536270617216249222074877291822920747392986535291960399633972613345908694327479738445245500914715996152461985",
+ "0.54545224242244689926647810432697721723945987179773365856990386707254353534614807468692870318816991084937065603191754270239773531928848863926268254420020634174904439920465735399587679402503040251639815041072160696029528969373711375024524059535996077596844557011786411865071706766713049961515353664484996577751962474564968659755104983468313555304855249829815310291744255989014492588353749587481644931913",
+ "0.56116821510380861353700162760755101727268623115746212675907859515911800480855365905235006799852352328451502804871577600277181740574994973635138803211912076695967558806493981733454148905054449991651227073996616835900542604367257843601995979944175684600136575098939764120745952964355353589317556067474680987527548079297833539998258342242865222215681747969549869015697939554127499557081626950060916329896",
+ "0.57668441862626054773920164705882295031880435874490231795930393597704964539534854834250638055542815083463738683146430082379073149079998953871974990605030531115748567904948229002538680465351816034414085890696196467615521969543006224204433997063527288514443404935419253943724579872472854300703798475966107579038880496698051818375532546368197809806544115496171522444187250876233927302975709248591908972346",
+ "0.59199532940731223634617420193837196766186356068263223313261061480558639436412180991021350240470913092271149633483820904350945127229180169976070379470147429711011056203078210298313829635000565303787641997857930629432231274870246836108452732993007541125359738273485061324228778750531830069944570036169084871305329515261365955383178502917713214334808810726412625844210978481512366368025275438632291862785",
+ "0.60709549694622869462483067245797028399468956070763942538530335526853282815406226053099893555611232739741099281199863420254333016184720313024881100010161759837083928797224725640021095785125988238992410296927225409984765886863313873892022531648958451940083661715815760806237878803609330649695132473889046508160482887768573723088361332267243452286610176948724186843039692112797106039213976473403724518188",
+ "0.62197954576434335539696684219824327976988998993669475584026026679831221725774460365328908947620452777457191790806959938899059379387140391128845696987642418506611453321626607869801717870254836897328796165084605948086983949944714226464644755644542238083403302661596239269476252222614109836597348873471190787660391585694078779921390758232910639208518119325492789999941075221166054973249356136808607130253",
+ "0.6366421773186640485920116318191204083389644098160828009666722635549477083039305904975813615643101060893999315509501318081025137289051787335454356108133761354485193083183997634369795655283340428506642872565827559825155045924936470784378552800563136355526499002558162019410271880717338646318471375684163442601830537613691628498474632262547856029932241457937391840960919415488213025664314613747543749464",
+ "0.65107817188809080279752785471799265973958362274943758073000075578938519480042543196041314945170036193559782763524413154927612489597355144799562963417455961310886431794132437757357185377007718709790504976900339191552944965308823754898079933186431693664015814010551367365293786806527034958873669211570906132849013497458819941168651227792824572805777219160376304646562062564773441718051418178414899683019",
+ "0.6652823904315739978766556052897347198651017349760138699519597733553278561013395851136458951983261597283585391502588949649092379467069209284755289821255744166256794329589771465045421874634188329764638118238723545310838064785644468083837991172367935880462068347034222894524074808990476036821633127927532229213401486467496527893691588255513769781016943243185567913995336109327864083859254466073492381187",
+ "0.67924977641755138662041086036801948989088186294785002709809874961811116536667286127777672928127306388394020078452402417993836722984523906631302047812425809759286220237826357465064765092612104224837992075711035615650942777454297235908308024053950635657488001916036801234116581671119069849133344664024677517075723660642709275823456343659009540444032487248071553674961012055521740306092600444870718199652",
+ "0.69297535762401272778114932738244728669670875114228232862389083194872888693112134130021641463393969624412179768291914405554577080353247136859984307940401373940521815913274464950964347624918449081645304540343160683388727015489772202472645406318288749244334156857814927405528763108558137488794292057315715995191324964500528600378291562277858608403425720078390497455476055579003286296442406491998525563297",
+ "0.70645424790855122905182233963742667718470686911515869065744744473731249895412640632516625097411541437953942564566468313798077366853928608154168668667806938130662439220702019172328936889436324187304262248463334787504456805683070026006307765178787997020889111556678907849442591478755800698808480163225125777511828352357189284217101098738405458071150544253514248561787426067001460586251699075230390564367",
+ "0.71968164894777168289159927814596788937422432901416956306230349431557362414856173295064125294878325237342190029914430775648665560145040598898117000971783978541799092281781000633902779626437866517288284324732827083065703448279654800632624171861777710582293639879819116932680545313562525074940809403693475624332169458744562386580074420532959714281903926902622613852892104465683714186704831143197300465955",
+ "0.73265285194543608674851404628602868786755398311878599262050209465658337331457767882450516660833910207846986678480603058221329185506983962144302950162737505562091432645466997334653618075359372680522922578429510783107155224742867979206003853893418268095936450823867623873015528453108944563276576646508412198497923383466470895808777876544429706485835161864475122029711660543090876323595451165397047981956",
+ "0.74536323930873866831066285008063416514858255428941319323031554151661731879818806472410911187787504167842137286019020264008471692607030872105020489874402631524823767448432915438225335869622093354538021006314536198469136634364850042715775621307965524560308901397550829610851125072518884822515926626213581949190024268711827023522012804341871590177804438418738255381261594827085100659777173578154500251787",
+ "0.75780828629211358196731753685850074775187628883294491833833279769413437275246840580617185041212744084038976069700142887035937511309419495512390089087847775651833369173386038513330257480188204696687136231267595399438343156895032682495327740328291738325217778497473260463740600852973600297913238958828132336080624048815574113414592522918778477418427876829087439774857073733879539765547872800792711360592",
+ "0.76998356260799010064124325420889481428942836988785464918451704687709959533402569414853910266075223008145347866420469852220997470992987183595134711278161994827010482478666523199914707457365681979989417199177427808129308850228595726632468139527316915481709465938257650120793934685421343443942356060396291075752713480402305699120964704579260218579751719693291565685728074939857101460901984240449471777639",
+ "0.78188473400392189344901888012886357289691591193533323711550248487573232160560048524966536928562079994581390209192526509899176077393862245482807165569409036943146775931090958041945317489351020506180957959482939768275851398130892970557450783138983566392455270904228057175489097967314871299150832712632639718878702471658606369540854496281803565819545728647765960328269135853132407415684491934581417388002",
+ "0.79350756380552895006859336306152006552993066088382163294295016384877329185292344719536879395060919553184640006473875955257330264813115929942877156894433233876161573894628944452740080653935089289153173836334040374431360850336851424574668632837338016740333716530963434291489645017931035529052587483629111178971917421121398732580060101294617212337648611654041575132820234403350225337355214099696493406567",
+ "0.80484791442470288298134387731514331459831415420391927496917008531718727007136925375073869996549995938671025493755987802316807560672754205522916341547950527416285009447065632296220924964603370109747266700136618832767813938243784759073035555035361911772169687111972294262096081393656654067512785827139608367560009298721819281091010743363153063005841441400130721362346287552727162527118465104052539630019",
+ "0.81590174883253870457705586780548750833668862852238889952372206236774966573191832400412494946116015154305873210759963247859431688393192829248700535837612167242633896627292821666890819736549652534738107012873094812825219601489880060491958385552979476621004236099490018887651186347086675381603801017940808290855340870383683075409122477045713172106217670870448929077822708030574128623585863036730829850118",
+ }};
+
+ max_err = 0;
+ for(unsigned k = 0; k < small_data.size(); k++)
+ {
+ static const T euler_gamma = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+ T val = sin((euler_gamma + k) / 53);
+ T e = relative_error(val, T(small_data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = sin(-(euler_gamma + k) / 53);
+ e = relative_error(val, T(-T(small_data[k])));
+ 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);
+
+
+ //
+ // Test with some exact binary values as input - this tests our code
+ // rather than the test data:
+ //
+ static const boost::array<boost::array<T, 2>, 9> exact_data =
+ {{
+ {{ 0.5, static_cast<T>("0.479425538604203000273287935215571388081803367940600675188616613125535000287814832209631274684348269086132091084505717418") }},
+ {{ 0.25, static_cast<T>("0.247403959254522929596848704849389195893390980386965810676544830494398136043486821690984848527973792338327197752176516138") }},
+ {{0.75, static_cast<T>("0.681638760023334166733241952779893935338382394659229909213625262151100388887003782753145274849781911981438190343146876189") }},
+ {{std::ldexp(1.0, -20), static_cast<T>("9.53674316406105439710335272649306549801506698739838753888815787489707114648106832493113326022411646219016312547902694921e-7") }},
+ {{ 2, static_cast<T>("0.909297426825681695396019865911744842702254971447890268378973011530967301540783544620126688924959380309967896742399486261") }},
+ {{ 5, static_cast<T>("-0.958924274663138468893154406155993973352461543964601778131672454235102558086559603076995955429532866596530638461663378937") }},
+ {{ 10, static_cast<T>("-0.544021110889369813404747661851377281683643012916223891574184012616757209640493425707075673894983216158293824238262832286") }},
+ {{ 0, 0 }},
+ {{ static_cast<T>("1.57079632679489661923132169163975144209858469968755291048747229615390820314310449931401741267105853399107404325664115332354692230477529111586267970406424055872514205135096926055277982231147447746519098221440548783296672306423782411689339158263560095457282428346173017430522716332410669680363012457064"), 1 }}
+ }};
+ max_err = 0;
+ for(unsigned k = 0; k < exact_data.size(); k++)
+ {
+ T val = sin(exact_data[k][0]);
+ T e = relative_error(val, exact_data[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);
+
+#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);
+
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_sinh.cpp b/libs/multiprecision/test/test_sinh.cpp
new file mode 100644
index 0000000000..3fe4ec3278
--- /dev/null
+++ b/libs/multiprecision/test/test_sinh.cpp
@@ -0,0 +1,261 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 51u> data =
+ {{
+ "0.33937643772780730649735035088117439284797964277099188367427256402032493952288848579083622213428182842627923924487560393743204013166230906610274533504451302298480596207257724471359936027198954417317381228420986152562253196896619001418292769103034561794393400788635610424360775622370491149170501475453034747306600304507650361914904138327962144190354572359428689767990353722392457982930942617983634601752",
+ "5.9746833446871871874685235810964396457491766537010251792063372398172074828151074989468673672535421045923659313715467371148678693662985453590831122722616951299822923837410906027605763677066945998696776562438704017846907508677186762421899376364636371743116519071733413775650991880222096045615827530741679305666041641331859757012015389431793705875600863391408448065773828563483223117178640044499399723744",
+ "383.32826140718915582837967448860824902040431804683461630967288341613741467095168380744762629948507973653220772087887989292128183196493611623766470283358542341824134250511562240487252437079958429586344329111208041197054162309164204144237855212391474938076935722386012246677813568519769393617755607372817372398764101401294149353978426057544810680225593132066193858006901125069663362991172745649465725272",
+ "180470.88334757918167934673473709881208559849920820465419382707969109187448281704429118605409224039018180517847684905660962429505828088398660499158213746722168139372781263849989865384042531846290813274318773753295025006473736660333640052386121946183935053629928496714560749082485275242374067168149435272169334475060524974384307351757201698786200303374802146857634893509516262245925287553380389076772488",
+ "6.2781497954189513207977998975338639259302378413658035459603622432839117790845430762753614618299222131433987986511235061633658516824123179660244932375967566163895461895213509376427850290780942550513918615228886566287592461085762554208269169000672149592375451149457664991726947185145469263932975075681560662428417041932848357447220175607720561540370653825438750168143857523868718856189519864027430308779e8",
+ "1.6137831147508521132232267071463247985636947830692243664921522457394294988129666666745854084767325882717254318322908201512400243137564101564235450151960593110176457803621675408660678871179456625850704076654060872094257085919134755925910859520026379969099492921728083639989029675808598278170215911879751320574053132699172028082102336989338403081942130794464992491330850160862146024982135931859868176809e13",
+ "3.065121004865094886953119667134247741359538615435533822684602797608029400610449009335078883525336625519599034934744634528257351124420564267197918749480389135525897886434344884370577475363556341414615470556433033106705280531443046669163916446454890662947185057748542735928453570069226294801221403438864013368364219717148075652123561545773399076318560221173734215703610924057158101731263882232550297741e18",
+ "4.3016893602106215864771434464025735547192956887049374680649926707919814241961779812200280749930256501997849507695395125441756421661413154730888574483309057229943886742437071251707738990393977398403536175642762242808350076543018009682725019125106175929448866428526984370017465117236484653179596869643117790492866002064306593104169410537341890174831622159415936125041593936992634719906123727028419057537e24",
+ "4.4608685929681360001024935791890661655506049487122331222491789265929503651540405036031990380918459104583255735620288691363060079360758406339887417913286769718423759522832754263499878135869223253358698774066131403822428286318351390574838877307934317251880890827523325360658275060099119902102399714992704146743744108968362755624325107486994088414126705458507082103811086372240878942983212662081104875997e31",
+ "3.4181315955816806472569357441100390029536003312981931954091744304974491527743599822230006760631204302243855667216955365986192324833652299336285826148922073950348547795494738267861098328516497599288314822606511466743212319770180141969147554023326883651348621187276823849839283609071336923316655316828855943689100621619083822127788284160652232283630351386798636794979234576432977468152969056493038423561e39",
+ "1.9352946282727908101414530212785249763640776919052480158881659190625166733449770912626442628329346416132299268886589920690636914906717492301836773331460154604580407945460359957380672599434023197425489039882987443681919056322268437224184910074985583829184831034293865504101338027818555871946080687710035062238789949143319550108801094190098446234092310048150477274502060870736716324117412815209633124145e48",
+ "8.0964449511890098565841496436016431651692307764702784234901741408135381374668439020986470675941110923614446905696410406066640351065195237123718468440597743167713019447544827353458477844468727834630038609140168354634397475741840053079910210908251252223665806813131724262334693137656218010287981601097259534068903471812189212459231851835393208367369054618963204727992168556204168791513644815218096463093e57",
+ "2.5028257092625174549175008952222569141816383637904981644379473858250736896174216539673733521627607209322019413420937570273676341726636306931304501320694017061891400181233108050930610234076339285157392030024769366663118692571469493256243952018705693924919037621083041696227375589264811876761430035546270312014570431860268644276406457398485042029556392894799022733858611415899182421526634018060028309384e68",
+ "5.7168370213792649967466315312864179662895170192695050789061362839510836418124645968032989149068311018994324517420345278843446068634292140996241291031113395887824145000873531937856827299256489358571593850210528248202703396455363364446996158929674989959483681393263782486430231288067231095140919741928337466492665857902913114664767450432510739209971738097074002526312039248809036478310948111740897528204e79",
+ "9.6487261169670031207955841899729386502708125098394777808615183927342163909284025992243201020435915122698808649711566042372911206942311277943247994427354130507790526857797833309691667375441761513692598664419973302444660838882173718713387158013802112502169254860961105745895124415352002289485483908952674562396552790441656755711709645516914188860464353624992313010889765422981069429049436524222321550149e91",
+ "1.2032977660238608232537005158851668311089986235965463249220377778638489972355974848209035082333822309902237165042868213438627625544096344578102199846440476859557339736747791529782018329078191477783605471526120462726353510147373798347292650122930289404816748193194907382572774906323766342758092979989633448828636445074016110331338699464788279882402189027828261039788079556739180915346692779065476431369e105",
+ "1.1088306081278288754492401130897590262404571813281460605683836139669281218442501421935533170636990866165181664561596333701204545493730707210930818738817252706131805203538144119244917164949716209095542194899833868499263375700313934257155600824601418042452138211549248837967344874095248283887929145923103153332810091693393888809653081365270947112297406471162377655179657693898463736926911943490619163092e119",
+ "7.5499880591625965663868042832675300901799245732418501707646792135512053284835138294796976048691668315442427834949618514094329533376442442492757936744857569785450769927581802961191319878260712808001736830227501518832554201816224207300614310712430470538022948957433004823102746037654096845266998518623332118892916505020627868405618942429551700207476696585635930562973459491424179233918050890206232214765e133",
+ "3.798536358006797624025033016530070695826982685154937173246022092345982280900791849578041210970037835270398289956157015064696375146357207576854029748413680946201805214954504282866534528711715039215051307866373994662368105368505465037259587291440042344663580680646178313958620437868058550744621854406871361710599007951099013146571208384054250556080476992977623024059268095813712424244902009427293468485e149",
+ "1.4121319341572581270215359848706630542776633675711529687593487346259283960708095601494823112486631023721124235640943167173029348028743563902367757599140008654691320430919753414890689949599421028277624880392344132646738394546195638261279687543208503932172926275294218429086816560213399180179494004109164546844899632385177835442946174653663068675983237955855108059376913611877439522917217336109804190399e166",
+ "3.8790307719997974510664339744260233373881096199933152202662556556779783775106563986911859526413282055258612522499767709123313205863879946518297779104337686883587019222829967005608205535314284003183828513113021722123872387036435113517356676447376715595408179555267871947671679098986651665719279348025058713817796876795915844151719103197410787508530261619841035613531487094949084263218956635085585632719e183",
+ "7.8733605373835840397434523264038598405672829925651165847065668324385430746087633348848905637835428739401439679896923081980364912472282573695612463537585283007941057172128277340402716645674443632827653710173742423648839359547777694778576675604645880219833375227941998426325886558435214355022240854563558864080627758653439429917072753785194675103766900514602432580639079224631229479607396935864512990879e201",
+ "1.1808262995038900942517891457926200063018079695348469762725520377876370005771518954251015338402886097689762895044056273430051256244413916763438966705458118354189107806216991150264176024521937328179762640422127608560103802431672144866013216405157197709788484197720057702118788168789816074560208078260433548283881535909071116553897893659656781376448427981358955547508806938614921874867135186509274509121e221",
+ "1.3085817499987842655130548827168955655838432140245228169691892267707778790498773914833199368916114043966197329562444577848635313938483757629541576533880917215885485474416704968999200090496252044959849927443732134176975867869986011315975625868009065373046224716063168977788103866885720471095547385342868632018951910603936835789387464412366605713487321530237148912677199033012777178113821791621549557963e241",
+ "1.0715308148006899161903881353829644069217121138682658034413051575604561649576261428568888094218620444635013220705511245290719605273316790249367622122178650529000528086055415007045458486410501636380119413632657994999412652188430063128470336817401482172580366374079331295129200936246446347832380606353293858222758687479612927181530236387227215663399410099251455256898414199913458340065553949424990477448e262",
+ "6.483319651006309502237640505955012384293570932602353784849377890534620180296272226076424490097577093511886503973590409376477611667988893542117173598716788837179265384921201772013611631892729250835822804494742316330406688475091973437669111728949960922002370308207819760146543720499389938855072810566961589413895110830251224194598788696990065693705615156654866578134664648091752361824241438921952031149e283",
+ "2.8985391304542768293172709775230767981477721528885408305355619530690119426207269563049756824939397157221877775531212262059946098575425050827283362457005503261796116156917077778477251551070762614233325253060283603452216492681531839154649232080928787066338399915850327381614672456102374248950210248266796072457623370079195574322846594267768883120374288952014885152055438195794090975578878933873824774214e306",
+ "9.57524433627083921372674145950563946532138741951042299439035158875449060589509856903496678820625880407684156184675763001790613289835869844325821965070261880894138207436003366195024403902162467929095155787852409710735775347490909311196315332711680552044467458169615366116872469435840608534489425322247278926672059747911266981024366989976214521515026692183039600169984107883592297128416659318858313127e329",
+ "2.3372734503362369375381009524197350830316472034721759761797536237738670471009423543542251572488229045699598160834162677357730620072441755506075897500940629883044875771104686291523502165266242030847074909362622098365719455332359938746138629161304717385265309980898079489959955157644566232440805137701071311495653330606071611331941246434767948905863368638163788562679785940566685500460815077065003612487e354",
+ "4.2155879126937199240969909448599186868484717887298729605150033299123534992857332918168135230843738695925698383815575417820480732378749635394939513838137876524333991937836847074991505476867647762082587225838063325020413513077128321581439429001485977751765798011101092072613053687422983352140468569171564773941232256057064161142341661775359191159220450305300322654184921617310753474842253496677498824723e379",
+ "5.6181811613375701248970224378256740494692066242437602652469740512738297599235414593999616891945156186827736326184687322137498447792007445397397290336810468925670064733464757082986791232916898141597610692740388799796632396708149027243436859752526805112778790645096555770227809873695589969805678601106157556386974221647669590827712353133603091803570183764883405340587430017053183637835511899658145649708e405",
+ "5.532511069282205350923830187073466127274584467195468607886763750877294392993663821432158885753563495238131394373865428654052604326264330104646257659760161386620716716703631608643312613245804625511813964275109451513736558514977338129201153666764317441936156609643185133981728847167450887861106642311329612564652645663234240748195490808151911497393974690166034839217817023634217121406163178148652748479e432",
+ "4.0256666306761331240653217136731531623017017695713942917027851762705346357330788586411431378972009980532310757689380174461664677676028378924382554201434975574729861177781849023768222381429947872325368088023224591306630434887529215459580760863075907686248521168590309636468448648513752893851767315693469638980874648457114335557202115472595647478331668869318302753802858726588719006447471192697846325955e460",
+ "2.1644237346681663424601781769159797919834245365230735589058796985974745594485988855971413936820871935714602237643458356241187573307428309041919648027960168541647193436225977495680484218384107820095589356463058222584008532497069179993678533431131233629312850771528970443634604290143149079209513868130585713006080733488491160321145735562062411305931183571279530201672366980412430529846635995189699318073e489",
+ "8.5987580981195983662047247216936066485731760315371506386077056691409579856014763032619539539935299716110411688793466397984311640631361934500807639285587334983206556915704635831992012926186843826981296831658998834850783404713050829093753126189556625095994621605300047199962332098857236359801681157419606676412198783092816364336047306243999363335004760439115355072350465422891365411868472688286678516314e518",
+ "2.5241673163187127276134610716954724162270290228773641734420864618245211926017624829840685860130579257772126398622324109858115624706486522844752512951837805396709793171502497523431473021570806024043139443284538862368635312799539108264084028032731295487282188616820261689634926427135060887942797635147693849950058672753458576476491733064455826768562371858057444914175251596852571637211466017938478085247e549",
+ "5.475067911823387661325942057081957044927796274441278042805014835144678321092623034147031518807063234976073102574257079170283458172046752719724152941316842521196069804425876507927418423409523739261726681120662097159943049401039490818332686968135012747332468921142470970507219403290422458185430415836291605355383658657658638112408092789126678938878667507151950931633694006471359998448912249374833586727e580",
+ "8.7750549689950256776639468724574158629603320014390275681028674550826357080136422399476213432791376656222763800628593282303459051561266270006921840049305819767639184391149913915312831894296821356222752594264134130151457242713539248421883837353442181724530706933220158507240760325182068001553294949268596178418634164323874971937997072367419479635154591248667559627811893588163238012665671798461211917208e612",
+ "1.0392000158337773273751156576416024664653679689973856373456304843339302977923254238376497044027728158058903302390909588333829463843362779584402914847447592731182614369968957680281500946805571235013941407979569788567794900810257154433592958167545186687137810101848000107335074486050959387974516414654638879740966175786016492797845169374594168995878543584318334800124941205910589727264397237600733483158e646",
+ "9.0936326753636727240574546678839170665019169110943878894933093211555976995701468041449327370073681898690638466136204694745206283652338526673125958055131610409923286526192661778126811265116493171283319361595267283588121098349703951929669281966675596890266483864217591555707552765565756842701056144290075867893520379419521775913047964393758374891516340929062076304350159966063972713118995033247759001609e679",
+ "5.8798281636930489964162009429009257867906792508058801627042121953599912951265315933723440185825519080102988056836911095299854840387008575164090793635997912930561430335216151607097220208013034399895832350235280120270626904356196935166701773768680311063264380891331021514518757839220818506905997847228783439015252768055166165941582030353226255576433910936297965207260585437762430381969160714956727596198e714",
+ "2.8091881292911108404345975896815558958477835260737794579417284512413473388968057587088555041266297486841923628702282019643659456724373332519583025947015025975126598748630623031951723754960589046233996595466021913942587558326660593063197905288573353559106884645285531497626940379800500474282446929237914568534665868703742731713632349090897884403966643055728471509474896855575286123275564417626861566706e750",
+ "9.917129372597671132067673866739246238179742417231064062960232866725337575281938597212073697168000155027158148165861617400080837699968785505107579831803685516054837447325150388867488754170677228096524224392410232206238263933144338637103531441623303187445874039234973380151391274490746625993568552049954630793219419614845431626975962881182662815760423226111647056071831411664335144052772436215105801395e786",
+ "2.5869027163543111121878679987081647715187872826677398475096738640583659800068967379551376322170347537454918190603891312949716382621902484616361664158953484778255247083652726854621059785392022847887382779010079407502679229021085320675903109573769331277413372272363218896397965662581357886739691376204316908974081821980432178065394228926767529685562155837452626029223937027004015040825450642409597700449e824",
+ "4.9861251931207080923785686798881789193813879610842675205361210155894774686328710893906543682447029206928934967525495260314937837003448878215156341411477636831113484416124080974502217578408248150338565305116223944900839866528622960352723938548713319425798453345402992146078868053263606234074443024155243450623634720912438841022969909473424559262711669905282193529250216454066716533180418518228387188393e862",
+ "7.1012569014339068241101751233953234216522840280342406520909288232012799547871960723719836516359548198842749536961644100550279020276709043358260853581760590386456213180291689322352732545965831405519844109680619067101311180959399339922706596098526969148981173519865139508665631317310424178378833370605922449094745510812618563813537347841030916512147874232760564378443782164868016244561788356251308121716e901",
+ "7.4730215360486642135431754747074885377840195683583018254892502245011973712084221116813364423492802080799768174534590613188275471080608467087354983850284805514875889145266688973752185071777341375422809910165581997555433091939959406569831183459872344778707098094941193489061532160249775856426569696127193453339548371679229676272663084782830276508737129506676031759345288056484158647796152349867328841634e941",
+ "5.8109375364209112227579654658730977030869454388607076903639465992296616832002964138000947668837140543325908222688655359602408511410663722770167244801973012245657865182739637159804595049180263175014778215232564251739259624759589953677661356104554831551073263668188283861123521688445132164147762321111597028523130093864153999974376790494383016372210442340324038686843345053322425194077414241243050491297e982",
+ "3.33875955701899627718146291382268063073604182131575843695486667154496711979350813988644889979275310892951143249901398447859083674739840084454465850475774696325142148671937407108540250845900941142800157345665761403930889797424808979569550325271558518404559007551625637761142662107757913763221912282957681784053564387104062317729788737215450574233690655931888608424916152893688106181220341997128198692e1024",
+ "1.4174672877823334709610117319768830739080734407353905145632612088824955720198734996604261250019291955883620333545750761619015467840567122066622229379056280064206319780047687015558007624774062399477328822231085767309831266032616053065858739373818651687128093335640388513396191118537181280334430292439188737524362269789272308905723812818882228503013875816702686587035844437102478263525616196832018321602e1067",
+ "4.4466189016791091516801723880812533528438597080549410911235655611382010503145789286158745555771483577943662768773465284793798720178177605712848440200402906836390133865748188969184005230383247111166918721449908133920663776952786683837038180436264738937354101153867171804315769471050303182129269442292354388037298125177941217926845803005587166270803697433886463469168814941555804311717400657004050157245e1110",
+ }};
+
+ T eg = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ const T x = eg + k;
+ T val = boost::multiprecision::sinh(x * x);
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ val = boost::multiprecision::sinh(-x * x);
+ e = relative_error(val, T(-T(data[k])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ max_err = err;
+ }
+
+ boost::array<const char*, 50> small_values =
+ {{
+ "8.223167319358299807036616344469138485821440027829633696917375433348917938654659351596020080036406671343718039863220496616e-01",
+ "2.526123168081683079141251505420579055197542874276608074880949653019810769068593790606537020961198741487692473633089323967e-01",
+ "8.342981744595282037256218647969712476322487890550784823763249893556153270975172951404094950587944959561849750490537201329e-02",
+ "2.778135016068299789938671680845480653984976507019542653788637161116587306168290886761259072846829249121589698206609261524e-02",
+ "9.259391565199916442789400306996794489540862711193761818262415211084389468754315525525896238827358889826875006042447587516e-03",
+ "3.086424653287772358219607529932097884435043040527155440187640095572710676452654803730003577747633690318001961509535020849e-03",
+ "1.028806765851002064810061084014826478832745077469708149635730407866217436751337520417458090265791086156438275231514030381e-03",
+ "3.429355348425226988441198390119109217716503769838753365112550442738406326637684639052252898314646892490045395290022292013e-04",
+ "1.143118429558603374406653541544292690548937361618336125287018361332072426474632105217297150810234138626767253281422813482e-04",
+ "3.810394757818873406266877296641684693312194735341898368873067089928172619067423751257049691985638480762032673977695116880e-05",
+ "1.270131585666421832817527834137477593266387525701388601975733237436369505733715799310429349744168792375082834509467436523e-05",
+ "4.233771952120219947940459634636576539101577724347428305072378100562649548884420218224692461748739725090626754420296122389e-06",
+ "1.411257317369659013704209000288436132710449162963127340562961271337242582661013580874165903770246169179192268836124421074e-06",
+ "4.704191057897475365825409916786898392364235667906752767514580467152163619657508910797742266406961516358439252434955007668e-07",
+ "1.568063685965773714045928492719360014894368531987759414833778466374819836545157375950693756664550256136222396871173634254e-07",
+ "5.226878953219226673524993193392503058475862017726848548717100658392470633650387274004511940515056405069137033934323251644e-08",
+ "1.742292984406408185991240874995689487745140228031202510923711784729440494088066989430128101759261047316736074663327672115e-08",
+ "5.807643281354693692124967044009687283114597355717062156493618245876910131607338183944830908381903728560328284173507220743e-09",
+ "1.935881093784897887701686451485601671131342930785061493703969418728524594573922282309665275558709040519461560600768780392e-09",
+ "6.452936979282992955422916851920785543106383715381924626175995859924351552325880931187614903984801793287071578640505194508e-10",
+ "2.150978993094330985008279519046512957825521218238790792201835497215534851989750722105234826300738623838446309250309905466e-10",
+ "7.169929976981103283311786261663531258230547972690500493476881079295129579131280734024784107219045379345460886663104148486e-11",
+ "2.389976658993701094435441884684454421835327948893136184573938864819002944442339456827931472237274353903634036758669394620e-11",
+ "7.966588863312336981450798799860506345287566898810744342680146925029151178981033890759916168189916177504592939240995619757e-12",
+ "2.655529621104112327150241298135440075805848488054800577703768668100658036999584228451100239039042920681377381394421710121e-12",
+ "8.851765403680374423834128412864530361591097252230621965426275532533242581680245794741067906285298655116802944992368126680e-13",
+ "2.950588467893458141278042461784956914687338675140497707333871358819185395356569206661450997145748756956497959702280685427e-13",
+ "9.835294892978193804260141412430145318398649753331401112621871794012928366988233744354238387090649589382104704221708773516e-14",
+ "3.278431630992731268086713799445120869198593899364655036314007566906378666339665297288092596796135684816883503781385164489e-14",
+ "1.092810543664243756028904599641030626636532928735904320784337625844108091213506619051042206148385975354700234586478575025e-14",
+ "3.642701812214145853429681998738987398752764686754626492252324567456938623579239392678142797020213493844816454129960310753e-15",
+ "1.214233937404715284476560666243942169089106312534317920490462975351305354471020532764015606315872085933262687299655265697e-15",
+ "4.047446458015717614921868887478923169619805517194433471908835726595116905187672132801369948377551282604828733616045843751e-16",
+ "1.349148819338572538307289629159608313551890152969010184597042496758528297346351553643241208769191557898925543369605617734e-16",
+ "4.497162731128575127690965430532015584807024576774799020494128293451281927637267192489558050090835454302448780391749096414e-17",
+ "1.499054243709525042563655143510671412452985626833998379862387948592418229228808284088934491020852037924756758483008288052e-17",
+ "4.996847479031750141878850478368904541825005460277179305602161748681654262243578435201096986093377131577325573917436618470e-18",
+ "1.665615826343916713959616826122968174447164290616980189746184851537351248309665330601503343215376981550822569162631313560e-18",
+ "5.552052754479722379865389420409893912541965834349657578615232567585047309856390957625702896178052275806406957076143469634e-19",
+ "1.850684251493240793288463140136631304096139902769381795814754672989850701401641374814254071564872119933498619234778448524e-19",
+ "6.168947504977469310961543800455437680289164351695283493312025632359317744715643192414807145394613572397590534364339391526e-20",
+ "2.056315834992489770320514600151812560095228784236601072113743484455321300338926430301421880927367590178440922006775473367e-20",
+ "6.854386116641632567735048667172708533650333231531203539518552950777817440179277823487619201513258000884052637516041835420e-21",
+ "2.284795372213877522578349555724236177883428507451482660054557452824460619777642844796449091646418601791047308814504431261e-21",
+ "7.615984574046258408594498519080787259611422468149787192854095139994568043598766360557598146279482678180281335390895949036e-22",
+ "2.538661524682086136198166173026929086537140604567639372655275057673980680372673609490963070062819520295998328327889923353e-22",
+ "8.462205082273620453993887243423096955123801934429554813185698344472203995997708879527322555715697860578416576045982358004e-23",
+ "2.820735027424540151331295747807698985041267308484077168753311108116374235508697904826049959781116012127075951788533527897e-23",
+ "9.402450091415133837770985826025663283470891027171945709804152456669015193736201020401750153196590359525341207466344738924e-24",
+ "3.134150030471711279256995275341887761156963675682933328476437810109959425395050019306074135780459168092270327572635795510e-24",
+ }};
+
+ max_err = 0;
+ T v = 0.75;
+ for(unsigned k = 0; k < small_values.size(); ++k)
+ {
+ T val = boost::multiprecision::sinh(v);
+ T e = relative_error(val, T(small_values[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = boost::multiprecision::sinh(-v);
+ e = relative_error(val, T(-T(small_values[k])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ v /= 3;
+ }
+
+ std::cout << "Max error was: " << max_err << std::endl;
+ BOOST_TEST(max_err < 2000);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_sqrt.cpp b/libs/multiprecision/test/test_sqrt.cpp
new file mode 100644
index 0000000000..f845492e08
--- /dev/null
+++ b/libs/multiprecision/test/test_sqrt.cpp
@@ -0,0 +1,242 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ static const boost::array<const char*, 101u> data =
+ {{
+ "0",
+ "1.77245385090551602729816748334114518279754945612238712821380778985291128459103218137495065673854466541622682362428257066623615286572442260252509370960278706846203769865310512284992517302895082622893209537926796280017463901535147972051670019018523401858544697449491264031392177552590621640541933250090639840761373347747515343366798978936585183640879545116516173876005906739343179133280985484624818490205465485219561325156164746751504273876105610799612710721006037204448367236529661370809432349883166842421384570960912042042778577806869476657000521830568512541339663694465418151071669388332194292935706226886522442054214994804992075648639887483850593064021821402928581123306497894520362114907896228738940324597819851313487126651250629326004465638210967502681249693059542046156076195221739152507020779275809905433290066222306761446966124818874306997883520506146444385418530797357425717918563595974995995226384924220388910396640644729397284134504300214056423343303926175613417633632001703765416347632066927654181283576249032690450848532013419243598973087119379948293873011126256165881888478597787596376136",
+ "2.50662827463100050241576528481104525300698674060993831662992357634229365460784197494659583837805726611600997266520387964486632361812673618095785565596614793191343548045812373113732780431301993880264715023446550489842580232941386277966868361303367582384418115607849009560004137515027529165146122584386186492069906092666409118801573969725237770253874824784863348864259750658951309573876342725192688040202857185924973630809978452538550099964101929825864558813716963467480152897452330473583474775619896089188931497718648548480469365216002979523919601823809165790411297975297712884880166754700558630196824142164233836361751921305615135984170982837036342343558097687424487526178010922324284883919536725153974582825630336511862808790203551930088145604026487771415650048376723275094136806424717481635184471307383168191953698843723340165605500555063029823385865249561125896634362311039438867484401970215424844692673432572876116452243380115662703163531763018031226825617668891776095502388960424467990521700581770868994182958846287294933254842394882655811767896697230383860684402997328870793925904767307522570843",
+ "3.06998012383946546543865487466779458212212931325292345360920786339428774168895114940961908166467541760759370742449261902703454294050994162164179758776674921695210543321431976582792749695268039936031183310664759907107096641183589015949857072626264281130269822115622663836956231385381805315027562932655928781117811850728886383553772535550181070778545447895443834405205758132853217474114166659516983365541988620856642054467498643554872029717170398214071471942791253118514487638811304670059307541182798357443181785843119089299569008318867284816553359946310778010700675312493633986577498099096587006610844378385188518085716548910095121883158502955712612589941408660542373794977570528185247073824741671612893506514342410201362222059007498227945177352958046758148141756202994673600560820713848287574799339070054752116909136251765469324207685490757710781971553227808407026035595494277776874273936176792674139758867775825077183338566625556426910971465911191049352588901212917090887839548860059100937478465817844825147395110789153650851340493729565322385491250242078198566481445683133486898404370694024388072677",
+ "3.54490770181103205459633496668229036559509891224477425642761557970582256918206436274990131347708933083245364724856514133247230573144884520505018741920557413692407539730621024569985034605790165245786419075853592560034927803070295944103340038037046803717089394898982528062784355105181243281083866500181279681522746695495030686733597957873170367281759090233032347752011813478686358266561970969249636980410930970439122650312329493503008547752211221599225421442012074408896734473059322741618864699766333684842769141921824084085557155613738953314001043661137025082679327388930836302143338776664388585871412453773044884108429989609984151297279774967701186128043642805857162246612995789040724229815792457477880649195639702626974253302501258652008931276421935005362499386119084092312152390443478305014041558551619810866580132444613522893932249637748613995767041012292888770837061594714851435837127191949991990452769848440777820793281289458794568269008600428112846686607852351226835267264003407530832695264133855308362567152498065380901697064026838487197946174238759896587746022252512331763776957195575192752273",
+ "3.96332729760601101334502876512018303152235975639619479270725806219673871802657165722877418785963403123274056479329535362288655768235647487599476465537517349983459959396942125116402730874711739662452418728544662333652033991382097872017643021546533893998444782653493302314148486254376557154660429700133894837513481248619445021033294987995072089685196890751303705448870314051631971912137432499217943513505107459328579034234471969034380444279483175756904340168935694146646969758408612915912693951504143726276325727089094957428376128777490747011483653095038326498799910297470352498638922548951534285262912166233490129232297588127154122989932582549543207430381783967345221251717788180706706197608063733887726205509696294918128904282730298886608490931339746624769514837195042182809390984886538469878790432756760740967852006981627342718373868089930899834470763073879097175124340898791818850834951894187606842759251386865815997713188572196024482151907891258713869124247005410786490332294268446455782911914942752568277824622418634516620092362780994044583559067632108995042187023154200764184950878131638370936876",
+ "4.34160752734960595617808776374477460723265336870727556185727396662220923171777437150069768940869308257867815441035461967651472282081172615279256504443662226606580627885152042042903335792297058916252842051925089290836831715454034263505813680769125291515266958692652530407528011558306762163905143207811598688431871170088962518292286615299738096190444738533203161905492043851016820053962091086343470680514156330656554108208679889001485483033545415301817702473378043508312559202170115728182897990337699623761986171416615021158179762123766012269021534563660979972864906653441725316241881374716900480598276640840394699718984639649897058274667150152948516142801074260038108590401332448730361188129358652703927446859710621067457990618378017703891730724396666299819790072397688972686459430503026856861736069218065420528347106866972580915029753621255304587561985717307629932540410639210302482882847873727015801634901755832519840544096758977294231047035556754992897011888753217953080197537610448726652746992121685068257440261763964980703424121083058605934982281210054435774069392790646709404966217005552197344493",
+ "4.68947209983475140722248849561783002846415813208241069816339837584532567997445983205028355189765592648498726557587869684603896433394456735512692292415879610033794342501630732934996209978740746985164578019897211786300244708711916089199260058311084265831293902281791295846169702839730909351250374703986364508165540235333505281067384239291594323539816814423865582516577000094943855922812941268841597446572000848645702560088494072507948045804364964153467630734509663721026050762887316466331441449595084971862668493255933265611225629677595775797966272446890047531313544059153687362017301654537115283160575298256857111770084802622759507512748413868494678293024737576577634559012937002405564693237564782661478500575417457048864770102766387138956802222948987452086048547098754786648793023622941962569186040944009281487954082049335826413270469685003200962898734900372045181956983558503256265211391593721293841419380653006415407706145131700572194167555007645631927616801157793244790467083152103173240943823769137606544644820547634530641496507929783339735192083140914072272339899107017006649210880028740845785609",
+ "5.01325654926200100483153056962209050601397348121987663325984715268458730921568394989319167675611453223201994533040775928973264723625347236191571131193229586382687096091624746227465560862603987760529430046893100979685160465882772555933736722606735164768836231215698019120008275030055058330292245168772372984139812185332818237603147939450475540507749649569726697728519501317902619147752685450385376080405714371849947261619956905077100199928203859651729117627433926934960305794904660947166949551239792178377862995437297096960938730432005959047839203647618331580822595950595425769760333509401117260393648284328467672723503842611230271968341965674072684687116195374848975052356021844648569767839073450307949165651260673023725617580407103860176291208052975542831300096753446550188273612849434963270368942614766336383907397687446680331211001110126059646771730499122251793268724622078877734968803940430849689385346865145752232904486760231325406327063526036062453651235337783552191004777920848935981043401163541737988365917692574589866509684789765311623535793394460767721368805994657741587851809534615045141685",
+ "5.31736155271654808189450245002343554839264836836716138464142336955873385377309654412485197021563399624868047087284771199870845859717326780757528112880836120538611309595931536854977551908685247868679628613780388840052391704605443916155010057055570205575634092348473792094176532657771864921625799750271919522284120043242546030100396936809755550922638635349548521628017720218029537399842956453874455470616396455658683975468494240254512821628316832398838132163018111613345101709588984112428297049649500527264153712882736126128335733420608429971001565491705537624018991083396254453215008164996582878807118680659567326162644984414976226945919662451551779192065464208785743369919493683561086344723688686216820973793459553940461379953751887978013396914632902508043749079178626138468228585665217457521062337827429716299870198666920284340898374456622920993650561518439333156255592392072277153755690787924987985679154772661166731189921934188191852403512900642169270029911778526840252900896005111296249042896200782962543850728747098071352545596040257730796919261358139844881619033378768497645665435793362789128409",
+ "5.60499121639792869931128243386880089385432377521078326495835339365228337765188797433638433752458537394171467057445629904555420755398315175666449466777454516186127276489666213119783783503829250827797595051437870440938931280680358959301715436419833364761665112542860561623096658225538557287000997305661352632293104827706037023135997795899396723258283708659284220534304000728311717413345472853792896822724499122866947121737000944102509490771269197783584170349935127887498647119562411695900883847124507613781432804229894058444676290534036738474342530360927632101836180145945813951643250885687876144098262191352431818136969137533863587873139725102593606754797723773610593636883665209271759639631465381618953021812982067002849796433240989364353192362974216155114226322430340671719312492223369487631048057665757861195096925695551107847621963544401115555199917577802008717751423237289036673475431186363543556380872803928482717387196307480474684969943012499128760245113496312609854517190311704797289830560651678579059756085781560282375298034806741180400732788584921019507521738918616603376508365622727087150932",
+ "5.87856438167412823505442087789707097199843492103867437517314210715732455817816855246687780176492612349299503748836474526021467611461493586217913925495851405816296682706960791383913340375739628111898270614813266755200083564799407766788027485532332352024027224698199060815938197172865670956402289304658624389748945536687871488565787601288863899811544146566179125054361345491299666333144296548463580152591320203647485383402648565396566035890953872530543987300700877916661520962595410666627445873003711787722452859856569260494472375128936533790154715039734447084354515787738062350432618897439009684320850395595213875985248081961123885179420668160222435104348738172793787396737481265016580386986993101160673821650068377182350730255005754757604683510524357896861879706617761317908260663342673848298530050583191985919675390877532981022238129601627016291632330926779809631293070560375804444455958596407594955858475081851191996245268822870776361657887467004531332263395611291120089229481068789229695018187723686024313640325575962035428327239557079268995825494033666401736558372076816062703768818475224366442780",
+ "6.13996024767893093087730974933558916424425862650584690721841572678857548337790229881923816332935083521518741484898523805406908588101988324328359517553349843390421086642863953165585499390536079872062366621329519814214193282367178031899714145252528562260539644231245327673912462770763610630055125865311857562235623701457772767107545071100362141557090895790887668810411516265706434948228333319033966731083977241713284108934997287109744059434340796428142943885582506237028975277622609340118615082365596714886363571686238178599138016637734569633106719892621556021401350624987267973154996198193174013221688756770377036171433097820190243766317005911425225179882817321084747589955141056370494147649483343225787013028684820402724444118014996455890354705916093516296283512405989347201121641427696575149598678140109504233818272503530938648415370981515421563943106455616814052071190988555553748547872353585348279517735551650154366677133251112853821942931822382098705177802425834181775679097720118201874956931635689650294790221578307301702680987459130644770982500484156397132962891366266973796808741388048776145354",
+ "6.39067324283344282612593456066836977441869915362953508565729525367923342752058036792717988019560288813706968456779323116609349360225813396901702110619796078057334552019514797946669652098699860634363540091309264934180808145340898043417996593792792270890934539784162252743214627553825160296688912049057995757459733133778428381528832147374042143201083422723391419017423476330077549613969668943960552183346770788992856348755201584958184758568943497685412776464637452851023132948222137176500877587016169499594616364239121570837276604948806785595382545249190023683014214186698190428219840682236280784558646634466507658233281348215201532077497422563499058676631131322841280086826370841460898715011137512038685864392079526912553523177019272440755510704279946872616455555313590656257840391404433847924673482299505689689769822347893968864046186358674105429643912021090605610906309627700793415194628412350783590691473324467581637253579290246840759262280795786394666829277098636383739586574194509405681992353099095656288666217128758044223382834658781601679058686559406948665993762673723079305381020139309264407402",
+ "6.63191504395654222093463225517095044257167358492883535520176025342395774211712657468200830942121109644363941340107615485128085049415855416468332623498613542536495098385995084442339062608583978638604918143347913056760626947758803721255941289939544782980624105947726287394246015934530636662452762740891034120692720860989191872617116876270993379145692068344563800080161568845297279023268580882621139265056001709415926357601143767499984660052292050156852098465716279953503805000122483365981348049448669145674005237424902758331184292667285733831838736385479377968893647208473593030642721808734551034183742049017463013327984017500270415348903044357529006803230836576763451403141885042163557880315832238470993889819388689962997828261446921618788229788339158160824684571810429272556119989956914418082964164895325888955223056217505031535326694543563995771654860377141087298652099371042888622930700365091746883791244230649741108473410207660026523417093735663777713562847430184433298925557785602803469943746593977417910571201562354064143775475359422531818578919533441219169564634992179085747739421396934533170253",
+ "6.86468424647826745014070025117717964024823451584566770298700199608686799810550334183271384036184024738713075357138304363500729701192009148330990514337822154917664169841019331985106373480242557119822580196465316734207821863081970176402541887949909079651180860550135778414330866329785285584237686124445664832783599634024854488870218943262246632754953077685614238917113547631797236909830439953169012672877303232625810370072296875077876422022480554261365112845624378648826827015798512264531843127157809664230543124721508342792582642801227649598361094857362199437229919720183995231808663615464777549808840564458629976163064258768399634097749419103019327558046204392219063653339901570969874642832022669018679996962548734797438261313737916279431144129292768130662584134756962916924264725125780137451698441993315631510366262043104603857813311015159104411207656587159892683007990478175317339407414253752547566811439103970532316615414849940518882874013736359501398823560697095317586441184708051608329999378177452455843424936412317738990534790002839870054268627101977849744783551897006721190846394315014179836658",
+ "7.08981540362206410919266993336458073119019782448954851285523115941164513836412872549980262695417866166490729449713028266494461146289769041010037483841114827384815079461242049139970069211580330491572838151707185120069855606140591888206680076074093607434178789797965056125568710210362486562167733000362559363045493390990061373467195915746340734563518180466064695504023626957372716533123941938499273960821861940878245300624658987006017095504422443198450842884024148817793468946118645483237729399532667369685538283843648168171114311227477906628002087322274050165358654777861672604286677553328777171742824907546089768216859979219968302594559549935402372256087285611714324493225991578081448459631584914955761298391279405253948506605002517304017862552843870010724998772238168184624304780886956610028083117103239621733160264889227045787864499275497227991534082024585777541674123189429702871674254383899983980905539696881555641586562578917589136538017200856225693373215704702453670534528006815061665390528267710616725134304996130761803394128053676974395892348477519793175492044505024663527553914391150385504545",
+ "7.30801444381621929576410414169825272457257572273051004511973439898925887398217614148081823016200949202834301901341123741998769012029715026961550074765354322325117408706019312795809700115432061001422232366558866090103569420172751971374783210350559722862260759626145820691043338967446065368729759698186882375361190232710825561214648603121419802078232806394885971508914082308000592725279784010670779537521209568997392415395010518735400320816396054990550737425086661554419518324971399666539322809263579915158239535250650034449433728950585403021312904469201906868572755498527768200566105436948987083446413896510763908286033307148367944294928994814851182637242369700047960905551015550891703778083820346244133873451184266447103836670847395501001367479270898875772403881434563877248062713559640372882766006167571899610660259996723172304669594755157014583499099899215181509673430723657636479581940652958938443019241663200400679385786760329883423015546482354218805580324551932049528493376425537320109696781135375077474891741199783559527857010245972108769520093587637938249980386334004821761518122012885593787752",
+ "7.51988482389300150724729585443313575902096022182981494988977072902688096382352592483978751513417179834802991799561163893459897085438020854287356696789844379574030644137437119341198341293905981640794145070339651469527740698824158833900605083910102747153254346823547028680012412545082587495438367753158559476209718277999227356404721909175713310761624474354590046592779251976853928721629028175578064120608571557774920892429935357615650299892305789477593676441150890402440458692356991420750424326859688267566794493155945645441408095648008938571758805471427497371233893925893138654640500264101675890590472426492701509085255763916845407952512948511109027030674293062273462578534032766972854651758610175461923748476891009535588426370610655790264436812079463314246950145130169825282410419274152444905553413922149504575861096531170020496816501665189089470157595748683377689903086933118316602453205910646274534078020297718628349356730140346988109490595289054093680476853006675328286507166881273403971565101745312606982548876538861884799764527184647967435303690091691151582053208991986612381777714301922567712528",
+ "7.72594721818665232400474478573212164113820580488963719814529844615257171391366083837598391841280737832475169393182272541886671862529201489762301217381727573506969107619318907033743713523584964748522235434860386240308259592226625308659565532071953554996921178294803994916620561170523298903408385287659414301910401193614716492481152548641726819012461794117027835912991336708840836650710281453954679059886797070453447940199379600879845764678851272615250256962113900000364647452410778972648375707943133926939195015381201426487954498462993056064744870715359730063675217952027028557542103700913113678148959057734510658771520791956879881016752781141774540974358264943959912543543231872348745595316009779251124673800869204892703157616225827295653493619371958957677652500482852408284671621135986394278188285088465620289846607059129785050607459357597788813170941394726408533348925805369815717709891710786025165701419078226562572328981485933748567540138562641027503508306197019193198804817270177795577482266694943462207325431350513542160949582976461379550638607760760045294712529920901600994240565773585313185966",
+ "7.92665459521202202669005753024036606304471951279238958541451612439347743605314331445754837571926806246548112958659070724577311536471294975198952931075034699966919918793884250232805461749423479324904837457089324667304067982764195744035286043093067787996889565306986604628296972508753114309320859400267789675026962497238890042066589975990144179370393781502607410897740628103263943824274864998435887027010214918657158068468943938068760888558966351513808680337871388293293939516817225831825387903008287452552651454178189914856752257554981494022967306190076652997599820594940704997277845097903068570525824332466980258464595176254308245979865165099086414860763567934690442503435576361413412395216127467775452411019392589836257808565460597773216981862679493249539029674390084365618781969773076939757580865513521481935704013963254685436747736179861799668941526147758194350248681797583637701669903788375213685518502773731631995426377144392048964303815782517427738248494010821572980664588536892911565823829885505136555649244837269033240184725561988089167118135264217990084374046308401528369901756263276741873753",
+ "8.12240393759049993775056085790344905374064693901884539671441829845338578772903259406144188243219398035169276840513008383162269420554517811059936012081975520344394583550625149140104890709858952675303897227339074601057818074118589698571155136079180679720382723235231538458633009534010518571057778133890494075838487054606092393806209145857916456072372240571169803355429160587649756506023316970860684505132706954885924145348134169632738593180936266392964765757145617588713808060798434336980045883860242149289652316891255507207532033909817967022156020135008789172223827513417867030366597530330645580768779589871599830015247516272684746457878444123615590973536303130500232072733480785298450742941376024222195955073652956648240243919431159576650278660779563988680861574614265500071902828098808112054130736935301171188377689518808421589113550324566036499684989624896195759485888011688106014339156094756792157734665908674538715149602342862415095116193802949560661722409343540501008020488626114518430540516030303410754550714099923563850234789351977675338732716128448507828986158960243138593921163553099984790877",
+ "8.31354547584695967940566378712267275288624539467359186240950261388420109063530469298372814586792322543394723656678356561805557643176058539909258806409526952143256265316829288574367192300134911326662579540672482872991356622029261017993364337446668505438648868283461277399259103747660496390168344220787056266691284920945026070198958124599742654165567628853365640939746555309453490999458540074120276825684247685153740702582674467303878126564742370625497947819552642763989933468008133993752611603522750223144711829552595043853200184607806501342069297514482919782863001913353586468996478801683403541333200250999752731449803793607515150980663437341133381305911283161078249341037269510562017916894714417589792091216017912110414165892331827272726552875986295229205099562827308056238370455191631964062828836731217300323551683849308479366652512262425881556198411502851577353998426212961146886854599036602811970862235743112454698389727605325232872049778977783694191972600155385422071256805381015864689257913905946358386236370406339271062529911829230871245337410607604318231151206871615890518289557823950960924210",
+ "8.50039005178969681405606694066857144339871874464321576831825225912653747873113563539576206921739603496466768191005963101509608216565231580166435976841183722328004091691395570837807106693569643325702021135074219386315687196397182977310724857959339705673410615655661738050498092907663921364482163693412990352699674010982361328463115845819153103736613515518538534444209396391044515527047534370066166976494484027905402462724778219101349242704419346472667550031765101749789603575074461809215731212887738126264415774177469700439565715044625979289026800701352092929127409916129794527211068956300531815748065200493298365734410099333662178356881545890691882401846675346795963611125059579096807842008824231421616080054119488676338739204001665175181321425845571967990452486774866455322197409200481385043451140315730188098217149173808292210439135828385844496694628703028478095465983540068867270220327383626367373083798876294946716176284955504565982296829544751335108774407823029718852800476212574258039209896227934401044333736396538381519446030490401670705477490565602459130058989097840050168516571928831986962913",
+ "8.68321505469921191235617552748954921446530673741455112371454793324441846343554874300139537881738616515735630882070923935302944564162345230558513008887324453213161255770304084085806671584594117832505684103850178581673663430908068527011627361538250583030533917385305060815056023116613524327810286415623197376863742340177925036584573230599476192380889477066406323810984087702033640107924182172686941361028312661313108216417359778002970966067090830603635404946756087016625118404340231456365795980675399247523972342833230042316359524247532024538043069127321959945729813306883450632483762749433800961196553281680789399437969279299794116549334300305897032285602148520076217180802664897460722376258717305407854893719421242134915981236756035407783461448793332599639580144795377945372918861006053713723472138436130841056694213733945161830059507242510609175123971434615259865080821278420604965765695747454031603269803511665039681088193517954588462094071113509985794023777506435906160395075220897453305493984243370136514880523527929961406848242166117211869964562420108871548138785581293418809932434011104394688986",
+ "8.86226925452758013649083741670572591398774728061193564106903894926455642295516090687475328369272332708113411812141285333118076432862211301262546854801393534231018849326552561424962586514475413114466047689633981400087319507675739860258350095092617009292723487247456320156960887762953108202709666250453199203806866738737576716833994894682925918204397725582580869380029533696715895666404927423124092451027327426097806625780823733757521369380528053998063553605030186022241836182648306854047161749415834212106922854804560210213892889034347383285002609152842562706698318472327090755358346941660971464678531134432612210271074974024960378243199437419252965320109107014642905616532489472601810574539481143694701622989099256567435633256253146630022328191054837513406248465297710230780380976108695762535103896379049527166450331111533807234830624094371534989417602530732221927092653986787128589592817979874979976131924621101944551983203223646986420672521501070282116716519630878067088168160008518827081738160334638270906417881245163452254242660067096217994865435596899741469365055631280829409442392988937981880682",
+ "9.03777677270990269726949426172862835196387072970673604230446563698972563128792797577778210699007499500445574250898762044933778750351774122552995617564832932129894429850247153326323323596747185514513829114667599621242841895828094634599104752390660626316359597361160805506977060785864672892966797271805786612860244448725471833865343085096665002696889160030343332226214610521511200144375391579536397373156980251473081426535067176615086187889982851260244145348339114794114481076655003899438879933457078775812975837503314934547103980296764470525861438620896571785240248887907778823513254337650341006992728965834432443948838718849505116031704247005966435163013464172640987633315418180257980416126510536269126886862377598402609093638096342316879109441931256004415158100347181648434500606990925357893191947800032622820087068319734681796146574385134374500536260087114364120328174363307505811192446227573869975931538764994397186624871438876822552201130556306754697296734741569342977980309931897617697257730057945805570021974106384510091603635687409774141632668637120038927426728226929784072977105651339473101367",
+ "9.20994037151839639631596462400338374636638793975877036082762359018286322506685344822885724499402625282278112227347785708110362882152982486492539276330024765085631629964295929748378249085804119808093549931994279721321289923550767047849571217878792843390809466346867991510868694156145415945082688797967786343353435552186659150661317606650543212335636343686331503215617274398559652422342499978550950096625965862569926163402495930664616089151511194642214415828373759355543462916433914010177922623548395072329545357529357267898707024956601854449660079838932334032102025937480901959732494297289761019832533135155565554257149646730285365649475508867137837769824225981627121384932711584555741221474225014838680519543027230604086666177022494683835532058874140274444425268608984020801682462141544862724398017210164256350727408755296407972623056472273132345914659683425221078106786482833330622821808530378022419276603327475231550015699876669280732914397733573148057766703638751272663518646580177302812435397453534475442185332367460952554021481188695967156473750726234595699444337049400460695213112082073164218031",
+ "9.37894419966950281444497699123566005692831626416482139632679675169065135994891966410056710379531185296997453115175739369207792866788913471025384584831759220067588685003261465869992419957481493970329156039794423572600489417423832178398520116622168531662587804563582591692339405679461818702500749407972729016331080470667010562134768478583188647079633628847731165033154000189887711845625882537683194893144001697291405120176988145015896091608729928306935261469019327442052101525774632932662882899190169943725336986511866531222451259355191551595932544893780095062627088118307374724034603309074230566321150596513714223540169605245519015025496827736989356586049475153155269118025874004811129386475129565322957001150834914097729540205532774277913604445897974904172097094197509573297586047245883925138372081888018562975908164098671652826540939370006401925797469800744090363913967117006512530422783187442587682838761306012830815412290263401144388335110015291263855233602315586489580934166304206346481887647538275213089289641095269061282993015859566679470384166281828144544679798214034013298421760057481691571217",
+ "9.54495610016641218053318050888027529952710202531153199575774210745792169686775867122286336893013980770883110393522762476818358876088129524710547725582400752350379006684967820956995284778747313445279111803934019554639715103722176378053227974233654201464826899178346960385701319012743023002834221825212678330062853593931422954382790959273783367681208829081125750296573583945273785727616528225035230730367043489573228646448365807546311686441424497747445818035366984113867781703025697773957490231025374107987159920796065423503962296590063470579872505263841733246548152591941651333013912614638133883335123920373070975004252305213546254181990284206802141740422901313199964786740911915995115427439794642825914605300283815175742959582878011011823566253034650282755730842497543625168601556462908567644285914941630229285900004349592874758990965409149767611455899099763319215107166406191621967564685710927764812630422088568711352107239482256315420275932243379732104022438119314824626037473517483829358567542790510299355289069031782291584296420055747908391149240325877115257851162524812619999740512151814664737655",
+ "9.70812956277849627020013008432023090142391629970752953381907255677408677683608283777972133699852226057384221251532058096143107203837634058545789370004650021408813594346758795590127624936380909477521162346782666694927945494282229717053636144889370566148233104188061190841182087686652430168640066046228725465172358875908141846376474355637636250095973439621439980693326786799959495956257525100473767694685408934461084692899974993028686930219291782447513786152395692604500383372485738542065647909407318214440351068221656470065118040045018410800167501279347597149519022186563837419966281229875188530501814945342053480368694378460223735611289594593646472862387163956627509412278526670700766402504793826839677765281076427340901353768173748184477638624215647772178191872811543334258915265427131978394362810703976093768885428630849932102391562462424663355002600929871388002261215265969294828417306845017134019844876207436524153517810279329274165301203983428519852972984397790790147707779427760025639355001932966608597649497333189984495365421369654196836993842047830874262598283161232047618963368717192374581237",
+ "9.86860538583256911820721127887475338860580572014113804764764567126280797502596779665406841324694419448453464475175038076268453561722477590781196193451866802150809759490712608888093911291954287843130175265867101964469755453143964084226755674039351003953563412948117884754289084798586264882426396661496381950383124624978217697985543751868445611832757526512148116901823991753587937386414616186527759915861182575983960867544511432164162055576224548617161606250500799648602173880407153261952724142638011741327947253437647196929757560958075420545787575757761080599830662321444781770561880447820833072140574469797429581558718245198502380676502327269925525873736136551448095090807729668471638614047172598418830416390391932045518785962567615347617805861430300764479148941742520703366317243140861995853488523921623877514753981220597859917397820846973107706661150411207144792858833362409021546109104485305007696344300462841655088641041139133938632803072811438751371559900802700904742289494188612587210415338399019832109459618353269954649298194490921810882187710461971651611477483705188781040460993037832290727754",
+ "10.0265130985240020096630611392441810120279469624397532665196943053691746184313678997863833535122290644640398906608155185794652944725069447238314226238645917276537419218324949245493112172520797552105886009378620195937032093176554511186747344521347032953767246243139603824001655006011011666058449033754474596827962437066563647520629587890095108101549929913945339545703900263580523829550537090077075216081142874369989452323991381015420039985640771930345823525486785386992061158980932189433389910247958435675572599087459419392187746086401191809567840729523666316164519190119085153952066701880223452078729656865693534544700768522246054393668393134814536937423239074969795010471204368929713953567814690061589833130252134604745123516081420772035258241610595108566260019350689310037654722569886992654073788522953267276781479537489336066242200222025211929354346099824450358653744924415775546993760788086169937877069373029150446580897352046265081265412705207212490730247067556710438200955584169787196208680232708347597673183538514917973301936957953062324707158678892153544273761198931548317570361906923009028337",
+ "10.1819721846243116158211195253926465666143347779815073047979911288728454119358550456874471060202706503091805338588626998024526166707650425773136658258074400903070578475129191134262714581830920726995815514653824789384673555040322558822640155690142138250981661144460598431698331929864441089428405069965236237150722105664811612049206741649626761309984600129580251270318577455853101292940548425839036066861121228690420716119923444705834233799961792271274742610225908970795751081615038981535248648458311885095799828145600663740483135495656806225462943772037314913924014868167062651948437081797920497967655996219852832742745294377907352391106793565373082008386931837077219804533025205245429016269305924868300059131465990367513110617768155977075582917392828200481639719171646996937843435515414397834073681939587838302796801187221313907962667869992989319909211964361393188990384040622902615977028693735275429763987359474700539603288721055646644016768647749162193038655134281042688011723482785471924105498640148127126652745316007086053077591814555887669601195725983108276147651242913586147914229810924624624361",
+ "10.3350931404633683691947436472707444709708693615480182604123950370334349544443021679231379500921649218800863593926760528756661011078126321844492668291462478393476503125536591219070509735210428947761875792828673301887541398513337078226608138436426593790404989932058023039769630384800611394806279966525193241106630459881453504032664228967399745528185257298594581458987077801324925958107100694837096169968690367946833033746754352596262639045628825434791015203759110279895685375377254959267384242428992179590079538654788434703331515082118259553412887391533698850248031662366010669929529784194795489078820235616519309873494295540734349932360576182477685064907138632368679604675882383935711506161826635113153997912713265877050477273997328780264216580134895532814312026671290109568535316587756940503116601114428904476514966934012890148992229020985082631236739332830184773141236150086303025054599442020885304151228567409725486746114685532611428843970696553723054870710919524255238928541738356450696516302034137957025179252274911492305284875580251537498242752152958407117066303014561567387290966125697410459079",
+ "10.4859783938191844505415935988555812169983910386669556187311537807971601489415184480294324534243750962935064587431065554132339655732601450466677346771766404683525586939467074949776376839516117900277707447519492965025773007813570350841194233890993183787851607015508682597768217867560501711087754801339252398186169563368609851974003387177803015256072875765438214167126280799321733391301521412815249368328101551446918784488181577223454487520647934057527710710187315407383842241034812304414618212426764289725514443697625658320934830119552552349454613146318727307440539214183275364282577270889732517818803743197835075972826771689559984211698450313448053374104683526842305753510193148049529361498811259623906343956382898276922773672099874559380274456904526382655867821184634279087424431765532414870700646132525635436192820560367779661664927428988733468931949806424994253052465407314901679252685856376776344476864227019344231976962348967817311235507614203388405955265951309377513783090550287722753128747261754207014515315881341170594023794216162541770211605362973081229737656368414853828067103315720270750873",
+ "10.6347231054330961637890049000468710967852967367343227692828467391174677075461930882497039404312679924973609417456954239974169171943465356151505622576167224107722261919186307370995510381737049573735925722756077768010478340921088783231002011411114041115126818469694758418835306531554372984325159950054383904456824008648509206020079387361951110184527727069909704325603544043605907479968591290774891094123279291131736795093698848050902564325663366479767626432603622322669020341917796822485659409929900105452830742576547225225667146684121685994200313098341107524803798216679250890643001632999316575761423736131913465232528996882995245389183932490310355838413092841757148673983898736712217268944737737243364194758691910788092275990750377595602679382926580501608749815835725227693645717133043491504212467565485943259974039733384056868179674891324584198730112303687866631251118478414455430751138157584997597135830954532233346237984386837638370480702580128433854005982355705368050580179201022259249808579240156592508770145749419614270509119208051546159383852271627968976323806675753699529133087158672557825682",
+ "10.7814158709708600973470860025697540134833131069132002021875135200480437122785122611113481677522707878078270440052147356092727695527920302171183192478655274869472668345393510398722323555179529207792958553208776624344340893028683838808544904189559530608618288330229561660785494464076778823090275262667649435818366046674470097351430635081878043122218079020162033184280808128488592626175069016310564044843363282384351603178223984429085151346774445891706273636784622362866483557972819012892787057761108736681050757369877123799164633273904139629258646240624506200184033024483531204256854941841214015611888414080581230610166978791113905519323893487804024647095097676311979368148451812686908830353037070405782315727089541764339584093637958422138796375184575441595432133925090181949043536072178753049486872204759334059020258970699357154378751215836144836352430031659044940188023466979385706234766354871873384990411026120082971281373943799958524209806200235642459562870710282507653952117525804197309040193746636407624935115304309270078857483676519373602411048897743124249850703751765985347181558029527375643215",
+ "10.9261393381382494183949485187745355142392643001293200037804399336898503279246222062168613731063277954463829865410973870577192080366472062964040509440033278743615823412810808078908898807870613199997974098405643999383690286991545964650196935814017029950722564391559018285106664794338502744786047104831103687602494259961816398342935032870065474763913436754495569767978627808003615457573685732588153239217166014299098858554629191013913370517654023841228586351241202877223367260494855558385058038046339898004510183855157527283289679410125378588229499416948431610345648489884658061910043475079418189307489137285545541133794341838958556245644032832230955632382851912531436083565766604594268028883405369333102861811110938475059430428576302304134018133552423994855168237965050769662481212059909922125002130317511819126236377187306085364203705624983640591322488295607424619160166746461204981597459574970519980426620414393119798825541827904061106147335114790118012457207318406183818422346913078125642646008877987007918624713747892824771389677121777686596898164466209882065864762628266271132718624356253452793196",
+ "11.0689707511584805117811434659236005479075122572654030261378132541766399464801053452268915436339505264869099960261186473580786841783940799119071862844203935756997737196827013181251824477181865522696656125604284386736805412679099995442756521262882968085901005737598504818120062960533623452879232321601862728439436565082413065419068437974996041360159534876356676912365960559399896203071153029799663110896121451617844812242705440244059051070332217484066565235938948140400311999208370258263622580614733135218175221722605324220534894428960790855444760163600390939087544087363052520657480331091788922029648714976820617337239621908921583216442263332160508780261589523500129489988435510612958327244523134689294673236630152564918827636287844901928132768223334355784295928691382783374669003085509906226346278070859886444582772115212199422165986886962139084337282264595688658520928296714120909731973712859435413818042451694188522026870751629872095477433593107333415373943667221266057108367464732484461448541683512088757459353259534085109191456436195932802460979824143610395941363551604400219577421540555259221554",
+ "11.2099824327958573986225648677376017877086475504215665299167067873045667553037759486727686750491707478834293411489125980911084151079663035133289893355490903237225455297933242623956756700765850165559519010287574088187786256136071791860343087283966672952333022508572112324619331645107711457400199461132270526458620965541207404627199559179879344651656741731856844106860800145662343482669094570758579364544899824573389424347400188820501898154253839556716834069987025577499729423912482339180176769424901522756286560845978811688935258106807347694868506072185526420367236029189162790328650177137575228819652438270486363627393827506772717574627945020518721350959544754722118727376733041854351927926293076323790604362596413400569959286648197872870638472594843231022845264486068134343862498444673897526209611533151572239019385139110221569524392708880223111039983515560401743550284647457807334695086237272708711276174560785696543477439261496094936993988602499825752049022699262521970903438062340959457966112130335715811951217156312056475059606961348236080146557716984203901504347783723320675301673124545417430186",
+ "11.3492422124642983926102856582985015285395067466832927043380356548562390804853608284602050743042816031793047600978062552284631473271698301080420930678002935270860213755533376410950434831683129266708417862791056849585318715091316511224772804579306952692391203428022706911552905897215022011255923056920968598357445951686767158007175858503283841137547847702169068881757041416256682026875119665861386894957609106355261396135163282225259885976498039746087649186814655905823222925759171803884806349350968882196634773164961078791229532476208824156202390581863307496926197095334795614010135645721792945689410813947143894261828309379674182914788493173415091362063280686801906811659162851572848118095721313328315435166989609801810101070813864563570801067282282192253552931615123833493584040857696592187534301264584146553957310718712255292573453576205261351861700915480639583301267167270018138941290820062263217901164511455735107338870881079416882936221444752202024321144178837275657426737380444900404799010786716522164241960362132578101367581203971478969200704781556667157536062389987737624943537002727294733986",
+ "11.4868138076131153078093551672152110823792896720438206208589815428358866831391271502916151740432833498923733353034882653574261402114885623063517466286983135609311347428616058487641764580040391132399123735354188924995726084316672645564644522404101010145113496826905661533851564869311026284567807835770793084267376582965078917724760751368098985709220493218989081195410084107253702771346532326060479533778255009456352092653858186317227040032545274297836762746748179412232929420302325855877594918256439049163258491252026402004889017462470314144712637559338394573924897045814379676299403438700340396558709369818377199922811836650582080165464955651223303653264959752987238908036388800978603698543078745746928727371682109974731915482666302457811317513367974821492659153756397368790555646602353958513206947086398520237613898204615597814371058763275824648368925762130837683909032578524176198944131412130278847693768941107158139354113448426375117837953121182384305427053092552066260458822741364621133976801759853058864467919702658753108948232787444346415009083332605651415456404729714544798893173653905698148137",
+ "11.6227571644752653007277348109508691363662508507756756751036701167061120453681652358829612013449512186720692331837632298664953191556594884903747923711091159798037951823211201052540116242903833376452779227088949634320335447650281101165924512030256613650508677820241405437704762762206782047959767675141661427645411489541320052642562158115270383536284327256491550000081996990946292465147038958140512483013436893674439652156220554266153922101105181022227884639488325310071375913459006514297537440977563220662148148970327960819157453757205132071390336936162228686072898193957868554143074268366176486204705456695741921244062641977969446800006474326691825663289023526630549872030867738441378997270522928994756399267446297804673669222384728768703789276705361232508520458717382592703150193394825544156320863346704391789739396085519417964187584947528508961792799045137827190950383493042007176116232841260864577432961637844272929218361324891683925506702245396833672138534821860627603036634022415963773401638269124800251684954328516467828750283529560003793822429188759689400075614871516086231035596052689743737025",
+ "11.7571287633482564701088417557941419439968698420773487503462842143146491163563371049337556035298522469859900749767294905204293522292298717243582785099170281163259336541392158276782668075147925622379654122962653351040016712959881553357605497106466470404805444939639812163187639434573134191280457860931724877949789107337574297713157520257772779962308829313235825010872269098259933266628859309692716030518264040729497076680529713079313207178190774506108797460140175583332304192519082133325489174600742357544490571971313852098894475025787306758030943007946889416870903157547612470086523779487801936864170079119042775197049616392224777035884133632044487020869747634558757479347496253003316077397398620232134764330013675436470146051001150951520936702104871579372375941323552263581652132668534769659706010116638397183935078175506596204447625920325403258326466185355961926258614112075160888891191719281518991171695016370238399249053764574155272331577493400906266452679122258224017845896213757845939003637544737204862728065115192407085665447911415853799165098806733280347311674415363212540753763695044873288556",
+ "11.8899818928180330400350862953605490945670792691885843781217741865902161540797149716863225635789020936982216943798860608686596730470694246279842939661255204995037987819082637534920819262413521898735725618563398700095610197414629361605292906463960168199533434796047990694244545876312967146398128910040168451254044374585833506309988496398521626905559067225391111634661094215489591573641229749765383054051532237798573710270341590710314133283844952727071302050680708243994090927522583874773808185451243117882897718126728487228512838633247224103445095928511497949639973089241105749591676764685460285578873649870047038769689276438146236896979774764862962229114535190203566375515336454212011859282419120166317861652908888475438671284819089665982547279401923987430854451158512654842817295465961540963637129827028222290355602094488202815512160426979269950341228922163729152537302269637545655250485568256282052827775416059744799313956571658807344645572367377614160737274101623235947099688280533936734873574482825770483347386725590354986027708834298213375067720289632698512656106946260229255485263439491511281063",
+ "12.0213668967023250475121483705231298685008638313363655540949682389613264866896132906306098642187026618532213215211701448267391188368047667853571572694775536356753264174403972755252732243831827044176139209024924394250581368618462046261557956041495153611139167826243672443648055383775943303041688490663671373136155053510360540267843423005332353653056262845689595224998209096627100780784418138991680078849703487894125005007545215782339870314429009558182449825490593249314052067759681658697789673578678949212809806351598964422253804794344853941490798950989758297119239095904492398955585999875857616109880042018712293986158989479506589338238909339482879806698524858243147005443655293460070165320341112926446082098108538465624611435423462989443724332948895564374322613862644840100579844319808606840135928070026153435302458230552287194862404115544729553555860135767866296645359954013075856567898559441124011177102556776336026301858215217613058011231118563314739369153408486077998475470304773205610152830759374129202640779824926230644346880253659061205608241669503029250691241581669322113673069664040300361434",
+ "12.1513313969589473215460257145568651201497518877897922428050262513288347242121973389754626809925134955645428561432377800707082867615886711829398230527046072149152117757833141185434477765869902183850205483276767851442668275870416792912369988091698336520343468857746751071883637173754271209585483303314697136442637145609733795560874016392837967424129624669796698075496202528858880383635774883501185883268804218639948489991597161620364526639036982352505612319544441359778240876504358105343789015081880171993801331134760442658432233574812308195804501595367608510691945957205786397773541197798945975331217200866768614798768369352312293373100870145040568859670724160372893783528980570376945737242122861351956826347861801637766043000626205823928280244639867984099618586640713739887577174825475613963518050410729443551908819114265689677577478145683280934590715455378138742260694148005560374430740814239204990726910962840148903954657341678891978442315098243895522200158153790667123362932646639672146391300060334021960329885543548050873714607049607780426796959929658969497274971918388832149882433776112378434610",
+ "12.2799204953578618617546194986711783284885172530116938144368314535771509667558045976384763266587016704303748296979704761081381717620397664865671903510669968678084217328572790633117099878107215974412473324265903962842838656473435606379942829050505712452107928846249065534782492554152722126011025173062371512447124740291554553421509014220072428311418179158177533762082303253141286989645666663806793346216795448342656821786999457421948811886868159285628588777116501247405795055524521868023723016473119342977272714337247635719827603327546913926621343978524311204280270124997453594630999239638634802644337751354075407234286619564038048753263401182285045035976563464216949517991028211274098829529896668645157402605736964080544888823602999291178070941183218703259256702481197869440224328285539315029919735628021900846763654500706187729683074196303084312788621291123362810414238197711110749709574470717069655903547110330030873335426650222570764388586364476419741035560485166836355135819544023640374991386327137930058958044315661460340536197491826128954196500096831279426592578273253394759361748277609755229071",
+ "12.4071769563386121910871723833880162795828461928567098974966545289703789921372252696246545971698126579135877653699779946636530700600709582176756559672195094792342638905717358599494762112026557836025246676548757396012224731074603580436169013312966381300981288214643884821974524286813435148379353275063447888532961343423260740356759285255609628548615681581561321713204134717540225393296689839237372943143825839653692927609315322726052991713273927559728897504704226043113857065570762959566602644918216789694969199672638429429945004464808633659900365281397958778937764586125792705750168571832536005054994358820565709437950496363494452954047921238695415144815274982050006786314548526164253480435527360117258227218473895919440988655875440528203125946747677251876874785141679432309253336655217406754914545493066933803303046355614733012876287373212014898518464354302511069792971558150198002542994517182497196658469446954272237277648451310578098894153010149839496340312748322929392343542401192635791443342446849357926898503374322883315593972409393470519281160983565963805711107788379316117321935018451317463295",
+ "12.5331413731550025120788264240552262650349337030496915831496178817114682730392098747329791918902863305800498633260193982243316180906336809047892782798307396595671774022906186556866390215650996940132357511723275244921290116470693138983434180651683791192209057803924504780002068757513764582573061292193093246034953046333204559400786984862618885126937412392431674432129875329475654786938171362596344020101428592962486815404989226269275049982050964912932279406858481733740076448726165236791737387809948044594465748859324274240234682608001489761959800911904582895205648987648856442440083377350279315098412071082116918180875960652807567992085491418518171171779048843712243763089005461162142441959768362576987291412815168255931404395101775965044072802013243885707825024188361637547068403212358740817592235653691584095976849421861670082802750277531514911692932624780562948317181155519719433742200985107712422346336716286438058226121690057831351581765881509015613412808834445888047751194480212233995260850290885434497091479423143647466627421197441327905883948348615191930342201498664435396962952383653761285421",
+ "12.6578523191369022687748451647920884211351618089655179455231284731368243638831930092692097344570437079901479457687357718509226590879392775115842265975597049724341563061418697031268607830263630749575108233222183077768581512869483056352211926808706010251598533367951222352547093385705143351301673698003798847470899037622815846893505998436154809431208770604783851594929676185652397778605631719747005946930957513095696933347983859316339644080864356270066190757023433598780191812725848826161342208170182063208964958296027351135838121377963924650053695239000481943588371643194130257120532938135164021072988780496867855135805902766925269096358874433009794964404505124093744345096904976475426376615294176138495927979455477696384319750513407338903997493563537351640190122018222196334825106936172049588584462292486129117684021653955548443028996098787136328122645959968477838803895341464736220878601918003630919411584046348014738162733741711244046308733521756823739827300238391611818552174369697043280135230378038036669764857912765848567411839492389221128518450325850349211951118365174902595493189143091128924607",
+ "12.7813464856668856522518691213367395488373983072590701713145905073584668550411607358543597603912057762741393691355864623321869872045162679380340422123959215611466910403902959589333930419739972126872708018261852986836161629068179608683599318758558454178186907956832450548642925510765032059337782409811599151491946626755685676305766429474808428640216684544678283803484695266015509922793933788792110436669354157798571269751040316991636951713788699537082555292927490570204626589644427435300175517403233899918923272847824314167455320989761357119076509049838004736602842837339638085643968136447256156911729326893301531646656269643040306415499484512699811735326226264568256017365274168292179743002227502407737172878415905382510704635403854488151102140855989374523291111062718131251568078280886769584934696459901137937953964469578793772809237271734821085928782404218121122181261925540158683038925682470156718138294664893516327450715858049368151852456159157278933365855419727276747917314838901881136398470619819131257733243425751608844676566931756320335811737311881389733198752534744615861076204027861852881480",
+ "12.9036588082705845248371543632003751697456908407741692410784368848786088725089065725375873804520087666996942746345726834840639975755506362717246534706442221166298621207504273622834658505486588760226060303402875348318760592759886407055350301443543632102422510097863033684320708847504885397025676888805608608575632588352908208382177260510976770708247524111302977184221988730373831487689478022518795416243743368791870779402875990432576302206741559354874008433704301896418503322037242979413682693250947191295393881165307605408058206874512520008288998516843589530555818279993680055875466221805842339665434759158713770816962051147931208116808824595295514375045899970471981704078070597035475020898965145851209954427460157152268663408082085125094326139800815655980081696754509782998928240270234248524845103756193355528876937225771208802709529190373396585475974586241329821820837801569449366833520227139445910446436020810058939318594350345270816751238237726135838608689569520523122450244404454913108932211269247818789816060744177821446724166244434311897023559474757455995497570838056986157112960941696803729504",
+ "13.0248225820488178685342632912343238216979601061218266855718218998666276951533231145020930682260792477360344632310638590295441684624351784583776951333098667981974188365545612612871000737689117674875852615577526787251049514636210279051744104230737587454580087607795759122258403467492028649171542962343479606529561351026688755487685984589921428857133421559960948571647613155305046016188627325903041204154246899196966232462603966700445644910063624590545310742013413052493767760651034718454869397101309887128595851424984506347453928637129803680706460369098293991859471996032517594872564412415070144179482992252118409915695391894969117482400145045884554842840322278011432577120399734619108356438807595811178234057913186320237397185513405311167519217318999889945937021719306691805937829150908057058520820765419626158504132060091774274508926086376591376268595715192288979762123191763090744864854362118104740490470526749755952163229027693188269314110667026497869103566625965385924059261283134617995824097636505520477232078529189494211027236324917581780494684363016330732220817837194012821489865101665659203348",
+ "13.1448695675323697034354136539313425180677406990253396231413553532158284729201772491011000710677650219054903693738656249197132353617817043139899355573740668204032909567434296038746304150062741309218977952141761472466065644454165057415693463642194136073230607947203262919479440729879071393287017368357538247791027372780044529165958694345741149609916405379143996738502906726395310549057499135876771945647726253389292849661459433071570826833703064597528372476669325238379807256995707509496936873280377426680968490544204144850652418667102858872780887677263338414336218554299503848227359603371483052714037382060524446989585125868194539667288699342590529933341716843693870456228542919094333819496744852442099842703290379050058483746581999303382422470703068869484513287507363016362925163918396245228476769779932001778978178333151597445957345163009522871315976591629005355442432626542153837481717190476686292454901373614541009740405739756345322959707818426567664529141400786956674079108340389783956916039981285613130422619726646882192158229279130067633381058950064006933912115038270746168224845260024281286513",
+ "13.2638300879130844418692645103419008851433471698576707104035205068479154842342531493640166188424221928872788268021523097025617009883171083293666524699722708507299019677199016888467812521716795727720983628669582611352125389551760744251188257987908956596124821189545257478849203186906127332490552548178206824138544172197838374523423375254198675829138413668912760016032313769059455804653716176524227853011200341883185271520228753499996932010458410031370419693143255990700761000024496673196269609889733829134801047484980551666236858533457146766367747277095875593778729441694718606128544361746910206836748409803492602665596803500054083069780608871505801360646167315352690280628377008432711576063166447694198777963877737992599565652289384323757645957667831632164936914362085854511223997991382883616592832979065177791044611243501006307065338908712799154330972075428217459730419874208577724586140073018349376758248846129948221694682041532005304683418747132755542712569486036886659785111557120560693988749318795483582114240312470812828755095071884506363715783906688243833912926998435817149547884279386906634051",
+ "13.3817331184947121778387694156683631366934609178535869224734646839530858830882778845431320165557527082867167385741007241233972349668341335799303120558949874914731632596672292536486840252369343075578062661394846729290886120806335230931470676125584836958188275362750631959355148413735909208659653125785489545299880650571571989789816736276472548899331360413686815340230072317761139617108693201596677053371411718241422778714572140731264458353536124425397143067303995240635567710414918725517399711583125030933885900593041624549493909270279061801044266813541511476059360070953132414715897099793064187618904913446179695444823627572975718616435530412231897626821211591630120456854888471296525545355847536852618755937846705639827645780754110681069739162703086029559215644121294709889120500305321671981859220528418810561091642459738043327836329007402390418543140043048855442197107222952090170835732458531444797752568765756885481280298531950424829111511736236703060978513393719587267334516212509718247535160103206224947196863863264871876290808068433102976710291998849009357718081807090905471789659277124839575212",
+ "13.4986063691111464245935803057163445333446588880954505218387843221811866477814509702726201994868384090085699517429739877130502525078353243003832198065078057206125867558943180721358516952593492926100016791442634700742497189485375590347895515367419024810678201127613962063650779588258427129303547853247317558007027886497918350521735648476962160113303483169507138322563300579235728423638552959320773585796896051727660519635215799533389594349417041464679040078438099479890297375500511781991113346083206493978277223781060900609203238286306467871141396991230768088662632124270257464480586088316850690383023345309392492732989705825016919526022563362954082266181904414071139631058950012713540527049102477938879051900769524120919579312018938311603558253092272074870766079137716555254983943200583248719785173513772917080626726235739995775731701263869010544645677727292023394850886826745691463821983518385802531448450511994014078687762847948523441279737079750421003933691499255395954393282954286628119050279442723264746413216878905804503870657461514746916596067609999603045774298320322180133249625717533859092149",
+ "13.6144763601762444379926521651240108493489429948062675392899749011656367981822455178853834668853591318227100171777478230478862293910435061059034482102617694499353623610929608083252219728860071814777496237554962825789860436664713007380885823257620705055571016537859083323332155283573726935538232458058826315899029704394102678491521465094178345832292296568693637792747393915301530583743993444025896838065118897343043328452916631236017814449542928117422626902025859794220329730506629124433815526321617718341415931415683837830843770074490481176348422362162861812661346849873918814224705384024355691424864367748319171681413896659635516678441852608440834144162761248958567982479001381585906063881204351628751599665209292094281446522809539191841105420891950899912208472122984294731662074195162813392306707005283151329632622622723286645815527491117005404146816741085203466335075802165744347567892995323123529815454414242781188328567365653543913086263285794736485546877191137857066664712691746005042143722635223400766012268118857311779477233465292274708583508374133748593182509627918787117455241091542819813359",
+ "13.7293684929565349002814005023543592804964690316913354059740039921737359962110066836654276807236804947742615071427660872700145940238401829666198102867564430983532833968203866397021274696048511423964516039293063346841564372616394035280508377589981815930236172110027155682866173265957057116847537224889132966556719926804970897774043788652449326550990615537122847783422709526359447381966087990633802534575460646525162074014459375015575284404496110852273022569124875729765365403159702452906368625431561932846108624944301668558516528560245529919672218971472439887445983944036799046361732723092955509961768112891725995232612851753679926819549883820603865511609240878443812730667980314193974928566404533803735999392509746959487652262747583255886228825858553626132516826951392583384852945025156027490339688398663126302073252408620920771562662203031820882241531317431978536601598095635063467881482850750509513362287820794106463323082969988103776574802747271900279764712139419063517288236941610321665999875635490491168684987282463547798106958000567974010853725420395569948956710379401344238169278863002835967332",
+ "13.8433071145943080802284382623942725643459634316370295832402490811584690521837914916840395377602432304386346321516022467700817063042586192089471811215559491096430603765490105342479464734028031685014017988597008866099563434747509151656359907403458022227708855288944495192855866834164923404580317751114810233440974813740088485452355904551218828581183511828392819322800423143611251652965268254587551056785058961962030307952250857929384076417852708688910729480334385710261322295627380646587526400594088017012104793668923859704481465512725231143313046840031532848517753228102569245860823651766421422437423742518931925679240338180398466042655884199628267998290371715502966743259677385997995351151244386978277483823663420757491844034607904266068469818830496093618976553620949696221798505339106720245367168877405376645269053274617909080172273096809275302452571198400347118006550023013802032386296495237116432503947861118574507348019315687686050292633217476405553408632695073744388341821217781854190838168727859124017786167368413748894627539001773837225674001211236781270826204317868935713403376698315709386501",
+ "13.9563155783525897163028298734019451091984537120228258009450472188267318438067135063202368534135430885083946298549306330756477989556178368665622436754180093476324880937959506547854538083370019416256575776948316707917842310903894619857591393548227911657101468449311608259623964684665016119377046647048049581386101096936670413063222259162339202191273628263372563875815041957309547200658623166127371954284217563921132238888463255849732942787630189806285692737078454631222616459782467155377806421107402656800251572053070998411099760060179547316216902478018563990476197410484317348357273331772258891407220597320756586444959820203436442764666649896682610015685305787123195940452350461973507211933252869415122355860564522872963830841829314900168567809701229312807570848373079796018588703327116777837136272491150569217486925114594308036945621245791848046986349492932929571328689798094081442393417715210813349185572333277619344160965594558435011430506853671006276522611925991500789685436288350432338677840599188216306552667639876278614865474090999682755277088033035543967117665417559338997296158961230538684255",
+ "14.0684162995042542216674654868534900853924743962472320944901951275359770399233794961508506556929677794549617967276360905381168930018337020653807687724763883010138302750489219880498862993622224095549373405969163535890073412613574826759778017493325279749388170684537388753850910851919272805375112411195909352449662070600051584320215271787478297061945044327159674754973100028483156776843882380652479233971600254593710768026548221752384413741309489246040289220352899116307815228866194939899432434878525491558800547976779979683367688903278732739389881734067014259394063217746106208605190496361134584948172589477057133531025440786827852253824524160548403487907421272973290367703881100721669407971269434798443550172625237114659431030829916141687040666884696235625814564129626435994637907086882588770755812283202784446386224614800747923981140905500960288869620470111613554587095067550976879563417478116388152425814195901924622311843539510171658250266502293689578285040347337973437140124945630951972283147130741281963393446164290359192448952378935001920557624942274221681701969732105101994763264008622253735683",
+ "14.1796308072441282183853398667291614623803956489790970257104623188232902767282574509996052539083573233298145889942605653298892229257953808202007496768222965476963015892248409827994013842316066098314567630341437024013971121228118377641336015214818721486835757959593011225113742042072497312433546600072511872609098678198012274693439183149268146912703636093212939100804725391474543306624788387699854792164372388175649060124931797401203419100884488639690168576804829763558693789223729096647545879906533473937107656768729633634222862245495581325600417464454810033071730955572334520857335510665755434348564981509217953643371995843993660518911909987080474451217457122342864898645198315616289691926316982991152259678255881050789701321000503460803572510568774002144999754447633636924860956177391322005616623420647924346632052977845409157572899855099445598306816404917155508334824637885940574334850876779996796181107939376311128317312515783517827307603440171245138674643140940490734106905601363012333078105653542123345026860999226152360678825610735394879178469695503958635098408901004932705510782878230077100909",
+ "14.2899797929645988880465370254439290463492686909646365784756651098966688981604710380521849261282420820080718993444184921140050946072295733777832552069831871497137709875484943005092844538329601721866028257517525127400112068229653107318786632214087321828354194286744189213884282476820178532929026410946336549250316411573632399544976436381304928255592757344082191936540818455775028244579956105065883479913799108021321113869783952904182528280242051379454218665561448727584030626615636178822706926814162499131369332023155252856087861647757703882420420084149242345266216149260241941567215880661724399293386262636274265942504563029111804888220594251821006906781849767633589028769011495517300679816156698760917682079890665846007154923427386849193920295060178471954901369186035029069580960675884569751521212531321426347035716993287569668349433572526231363707210075671937119893845403234179825305216364116472043430327447622673443562491607514186170086950732726413599236608453920182597620790203604341499252603323429275866821091530657037950087409657380807571921060480257877831704466578263052537696771142883837667113",
+ "14.3994831552013127711282056937351191001504093681728491932833832593979434994003430971466998201017992112805329010979828688660650916169722207860723532331591812462512916668982966008728885975214700393366748922112781560669442805260850747279232150993153692443149737581771637951619052246592314537389589547596925358885851353137852240888588511143973759301432800806312328067688373837578111007355067907342413561415117098106229593114120795475094598890952936412656420669510625019084604237747484641036400610081271857751008108979431957256358635365498727651936976456111883065483148617986465457792466402273815217241817163501352405823111497054361243886482686577961223780674009485714921257768842405600740516816638273826990939617065159558546972545307457270500896948955482426026947281134410487716638801651876698608693876104397820386663227664888754028406305427233767301780066332483940467863387166158701953351518332400189178702153049021261024299343478982543905250789402003398874430729393561464367541193884402280665307850918818544192856877565661864230591257923543269259287766045586392906627455350388206936516877511705006505488",
+ "14.5081600415254637821968107724614159379846815250015966632796986302946639359084284397562134794977873371225673488011687447300524372638777391491271044047013009672846765153462292968052361902815148016221806543555516416870983561046485697445468525590089690561736144515682350187091487327533880302736617743526917603555494921673130404909292620569107730648244440333842777280190694749887082191823918012255416939347228605499563575333082299453802606427072078361952092566154166904748856523531473204373911618483373304549076618565708179979210316820872299882348744668938414281930060202535519438925657354409407529756410826043868530687455675261372284869586600498214736517437102860130625263737648428644588668437974421283838793145810608177937448518286819323950509354081962798121406813386052183361387375237142429814580328643754914782720125219937145864600464244591497580867134545593652723923600055555437968222771839658325503488203860238775496018875409219820657867877489532429308420073127288519458470515585824162233002589242653827817278322155993680288963941768325132608929167231803325441134141466079523533004874074960297398614",
+ "14.6160288876324385915282082833965054491451514454610200902394687979785177479643522829616364603240189840566860380268224748399753802405943005392310014953070864465023481741203862559161940023086412200284446473311773218020713884034550394274956642070111944572452151925229164138208667793489213073745951939637376475072238046542165112242929720624283960415646561278977194301782816461600118545055956802134155907504241913799478483079002103747080064163279210998110147485017332310883903664994279933307864561852715983031647907050130006889886745790117080604262580893840381373714551099705553640113221087389797416689282779302152781657206661429673588858985798962970236527448473940009592181110203110178340755616764069248826774690236853289420767334169479100200273495854179775154480776286912775449612542711928074576553201233514379922132051999344634460933918951031402916699819979843036301934686144731527295916388130591787688603848332640080135877157352065976684603109296470843761116064910386409905698675285107464021939356227075015494978348239956711905571402049194421753904018717527587649996077266800964352303624402577118757550",
+ "14.7231074538527950476608918508913485210193928960438010156179716284477839899656296406728660773561791479300392640548844362423376122815685515054605750659875846934795898267446279294839998923205284269250511553190404067373365705229426342396747030473106863384763359235329631176350397962888021561481413516660292977014970409803172385929807914633372249932127302974588451306885951998924516950174494016508742886729576894104195203891310671564861400064652564905406159871623321437476286879872259083518836208723342177364371256650666793948295098750435124566209886842002880143316847324199429697285209003531473719741904014483758049310397090719533728097260541450500261317080346355382466832396046849587639939461239781658290728113330095841108422751523386313998448194981539672857289889090299694644812449713503451035671101363587351933041787935726164774892898031020620075494054191750748238175302842601156452243294124366476294688491666489019848361123258726182091191116324806207133930412068583323189688687308435693004227410778794481033787991938082837748996778982096020946799825701362360467247804846582233346459021849435486394414",
+ "14.8294128592903342463108620791209811162154136750542777284601531691224280305317915513146089525434202545204740516997954296244402311661887141413394532911541491603071708609940180070016261017915762557510278422457087524038813467378351272004581598457324467747373030877616178977537315248779792746942842469899245159612381076176060345997493587854288545462033896684057639832634271247921538572263389626921342927751757718681583536839938535751092658431596624136867197010308317749181005637423090876543873298238850113918296817041690209369633579425326504751223838947047626606883955090485790288429021610217101252189548742578539077253367329082514118063765427191960206852366367930126992346062168587627226173914689723039724555064028133389228017987680521282524145956765953246086551097796047782148791998851951221419883319817993999053278752506962511065678830257218401748568500747333591882058597483002531463654177181720203177842917132707292556291289892843397045703928170161651798774202385266858024628481292908429107158745626477532254897607152843489836358490936853541807395474017791353789095258403694863885903856428866385139618",
+ "14.9349616137730772518742205278502213908354666769768829412154208873914099415699826430905240500055519452566108757946045864392050766773281378318859154769239371884763198843033880284347786378856604370045769280031694584512791649322990279975840486835965869228399135416024953621164643532400693170358493033550812154255730604795122027373166382306083361422620489180286334685541856384068029463428651261328445748342560926139564774421725776053820917605563776256951832599871875185183132937072360851486597203051765984337363986545459745401275505488192448731938753525598111844098064910555199796449249197864727749286292996338718305630998619908744286323602224649686053449748987583874785327499948813912602137839272202488683363930706928086605262922617223633664247999608682512707009348695830289960455591428363355858586332036652696876145134314146004076987087103822970399358514255536649174532275760391584685618135079679840634515711782148326692482011033477006288036228152078965813370535741600755067904328039271925962758975702936379448509324264036066209770450856159966672496255612322665295729865499903170425957082810506551820498",
+ "15.0397696477860030144945917088662715180419204436596298997795414580537619276470518496795750302683435966960598359912232778691979417087604170857471339357968875914806128827487423868239668258781196328158829014067930293905548139764831766780121016782020549430650869364709405736002482509016517499087673550631711895241943655599845471280944381835142662152324894870918009318555850395370785744325805635115612824121714311554984178485987071523130059978461157895518735288230178080488091738471398284150084865371937653513358898631189129088281619129601787714351761094285499474246778785178627730928100052820335178118094485298540301817051152783369081590502589702221805406134858612454692515706806553394570930351722035092384749695378201907117685274122131158052887362415892662849390029026033965056482083854830488981110682784429900915172219306234004099363300333037817894031519149736675537980617386623663320490641182129254906815604059543725669871346028069397621898119057810818736095370601335065657301433376254680794313020349062521396509775307772376959952905436929593487060738018338230316410641798397322476355542860384513542506",
+ "15.1438523405392099196696941526680757548021305645205291142290551070202545969870806060651771792665589490055461678011089894664863226391200155446121001161264758488222957146306674042780025430540877651260123695207749882929804823786072408198311834035741094722904703994169074927527266054117152533255107532619942528281884626828101541096773239563535294095652383393617113444649817226044992144468812474731988014146393516008194986121551417317503118242518823714684606734325443399645596959933855453707336231367089097896345978026922587762215370241399967794400041904056720435869378522780399983882254234030896553717060098405070969432588607227990450595751600391582489120049548888787130887917656163272514952919890907132626716845497133112466950843147056634292546916486178521992255691504244921986125000809530997425200716615625657674011024011250858696591746091527644535689099940477872177573673286692409322089652390467243801596188075140733650997142370201841877916119994009448748653226635048181819256281784782880874622975340845523108222703652277923638344521781640569055426282343260980758922970221905010015543051560514662433274",
+ "15.2472245463115253370040636354083283666887786708714985639777668988830176955007183975627913778852644689341469297550544080185597077331715777153346360021007242495125392214774851264280715894226066393672643745253857483137929607374086675166192281961765358804770989187738591443219457532796617012663647789609431774075740567432008038961013943937307134814420860312306044163504297043835283963554752015900991148417739158394289066018572722217110593352847089201745718938357549727957979705487561467680940950578965108092971745951832261598491593612429568718722411875570411732507363965110669584642166670193068764600247928278340651032872526563501469069542627171043818450750969393729921266850657068206236571831577209919077311206015198636883915870987141318717046234082051220681758363352349761727350749598802358775860890853785340760259057433823505166593652654890358333190798767847250596060513312651361844271657521510045055877766996925314299833842766830666961654150747864536564429858555272922415110649733857674682620223561453248275694304210618254529601023775975491296511721889498789622849848564452286751061016082497088131584",
+ "15.3499006191973273271932743733389729106106465662646172680460393169714387084447557470480954083233770880379685371224630951351727147025497081082089879388337460847605271660715988291396374847634019968015591655332379953553548320591794507974928536313132140565134911057811331918478115692690902657513781466327964390558905925364443191776886267775090535389272723947721917202602879066426608737057083329758491682770994310428321027233749321777436014858585199107035735971395626559257243819405652335029653770591399178721590892921559544649784504159433642408276679973155389005350337656246816993288749049548293503305422189192594259042858274455047560941579251477856306294970704330271186897488785264092623536912370835806446753257171205100681111029503749113972588676479023379074070878101497336800280410356924143787399669535027376058454568125882734662103842745378855390985776613904203513017797747138888437136968088396337069879433887912538591669283312778213455485732955595524676294450606458545443919774430029550468739232908922412573697555394576825425670246864782661192745625121039099283240722841566743449202185347012194036339",
+ "15.4518944363733046480094895714642432822764116097792743962905968923051434278273216767519678368256147566495033878636454508377334372505840297952460243476345514701393821523863781406748742704716992949704447086972077248061651918445325061731913106414390710999384235658960798983324112234104659780681677057531882860382080238722943298496230509728345363802492358823405567182598267341768167330142056290790935811977359414090689588039875920175969152935770254523050051392422780000072929490482155794529675141588626785387839003076240285297590899692598611212948974143071946012735043590405405711508420740182622735629791811546902131754304158391375976203350556228354908194871652988791982508708646374469749119063201955850224934760173840978540631523245165459130698723874391791535530500096570481656934324227197278855637657017693124057969321411825957010121491871519557762634188278945281706669785161073963143541978342157205033140283815645312514465796297186749713508027712528205500701661239403838639760963454035559115496453338988692441465086270102708432189916595292275910127721552152009058942505984180320198848113154717062637193",
+ "15.5532194199919290973914478271101509782761473427556110871326128562635425877948922439065276333739001292422317859939226322742544533781551368669476914135913677167870569871992237487074670090250710391585542749455379676350917711973517231870663274531838871780463639607198142971742006771650734656927254936190760891498433170178096075966621078837969943641749478412326387664953246784721461426256026142642356786959544769333983224947181138296945030840334549653119000316260143077956508210419522473362562194412180815212162799927642323378945617932239804210721035735661553698229406968222610664812153679540697776845028123042956550110363507444357710659863250974690713371372128989567244046052322175878868097778138345843971318806979435481065172044184336853266870505659167792988132948583467977404968694959221486656240243417746389624264522689502159242881137811206933660406168854853625265097649099854630342455703384775379760129637369884518317406075014753125436006487026676158299533450354777908097205026564092618416813042451075357865075958584347010560603909401672674530473016380690156057342486458799820056849296157803970758151",
+ "15.6538885577994285336615322473375966991656095021435737363246099636760165366202196502339470259559417674183944684300887447920118633727001251716571523443596918848444675379732072543560564133448336770198458947224033362634921875944735296488201053135882187385898631210771646381454433721775116899072292857866394011427204808403618078909248941183413487233021402017272788966706121586469579730897499975748868490518551337318808652816220884250194097501134581362589451191335370815112714612837896607752466579681001969484402775834313370422194201064429923758665189369487888128968954146148578820551889951620171166054882708759173934381781451338459291737123198762967272009330015190135251071755806152473036989743744301736751164450587318893784207514998879026913548107957822584996296731105979982593758231329776234669559571495246544966721659816165141685360821041442768655874261766471614879723279695129605131434774277154659938308116466122952625429526707433155213455467498548671879756157972690042396634723002326783535035168700456971324492035298595293576869795744389366846556161860716979752870417581809090754427851499367674362389",
+ "15.7539144225679246209830112311867562489275000482982979660467978944730262881956936027247186896733459505337734582610770093614470487327551772081823931905589550005108629069012648755348782514228521197088346998693251351381154586496257153314478419466512135062477857636559546187276312380852109985976404783376323163746995587475215213229589580070616867837675337919606283901588189302295510731616001258677000217918798250564696325480908966629389997769717889909303798070409227548291667767301493099723866749466998823232247966469030308331085073105913646005885136696884725098040065704027444469765094470600930146845779530531161938075234915622678545819344667609350674211649145259963974499132458151510972295814587234589477382477724361318542752546281937647008728052174217050786598039517009852677136114528982242252373617954020044735443912957185708403871758652762532215592658585695740093871059422733899587935643096714258513937804831673775551390957596911031295963904326636986587614829199748400378284270489821119258092593559132400132757457303025648114989713809051372859786312670557557455024113430415444733469786577609605818156",
+ "15.8533091904240440533801150604807321260894390255847791708290322487869548721062866289150967514385361249309622591731814144915462307294258995039790586215006939993383983758776850046561092349884695864980967491417864933460813596552839148807057208618613557599377913061397320925659394501750622861864171880053557935005392499447778008413317995198028835874078756300521482179548125620652788764854972999687177405402042983731431613693788787613752177711793270302761736067574277658658787903363445166365077580601657490510530290835637982971350451510996298804593461238015330599519964118988140999455569019580613714105164866493396051692919035250861649195973033019817282972152713586938088500687115272282682479043225493555090482203878517967251561713092119554643396372535898649907805934878016873123756393954615387951516173102704296387140802792650937087349547235972359933788305229551638870049736359516727540333980757675042737103700554746326399085275428878409792860763156503485547649698802164314596132917707378582313164765977101027311129848967453806648036945112397617833423627052843598016874809261680305673980351252655348374751",
+ "15.9520846581496442456835073500703066451779451051014841539242701086762015613192896323745559106469019887460414126185431359961253757915198034227258433864250836161583392878779461056493265572605574360603888584134116652015717511381633174846503017116671061672690227704542137628252959797331559476487739925081575856685236012972763809030119081042926665276791590604864556488405316065408861219952886936162336641184918936697605192640548272076353846488495049719651439648905433484003530512876695233728489114894850158179246113864820837838500720026182528991300469647511661287205697325018876335964502449498974863642135604197870197848793495324492868083775898735465533757619639262635723010975848105068325903417106605865046292138037866182138413986125566393404019074389870752413124723753587841540468575699565237256318701348228914889961059600076085302269512336986876298095168455531799946876677717621683146126707236377496395703746431798350019356976580256457555721053870192650781008973533558052075870268801533388874712868860234888763155218624129421405763678812077319239075778407441953464485710013630549293699630738008836738523",
+ "16.0502522595242423047658196757944506380174575705759839278253230321445250829639481910961471931453116564538738497439478557175108609739886591120839569490500534822875304849736326488209685631259797055597162087990625950864597269364766964393819102203843223113243118426671582284256752979792222658121065967489791739897901556464359571005944335246989093673473307922127953030743811956112527855213800208534921642131401366328104759081292508449281353427532625724955074014554055167375410461346511957866858023371199864971286184642392511378752324547642788064420065819699737323404789938130114304157002506318247766787276624518432056105705328622750000206435275106450682964574301892472715679021266368586162764998585907621481532861299023329709215002403001723015543872591121222930217538067739593739604698257682609428654874555491602494919829715215979019400567591170934142751177256545981785724618392334660345395676518512531709484372866958613593771143352725257746445919068135186009397759278633269127719426191365945433194069995854695522773330552489914970861258642696680947645047295192118341734641074275298677776747132725952692040",
+ "16.1478230807732358804057911156359975578643269683364195005563293802325983679008984974142648714564442396471730040316476902098875094502600153583773509818474040254222873787323736489817652011370386406266250541511480202000072979598788155627873931210965950356003142252258291831141254744970185472236595284729309004225710563295709356523567610266397233789715267714804425396668330717742603267969954704057766975076430627334443597598422164729733865234176455146920250925398679022857258803104782468690438474584298601058258695871408692587584948563444892617899745726543714797413684357745555329038056593572733989924153298466060559153513812177648291034169614177512283257755959087939669505720323242559668932499003542818847651691092512987952257177634187849222278857431112238824103335198289105119122009380272498965826349738709572199722545419521302521285254070487073289909851344138939360922891594389079867498143873584750623589649101531017564978708138390620735321513779148712154176474583208544330503651654716904907116042682578169464107303714557388993154579350605533888231564568424188460142954331592433579506586890005695885131",
+ "16.2448078751809998755011217158068981074812938780376907934288365969067715754580651881228837648643879607033855368102601676632453884110903562211987202416395104068878916710125029828020978141971790535060779445467814920211563614823717939714231027215836135944076544647046307691726601906802103714211555626778098815167697410921218478761241829171583291214474448114233960671085832117529951301204663394172136901026541390977184829069626833926547718636187253278592953151429123517742761612159686867396009176772048429857930463378251101441506406781963593404431204027001757834444765502683573406073319506066129116153755917974319966003049503254536949291575688824723118194707260626100046414546696157059690148588275204844439191014730591329648048783886231915330055732155912797736172314922853100014380565619761622410826147387060234237675537903761684317822710064913207299936997924979239151897177602337621202867831218951358431546933181734907743029920468572483019023238760589912132344481868708100201604097725222903686108103206060682150910142819984712770046957870395535067746543225689701565797231792048627718784232710619996958175",
+ "16.3412170769233839606963694201612486691212128081356542739834914529370956581095536199949227667563196669751881720330847867749383217493562824508538192834810436530795251403748280815986888683090444963568544342830253998350516075153587022434123870840098964485733650438270480924257439534833868943235183119239136909416092084248849001763157362588633568969048428387870886333191418072195613026763062715704979389513606318621766300613512341969898200938319702408657590012474789777007123467808768282135872999150490149110158277006503250724953661837621574840115483372782860303277647284047119064007533593648396594330123081102605014990883472685835045389875767425672113541605338848610128464772662573977617761213414690520480262408650017838431407962017900140324046253143316145470737963355177005851379248147035370433387833420553321888460391167558380062662113254804107448975955978227341116496076743206260952106365143827443135137267145015186532545755133066280336384345677654367847031873202744469936264238113240447117511360963000412145400308169673233984915808549522819952866570114619293558801485679439444177553637843192666077022",
+ "16.4370608141699779533272474043612773161336096733770488551072483958825670966030102770671692026351162758060426915952129701085867802729318106406251695179863885464546615845148228047143539122431375925160247632834389582278394024330480487104411090951724620355644351152169170545009407362559853715960254174609992367516445002937337915452344034027633137804671869009243012191216273628143810422653645542449220632441502889291380255597379975105906010494299091436098925393391453500383425028779847395212818216089937829167091842984754080301999529208965785570901563511025237838322249140592553123941513540557406487062630678801556860907709013663182736461628834763074768624936750014768974286417533180445348738169351441886657201423938621061945983927061958409374247097943865562851972717122204967234909902165207404812597672553085816768537588350650139595857211821910608937442187518672584714044022382415383735643991420907608195400673486843199910879900829598881279040861315931094524028380978241183376771806462591007552168307790120399348941306657109189741410463773559051033330925696056841916167522766228211393262242421521807262490",
+ "16.5323489215027158446880825763336276539766654254272088764809875681257710901986514691251337281589597719030480979213983912333851607240138763154510692762929645134059390271108447868644173448984649545846075027064353386413401987057840078259547584916364797582515654545908036217306641693761885158675919161061304000673810487248591975444958643217446048240102727684132123680636339276356809494454912918773518940016680535088516253123764670882202459282812565757616402645579638779334204722728987624467180608880772319027534713555789150175287611585325048568498467487723808179090257348438123807077849594237725002857165318916587733119054901238012585296647106745143265490190013740659650259863719019289349488568359299562334530428982968033376892598005685239623058868742620448370226790430347712128643558758014939672725409586893221245647244200231825250935867451601474997763673733348363862073700502793354719022161931458435920378330557182605440069878979638381549353114629450034341931427150761577849342839121295284737993268351881523490532278330519022627550209271545051013287036978208888323804801374289519895876593198148288412392",
+ "16.6270909516939193588113275742453455057724907893471837248190052277684021812706093859674562917358464508678944731335671312361111528635211707981851761281905390428651253063365857714873438460026982265332515908134496574598271324405852203598672867489333701087729773656692255479851820749532099278033668844157411253338256984189005214039791624919948530833113525770673128187949311061890698199891708014824055365136849537030748140516534893460775625312948474125099589563910528552797986693601626798750522320704550044628942365910519008770640036921561300268413859502896583956572600382670717293799295760336680708266640050199950546289960758721503030196132687468226676261182256632215649868207453902112403583378942883517958418243203582422082833178466365454545310575197259045841019912565461611247674091038326392812565767346243460064710336769861695873330502452485176311239682300570315470799685242592229377370919807320562394172447148622490939677945521065046574409955795556738838394520031077084414251361076203172937851582781189271677247274081267854212505982365846174249067482121520863646230241374323178103657911564790192184842",
+ "16.7212961868837069596057427052330107838993265239842708646860851842703326371466460550285293861073853336430183927150625107744808082403658130218547877377223408626609338367841882539006706085525641360251738080907390644127125042595230279880637143368202331046893342048365464875596596339640431519843405480605327189233621288814329341353255673008710460439879747397502025941747471573127868412038250150005699065690619898644879967858901930028888717317423009915633225475656314991246247179300655948036458387420845855288877301555946710757857081888614708196039221016144384209347600898967572348354997689536324424925550167367649124956548098079407104673133738019223267238283865985764961736835718647168600253346670325018729936886914389649147361585260144938350502362779387053821926782839707071611980639055740818753798912061341260095450383120266085280004484309135011098574017285860156410583019562874766816141902023632532127548071497727038984896353454326117060152368514028177470621582059370306418123530554777252590192842881894048535435254976906742189935635359698594705800588739642243011198473083262224352068070947521888133964",
+ "16.8149736491937860979338473016064026815629713256323497948750601809568501329556639230091530125737561218251440117233688971366626226619494552699934840033236354855838182946899863935935135051148775248339278515431361132281679384204107687790514630925950009428499533762858168486928997467661567186100299191698405789687931448311811106940799338769819016977485112597785266160291200218493515224003641856137869046817349736860084136521100283230752847231380759335075251104980538366249594135868723508770265154137352284134429841268968217533402887160211021542302759108278289630550854043783744185492975265706362843229478657405729545441090741260159076361941917530778082026439317132083178091065099562781527891889439614485685906543894620100854938929972296809305957708892264846534267896729102201515793747667010846289314417299727358358529077708665332354286589063320334666559975273340602615325426971186711002042629355909063066914261841178544815216158892244142405490982903749738628073534048893782956355157093511439186949168195503573717926825734468084712589410442022354120219836575476305852256521675584981012952509686818126145279",
+ "16.9081321108119800703237241338254436690744863062204119333243683660599775226753565893209713389767766163161342358021127981271381134650847016286405604432987298022336098638563576267935354939301846494369816655337783246226209880075011315863553918585959135040655522896546602388719639509065495093614444330145112109456097752772698468793609700122810958534616000768715917714125275538225625413748533473685169190832331617113246579894504494307284312332165945233891016849490928121382853036960384597592081111721835630475340517447933339362704327966786541965781642013462403621512902647219230788448655730199762241068447349463838875501396349840327689919737332595302012041802495467706531267072999713901403393223067607382639770962103669304655143862584052038284208763832029931753811022041122025100304848953045363327544205876760304756720535938198106981928743202962212743831014622551526319592553193580573329441708624935281603762989949456873712545791427861490109968314910368234559629841124132807220595321318685022115111820471491845170412521830502033004342105561816928208532788908700951934092518100776316736470776442731692226738",
+ "17.0007801035793936281121338813371428867974374892864315366365045182530749574622712707915241384347920699293353638201192620301921643313046316033287195368236744465600818338279114167561421338713928665140404227014843877263137439279436595462144971591867941134682123131132347610099618581532784272896432738682598070539934802196472265692623169163830620747322703103707706888841879278208903105409506874013233395298896805581080492544955643820269848540883869294533510006353020349957920715014892361843146242577547625252883154835493940087913143008925195857805360140270418585825481983225958905442213791260106363149613040098659673146882019866732435671376309178138376480369335069359192722225011915819361568401764846284323216010823897735267747840800333035036264285169114393598090497354973291064439481840096277008690228063146037619643429834761658442087827165677168899338925740605695619093196708013773454044065476725273474616759775258989343235256991100913196459365908950267021754881564605943770560095242514851607841979245586880208866747279307676303889206098080334141095498113120491826011797819568010033703314385766397392583",
+ "17.0929259281098732308568909665181706090496358902951216052253094189082758184705768795728909606854105818308409911054301261308877905438819451701225816708775064163858458811220345957117443399486918793485162274149097723524277233813071363121925271943987039923392571390254618731212423397735256468820990712184553680703600120940437674047217109360209678344268629771031575160683542930850707582417669810552350662093148256275597877537621451125081219588556687019419120479317429823172107590283143446497248490970649768152464725806707130059311761908605648006129152794658287289985756220544649174887465478997809837771313116429454050449336877009922282134713999375548742678240072088620118531202157406755008724496781361076606758611169943346574996481406674965729735501106625955985540926899693816341047327437159278090340558983247348348622180363741547423011416478126650485047347378185921229539834418983942666680991963426108094492973587943493986808103947127419030775318104983559336517699874867642430990267257306908318775712545165790980870833770357342634597715966182879292691159156387989718754333799048530940386842225448232251458",
+ "17.1845776624693504399278552427660121759014355872173486225007203824024372840436910407549731315312720641661312015514244338979423498353490793511266853712442843525886341505446387699669856777170226001440090937353259650728051196433419270760984455065871632331371517893432279015787092579337531691612539497018543844203336945831070057415570861416522661341142055293762783441277787020381532046055783982924019170148071336852167967942723659657524174803803803905087308384416784431284819770363195053820968301578868801810080541678810607866404802296225462621786603189632403039176608470841164659717593262258932759900746120866956926679585397696382726469136456383993490336779413736927110713121992182458332821162549136160976369409523883489900369202140222731089221360463387016825261552399416009215359001253955577936829021948708246676341112942870776695271407974775582902477226815721865733052145151608560413760572173015439460907252134033256691370749495569198954137521453923556632774376333569072404958969821817487022660731421354245851272428708325787898296874181411803997899332362008586913072670711064770984500148015011826261837",
+ "17.2757431704407540851904450153949790380186687458654220684915230386503275825407063160604517288734546119505644391694970728295669021023983949819859759900830880079629779705059154865670128635551815720536815841099639525614851417689538084914680867424196821634089586241442130192038834512446570011888290802100133594182555986337723487386416534433468263224465623305274641330130540795411919391711267934371941107593205550581646424497484790190474300721785629523248847972136552642048161447129520586107875881613551369904113055686380180469790846706208691893855593511420750973530511165283555627597887745887134627634145517416050748158800890514425554639321377870923909855121500878983383395887478657227223962509627436500904372492098670589675883214674156834456454663362930882283624845127465731275714349781314030602882871329526710766294672136474269162102821374407938659858184740917810129868058466378108500499655709083903249046674366509191153761430075951411439469754773409282874508134728609913829574500910503209081050228705417132900939410588699788540167873020190018123072161219964179184690554184874930100756126982018853834025",
+ "17.3664301093984238247123510549790984289306134748291022474290958664888369268710974860027907576347723303147126176414184787060588912832469046111702601777464890642632251154060816817161334316918823566501136820770035716334732686181613705402325472307650116606106783477061012163011204623322704865562057283124639475372748468035585007316914646119895238476177895413281264762196817540406728021584836434537388272205662532262621643283471955600594193213418166120727080989351217403325023680868046291273159196135079849504794468566646008463271904849506404907608613825464391989145962661376690126496752549886760192239310656336157879887593855859958823309866860061179406457120429704015243436160532979492144475251743461081570978743884248426983196247351207081556692289758666519927916028959075589074583772201210742744694427687226168211338842746789032366011901448502121835024794286923051973016164255684120993153139149490806320653960702333007936217638703590917692418814222701997158804755501287181232079015044179490661098796848674027302976104705585992281369648433223442373992912484021774309627757116258683761986486802220878937797",
+ "17.4566459378143413191692225015426086274031136235582935243632385313858201877701704036484032520749642131133778450955342272025602510829158221972777670586061661701347328186526764805212080639525455982292015938346325289124302844332447725669617702921917808500525274187600536620801147819163613587837238728871997225991025080525180442534466864555824862414662339955733621810264862776187374419901285240431490175974449378317927398381519709919509933689563116335690204265534027606560764875449531405967998639356231702870487782798115026659692007825259723146752469612698767331463901780062493519689225278109283378310274389559679038834170680206517259537270404175432248633893701903077868034694197984698018454399995348712691476944938462701653906803877183551688371651410557476681964972950883316889946306025542494264115645449898893118484226513921500673490556592825150254681189771557834158711489644867165103165017573599086205249218767497287654393905135560681295542932352259490763907188060867843701402082704725079265886683176519491584308173914664681606671056250177292407244890772315688524722948557271250549147036005452988137053",
+ "17.5463979224170035169103569936773167710489071842695682164094650343960555822548938246261708686464008628120698086564271575140642653268871532667049895917630355233940483632068661179612946301911395716185300516412585342889806163058970394576807852912357307669092680925494306692002896260519270415602285809070330544448934264866486383161101778807666439177712377349404344204981825461265916701713439907634881628142000030147481541566984916776985069974871350878105191169601874427236107028216631331508432342933927262432252048403053983936328555651202085666743721276666416053287908582708399019416116728290391041137776899514963685453226344913930595188919687985925439640490668381197141268324607645626999418743675707607782207977941235558303966153142486351061701922818541439990955033863706292565895764497302237144629129915168217734367589190606338115923850388544120876370105674692788127644053617727607207239081379150797391284871402801013281516570366080963892214472234112621858777932368224243266851672272297127593365190407239608295928071192401106453278389676417859068237527688061268702479082098130209555748133337115265799590",
+ "17.6356931450223847051632626336912129159953047631160231255194263214719736745345056574006334052947783704789851124650942357806440283438448075865374177648755421744889004812088237415174002112721888433569481184443980026560025069439822330036408245659699705607208167409459718244781459151859701286920686791397587316924683661006361446569736280386659169943463243969853737516308403647389899899943288964539074045777396061094245615020794569618969810767286161759163196190210263374998456288778623199988233761901113536316735857956970778148341712538680960137046414511920334125306354736321418705129785669231702905296255118678564162795574424588337165553826200448066730531304621451838136219021244379504974116096097930348202146495020513154705219076501726427281405053157307369058563911985328395372478199002802154489559015174957595775902617263259894306671438880488104887489699278033942889387921168112741333336787578922278486757542524555357598873580646861232908497366240101359399679018683387336026768844320636768908505456317105807294092097672788610628498171867123780698747648210099920520967511623044818811130645542567309932834",
+ "17.7245385090551602729816748334114518279754945612238712821380778985291128459103218137495065673854466541622682362428257066623615286572442260252509370960278706846203769865310512284992517302895082622893209537926796280017463901535147972051670019018523401858544697449491264031392177552590621640541933250090639840761373347747515343366798978936585183640879545116516173876005906739343179133280985484624818490205465485219561325156164746751504273876105610799612710721006037204448367236529661370809432349883166842421384570960912042042778577806869476657000521830568512541339663694465418151071669388332194292935706226886522442054214994804992075648639887483850593064021821402928581123306497894520362114907896228738940324597819851313487126651250629326004465638210967502681249693059542046156076195221739152507020779275809905433290066222306761446966124818874306997883520506146444385418530797357425717918563595974995995226384924220388910396640644729397284134504300214056423343303926175613417633632001703765416347632066927654181283576249032690450848532013419243598973087119379948293873011126256165881888478597787596376136",
+ }};
+
+ T pi = static_cast<T>("3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019893809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913152");
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = sqrt(pi * k);
+ T e = relative_error(val, T(data[k]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+#if defined(BOOST_INTEL) && defined(TEST_FLOAT128)
+ BOOST_TEST(max_err < 30);
+#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)())));
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+ // Check up to 1000 multiprecision digits.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<500> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<1000> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_tan.cpp b/libs/multiprecision/test/test_tan.cpp
new file mode 100644
index 0000000000..8dc9dcbdcd
--- /dev/null
+++ b/libs/multiprecision/test/test_tan.cpp
@@ -0,0 +1,634 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<boost::array<const char*, 2>, 500> data =
+ {{
+ {{ "0", "0" }},
+ {{ "0.03125", "0.03126017650125595642059651621507489147877835880393069701338513042228140662868270178810496567920444849" }},
+ {{ "0.0625", "0.06258150756627501465828481747745378814263718044751609194477198396918772026898277636891147279909599223" }},
+ {{ "0.09375", "0.09402562724573195576489755283678159034525247904824579838425258406126459673745015890895186868431790389" }},
+ {{ "0.125", "0.1256551365751309677926782186297740007586657638922255426688666139272557034809288714758416649081949452" }},
+ {{ "0.15625", "0.1575341073252716106852257741724104906661974475121544257009051769486388715993896887955248205741956572" }},
+ {{ "0.1875", "0.1897286107180591328910833700730338162710122536010363055257273177325079653665703027537671734777793159" }},
+ {{ "0.21875", "0.2223072805534313308722888175879995822319104918387718270273535559005416973923742249393961682186904743" }},
+ {{ "0.25", "0.2553419212210362665044822364904736782042016388008226217404756502588831981346542579493165026310550454" }},
+ {{ "0.28125", "0.2889081724405147260015884454642448286982056723714186732378896291489603033944207768995735063901118923" }},
+ {{ "0.3125", "0.3230862443517455201183006557179619743037036164759656335249943943470835620899848486165999610265179128" }},
+ {{ "0.34375", "0.3579617388480169983883959631794471406375375900948760280972554801967920011385682070576100261097824193" }},
+ {{ "0.375", "0.3936265759256327582294137871012180981856966444080712949818309739116951585799388015457993878787997269" }},
+ {{ "0.40625", "0.4301800474642300490203296054472752679963181652078151755042924196261397876727827800621729454863519218" }},
+ {{ "0.4375", "0.467730025452391799921342706961992620413738282701114114727311802060193364671415150855360089743973883" }},
+ {{ "0.46875", "0.5063943574962298120708227547071771387085972911587370796115595547436950963394141008177411206688111652" }},
+ {{ "0.5", "0.5463024898437905132551794657802853832975517201797912461640913859329075105180258157151806482706562186" }},
+ {{ "0.53125", "0.5875973675914432213941588631578976924522062928763012976297627647411436985181631978010052165746790249" }},
+ {{ "0.5625", "0.630437673835884766852611429299775209903293946951939898251650513745196222165381994293674222073197888" }},
+ {{ "0.59375", "0.6750004851442429076631779494777229128864061685897319107997999948317524157945835559284790797708856594" }},
+ {{ "0.625", "0.7214844409909044199895178832795946807605892812145963657590722733756611374332889471678213489198161525" }},
+ {{ "0.65625", "0.770113551344208705005983660052773240245517035179766333813336659352553100285016757206110401160028615" }},
+ {{ "0.6875", "0.8211418015898941219114239653747117008753716453086877023306268412086961091026737960147423436480371207" }},
+ {{ "0.71875", "0.874858760554482349539671907932155532231782257040588572549027780010892786023906162883923961511720127" }},
+ {{ "0.75", "0.9315964599440724611652027565739364281886913399722189970823760758473440872606463942290222395451727347" }},
+ {{ "0.78125", "0.9917378983632686802568573899299023689572109767948642785884455151680071204845003794305054375396567381" }},
+ {{ "0.8125", "1.055727639411919906905928322585893795895648561782414602487481288436493656539800004691156074588329712" }},
+ {{ "0.84375", "1.124085134704560944131255965236688143403009777898521429483610660496648114350313475950507899270640935" }},
+ {{ "0.875", "1.197421629234347972339226617276609445975806623418086002265951386950959459751336541541255052511392263" }},
+ {{ "0.90625", "1.276461828982383445402617843263224436254612963462020761243811395954456362359102470162910199798207331" }},
+ {{ "0.9375", "1.362071976376228231137266640571127531383954502011184315622281795551984309995647087587519913956728759" }},
+ {{ "0.96875", "1.455296662469072910283351203225910848640458285194500237036240390915811463257413817682188441906818248" }},
+ {{ "1", "1.557407724654902230506974807458360173087250772381520038383946605698861397151727289555099965202242984" }},
+ {{ "1.03125", "1.669970130353601668362228999287655840466243330137306547430306024592587314737242276409239980979443174" }},
+ {{ "1.0625", "1.794932157265411111412512666640647365321540790157497713363548060626019826336277151761592643681562889" }},
+ {{ "1.09375", "1.934751011916103924218794082343652203808222523749686394781135509079848569244264225172363092871198012" }},
+ {{ "1.125", "2.092571276372179004423733981234886782259941716148720572913991515339894408382371607574079035650497628" }},
+ {{ "1.15625", "2.272484060247449371554848155118626331407879143446651944395567708418983252993702557436552564850427597" }},
+ {{ "1.1875", "2.479912917556758792437515574454698934001624072586467858166295252178386457324268836053055868956236971" }},
+ {{ "1.21875", "2.722205296368710926927932441765877991142333599010908457349133016162381084884183783877142234320889929" }},
+ {{ "1.25", "3.009569673862831288157563894386243931391637699606062181047618417194668052548525026087449023543493348" }},
+ {{ "1.28125", "3.356619539863437446801254212059537717694035906934171604782430676182834617443082960603002796648697006" }},
+ {{ "1.3125", "3.785038166535876194630450975067081020082611278470578710038656250838244608554256510046862645943214168" }},
+ {{ "1.34375", "4.328443997051826678273102914917348524900160978527585314859991445919675557868173766988955991311583481" }},
+ {{ "1.375", "5.04191525648136332110647205436422898660842030191113551461354742130497045161358084541551547909572374" }},
+ {{ "1.40625", "6.02236781523945747670227618692239447637023828129226996489330674807031833318199939459376428890858723" }},
+ {{ "1.4375", "7.457597366497314807346683309400119820853357043059007743950216525315136075258562571085388447049580691" }},
+ {{ "1.46875", "9.765431722939984318153137075537986427219225446494026346174651506537333303940271000197727980305021618" }},
+ {{ "1.5", "14.10141994717171938764608365198775644565954357723586186612326758608969627041415526864870292630944229" }},
+ {{ "1.53125", "25.27361509038201021888564593774203447137999639112919943365223977030408052066444435679945642193151117" }},
+ {{ "1.5625", "120.5325057225426126499709994255564804478992494692406282802019970839232698437518852292295322760051977" }},
+ {{ "1.59375", "-43.55836040673973128976461522014256814059799632626649998645431997677346427573993827534701436489680689" }},
+ {{ "1.625", "-18.43086276236962258434966752738448975654856844592479276671012332110139541995382323486170528839748939" }},
+ {{ "1.65625", "-11.67374867215481348216513536293945130766869617358776549669176281104274968860961548954064974733991076" }},
+ {{ "1.6875", "-8.529773993911653209272999783778324026196719414411590092375294867302897481134537117581472896391856125" }},
+ {{ "1.71875", "-6.709482397820695376442251396240149572345307174060614879543507453718786710576833294867753884694537068" }},
+ {{ "1.75", "-5.520379922509330168089935698420205500301122430036809938027371836902288281994865833387763391132527793" }},
+ {{ "1.78125", "-4.681280325336429567316481395066494078522124421106252324368679821712511116596067067167862140573504461" }},
+ {{ "1.8125", "-4.056414052170035671394695838412072312925972547334020477371203912084804008892977770267448199074447777" }},
+ {{ "1.84375", "-3.572185661861125859870109039981697499670205624150737204067785923886464814599307447743073100872203818" }},
+ {{ "1.875", "-3.185238919501229169914672833591055563068190813252958079987355697225012578404488535638528315769681186" }},
+ {{ "1.90625", "-2.868371726567042158384165205507273428429609298347592604875428057959086996590505442480814626239318494" }},
+ {{ "1.9375", "-2.603652912010850547260718033703880538638622594696262109914178307203938532760442947667909676035790898" }},
+ {{ "1.96875", "-2.378782114044268462754557076702009514149544247914950239975234530609231791907385965883627186285245033" }},
+ {{ "2", "-2.185039863261518991643306102313682543432017746227663164562955869966773747209194182319743542104728548" }},
+ {{ "2.03125", "-2.016072402071886080344963601799448100479409508905552305715636690184075224937451135890591580854847922" }},
+ {{ "2.0625", "-1.86713988123437020407782794323860043132451055327769468817959958079457004467338400013589662215485346" }},
+ {{ "2.09375", "-1.734634103946532053863260773540976834775727590591832428183425859927779370855756294581920109583545138" }},
+ {{ "2.125", "-1.615759423973460045704218998135983105718634789435135146363364502252797531256854000679335498343468236" }},
+ {{ "2.15625", "-1.508315836353881219959349807787957061590021089263168744744644715237923771519750208817662219357365791" }},
+ {{ "2.1875", "-1.410548011813148830578875195416796900655621273730614063607851296345238287109255775298602026828637775" }},
+ {{ "2.21875", "-1.321038011883972941371242354544773427461451983076687172335288474134737150563349929598365091185906691" }},
+ {{ "2.25", "-1.238627616224096475286573358483115818987811679840895892063010057942989763968416082248247538779346115" }},
+ {{ "2.28125", "-1.162361144121629479886631062456510653121514437736910570208484412489182649570861593071569298439919991" }},
+ {{ "2.3125", "-1.091442725473163592445273166049218471062020679322657236270267019564600575624640388147984118518979059" }},
+ {{ "2.34375", "-1.025203931548868392935198625444103909279764848147237361743751176005185409221197679274034521026108332" }},
+ {{ "2.375", "-0.9630789471610371325783309326887526239686440615099207880230611368370468000350460791927023591069451265" }},
+ {{ "2.40625", "-0.9045853091742213054875350240709441597937968403208608690036487459318455608785453421438664490396695609" }},
+ {{ "2.4375", "-0.8493088059488314622450104194218363224080665638942044768228802750401486144919082454646163741529209686" }},
+ {{ "2.46875", "-0.7968915235352686521345041809817019192899787435677815043081356746793473472915009329509869865385574704" }},
+ {{ "2.5", "-0.747022297238660279355352687825274557904116956883011279066593089700271855760843718388592769933778409" }},
+ {{ "2.53125", "-0.699429020084844342139783831016239425344370000759297142831905446726651787263273111657622358057530982" }},
+ {{ "2.5625", "-0.653872397910572369605836837404416068498526729423046632151562590225826018439381877458767572737519508" }},
+ {{ "2.59375", "-0.6101408409895599924272199138429116429964861640554001463611527892708422318404310839955568952517348978" }},
+ {{ "2.625", "-0.5680462555551780726648895974757705443146437970424414412380682777625097984947690751561280498460825515" }},
+ {{ "2.65625", "-0.5274205529869757121326571336563206310413652365485599902702063856643631953989601868253259786432770197" }},
+ {{ "2.6875", "-0.4881127351190876547388242189029165584838796506348536005759885166591812246270986452391896414818116207" }},
+ {{ "2.71875", "-0.4499864448356251166356611982487791354890745233650543094554613558499691453012194865420102877343872536" }},
+ {{ "2.75", "-0.412917894484932487763966873261129123736255820362062889934249403216388494265361969753200463293305801" }},
+ {{ "2.78125", "-0.3767941025635464453019403649599866905758314392515266200296815335892123350214817069316692446879993786" }},
+ {{ "2.8125", "-0.3415113829599005939054709337126887266408130303329754956325710946559071503247227755879401227074384719" }},
+ {{ "2.84375", "-0.3069740418053874743538801719778118186539092328300496832334808000582741898558068313989599567333495833" }},
+ {{ "2.875", "-0.2730932453907306446782089914481699536905769611886147850801712661656164014954781669815730570254890551" }},
+ {{ "2.90625", "-0.2397860292133634315864717364763276794949749917725083450148739709007738169658284872978100162537831057" }},
+ {{ "2.9375", "-0.2069744234334290889140606202259876249518274239071734165293810142417092926391409078539182667795178826" }},
+ {{ "2.96875", "-0.1745846741378176862031217701953393007964354401947395498383109594878301292911980508212117939922029155" }},
+ {{ "3", "-0.1425465430742778052956354105339134932260922849018046476332389766888585952215385380591060583477669114" }},
+ {{ "3.03125", "-0.1107926710961848652307179061543482824777047419183290635786540267776792824053626901819122659270065422" }},
+ {{ "3.0625", "-0.07925799258597813975964847855303205226643624625818783981886842299834648957527837719024324414633813629" }},
+ {{ "3.09375", "-0.04787918970239737242913390208792864526960233706882073548585416320272138422285616307162127608218497512" }},
+ {{ "3.125", "-0.01659417649935840190191646601956655481659118246051776036792478758448298530865094236374141834995963483" }},
+ {{ "3.15625", "0.01465839615112051363829193218735346545420611046761168233490628016451488745447998876530695315188732072" }},
+ {{ "3.1875", "0.04593962329265888212191655478619122278727029224118607262776824432506068644004151566997697327162767079" }},
+ {{ "3.21875", "0.07731082437922182842323045510047455560710445548270932232603347976675416898602720984389229982663062937" }},
+ {{ "3.25", "0.1088340255133297195139603974000083015109646348076838424061656004036607221464457317348103204356071731" }},
+ {{ "3.28125", "0.1405724535178196442425946789234394740490046721659763531803771463602023716095051057689530418533761391" }},
+ {{ "3.3125", "0.172591050272744891901962315250310519786980119755314731828011976218754514667360156546007027602360458" }},
+ {{ "3.34375", "0.2049570163396922924222670027465798026391019465616329916778651389384367221289434591672530287680469817" }},
+ {{ "3.375", "0.237740393762143806988724415397077124401764815151774813277613941354927085310634989951327775643776322" }},
+ {{ "3.40625", "0.2710146991120596316784994914008470605846614604634004480958302230976152416477575814862222371539690966" }},
+ {{ "3.4375", "0.3048576194048116313509686061976383012732471442214687629070980813100980504220010433668547826451536192" }},
+ {{ "3.46875", "0.33935178550149794902043849733017382894738729159656755127388089028458110314950118486374283672385814" }},
+ {{ "3.5", "0.3745856401585946663305125799891473884508822842892592306930231225774355972615263725457922224498281269" }},
+ {{ "3.53125", "0.4106544211005646795132687105613188412302653916099336518744517138690111552283413041415216571077234329" }},
+ {{ "3.5625", "0.447661283553583556404846819303519593092219301719424669894622854440119111664920988209774876249304265" }},
+ {{ "3.59375", "0.4857185918149514991806435613800961704649349211376530235980832426061445834319868210377502054789684188" }},
+ {{ "3.625", "0.5249494159434426029201266393240939090334746308513972623727472919160131375298663507047002581644827389" }},
+ {{ "3.65625", "0.5654892779403682511970427653303379875705726194565986095362182202060326386665976843463927284690694492" }},
+ {{ "3.6875", "0.6074882023842700195137806696254362966726637333828709216522375901698082716779542882925451551904376524" }},
+ {{ "3.71875", "0.6511131401046877694771154604832169765858772246556092408841970307496747807017677126165226354908150626" }},
+ {{ "3.75", "0.6965508511114601330600221624003410002384063251948773727536766307711270568580190864635818668189622464" }},
+ {{ "3.78125", "0.7440113559767865266278722337979770721544668975249127911732590346704528413537145792818180362367062195" }},
+ {{ "3.8125", "0.7937320950520845038640709755691971987193904745863880210276991068348251595048327258835950484424829585" }},
+ {{ "3.84375", "0.8459829748791345210684014414635237310065611239815471815195561711011715779741435605360151278986068963" }},
+ {{ "3.875", "0.9010725345768489830226429310383860542057548011724428357500976339946729939388193110037885928433616767" }},
+ {{ "3.90625", "0.9593555370605378999830231072930600308342084750238673386763085477722047681353378531697620720257631096" }},
+ {{ "3.9375", "1.021242388200347736200680021836703924511025898807046899043703227626470466798902950286611342705663006" }},
+ {{ "3.96875", "1.087210922446937924973630130633474302114867753655250594086911814333271884554141747835703519160797518" }},
+ {{ "4", "1.157821282349577583137342418267323923119762767367142130084857189358985762063503791325897570132020188" }},
+ {{ "4.03125", "1.233734886297294089608083483431716940428204649552146125435266924766182484146724296986257289579785258" }},
+ {{ "4.0625", "1.315738861236497278595002752513023767487817470172494220905161864739955592222079472915707284820672627" }},
+ {{ "4.09375", "1.404777873409928816791398747372142291632709052730067982243952454765008272213717678329031865335794425" }},
+ {{ "4.125", "1.501996112821481350670183703711495663471610930233216088609964712367465201389736354667815373825067405" }},
+ {{ "4.15625", "1.608793425833300449400383022559449738336897468383397721431496100147808519893555398680197430417094739" }},
+ {{ "4.1875", "1.726901492741173774258474522465444605840834193796631414995320087774658896048364103982815258692096685" }},
+ {{ "4.21875", "1.858488933532261262387603943116424040560957193049648082245398381173590809878153982869279424951736518" }},
+ {{ "4.25", "2.006309027858059435312199733843025004203991000201116744630971025635743461495678364523854925961565933" }},
+ {{ "4.28125", "2.173911671176453464233801926617652208987805422324233358984523813313677124319401603031463553334586795" }},
+ {{ "4.3125", "2.365954706436810886261405424430153147538433069393544616996159851851045098884294543485330531184033036" }},
+ {{ "4.34375", "2.58867360110912318951821732893635523217217883697807084314676743075156168098379747192932679404932885" }},
+ {{ "4.375", "2.850612135014197347464512007371469511624647336547380863597026522958389351638925329325864211361675359" }},
+ {{ "4.40625", "3.163800603288976619542297558662099459127776345948257172928079751633780670148333702513937775996967237" }},
+ {{ "4.4375", "3.545737656638732611056781822478653525618506322500845353570490033964184425114602742381228738013800916" }},
+ {{ "4.46875", "4.022897320897881433471367965265766624497222626661161034375557752511167850308209715183529923181209519" }},
+ {{ "4.5", "4.63733205455118446831908669495962673002033167604849908135592490784364853630436659035964429989580423" }},
+ {{ "4.53125", "5.460110732358225081268571201584576241967507554680233568022847841671382048904153089722943992228366072" }},
+ {{ "4.5625", "6.621566538917184779658822397475662809951450423939232173471067230932326374886115835513736745573657993" }},
+ {{ "4.59375", "8.389349373172668043480112406855801804399985563752529469857319424831372393351619823015010870227400011" }},
+ {{ "4.625", "11.41394586984414667039249686700424655784704375419079662399301751232175345550471908433956600220150528" }},
+ {{ "4.65625", "17.794217921195291872116110930917322871062931030345133311457707064544221956249568351463091932558272" }},
+ {{ "4.6875", "40.17012705640036449304190879290789586501901676251470634007061519017512737181345480527620292167336129" }},
+ {{ "4.71875", "-157.2053810419425516610333761767147984621064081691004376958977511691902151494982722512124394464246881" }},
+ {{ "4.75", "-26.57541423100021444925624133456621507049828719711987551420375127874685894467704404079281767156965171" }},
+ {{ "4.78125", "-14.49904303397407169401387138739025359024482851876427547784737429808056788404653273313794074954104547" }},
+ {{ "4.8125", "-9.955517692663199659497301146983549868138803040917546840671025802878897403111578981570237166977305366" }},
+ {{ "4.84375", "-7.568770928466597669950125714728032038595443682400782384350047230172533622281584347829485301888539665" }},
+ {{ "4.875", "-6.095345265174791895543529207308251915058396610943153120402963827367536675687235397631104150517714925" }},
+ {{ "4.90625", "-5.093551747761417849838605582864480592041118085930024194611183352044275362666663197560756285563557591" }},
+ {{ "4.9375", "-4.366960809832423113382187614785174399552256061595826665894310062349100292377458713017173941901099366" }},
+ {{ "4.96875", "-3.814918596744426621193354615307784649480559936141816068738250826073519922812423391628708426424484949" }},
+ {{ "5", "-3.380515006246585636982705879447343908709569208285459877176820980918346010201206056831791856009410428" }},
+ {{ "5.03125", "-3.029148102302771164961521436423971160566131129828714146460894246137584114582867735365596418294127015" }},
+ {{ "5.0625", "-2.73856823245603647865430226656274757425295307326689315789016177502179223572750955725123296691662252" }},
+ {{ "5.09375", "-2.493817050876063510228483889992811590654110757263765873027034424090589388194896708294715609776449821" }},
+ {{ "5.125", "-2.284466361999853132376034939699606124682746442696980078901017290742647881722505799438755300967817548" }},
+ {{ "5.15625", "-2.103023353734157432798966856819893312894278382156270431204069828145019096032929826221618815522735662" }},
+ {{ "5.1875", "-1.94396519241478443283285298645374010314101176847753574637302261542129293949555826361500398886874374" }},
+ {{ "5.21875", "-1.803131092461690600361529359360266463729989122374270260332052248390551413451160551386405337128358437" }},
+ {{ "5.25", "-1.677326406624389127684834446781355734878514221167662440011355600468562011653802826535309338734910053" }},
+ {{ "5.28125", "-1.564057206075927617852462348582481289639348906743456817576975327632362277790709160010002260498590699" }},
+ {{ "5.3125", "-1.461347784441303570775301256747389266430752496556055422309798378517676612642129660840051802732712867" }},
+ {{ "5.34375", "-1.36761235448791393113713404156603997628029078648313063442112198771680848353561063900933679869893461" }},
+ {{ "5.375", "-1.281563046345464215429873432637423222317866003116950751512613373376845314748305445490135781753417754" }},
+ {{ "5.40625", "-1.202142762311081825673780483344209940977316276937937096782702116019344314429792428912212274465011549" }},
+ {{ "5.4375", "-1.128475389186388730418668294914420100814289081230956940736485357975544285270667364906582995184004442" }},
+ {{ "5.46875", "-1.059828347715565927266867602143137996921061876523369816266086983272908895834550263458873978282357056" }},
+ {{ "5.5", "-0.9955840522138850177019161740702867286905993509040201421089147368547994233084178348523042915084083077" }},
+ {{ "5.53125", "-0.9352178996735373313249149491276249977722839556692437323635652451207536878974422360418217978053551773" }},
+ {{ "5.5625", "-0.8782811077026627420028846442823333510762218192932291958379466783448865095622083395150126065512344446" }},
+ {{ "5.59375", "-0.8243871973186229222115460053416379931615277523370335469512772188350449840600638037662602397836368723" }},
+ {{ "5.625", "-0.7732012463758734614771474685457909254527078194270700631060606366411896649393019485319264721701600447" }},
+ {{ "5.65625", "-0.7244312708999757737148502388902211557937330882505616499576249426224616653330080051888518816616123148" }},
+ {{ "5.6875", "-0.6778212563139696041943536024958433042316769928076303165171422834039846729764625273526488517789737417" }},
+ {{ "5.71875", "-0.6331454792161440424929262529011204753164261484247750443857435235991899745283883164285814469564729784" }},
+ {{ "5.75", "-0.5902038468644901054170195032663081108054249240846444267071062035473153343668376567479794165486184472" }},
+ {{ "5.78125", "-0.5488180452487470465583585186996023704202388711137425402809495353782052794835324270116435144444853907" }},
+ {{ "5.8125", "-0.5088283340526268433264568968479225952416460593340160732760808861658301198202358775409378607410253813" }},
+ {{ "5.84375", "-0.4700908624280941936361204610007198415053847982327139590868905985009927783431252538270334618349713453" }},
+ {{ "5.875", "-0.4324754064907757695440115128522408464584984965503283137576460100497915888775090560945910034482914049" }},
+ {{ "5.90625", "-0.3958634500577715728387322802090283590444850041488349012771936138475077409268246305105488709941047507" }},
+ {{ "5.9375", "-0.3601465460097104261765989532960199175446047549989388477273964911510226366930877544365028188123550406" }},
+ {{ "5.96875", "-0.3252249079465421281971924062604461228563045080514509080291865924060718896122952297947720584304400305" }},
+ {{ "6", "-0.2910061913847491570536995888681755428311555709123391316088271933046559131122021519996248059475229616" }},
+ {{ "6.03125", "-0.2574044312501190948926553260844066507272665964422420930835303888833069876363053415593229084989769505" }},
+ {{ "6.0625", "-0.2243391083295019990486082083153394557139168759436924449745473819036543999446390847474833972561431122" }},
+ {{ "6.09375", "-0.1917343220126000636733861789852210342976612418141698349764104452472624060435608559813294673409175422" }},
+ {{ "6.125", "-0.1595180503486741129487427411798597329274963598657430717585348638114328150730071113710855848882228728" }},
+ {{ "6.15625", "-0.1276214813658537291522157530092700353508309312306960197241502999632222071779029887930485312029959035" }},
+ {{ "6.1875", "-0.09597840190639155007190320592294119000151190572960121328263061886000450929267149036536453259308092125" }},
+ {{ "6.21875", "-0.06452463203653075216342354397349405171379838323909874171208799994716724111404978040328803565744248937" }},
+ {{ "6.25", "-0.03319749448301144438419631194317525127766038457693080701966081495473675499225984399367237591921526005" }},
+ {{ "6.28125", "-0.001935309595765553843691829525274435788517976054625627169224279956186864996201309127614969112751901202" }},
+ {{ "6.3125", "0.02932309291350979792274199376680897224174579057648744678958323756547521586508413864276599103614351545" }},
+ {{ "6.34375", "0.06063885372047505801221326406404454670246033034497805406862823133882341608599003383282431176702261307" }},
+ {{ "6.375", "0.09207356314350050835492397132807778236841887606137324897895572241559097713132233298612222140840431269" }},
+ {{ "6.40625", "0.1236897479096077296070838372979705928368188283231838414804934929274025398571452124588393065510099759" }},
+ {{ "6.4375", "0.1555513736514298191439929689618245053471522825437403514671018199418895089031472964835239198291348668" }},
+ {{ "6.46875", "0.1877243718114725376401948692378642961122451437059168414418744613043681130520375192781612678122611322" }},
+ {{ "6.5", "0.220277200345896811825735903245910395013134783433298671312565971040207859095962733489570927809983752" }},
+ {{ "6.53125", "0.253281448628424489171015810263074415662213222146436493340123226398154356922736152388141063544543841" }},
+ {{ "6.5625", "0.2868124983022992902396435016696204994189572656467726352599962917225918966603261177449285587256173481" }},
+ {{ "6.59375", "0.3209502535782458942725336084114371332732723992168430541003499245591367871623197594684565991267905584" }},
+ {{ "6.625", "0.3557799567143647005420612267605866339037398845912245431900523492992941964222774204935357299525662811" }},
+ {{ "6.65625", "0.3913931072527633586303310805574337028074307951034635414359349547707586122479246892158861767238081689" }},
+ {{ "6.6875", "0.4278885071761893999613016206982314187458164558702387841850210320754507932238151571774989545334487634" }},
+ {{ "6.71875", "0.4653734586819128141559933341200671578345456984030117446615279672146457039797505409854792515433603876" }},
+ {{ "6.75", "0.5039651470083475548132524571742890116543823430974166616625221219450482100216791892806202009417424483" }},
+ {{ "6.78125", "0.5437922480355643338730870787135605883829637094412174029296025101763018004204025974330398781596165429" }},
+ {{ "6.8125", "0.5849968096716556782374159174641655681779685895667304240747256104820508784969531169383146463204412289" }},
+ {{ "6.84375", "0.6277364679474334892591612082171255002710958195004825881252644517358490289176441185242244713866378973" }},
+ {{ "6.875", "0.6721870741034611638659173114401257239025537597591200195749563598359978601937626091399638175089362186" }},
+ {{ "6.90625", "0.7185458288995548400076077740862700950460682676000352992576300205153430366069275776925317595307700138" }},
+ {{ "6.9375", "0.7670350464671162556530262845461572442649216262010355745804068537455730294466119988902478588983034749" }},
+ {{ "6.96875", "0.8179067044246350052260597321820256016080683284701549230268748786223049718597359248253027839270497755" }},
+ {{ "7", "0.8714479827243187364564508896003135663222034245984200644480154523301674476556679351044748556811165168" }},
+ {{ "7.03125", "0.927988055100702558366453168987743089267307369461721117972360539733706484657902890137954063374826404" }},
+ {{ "7.0625", "0.9879064802291251594676053789880311203133455080943572829265181459625625927973428370265184881799942024" }},
+ {{ "7.09375", "1.0516436537462216418830263449985522705286903110788757629051396054699693751826899237943523838887297" }},
+ {{ "7.125", "1.119713940340697920929231941973033073135897434271449197914919579212768620587877263960959541708252549" }},
+ {{ "7.15625", "1.192722326901007588684149485242155872646533354464514409876904886587006629927655098723914331692457874" }},
+ {{ "7.1875", "1.271385753083766195102512866837447084316821755807112034055075019301218550802923593730276046614253933" }},
+ {{ "7.21875", "1.356560730687106090381626490498188582130942795512557181635747233593968595718598671759051546605979157" }},
+ {{ "7.25", "1.449279530126825400966804908182545262594041927922324311633865090981669827371184783228521282728877249" }},
+ {{ "7.28125", "1.550798206734497978345598394969907597227586253061565831974177990152095709794984147425013361851865459" }},
+ {{ "7.3125", "1.662661250535958572647253880444919849918733690439628459569418630367100238120581497993662350014826086" }},
+ {{ "7.34375", "1.78678998697496418766617671089138013384203233815466866101103271149031802024685694556034074365409757" }},
+ {{ "7.375", "1.925605576103531021088436315604614476223254075602410795428544750301783382496712246458936951616523844" }},
+ {{ "7.40625", "2.082203514638078116771326575602059859463528643293617740928645387731580498162533103205305011512631601" }},
+ {{ "7.4375", "2.26060669237264261355866723509904048590096081733761353611694012356866351200745710198451308329107618" }},
+ {{ "7.46875", "2.466141609729379985621243345839389610788373993111041429799962056660510586368685947727836988290301937" }},
+ {{ "7.5", "2.706013866772690776762802272387995008883446304522264964682388787620940583840910641036913840080466461" }},
+ {{ "7.53125", "2.990217991868365275378986251269668199642886675694545360724616292050097614350992705530127905271866877" }},
+ {{ "7.5625", "3.333032524336291185691514966848310245587002670642998146766838315216031204958906362527023258344720302" }},
+ {{ "7.59375", "3.755592314437586774843968169016218401146579356484719112952387050721790775719524338750656820475167322" }},
+ {{ "7.625", "4.290567124941375634141691032410770755182292184491365711713765284134592087921445364428118108025228059" }},
+ {{ "7.65625", "4.991276730757292357917427430609014256293569739250152073504758948209194194425629988371488577185989884" }},
+ {{ "7.6875", "5.9510718925579227833281678276540391546652969268664831508775318977823975271243707799244732578159289" }},
+ {{ "7.71875", "7.349587230185289251288167334999299680627536804325241700547934306594013397091284138506685042660382893" }},
+ {{ "7.75", "9.582397403456211211397313849974932847186773522851876679318331037683816539880381009086487008735246101" }},
+ {{ "7.78125", "13.72492306901017608779850845108579464520662673186624419937919970195919428249551440291202224739747059" }},
+ {{ "7.8125", "24.09322543772519084215097143980037097594901385135011887012038200799428585198794379628997732285582328" }},
+ {{ "7.84375", "97.73268930511967729279698949083284985794762903146492273796908122393941623833579266193628175149777252" }},
+ {{ "7.875", "-47.57043136522765090736927872199715977332175052521738553413789183297556632881030788665564177584345509" }},
+ {{ "7.90625", "-19.11460505409424788533123395282424237931209756369617281068252559403871558997768678144456749005346186" }},
+ {{ "7.9375", "-11.94556191307435573940630678240021478719574633441063345522218692801937432207824662871635357235633214" }},
+ {{ "7.96875", "-8.674912622365588398920385347547421582720453172032529527100491584226967033946983107374195473719464544" }},
+ {{ "8", "-6.799711455220378699925262759608633364881412661473712848121891484119304982720857546088989511220313601" }},
+ {{ "8.03125", "-5.581950808689684669549294209348398629337304002995630540331278821921778288507014685935916701606576575" }},
+ {{ "8.0625", "-4.726032195156837427410372612416284237028321048638455837876262548466898310633589798461547191163836986" }},
+ {{ "8.09375", "-4.090461187975555242897409987452358342061343516721018283559611963305885456193756951211377465919516297" }},
+ {{ "8.125", "-3.599001897974260972151248247566727216299014591900000335282979733754229851045581086180509810930082767" }},
+ {{ "8.15625", "-3.206943184854794792051938572955176223102804950834430935020353335808782541779058955201736266932317623" }},
+ {{ "8.1875", "-2.886329592416760158849088002905458575851623094189615497250550481681316568867901585210424096370674517" }},
+ {{ "8.21875", "-2.618783945156319374614290552008768448544289531418583013216952580114253625700948540561589098351543348" }},
+ {{ "8.25", "-2.391728174447109499408796092049518207948088283366738019362364536579358984891061627461448588900266354" }},
+ {{ "8.28125", "-2.196262571237231366422169733787602194377870425422442983742466664711276453593062387209663908411122531" }},
+ {{ "8.3125", "-2.025912262702788461190762240682190168816613310552683831653429045356666462021227127736084042613847923" }},
+ {{ "8.34375", "-1.875853575963005310284960792984729880727224645450131943927210730483841090952411053279594957173517387" }},
+ {{ "8.375", "-1.74241880761627240539700340437602803932808901813845968268891377391077356174950266498464542879686652" }},
+ {{ "8.40625", "-1.622769124048113033597644536164719722449235338830292053581380926565132897863391794369515824501033615" }},
+ {{ "8.4375", "-1.514672563181530134110926429438194143845293739750523302549165608155316405124742878421871789886842147" }},
+ {{ "8.46875", "-1.416349739641873214089748540260482127074454913435673678582846741597865860350934848935327297727726336" }},
+ {{ "8.5", "-1.326364327785606923837177509628989183019847616858933039728626565320594601352898256466729337047543442" }},
+ {{ "8.53125", "-1.243543859514378322699255610900405730249411506966951588519354941299030591219071989214839064576899506" }},
+ {{ "8.5625", "-1.166921477042600182902656425322990210134485019242760863805503078706720819497128002394896106356209544" }},
+ {{ "8.59375", "-1.095692443843841888393214442111438580869887527193049760552789795233066505667689248095554577112371625" }},
+ {{ "8.625", "-1.029181226242794530622671562005776602295969084821805226400002870767989174122034536280082461534287795" }},
+ {{ "8.65625", "-0.9668162629797675117200288525867759956705289684684092618655305272884560415249588622588640534660859208" }},
+ {{ "8.6875", "-0.9081104046373177832576347663891532295331575111187881417687389316634049160994876797510769206182893432" }},
+ {{ "8.71875", "-0.8526455881926773939956486059670750827771160223765816890633669305249823793389660138647216198961396045" }},
+ {{ "8.75", "-0.8000607122131663748996935033554250873516322431753295881939448427095672520914736920285067785494755945" }},
+ {{ "8.78125", "-0.7500419570576314664068876238355166376078921127752475362685197014336164568978380363973382424380027378" }},
+ {{ "8.8125", "-0.7023149914660190721137439943663886714896255005161995584377885528996116609571672651781263426423264383" }},
+ {{ "8.84375", "-0.6566386479456336287953742502996364274330999062289317807304964691314686325574451710087769117377447232" }},
+ {{ "8.875", "-0.6127997515327654285376783646363991279819055057055158641281938301880811035156798875165049539694804864" }},
+ {{ "8.90625", "-0.5706088613603129182915651449940477497513792905530365057563881633464714239146849295760180740616051507" }},
+ {{ "8.9375", "-0.529896739873168003806242065594283411489762262385879653776325422716635759568492302090915293632301029" }},
+ {{ "8.96875", "-0.4905114059515517049978410600006085544703557897386518199219966407731976599471950962402695227799723485" }},
+ {{ "9", "-0.4523156594418098405903708757987855343087169256619843288072463344895615552699928891423222740611696987" }},
+ {{ "9.03125", "-0.4151849883541607117552210974950947708368354992200219503945689498048994961045141832240492234717107402" }},
+ {{ "9.0625", "-0.3790057881989822857530457874776947516302198077664862408128815699029163107706671425087481058924528226" }},
+ {{ "9.09375", "-0.3436738369929040836550521796260295565231979408984456062837271050291411394204206333260572683795806063" }},
+ {{ "9.125", "-0.3090929803907614767471346771315481283472474354946281905565967857578879461207205702332049986857635056" }},
+ {{ "9.15625", "-0.2751739899376987485248300510983424723605373451217689431344224438486165931202115441514245211478398115" }},
+ {{ "9.1875", "-0.2418335641420615678638155264698574025131647248333694816193249713183100110082265076470052022707012095" }},
+ {{ "9.21875", "-0.2089934473583106794872121428783074116994340488341375724854578952783525682316496422613143306038638671" }},
+ {{ "9.25", "-0.1765796456511299761112751840598406521389487242985432214413528930195762314982591148356765022144220392" }},
+ {{ "9.28125", "-0.144521722122150591814619269577170465800891448238859437753351534510505894724788264050561053752147101" }},
+ {{ "9.3125", "-0.1127521567973819422597203631074129348120757432615503831725905368424112610292538623181492998345439551" }},
+ {{ "9.34375", "-0.08120575823178342176032872038448411443172784451696952348584885928982452335749552547386985037617069992" }},
+ {{ "9.375", "-0.0498191155899860392003104787951054631853528180570175470879940653716436714322811615959161544657494618" }},
+ {{ "9.40625", "-0.01853008118625405320915271202115144102822290582324439033642733950763784110773883754760179758258022532" }},
+ {{ "9.4375", "0.01272272563027105977935573889462983744829956962204063464126832673322950722546841176709360279348538747" }},
+ {{ "9.46875", "0.04400040173584953885682440835958114627885199630660893827828903912727543614728912707303196060753625141" }},
+ {{ "9.5", "0.07536423875739405740654014205323665789342966267450384287846707728875924157814476147945907817392192786" }},
+ {{ "9.53125", "0.1068762048461025163674352287858142449224256724379234993543813605972685100190359293029737215855453465" }},
+ {{ "9.5625", "0.1385994377761661718602480104778901941178589868631124656851160671189176086579048746331765092114253163" }},
+ {{ "9.59375", "0.1705987577719601866335639057437200427987763331813918550294340474134857881430332967127222805799022305" }},
+ {{ "9.625", "0.2029412090417411123603662227278784038776298381618810811646084653751029723759416476460088872408054991" }},
+ {{ "9.65625", "0.2356966398441474632357392833080328068352054698543206659897268100728097017667724684606559049124154157" }},
+ {{ "9.6875", "0.268938332074403309291166325486527607211725274017137932139784676368590535825858340593417854926297648" }},
+ {{ "9.71875", "0.3027436928841933821970886411755473788376234496119460628913545818204169198969541686968930178216130025" }},
+ {{ "9.75", "0.3371950228159297335621484819773554194812863370480952763499236064163820830033268339692324715894157813" }},
+ {{ "9.78125", "0.3723803774359345699506506000690612357176932379964207743390433297005778841484733220050565284302113607" }},
+ {{ "9.8125", "0.4083945426204256871181400863951603330453056915705065091908373104020696107020950522244595815242992" }},
+ {{ "9.84375", "0.4453401476523343154827952361952568691359033281221121303793343966901885521315031273219697042193257942" }},
+ {{ "9.875", "0.4833289453490298299990038076226424305503958067355696981733291906588949898848660168661363237230401676" }},
+ {{ "9.90625", "0.5224832948561672053074357426518017813969502851835052528668887798173320745102979706674984553747785107" }},
+ {{ "9.9375", "0.5629378909036186388354128640753191217895638800506841967942363059454826038558876839732857927717227769" }},
+ {{ "9.96875", "0.6048417937509008993401606503437317082375426212574423350794174057182764889826011397690814642006452007" }},
+ {{ "10", "0.6483608274590866712591249330098086768168743429837249756336279673958556003746239008717172062971522862" }},
+ {{ "10.03125", "0.6936804314743542712398847790886887683057558913351293442530262309817850224201884209136086813403394689" }},
+ {{ "10.0625", "0.7410090731101333158449425961247175839017373828496178608167740610459452518219259199024083200316084101" }},
+ {{ "10.09375", "0.7905823581871925973468103245168030277845433796367670128316098222165598426689171297882306893568062531" }},
+ {{ "10.125", "0.8426680163689236497241316220032744251657095955743734411730267063148126128540903336099720150350195161" }},
+ {{ "10.15625", "0.8975719901861101829801016952033465293839624897512338971033212391126217276476390113488747550991133784" }},
+ {{ "10.1875", "0.9556459274758633915064588099748061258315512098776637126437164255246444193412583209025710708854064641" }},
+ {{ "10.21875", "1.017296473311965646505591388794303117791831049823203228782533350726187433458132860834038283268836837" }},
+ {{ "10.25", "1.082996890215945275135930985916637983213229101767681562664207604721345006616414244816945101012068962" }},
+ {{ "10.28125", "1.153301720414501166084164165377670663086784905305525053523750216145961391216299317767459210812275763" }},
+ {{ "10.3125", "1.228865465058231603544476514726969780448778330773071834149679410133713041325810373844792660869193974" }},
+ {{ "10.34375", "1.310466629156747359552320115718026861262813059499884349607868463460206624928464716803324337065850131" }},
+ {{ "10.375", "1.399039024262115717131604647733708995170160567832938194238903453989697561972061091597355404503662754" }},
+ {{ "10.40625", "1.49571302349195916111981867105861656396166182988283681852423319036111614206596318006249059781485835" }},
+ {{ "10.4375", "1.601870670512520509271426433671643695090231605946938642547694243879213679699085414650549829075718711" }},
+ {{ "10.46875", "1.719220395521651499721208794808194478968865549194510942718291121399341439043920644901884496910696737" }},
+ {{ "10.5", "1.849899993421927279907583573513910565419553685959044018741794327382830123593588324994882461965573398" }},
+ {{ "10.53125", "1.996621179417850643664093294309064624983038139124591902589207528735600835709855269195187933895652101" }},
+ {{ "10.5625", "2.162876723677546330469959787105963848827689014945066557592989408260164364548287694286197662196239537" }},
+ {{ "10.59375", "2.3532442330793790868766441879841993750130572630209439743618231460831573709883106394866434440837641" }},
+ {{ "10.625", "2.573843631271674362526537866893410697197766596999920083319154750577002457483161716337803596844925106" }},
+ {{ "10.65625", "2.833047421190427952095570132770964879184235914846751261896726812931990128759669900544999535061769791" }},
+ {{ "10.6875", "3.142623220176844496098570587446827716363816198180813628746017544330426339542323699691642256030772053" }},
+ {{ "10.71875", "3.519650155321593637030342256680131753850278370827948246193900683195030354927519452141570420409057437" }},
+ {{ "10.75", "3.989898450288877172272878730129464264004901452428968181149190336688176169073686050444717716156454253" }},
+ {{ "10.78125", "4.594165609870243515783279467995060486532380531283432068617070247011706442921648714627407953983920726" }},
+ {{ "10.8125", "5.401101953070107889048337369479695723086844105989269027204537226522869955593746957868263836003479647" }},
+ {{ "10.84375", "6.535875415517406207251199308597767679104658091064327476058394143828942638073632382427758536504917985" }},
+ {{ "10.875", "8.253411766339305537723460693388679535974907155823982004597806731192500887738499761977958603336992426" }},
+ {{ "10.90625", "11.16537284500979684723686544686940420453225367789354062936636940962591367864691678374577954865828186" }},
+ {{ "10.9375", "17.1999620041711094734838984205883317149769089588687370821690524219299315809266573264745104659869829" }},
+ {{ "10.96875", "37.27070620721793879698276661020742630154681506539144657714408230209752760393928366701053772541231071" }},
+ {{ "11", "-225.9508464541951420257954832034531539516575098851311946310945881123661134104031654779989090875181672" }},
+ {{ "11.03125", "-28.01838123473997016830887833476199550560697066011986939559933525309909705318537405182199378012840027" }},
+ {{ "11.0625", "-14.91962506867234581945151895985710289930225918712794589354339983163930894702818997439864076091931126" }},
+ {{ "11.09375", "-10.15307233756673521728139815893864848321827456537331024001764086854554203725293661816927668294489745" }},
+ {{ "11.125", "-7.683249828520493578856827081745572284486853920128557099054138395954224416767780846216824234128741871" }},
+ {{ "11.15625", "-6.170065007339837672004969274368706522165797321914087418607341946608032746141308987068347258026539261" }},
+ {{ "11.1875", "-5.146216397928971013498356330072590228022047015189051411856482418633925739244947714746552179251733944" }},
+ {{ "11.21875", "-4.406134215367990783634732996136714284665546485639321948525683144032506137127272195504713779988841399" }},
+ {{ "11.25", "-3.845243526046256589195292015214843119217023542577367989034898325348687250589462590349993156554307721" }},
+ {{ "11.28125", "-3.404725196340913894767892653680241020178288686778598191582702368768260415894176917496336011269246961" }},
+ {{ "11.3125", "-3.048957435167265586183006322737827462691340358802500561060757089057213237102895081676386924312658609" }},
+ {{ "11.34375", "-2.755105539085522466956356685286240136460553349428076133380205505661678601069631697225730693586354901" }},
+ {{ "11.375", "-2.507856046343293846165268336837981024254374791359792671451310995149841786950224129840033693800933455" }},
+ {{ "11.40625", "-2.296555085357014688557714000971300925194148838031073606034513705752180239656706450912207637184212202" }},
+ {{ "11.4375", "-2.113560858723099424307258719446955475134681339177645144130883477669849838830392714536871823793018366" }},
+ {{ "11.46875", "-1.953248965442351814769641861822757418968218808226145477990020040801933787597505710461744957513141637" }},
+ {{ "11.5", "-1.811387450326824859772397320474032833639713335926721521705076560469479148263546424971811321096648723" }},
+ {{ "11.53125", "-1.684730597525019137697751820797269016453098562968854704274935631922618587469362028272636692210544871" }},
+ {{ "11.5625", "-1.570747064811472615228088301480862011854346986220267355439332676174065617757164643849543074172144195" }},
+ {{ "11.59375", "-1.467433230574720919411941987695161181959171583863783447843463212366085434611122065381627004242638947" }},
+ {{ "11.625", "-1.373182138457896453349468046455100980035443259553659899722906361390876088856423969181083376455705666" }},
+ {{ "11.65625", "-1.286689630920366616376314221177221139006716016538511655589760746532540573609680625603641074608188434" }},
+ {{ "11.6875", "-1.206885914221201720054271911345572193315238450358663840449617121968073512366326525649980278803416278" }},
+ {{ "11.71875", "-1.132884861825656481798873135046969210301345541577298019300751660619960162890235612177970957925478595" }},
+ {{ "11.75", "-1.063945912486004409710559363045985530861938320222047288703751234746510874929602501339045816423036172" }},
+ {{ "11.78125", "-0.9994450559333915167440624304322053019403928948191033206551515159313846021422418864273459645373449009" }},
+ {{ "11.8125", "-0.9388524723222944773205643428254523492068640072627707382490811032852295370278108292005146916272238994" }},
+ {{ "11.84375", "-0.881715108900528303919177723946502416645736801861050134491985441499235913287446780705353461545417442" }},
+ {{ "11.875", "-0.8276429652929236471146892695710241706925495072977152657326004944101623406458452837545349486881138268" }},
+ {{ "11.90625", "-0.7762981960095720820932228114020179373213795483270746275212139165301756520252573166217954465331159458" }},
+ {{ "11.9375", "-0.7273863753138267917778418153001732955258816548283145725251801363629114248343367970028832122142992284" }},
+ {{ "11.96875", "-0.6806494377457210277597470928336025589584620324058462321470850608946457200573674297093242265437051282" }},
+ {{ "12", "-0.6358599286615807924609379429390076061509587586686860914514606814656551214484123291399643068894751555" }},
+ {{ "12.03125", "-0.5928162873294508906897144974924364212100987037074180867630829726623330818215300743873013630492129075" }},
+ {{ "12.0625", "-0.5513389500434250704976885869765975030435162971228425993732710884431519725994082993307502135366704687" }},
+ {{ "12.09375", "-0.5112671090040856778211886692327830312529713244160725823950417285454010972749346501560988873183882094" }},
+ {{ "12.125", "-0.472455998959126666328373026314261347130558625459848565935809588092219192527888607849005967299526205" }},
+ {{ "12.15625", "-0.4347746110466813389220145482909141465629503223075144609806539759358566301078783883593960376790796208" }},
+ {{ "12.1875", "-0.3981037542382981122358374348325646108510087325306228562334315140437947730049798142715674391074029588" }},
+ {{ "12.21875", "-0.3623344008952777173267729097645609415931859827734307762367947830110639831467043405387353622176899024" }},
+ {{ "12.25", "-0.3273662654331959909797507119051924955282853934206185144087221653583658953364484322496982215172064596" }},
+ {{ "12.28125", "-0.2931065748149348906573126400315634011327627839945547849105543140713203189089283254450491988430709458" }},
+ {{ "12.3125", "-0.2594689972120933396662267471796226223140842016040887149108653318448105627021634377488137220685751418" }},
+ {{ "12.34375", "-0.2263727011714726746425617255174464360665584672063083345910005855017649693977414015628137560181413471" }},
+ {{ "12.375", "-0.1937415223592955920421472499371716132396126974936842056246045191659136204224066400221303821918510103" }},
+ {{ "12.40625", "-0.1615032187034938758288345646836288312549849485871893783750506125037934982810946747034471565118071181" }},
+ {{ "12.4375", "-0.1295887977200466002615144930375243133915724779506460096421464176334192279649808190617654665646655393" }},
+ {{ "12.46875", "-0.09793190214949804406939767223801097423536917158984066549241688209747906679339832186909184479038423885" }},
+ {{ "12.5", "-0.06646824186327419610199266949441387194390610792357612079517505380578030434009894147743014400122005453" }},
+ {{ "12.53125", "-0.03513506141616282076636047393093268566965509833708523530838721391339373252314877573835767237228949322" }},
+ {{ "12.5625", "-0.003870633688692445796420680716701608075985971581256241161345780831826430572573689071744247468488929075" }},
+ {{ "12.59375", "0.02738622916941998236655243276631287278486472025157424329703232697741123275406245628528750156873296529" }},
+ {{ "12.625", "0.05869665578128338112635128913606850911677921227526205464651894469274626817414600063862113806671147531" }},
+ {{ "12.65625", "0.09012219459725165729474121609816933257302657281344601700769732387220992191083677289387048548334265912" }},
+ {{ "12.6875", "0.1217252999603408610668897042413571531127645503736599822403036205555496676066474076056000689949341066" }},
+ {{ "12.71875", "0.1535698333828775342772949638706552097777256705040011551078273258533143177119249497623834514512966756" }},
+ {{ "12.75", "0.1857215886751401902594186441708939448272141506734588329272148156845153012668419405756499880982943312" }},
+ {{ "12.78125", "0.2182488502657797346752690950871572837813792443000041521932413723748578742375061893600646885986149118" }},
+ {{ "12.8125", "0.2512229950428828425999138094132092852018197118941615412720196242900796512859843472371170313836583775" }},
+ {{ "12.84375", "0.2847191493692259054394416502657415422614131291273802036428533121457701035912610846112501083132620008" }},
+ {{ "12.875", "0.3188169146481101964165914224483354040480603343474688683709071564169780696806924149291320418944830542" }},
+ {{ "12.90625", "0.3536011770209831976646321735648611242564793780159081807119024532891168112397727872069370118132852613" }},
+ {{ "12.9375", "0.389163019575800390066324389631248715515481435421443727622672043630746566664120384677948936473787333" }},
+ {{ "12.96875", "0.4256007589819842824595519481972026675555296385735056063290277948532474177383987445148843331908874667" }},
+ {{ "13", "0.4630211329364895955117902835081206683532120959519440470950206693928302579327807145125758116501924079" }},
+ {{ "13.03125", "0.5015406704601738993466207755375547536965260852964643732753893793547109382261801451895601761930463122" }},
+ {{ "13.0625", "0.5412872842615681585626378992160244527886510964571032692368478641312818490839188830849928560962861538" }},
+ {{ "13.09375", "0.5824021335357886328662589223215248727421699777193264549116653046243519880397055116969487363618353957" }},
+ {{ "13.125", "0.6250418172930577232327055575810817395750497037126950514585195397519699819130820731538599564259401139" }},
+ {{ "13.15625", "0.6693809734298055686754246761212833674742679018564325405072602539903766997859347462285344333571366362" }},
+ {{ "13.1875", "0.7156153783773706463324211230116191534127258818669295732823217991324981875804470761472072117982861964" }},
+ {{ "13.21875", "0.7639656678174816067986696149135126827704120185065555912507382354963651332883430075609034401555571502" }},
+ {{ "13.25", "0.8146818327614344736464451806034453710444224291621571573625236805118070729970340362557654528804594448" }},
+ {{ "13.28125", "0.8680486902251570873258425734584921956065820604675624643643164481487468794096033758920520511975882962" }},
+ {{ "13.3125", "0.9243925880092635749600582006440809362226783655074073519865821148035556209179629462013383469424274175" }},
+ {{ "13.34375", "0.984089684751991735962930471741445607987192320278600727525448404432994693600540790050738561865588772" }},
+ {{ "13.375", "1.04757625822842897028900134354672689006793126569323519874122370449523706721491998653522405351511" }},
+ {{ "13.40625", "1.115361649708918497565229580465214098442269312226313131576538895853120727413355048723361997440716611" }},
+ {{ "13.4375", "1.188044669282090096413968423531415025467187597047077575491037309801518019505454161493737933958668965" }},
+ {{ "13.46875", "1.266334595496805761839284321117713547689424188079416196364317291844437171872585239983180116380091394" }},
+ {{ "13.5", "1.351078347287010480371085577712699470101212829099407611657174914155576868564657173832374341089513584" }},
+ {{ "13.53125", "1.443296057137394170028536177718664041051292527024487177527337760724543655637891131854085251072201818" }},
+ {{ "13.5625", "1.544228244055125768572769325179666059641117940456933228593668266762756226316757718141030898582889678" }},
+ {{ "13.59375", "1.65539925635608625536146268504299540984757874423396346584219270902415141849546774423536235044651061" }},
+ {{ "13.625", "1.778703933748487611100295794480392286774372855795510955005500225382241572963111907877924106343034439" }},
+ {{ "13.65625", "1.916528050760659646742064707886848214342582893475968412683323141359371632373241621750396872855231387" }},
+ {{ "13.6875", "2.071918975654530318165994049833557729201414960634819277207514404216213840009455116234485076356302166" }},
+ {{ "13.71875", "2.248832798150414958768559692131859458258869348641929756045263587943996112471489439485863476093034658" }},
+ {{ "13.75", "2.452501131436276534259505261160229408535827308333544989748716942417182101185885609613251793631088723" }},
+ {{ "13.78125", "2.689991141885544485574819071146851902487462547699495662222675009146133600868249015967786252574495347" }},
+ {{ "13.8125", "2.971088997454883061146937345921981294715821069297105784485484470539822403438727250351950923586461683" }},
+ {{ "13.84375", "3.309747852278236334086030022253642441335045150382837946015733966046635972988597769925369044448793434" }},
+ {{ "13.875", "3.726571412380592611642200928513525816649689030739311675986112325390668863787780356510815096395312152" }},
+ {{ "13.90625", "4.253314099623669334835259848593744934346239237141072606237802004691075608138259425654524049734148683" }},
+ {{ "13.9375", "4.941607147834976432334070015221138910450692007921150173618524899066416996751652602822476062787651509" }},
+ {{ "13.96875", "5.881399525150031955799636707531603412059246766703476508448423108137501182284498677930575806202198028" }},
+ {{ "14", "7.244606616094805116868776904419943839744730261240134752545587919443539234559937291680749763590851956" }},
+ {{ "14.03125", "9.406028188605279696133223875198323737712453281000019998207973537233195589286463672078393783342949057" }},
+ {{ "14.0625", "13.36790967265482265511197119971831749461310263946778620293662813338523575832270133240885318460296722" }},
+ {{ "14.09375", "23.0180098105772480411418077991835591801343058014965291845911306402355660736744079654039102037142972" }},
+ {{ "14.125", "82.18587088008837479889498738727608856213126524631858084352266182200806013924238364295643998983071042" }},
+ {{ "14.15625", "-52.39613928846073424250555787725052081495348867793023995281290229927733884543365803704289494278819236" }},
+ {{ "14.1875", "-19.85087749437963381473636677142019044036915990708056158011806608744982156130940528545579140382954901" }},
+ {{ "14.21875", "-12.23024032878110918179097238079573616977352169397336130087278904329232109578073694396971060087189843" }},
+ {{ "14.25", "-8.825007825823643194479070661167279551172813025945214108644920017576189426949178857879125100439566237" }},
+ {{ "14.28125", "-6.892346926954325909059194856822673062063097995636142714599547668355292064875194893124728097012275365" }},
+ {{ "14.3125", "-5.644866498825540128381929944705578552248933555730964244899773528736917184084590171390597212873718595" }},
+ {{ "14.34375", "-4.771610252795610046024685797665514766422880378783577882983742818079026166693261845053770481989424557" }},
+ {{ "14.375", "-4.125051680440956814255997242162117938555651270642110578618995113301257483035180159821309310658332941" }},
+ {{ "14.40625", "-3.626194314229776036712561256911661725676439848577743170654748551410882288678506147976699754338337632" }},
+ {{ "14.4375", "-3.228918544653384166822369480885301355908586468628448310353628937744136710166892378083809771029038072" }},
+ {{ "14.46875", "-2.904489208401961365438740405970863838028715766433251544998958231462070708355920879083964796103033733" }},
+ {{ "14.5", "-2.634069132503832833409607035052858278935807513368801311481801280408668028920599740332367971681453643" }},
+ {{ "14.53125", "-2.404794639925577553244012746285864594559572350297129379452932406519481483010765023196033751578709703" }},
+ {{ "14.5625", "-2.207581089523679545128355853946391835592464237094323506839360879131859583353800754571132350944473674" }},
+ {{ "14.59375", "-2.035829586659772321235017007716845648434117124540496962900856683971781311984497273615528750368081422" }},
+ {{ "14.625", "-1.884630768865435904935595378906947231717012177189752377379403964925875302521199447518722408719775981" }},
+ {{ "14.65625", "-1.750256190835124208623312849116061326812165846025415986783560739453729962659158203940996884358758139" }},
+ {{ "14.6875", "-1.629822991609989147184189043054819627629510818289435539398133590083260226275976603564527843030512624" }},
+ {{ "14.71875", "-1.521066667289361457373930052890176846963182405346389200320517277799503677666772192617687500257521097" }},
+ {{ "14.75", "-1.42218336083774197380789085745137021789867848279597800468450871698744869740438289092755542692570482" }},
+ {{ "14.78125", "-1.331718058572613129017722401996663023341875099157808098995252549045562547044521935057437210333349552" }},
+ {{ "14.8125", "-1.248483823169844883793467308858957913772012915051151771810074084965259104516379708093866536649015936" }},
+ {{ "14.84375", "-1.171502454280969620050113939757468091964527953537892858826299161314598145955301346129774398985079725" }},
+ {{ "14.875", "-1.09996022360423379094065298284739111500559223495806048377446355428125902586706149601540328954397664" }},
+ {{ "14.90625", "-1.033174396383465269461739738697259215672589493553897443441659340076220701053186730617856132398548093" }},
+ {{ "14.9375", "-0.9705675907155131163149460322607739770705545946870992276893226926978460501228871025636381103213358614" }},
+ {{ "14.96875", "-0.9116479124475490508064737825953723368462225788875404013990634500526165327350899245784037598875471869" }},
+ {{ "15", "-0.8559934009085187640261927782380296049897864414742962979687446281783012594486541122545103129259226012" }},
+ {{ "15.03125", "-0.8032397302332296612432159755337281904284459733163994877022298441144059785603187789136637043263789466" }},
+ {{ "15.0625", "-0.7530703960754939484978446924032015414437125508200990314934869704250553438069278960228507610120908637" }},
+ {{ "15.09375", "-0.7052088187318415299725928408540094093554358958059088325375638362095004704432693353838375709463129551" }},
+ {{ "15.125", "-0.659411937622644225218300893404169827076548649885412227383887901950221923526355502978543776575055119" }},
+ {{ "15.15625", "-0.6154649762727536414801474029122625793755198617269250343988631456453788448149731706979351529235579577" }},
+ {{ "15.1875", "-0.5731771332183040948793178896118867037269598773610412277642977614409075169432893108977656087532808068" }},
+ {{ "15.21875", "-0.5323780107028691176788965668440942781647156607765742951342412648358988559400799809724920990286528734" }},
+ {{ "15.25", "-0.4929146351866012621666401573415074523464609163340854530825224584649245974424596583470196176643838565" }},
+ {{ "15.28125", "-0.4546489554738299415350063572461193751006928326854122963028434583535719327916356408447934270192962049" }},
+ {{ "15.3125", "-0.4174557284251085623680148206370333657407709127949181945517726979253617292255491330234726669774559159" }},
+ {{ "15.34375", "-0.3812207207302419203446046603506711987787377766806738457878506795815713138223264722913354548269137032" }},
+ {{ "15.375", "-0.3458391695028422582485004568448026536356203654713446806415710694635885346246660520826948870993463705" }},
+ {{ "15.40625", "-0.311214455551825073642663079591570618837743590849903018274057606911872122304533000910107606645650336" }},
+ {{ "15.4375", "-0.2772569518534830079599506190692912755868921271423525814120233867695893487373304945292237740353757468" }},
+ {{ "15.46875", "-0.2438830165543173054192587099181568413614402066070223778896735213919894343566763962867244846621486138" }},
+ {{ "15.5", "-0.2110141052012553133863173741408514435037061655011970687100846880180438182550528565062101594891245018" }},
+ {{ "15.53125", "-0.1785759811388596991279739233477573236616687666102227187311862264495771634608666297275574790232136991" }},
+ {{ "15.5625", "-0.1464980063716879847555275878278898667317766571375499828106145375100216949704230935552550931052323183" }},
+ {{ "15.59375", "-0.1147124978452713735943481847220917786442201384229215777788278473922030662630912256721375261600875605" }},
+ }};
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ T val = tan(T(data[k][0]));
+ T e = relative_error(val, T(data[k][1]));
+ unsigned err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ val = tan(-T(data[k][0]));
+ e = relative_error(val, T(-T(data[k][1])));
+ err = e.template convert_to<unsigned>();
+ if(err > max_err)
+ {
+ max_err = err;
+ }
+ }
+ std::cout << "Max error was: " << max_err << std::endl;
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+ // Check low multiprecision digit counts.
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<9> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<18> > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_tanh.cpp b/libs/multiprecision/test/test_tanh.cpp
new file mode 100644
index 0000000000..e45c6bce6c
--- /dev/null
+++ b/libs/multiprecision/test/test_tanh.cpp
@@ -0,0 +1,177 @@
+///////////////////////////////////////////////////////////////
+// Copyright Christopher Kormanyos 2002 - 2011.
+// Copyright 2011 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_
+//
+// This work is based on an earlier work:
+// "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations",
+// in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011. http://doi.acm.org/10.1145/1916461.1916469
+
+#ifdef _MSC_VER
+# define _SCL_SECURE_NO_WARNINGS
+#endif
+
+#include <boost/detail/lightweight_test.hpp>
+#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) && !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!!")
+#endif
+#ifdef __GNUC__
+#pragma warning "CAUTION!!: No backend type specified so testing everything.... this will take some time!!"
+#endif
+
+#endif
+
+#if defined(TEST_MPF_50)
+#include <boost/multiprecision/gmp.hpp>
+#endif
+#if defined(TEST_MPFR_50)
+#include <boost/multiprecision/mpfr.hpp>
+#endif
+#if defined(TEST_MPFI_50)
+#include <boost/multiprecision/mpfi.hpp>
+#endif
+#ifdef TEST_BACKEND
+#include <boost/multiprecision/concepts/mp_number_archetypes.hpp>
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+#include <boost/multiprecision/cpp_dec_float.hpp>
+#endif
+#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()
+{
+ std::cout << "Testing type: " << typeid(T).name() << std::endl;
+ static const boost::array<const char*, 51u> data =
+ {{
+ "0.32137338579537729992840434899278935725496267444911714908205287462634251052210833615032073534299473485492692600156322137421801432333125051088723502425037485776412801577568405892077585206768190530859883094571475323319480739773193974206966728764224286661945738178210577326172938196062277314761537881936346874075881338768208490193827960565412814349738654540520356903367084438822830345189856017860672463017",
+ "0.98628073997374759901559180515206275902189609982907214282364143439537215491113710345866034807991101303183938339561499559327886956280789743287824488269072297413440935381715378233031399015496124706604318545539544610760151756970229801074280545428642122005982857974921606264103186878499260552388713716032507770319550435738767597150644370033277228635793175246197730488375240713357827246166262087899961098648",
+ "0.99999659728082161113542951278514830809677661658635225532792520501703544628367875293677270218317428676793098034276042396396797568103263882451732810190507733063467333056356770774002596898762991629653041854653269824642873291146068535300466473399592751219449187768646625229500705182676930009096545254478199838990703077597971823456671241141900968900216742636822174010867343154474773040184900973368250708724",
+ "0.9999999999846483268200051609594321550129159997920576480976206867496512752486590660437091205989616108531910897733432934135954788151766561209164605337537937873588006552145390152387235783207736999759875845070169747521389728857476525437483543080651125798739562649414879487621858466223255239845627205850217328574865852922872737234283038190096982410137471391847466112651349436875974689271288261759782261321",
+ "0.9999999999999999987314527242099750648171958211319474558707792311593804963057878814487720997303512134007272111464990650500302215773762906820778949397525329109311974741708703536680512747226155618703318739024344621256722269608969415280035337052044425138281821760268269187377517243951584969175035549994883451471918693502477485385682884154959809285569290940740978684264145737164182111806308430952867505356",
+ "0.9999999999999999999999999980800953069847308586840237590563929855339557065536765765234844240789584487443451033349994294426525006157530320529970966048109743850154174651033567146346966529198814047607015842020039899630884318521543225160212193994911746894335846264878066530266737005606770102869237101848445559941638381625615207320468184414917265299980278164193202897754476112968080358662232635784904263624",
+ "0.9999999999999999999999999999999999999467800140220866754762922747687784133233134010432889959570821554455247528344437918197518545105332713456859236726383195243056599177018396579766073961540714510399202497404647103138524118065391185503678895059096790300665805648569647351935897874460587855127436472608470703384261586158923066272124216158518232588330799027603391275039552776308636189531809031683723259525",
+ "0.9999999999999999999999999999999999999999999999999729795912960133359928587562229512337339217831178574875626619226954752643039860388090399659478676726654102118545764943682017611574275691203710439707807193180604656837503862242700430179591666329131728631752773789406064618682879167351725013888294859467540832310795515139677375807407622028485242969471516812171475098378942187864794497220152019202351747432",
+ "0.9999999999999999999999999999999999999999999999999999999999999997487354938310440650220692519525261552411539996830587326435051159231522052011310872619940247463640019105467860778515384738650636054646551611609757125760437266415865214306396520500343113189907306851418957620080971645943305760132385139924583154317156560414548076370893360020924960120441059315311380109752919823616149973862196846266297710225",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999572050575304159358359221596743379014313563214857593401545331495211888415913558896516895286943572966865708195832339959764445194449615969154689769557903166971249521898883489362426386924297872088925852892350150865941427355319827260914834268754732102528105919811851193667193380541054520023003326858641189063542651960743457613",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998665016733514821204959171836698281165918083005790816030823236096080522860514417075411055633676502699904415882389102672678124683084429720879962355892225321369091298491658349178472270952759208443767848312111069127329160464884932271685986610697222434145553035947750809388321614695213754318979469071722942883",
+ "0.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999992372516628147584832950728021842198359205201519966391076994594773600474674435473005118571751514446148292787696117866094991476340344341061706866751156257825144909115117822189019766805825304055482958970512463798453229341693148012213183553546720540880444569824125592343803193018989122964",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999920180539244323143459416025663362517256166793900312667214543096238752838226369161775531456005541374878274529461511286842988937830155704737448202558382612829022464635400289328916240002670783433827234852858267621807568393874737879853500598862298495727481132883728328",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998470116425957155787153557938061034698436461173594805292722874130433614266475136267606498346730583487791266503943659174886554170377537630914770998114573340081594827150737005158607830579000912020838690230498119348251553312722575955142752845289",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999462931048083476382670449719737943481963930626760625326765703815392249622625483433043363664396638162612437367800102332819699131841317348173451308570776544874933173719394861336636728378134900422312720743996219523365098",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999996546783689748726752364896615532860288057097437452774779386074906915819380531729493071959232887620213723607155628959529584572083388979892309086717786559916703004365603135284141639480887703759",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999593332381019647939423999969519583099837564321056588766269967853479478603122899456262904869063959564274215899007623362296377022418464303752396325625838280378647335",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999122842714667567128203355585346559126606029196080721845292399104475997315344844970601651757832506169948906646054332493537761143729664",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999965347272050374435790597917065458623422102880662825928396981295898014081371503733411536311258910851858",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999974926240515037403282500845454464621558236030794140169313830052413917",
+ "0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999667705192725716176070161727364499",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ "1.",
+ }};
+
+ T eg = static_cast<T>("5.77215664901532860606512090082402431042159335939923598805767234884867726777664670936947063291746749514631447249807082480960504014486542836224173997644923536253500333742937337737673942792595258247094916008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519e-1");
+
+ unsigned max_err = 0;
+ for(unsigned k = 0; k < data.size(); k++)
+ {
+ const T x = eg + k;
+ T val = boost::multiprecision::tanh(x * x);
+ T e = relative_error(val, T(data[k]));
+ 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 < 100);
+}
+
+
+int main()
+{
+#ifdef TEST_BACKEND
+ test<boost::multiprecision::number<boost::multiprecision::concepts::number_backend_float_architype> >();
+#endif
+#ifdef TEST_MPF_50
+ test<boost::multiprecision::mpf_float_50>();
+ test<boost::multiprecision::mpf_float_100>();
+#endif
+#ifdef TEST_MPFR_50
+ test<boost::multiprecision::mpfr_float_50>();
+ test<boost::multiprecision::mpfr_float_100>();
+#endif
+#ifdef TEST_MPFI_50
+ test<boost::multiprecision::mpfi_float_50>();
+ test<boost::multiprecision::mpfi_float_100>();
+#endif
+#ifdef TEST_CPP_DEC_FLOAT
+ test<boost::multiprecision::cpp_dec_float_50>();
+ test<boost::multiprecision::cpp_dec_float_100>();
+#ifndef SLOW_COMPLER
+ // Some "peculiar" digit counts which stress our code:
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<65> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<64> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<63> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<62> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<61, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<60, long long> > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<59, long long, std::allocator<void> > > >();
+ test<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<58, long long, std::allocator<void> > > >();
+#endif
+#endif
+#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();
+}
+
+
+
diff --git a/libs/multiprecision/test/test_test.cpp b/libs/multiprecision/test/test_test.cpp
new file mode 100644
index 0000000000..68a277f431
--- /dev/null
+++ b/libs/multiprecision/test/test_test.cpp
@@ -0,0 +1,89 @@
+///////////////////////////////////////////////////////////////
+// Copyright 2011 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 "test.hpp"
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+void proc_that_throws()
+{
+ throw std::runtime_error("");
+}
+
+int main()
+{
+ boost::multiprecision::cpp_dec_float_50 a1(1), a2(1), b(3), c(-2);
+
+ BOOST_WARN(a1);
+ BOOST_WARN(a1 == b);
+ BOOST_CHECK(a1);
+ BOOST_CHECK(a1 == b);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ boost::multiprecision::cpp_dec_float_50 a_tol = a1 + a1 * 100 * std::numeric_limits<boost::multiprecision::cpp_dec_float_50>::epsilon();
+ boost::multiprecision::cpp_dec_float_50 tol = 100 * std::numeric_limits<boost::multiprecision::cpp_dec_float_50>::epsilon();
+
+ BOOST_CHECK_CLOSE(a1, a_tol, tol * 102); // Passes
+ BOOST_WARN_CLOSE(a1, a_tol, tol * 98); // fails
+ BOOST_CHECK_CLOSE(a1, a_tol, tol * 98); // fails
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_CLOSE_FRACTION(a1, a_tol, tol * 1.02); // Passes
+ BOOST_WARN_CLOSE_FRACTION(a1, a_tol, tol * 0.98); // fails
+ BOOST_CHECK_CLOSE_FRACTION(a1, a_tol, tol * 0.98); // fails
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_EQUAL(a1, a2);
+ BOOST_WARN_EQUAL(a1, b);
+ BOOST_CHECK_EQUAL(a1, b);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_NE(a1, b);
+ BOOST_WARN_NE(a1, a2);
+ BOOST_CHECK_NE(a1, a2);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_GT(a1, c);
+ BOOST_WARN_GT(a1, a2);
+ BOOST_CHECK_GT(a1, a2);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_LT(a1, b);
+ BOOST_WARN_LT(a1, a2);
+ BOOST_CHECK_LT(a1, a2);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_GE(a1, a2);
+ BOOST_CHECK_GE(a1, c);
+ BOOST_WARN_GE(a1, b);
+ BOOST_CHECK_GE(a1, b);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_LE(a1, a2);
+ BOOST_CHECK_LE(a1, b);
+ BOOST_WARN_LE(a1, c);
+ BOOST_CHECK_LE(a1, c);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ BOOST_CHECK_THROW(proc_that_throws(), std::runtime_error);
+ BOOST_CHECK_THROW(a1+b+c, std::runtime_error);
+ BOOST_CHECK(boost::detail::test_errors() == 1);
+ --boost::detail::test_errors();
+
+ return boost::report_errors();
+}
+
diff --git a/libs/multiprecision/test/ublas_interop/common/init.hpp b/libs/multiprecision/test/ublas_interop/common/init.hpp
new file mode 100644
index 0000000000..a9691b4ed0
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/common/init.hpp
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2004 Michael Stevens
+ * 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)
+ */
+
+/*
+ * Default construct test when possible
+ */
+
+template <class E>
+struct default_construct
+{
+ static void test() {}
+};
+template <class VC>
+struct default_construct<boost::numeric::ublas::vector_container<VC> >
+{
+ static void test ()
+ {
+ VC default_constuct;
+ initialize_vector (default_constuct);
+ std::cout << "default construct = " << default_constuct << std::endl;
+ }
+};
+template <class MC>
+struct default_construct<boost::numeric::ublas::matrix_container<MC> >
+{
+ static void test ()
+ {
+ MC default_constuct;
+ initialize_vector (default_constuct);
+ std::cout << "default construct = " << default_constuct << std::endl;
+ }
+};
+
+/*
+ * Initialise test values in vector/matrix
+ */
+
+template<class V>
+void initialize_vector (V &v) {
+ typename V::size_type size = v.size ();
+ for (typename V::size_type i = 0; i < size; ++ i)
+ v [i] = typename V::value_type ( i + 1.f );
+}
+
+template<class M>
+void initialize_matrix_impl (M &m, ublas::packed_proxy_tag) {
+ typename M::size_type size1 = m.size1 ();
+#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
+ for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
+ for (typename M::iterator2 j = i.begin(); j != i.end(); ++ j)
+ *j = typename M::value_type ( i.index1() * size1 + j.index2() + 1.f );
+#else
+ for (typename M::iterator1 i = m.begin1(); i != m.end1(); ++ i)
+ for (typename M::iterator2 j = ublas::begin (i, ublas::iterator1_tag ()); j != ublas::end (i, ublas::iterator1_tag ()); ++ j)
+ *j = typename M::value_type ( i.index1() * size1 + j.index2() + 1.f );
+#endif
+}
+
+template<class M>
+void initialize_matrix_impl (M &m, ublas::sparse_proxy_tag) {
+ typename M::size_type size1 = m.size1 ();
+ typename M::size_type size2 = m.size2 ();
+ for (typename M::size_type i = 0; i < size1; ++ i)
+ for (typename M::size_type j = 0; j < size2; ++ j)
+ m (i, j) = typename M::value_type (i * size1 + j + 1.f);
+}
+
+template<class M>
+void initialize_matrix (M &m) {
+ initialize_matrix_impl (m, typename M::storage_category());
+}
+
+template<class M>
+void initialize_matrix (M &m, ublas::lower_tag) {
+ typename M::size_type size1 = m.size1 ();
+ typename M::size_type size2 = m.size2 ();
+ for (typename M::size_type i = 0; i < size1; ++ i) {
+ typename M::size_type j = 0;
+ for (; j <= i; ++ j)
+ m (i, j) = i * size1 + j + 1.f;
+ for (; j < size2; ++ j)
+ m (i, j) = 0.f;
+ }
+}
+template<class M>
+void initialize_matrix (M &m, ublas::upper_tag) {
+ typename M::size_type size1 = m.size1 ();
+ typename M::size_type size2 = m.size2 ();
+ for (typename M::size_type i = 0; i < size1; ++ i) {
+ typename M::size_type j = 0;
+ for (; j < i; ++ j)
+ m (i, j) = 0.f;
+ for (; j < size2; ++ j)
+ m (i, j) = i * size1 + j + 1.f;
+ }
+}
diff --git a/libs/multiprecision/test/ublas_interop/common/testhelper.hpp b/libs/multiprecision/test/ublas_interop/common/testhelper.hpp
new file mode 100644
index 0000000000..4fbf9c4d15
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/common/testhelper.hpp
@@ -0,0 +1,74 @@
+// Copyright 2008 Gunter Winkler <guwi17@gmx.de>
+// 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)
+
+
+#ifndef _HPP_TESTHELPER_
+#define _HPP_TESTHELPER_
+
+#include <utility>
+
+static unsigned _success_counter = 0;
+static unsigned _fail_counter = 0;
+
+static inline
+void assertTrue(const char* message, bool condition) {
+#ifndef NOMESSAGES
+ std::cout << message;
+#endif
+ if ( condition ) {
+ ++ _success_counter;
+ std::cout << "1\n"; // success
+ } else {
+ ++ _fail_counter;
+ std::cout << "0\n"; // failed
+ }
+}
+
+template < class T >
+void assertEquals(const char* message, T expected, T actual) {
+#ifndef NOMESSAGES
+ std::cout << message;
+#endif
+ if ( expected == actual ) {
+ ++ _success_counter;
+ std::cout << "1\n"; // success
+ } else {
+ #ifndef NOMESSAGES
+ std::cout << " expected " << expected << " actual " << actual << " ";
+ #endif
+ ++ _fail_counter;
+ std::cout << "0\n"; // failed
+ }
+}
+
+static
+std::pair<unsigned, unsigned> getResults() {
+ return std::make_pair(_success_counter, _fail_counter);
+}
+
+template < class M1, class M2 >
+bool compare( const boost::numeric::ublas::matrix_expression<M1> & m1,
+ const boost::numeric::ublas::matrix_expression<M2> & m2 ) {
+ size_t size1 = (std::min)(m1().size1(), m2().size1());
+ size_t size2 = (std::min)(m1().size2(), m2().size2());
+ for (size_t i=0; i < size1; ++i) {
+ for (size_t j=0; j < size2; ++j) {
+ if ( m1()(i,j) != m2()(i,j) ) return false;
+ }
+ }
+ return true;
+}
+
+template < class M1, class M2 >
+bool compare( const boost::numeric::ublas::vector_expression<M1> & m1,
+ const boost::numeric::ublas::vector_expression<M2> & m2 ) {
+ size_t size = (std::min)(m1().size(), m2().size());
+ for (size_t i=0; i < size; ++i) {
+ if ( m1()(i) != m2()(i) ) return false;
+ }
+ return true;
+}
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test1.cpp b/libs/multiprecision/test/ublas_interop/test1.cpp
new file mode 100644
index 0000000000..53de790192
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test1.cpp
@@ -0,0 +1,20 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test1.hpp"
+
+int main () {
+ test_vector ();
+ test_matrix_vector ();
+ test_matrix ();
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test1.hpp b/libs/multiprecision/test/ublas_interop/test1.hpp
new file mode 100644
index 0000000000..1bcb024f16
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test1.hpp
@@ -0,0 +1,62 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST1_H
+#define TEST1_H
+
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996 4127 4100)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/vector_proxy.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/io.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+void test_vector ();
+void test_matrix_vector ();
+void test_matrix ();
+
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test11.cpp b/libs/multiprecision/test/ublas_interop/test11.cpp
new file mode 100644
index 0000000000..085bd90c39
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test11.cpp
@@ -0,0 +1,265 @@
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+
+#include "test1.hpp"
+
+// Test vector expression templates
+template<class V, int N>
+struct test_my_vector {
+ typedef typename V::value_type value_type;
+ typedef typename V::size_type size_type;
+ typedef typename ublas::type_traits<value_type>::real_type real_type;
+
+ template<class VP>
+ void test_container_with (VP &v1) const {
+ // Container type tests in addition to expression types
+ // Insert and erase
+ v1.insert_element (0, 55);
+ v1.erase_element (1);
+ v1.clear ();
+ }
+
+ template<class VP>
+ void test_expression_with (VP &v1, VP &v2, VP &v3) const {
+ // Expression type tests
+ value_type t;
+ size_type i;
+ real_type n;
+
+ // Default Construct
+ default_construct<VP>::test ();
+
+ // Copy and swap
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 = v2;
+ std::cout << "v1 = v2 = " << v1 << std::endl;
+ v1.assign_temporary (v2);
+ std::cout << "v1.assign_temporary (v2) = " << v1 << std::endl;
+ v1.swap (v2);
+ std::cout << "v1.swap (v2) = " << v1 << " " << v2 << std::endl;
+
+ // Zero assignment
+ v1 = ublas::zero_vector<> (v1.size ());
+ std::cout << "v1.zero_vector = " << v1 << std::endl;
+ v1 = v2;
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ // Project range and slice
+ initialize_vector (v1);
+ initialize_vector (v2);
+ project (v1, ublas::range(0,1)) = project (v2, ublas::range(0,1));
+ project (v1, ublas::range(0,1)) = project (v2, ublas::slice(0,1,1));
+ project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::slice(0,1,2));
+ project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::range(0,2));
+ std::cout << "v1 = range/slice " << v1 << std::endl;
+#endif
+
+ // Unary vector operations resulting in a vector
+ initialize_vector (v1);
+ v2 = - v1;
+ std::cout << "- v1 = " << v2 << std::endl;
+ v2 = ublas::conj (v1);
+ std::cout << "conj (v1) = " << v2 << std::endl;
+
+ // Binary vector operations resulting in a vector
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v3 = v1 + v2;
+ std::cout << "v1 + v2 = " << v3 << std::endl;
+ v3 = v1 - v2;
+ std::cout << "v1 - v2 = " << v3 << std::endl;
+ v3 = ublas::element_prod (v1, v2);
+ std::cout << "element_prod (v1, v2) = " << v3 << std::endl;
+
+ // Scaling a vector
+ t = N;
+ initialize_vector (v1);
+ v2 = value_type (1.) * v1;
+ std::cout << "1. * v1 = " << v2 << std::endl;
+ v2 = t * v1;
+ std::cout << "N * v1 = " << v2 << std::endl;
+ initialize_vector (v1);
+ v2 = v1 * value_type (1.);
+ std::cout << "v1 * 1. = " << v2 << std::endl;
+ v2 = v1 * t;
+ std::cout << "v1 * value_type(N) = " << v2 << std::endl;
+ // test interop with integer
+ v2 = v1 * N;
+
+ std::cout << "v1 * N = " << v2 << std::endl;
+
+ // Some assignments
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v2 += v1;
+ std::cout << "v2 += v1 = " << v2 << std::endl;
+ v2 -= v1;
+ std::cout << "v2 -= v1 = " << v2 << std::endl;
+ v2 = v2 + v1;
+ std::cout << "v2 = v2 + v1 = " << v2 << std::endl;
+ v2 = v2 - v1;
+ std::cout << "v2 = v2 - v1 = " << v2 << std::endl;
+ v1 *= value_type (1.);
+ std::cout << "v1 *= 1. = " << v1 << std::endl;
+ v1 *= t;
+ std::cout << "v1 *= value_type(N) = " << v1 << std::endl;
+ // test interop with integer
+ v1 *= N;
+ std::cout << "v1 *= N = " << v1 << std::endl;
+
+ // Unary vector operations resulting in a scalar
+ initialize_vector (v1);
+ t = ublas::sum (v1);
+ std::cout << "sum (v1) = " << t << std::endl;
+ n = ublas::norm_1 (v1);
+ std::cout << "norm_1 (v1) = " << n << std::endl;
+ n = ublas::norm_2 (v1);
+ std::cout << "norm_2 (v1) = " << n << std::endl;
+ n = ublas::norm_inf (v1);
+ std::cout << "norm_inf (v1) = " << n << std::endl;
+
+ i = ublas::index_norm_inf (v1);
+ std::cout << "index_norm_inf (v1) = " << i << std::endl;
+
+ // Binary vector operations resulting in a scalar
+ initialize_vector (v1);
+ initialize_vector (v2);
+ t = ublas::inner_prod (v1, v2);
+ std::cout << "inner_prod (v1, v2) = " << t << std::endl;
+
+ // Scalar and Binary vector expression resulting in a vector
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 = v1 * ublas::inner_prod (v1, v2);
+ std::cout << "v1 * inner_prod (v1, v2) = " << v1 << std::endl;
+ }
+
+ void operator () () const {
+ V v1 (N), v2 (N), v3 (N);
+ test_expression_with (v1, v2, v3);
+ test_container_with (v1);
+
+#ifdef USE_RANGE
+ ublas::vector_range<V> vr1 (v1, ublas::range (0, N)),
+ vr2 (v2, ublas::range (0, N)),
+ vr3 (v3, ublas::range (0, N));
+ test_expression_with (vr1, vr2, vr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::vector_slice<V> vs1 (v1, ublas::slice (0, 1, N)),
+ vs2 (v2, ublas::slice (0, 1, N)),
+ vs3 (v3, ublas::slice (0, 1, N));
+ test_expression_with (vs1, vs2, vs3);
+#endif
+ }
+};
+
+// Test vector
+void test_vector () {
+ std::cout << "test_vector" << std::endl;
+
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_vector<ublas::vector<double, ublas::bounded_array<double, 3> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_vector<ublas::vector<double, ublas::unbounded_array<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_vector<ublas::vector<double, std::vector<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_BOUNDED_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded" << std::endl;
+ test_my_vector<ublas::bounded_vector<mp_test_type, 3>, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded" << std::endl;
+ test_my_vector<ublas::bounded_vector<double, 3>, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded" << std::endl;
+ test_my_vector<ublas::bounded_vector<std::complex<mp_test_type>, 3>, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded" << std::endl;
+ test_my_vector<ublas::bounded_vector<std::complex<double>, 3>, 3> () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test12.cpp b/libs/multiprecision/test/ublas_interop/test12.cpp
new file mode 100644
index 0000000000..7059fb9e9b
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test12.cpp
@@ -0,0 +1,277 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test1.hpp"
+
+// Test matrix & vector expression templates
+template<class V, class M, int N>
+struct test_my_matrix_vector {
+ typedef typename V::value_type value_type;
+
+ template<class VP, class MP>
+ void test_with (VP &v1, VP &v2, MP &m1) const {
+ {
+ // Rows and columns
+ initialize_matrix (m1);
+ for (int i = 0; i < N; ++ i) {
+ v1 = ublas::row (m1, i);
+ std::cout << "row (m, " << i << ") = " << v1 << std::endl;
+ v1 = ublas::column (m1, i);
+ std::cout << "column (m, " << i << ") = " << v1 << std::endl;
+ }
+
+ // Outer product
+ initialize_vector (v1);
+ initialize_vector (v2);
+ m1 = ublas::outer_prod (v1, v2);
+ std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
+
+ // Matrix vector product
+ initialize_matrix (m1);
+ initialize_vector (v1);
+ v2 = ublas::prod (m1, v1);
+ std::cout << "prod (m1, v1) = " << v2 << std::endl;
+ v2 = ublas::prod (v1, m1);
+ std::cout << "prod (v1, m1) = " << v2 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ test_with (v1, v2, m1);
+
+ ublas::matrix_row<M> mr1 (m1, 0), mr2 (m1, 1);
+ test_with (mr1, mr2, m1);
+
+ ublas::matrix_column<M> mc1 (m1, 0), mc2 (m1, 1);
+ test_with (mc1, mc2, m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, m1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, m1);
+#endif
+ }
+ }
+};
+
+// Test matrix & vector
+void test_matrix_vector () {
+ std::cout << "test_matrix_vector" << std::endl;
+
+#ifdef USE_MATRIX
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::matrix<double, ublas::row_major, std::vector<double> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3> () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_BOUNDED_MATRIX
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded" << std::endl;
+ test_my_matrix_vector<ublas::bounded_vector<mp_test_type, 3>,
+ ublas::bounded_matrix<mp_test_type, 3, 3>, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded" << std::endl;
+ test_my_matrix_vector<ublas::bounded_vector<double, 3>,
+ ublas::bounded_matrix<double, 3, 3>, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded" << std::endl;
+ test_my_matrix_vector<ublas::bounded_vector<std::complex<mp_test_type>, 3>,
+ ublas::bounded_matrix<std::complex<mp_test_type>, 3, 3>, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded" << std::endl;
+ test_my_matrix_vector<ublas::bounded_vector<std::complex<double>, 3>,
+ ublas::bounded_matrix<std::complex<double>, 3, 3>, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_VECTOR_OF_VECTOR
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::vector_of_vector<mp_test_type, ublas::row_major, ublas::bounded_array<ublas::bounded_array<mp_test_type, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::vector_of_vector<double, ublas::row_major, ublas::bounded_array<ublas::bounded_array<double, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<std::complex<mp_test_type>, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::vector_of_vector<std::complex<double>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<std::complex<double>, 3>, 3 + 1> >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::vector_of_vector<mp_test_type, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::vector_of_vector<double, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<double> > >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<std::complex<mp_test_type> > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::vector_of_vector<std::complex<double>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<std::complex<double> > > >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::vector_of_vector<mp_test_type, ublas::row_major, std::vector<std::vector<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::vector_of_vector<double, ublas::row_major, std::vector<std::vector<double> > >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::vector_of_vector<std::complex<mp_test_type>, ublas::row_major, std::vector<std::vector<std::complex<mp_test_type> > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::vector_of_vector<std::complex<double>, ublas::row_major, std::vector<std::vector<std::complex<double> > > >, 3> () ();
+#endif
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test13.cpp b/libs/multiprecision/test/ublas_interop/test13.cpp
new file mode 100644
index 0000000000..d2f803777b
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test13.cpp
@@ -0,0 +1,321 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test1.hpp"
+
+// Test matrix expression templates
+template<class M, int N>
+struct test_my_matrix {
+ typedef typename M::value_type value_type;
+
+ template<class VP>
+ void test_container_with (VP &v1) const {
+ // Container type tests in addition to expression types
+ // Insert and erase
+ v1.insert_element (0,0, 55);
+ v1.erase_element (1,1);
+ v1.clear ();
+ }
+
+ template<class MP>
+ void test_expression_with (MP &m1, MP &m2, MP &m3) const {
+ value_type t;
+
+ // Default Construct
+ default_construct<MP>::test ();
+
+ // Copy and swap
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m1 = m2;
+ std::cout << "m1 = m2 = " << m1 << std::endl;
+ m1.assign_temporary (m2);
+ std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl;
+ m1.swap (m2);
+ std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl;
+
+ // Zero assignment
+ m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ());
+ std::cout << "m1.zero_matrix = " << m1 << std::endl;
+ m1 = m2;
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ // Project range and slice
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::range(0,1),ublas::range(0,1));
+ project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::slice(0,1,1),ublas::slice(0,1,1));
+ project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::slice(0,1,2),ublas::slice(0,1,2));
+ project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::range(0,2),ublas::range(0,2));
+ std::cout << "m1 = range/slice " << m1 << std::endl;
+#endif
+
+ // Unary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ m2 = - m1;
+ std::cout << "- m1 = " << m2 << std::endl;
+ m2 = ublas::conj (m1);
+ std::cout << "conj (m1) = " << m2 << std::endl;
+
+ // Binary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = m1 + m2;
+ std::cout << "m1 + m2 = " << m3 << std::endl;
+ m3 = m1 - m2;
+ std::cout << "m1 - m2 = " << m3 << std::endl;
+ m3 = ublas::element_prod (m1, m2);
+ std::cout << "element_prod (m1, m2) = " << m3 << std::endl;
+
+ // Scaling a matrix
+ t = N;
+ initialize_matrix (m1);
+ m2 = value_type (1.) * m1;
+ std::cout << "1. * m1 = " << m2 << std::endl;
+ m2 = t * m1;
+ std::cout << "N * m1 = " << m2 << std::endl;
+ initialize_matrix (m1);
+ m2 = m1 * value_type (1.);
+ std::cout << "m1 * 1. = " << m2 << std::endl;
+ m2 = m1 * t;
+ std::cout << "m1 * N = " << m2 << std::endl;
+
+ // Some assignments
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m2 += m1;
+ std::cout << "m2 += m1 = " << m2 << std::endl;
+ m2 -= m1;
+ std::cout << "m2 -= m1 = " << m2 << std::endl;
+ m2 = m2 + m1;
+ std::cout << "m2 = m2 + m1 = " << m2 << std::endl;
+ m2 = m2 - m1;
+ std::cout << "m2 = m2 - m1 = " << m2 << std::endl;
+ m1 *= value_type (1.);
+ std::cout << "m1 *= 1. = " << m1 << std::endl;
+ m1 *= t;
+ std::cout << "m1 *= N = " << m1 << std::endl;
+
+ // Transpose
+ initialize_matrix (m1);
+ m2 = ublas::trans (m1);
+ std::cout << "trans (m1) = " << m2 << std::endl;
+
+ // Hermitean
+ initialize_matrix (m1);
+ m2 = ublas::herm (m1);
+ std::cout << "herm (m1) = " << m2 << std::endl;
+
+ // Matrix multiplication
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = ublas::prod (m1, m2);
+ std::cout << "prod (m1, m2) = " << m3 << std::endl;
+ }
+
+ void operator () () const {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ test_expression_with (m1, m2, m3);
+ test_container_with (m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<M> mr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (m2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (m3, ublas::range (0, N), ublas::range (0, N));
+ test_expression_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<M> ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_expression_with (ms1, ms2, ms3);
+#endif
+ }
+};
+
+// Test matrix
+void test_matrix () {
+ std::cout << "test_matrix" << std::endl;
+
+#ifdef USE_MATRIX
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix<ublas::matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix<ublas::matrix<double, ublas::row_major, std::vector<double> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3> () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_BOUNDED_MATRIX
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded" << std::endl;
+ test_my_matrix<ublas::bounded_matrix<mp_test_type, 3, 3>, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded" << std::endl;
+ test_my_matrix<ublas::bounded_matrix<double, 3, 3>, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded" << std::endl;
+ test_my_matrix<ublas::bounded_matrix<std::complex<mp_test_type>, 3, 3>, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded" << std::endl;
+ test_my_matrix<ublas::bounded_matrix<std::complex<double>, 3, 3>, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_VECTOR_OF_VECTOR
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<mp_test_type, ublas::row_major, ublas::bounded_array<ublas::bounded_array<mp_test_type, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<double, ublas::row_major, ublas::bounded_array<ublas::bounded_array<double, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<std::complex<mp_test_type>, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<std::complex<double>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<std::complex<double>, 3>, 3 + 1> >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<mp_test_type, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<double, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<double> > >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<std::complex<mp_test_type> > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<std::complex<double>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<std::complex<double> > > >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<mp_test_type, ublas::row_major, std::vector<std::vector<mp_test_type > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<double, ublas::row_major, std::vector<std::vector<double> > >, 3> () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<std::complex<mp_test_type>, ublas::row_major, std::vector<std::vector<std::complex<mp_test_type> > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<std::complex<double>, ublas::row_major, std::vector<std::vector<std::complex<double> > > >, 3> () ();
+#endif
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test2.cpp b/libs/multiprecision/test/ublas_interop/test2.cpp
new file mode 100644
index 0000000000..0550dc8018
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test2.cpp
@@ -0,0 +1,87 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test2.hpp"
+
+int main () {
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type" << std::endl;
+ test_blas_1<ublas::vector<mp_test_type>, 3> ().test ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double" << std::endl;
+ test_blas_1<ublas::vector<double>, 3> ().test ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>" << std::endl;
+ test_blas_1<ublas::vector<std::complex<mp_test_type> >, 3> ().test ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>" << std::endl;
+ test_blas_1<ublas::vector<std::complex<double> >, 3> ().test ();
+#endif
+#endif
+
+ std::cout << "test_blas_2" << std::endl;
+
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type" << std::endl;
+ test_blas_2<ublas::vector<mp_test_type>, ublas::matrix<mp_test_type>, 3> ().test ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double" << std::endl;
+ test_blas_2<ublas::vector<double>, ublas::matrix<double>, 3> ().test ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>" << std::endl;
+ test_blas_2<ublas::vector<std::complex<mp_test_type> >, ublas::matrix<std::complex<mp_test_type> >, 3> ().test ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>" << std::endl;
+ test_blas_2<ublas::vector<std::complex<double> >, ublas::matrix<std::complex<double> >, 3> ().test ();
+#endif
+#endif
+
+ std::cout << "test_blas_3" << std::endl;
+
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type" << std::endl;
+ test_blas_3<ublas::matrix<mp_test_type>, 3> ().test ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double" << std::endl;
+ test_blas_3<ublas::matrix<double>, 3> ().test ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>" << std::endl;
+ test_blas_3<ublas::matrix<std::complex<mp_test_type> >, 3> ().test ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>" << std::endl;
+ test_blas_3<ublas::matrix<std::complex<double> >, 3> ().test ();
+#endif
+#endif
+
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test2.hpp b/libs/multiprecision/test/ublas_interop/test2.hpp
new file mode 100644
index 0000000000..6aca3df9a3
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test2.hpp
@@ -0,0 +1,79 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST2_H
+#define TEST2_H
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996 4127 4100 4018)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/triangular.hpp>
+#include <boost/numeric/ublas/io.hpp>
+#include <boost/numeric/ublas/blas.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+template<class V, int N>
+struct test_blas_1 {
+ typedef typename V::value_type value_type;
+ typedef typename ublas::type_traits<value_type>::real_type real_type;
+
+ void test ();
+};
+
+template<class V, class M, int N>
+struct test_blas_2 {
+ typedef typename V::value_type value_type;
+
+ void test ();
+};
+
+template<class M, int N>
+struct test_blas_3 {
+ typedef typename M::value_type value_type;
+
+ void test ();
+};
+
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test21.cpp b/libs/multiprecision/test/ublas_interop/test21.cpp
new file mode 100644
index 0000000000..252d1f1c10
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test21.cpp
@@ -0,0 +1,95 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test2.hpp"
+
+template<class V, int N>
+void test_blas_1<V, N>::test () {
+ {
+ value_type t;
+ real_type n;
+ V v1 (N), v2 (N);
+
+ // _asum
+ initialize_vector (v1);
+ n = ublas::blas_1::asum (v1);
+ std::cout << "asum (v1) = " << n << std::endl;
+
+ // _amax
+ initialize_vector (v1);
+ n = ublas::blas_1::amax (v1);
+ std::cout << "amax (v1) = " << n << std::endl;
+
+ // _nrm2
+ initialize_vector (v1);
+ n = ublas::blas_1::nrm2 (v1);
+ std::cout << "nrm2 (v1) = " << n << std::endl;
+
+ // _dot
+ // _dotu
+ // _dotc
+ initialize_vector (v1);
+ initialize_vector (v2);
+ t = ublas::blas_1::dot (v1, v2);
+ std::cout << "dot (v1, v2) = " << t << std::endl;
+ t = ublas::blas_1::dot (ublas::conj (v1), v2);
+ std::cout << "dot (conj (v1), v2) = " << t << std::endl;
+
+ // _copy
+ initialize_vector (v2);
+ ublas::blas_1::copy (v1, v2);
+ std::cout << "copy (v1, v2) = " << v1 << std::endl;
+
+ // _swap
+ initialize_vector (v1);
+ initialize_vector (v2);
+ ublas::blas_1::swap (v1, v2);
+ std::cout << "swap (v1, v2) = " << v1 << " " << v2 << std::endl;
+
+ // _scal
+ // csscal
+ // zdscal
+ initialize_vector (v1);
+ ublas::blas_1::scal (v1, value_type (1));
+ std::cout << "scal (v1, 1) = " << v1 << std::endl;
+
+ // _axpy
+ initialize_vector (v1);
+ initialize_vector (v2);
+ ublas::blas_1::axpy (v1, value_type (1), v2);
+ std::cout << "axpy (v1, 1, v2) = " << v1 << std::endl;
+
+ // _rot
+ initialize_vector (v1);
+ initialize_vector (v2);
+ ublas::blas_1::rot (value_type (1), v1, value_type (1), v2);
+ std::cout << "rot (1, v1, 1, v2) = " << v1 << " " << v2 << std::endl;
+ }
+}
+
+#ifdef USE_FLOAT
+template struct test_blas_1<ublas::vector<mp_test_type>, 3>;
+#endif
+
+#ifdef USE_DOUBLE
+template struct test_blas_1<ublas::vector<double>, 3>;
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+template struct test_blas_1<ublas::vector<std::complex<mp_test_type> >, 3>;
+#endif
+
+#ifdef USE_DOUBLE
+template struct test_blas_1<ublas::vector<std::complex<double> >, 3>;
+#endif
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test22.cpp b/libs/multiprecision/test/ublas_interop/test22.cpp
new file mode 100644
index 0000000000..297bb06a8f
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test22.cpp
@@ -0,0 +1,147 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test2.hpp"
+
+template<class V, class M, int N>
+void test_blas_2<V, M, N>::test () {
+ {
+ V v1 (N), v2 (N);
+ M m (N, N);
+
+ // _t_mv
+ initialize_vector (v1);
+ initialize_matrix (m);
+ ublas::blas_2::tmv (v1, m);
+ std::cout << "tmv (v1, m) = " << v1 << std::endl;
+ initialize_vector (v1);
+ initialize_matrix (m);
+ ublas::blas_2::tmv (v1, ublas::trans (m));
+ std::cout << "tmv (v1, trans (m)) = " << v1 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_vector (v1);
+ initialize_matrix (m);
+ ublas::blas_2::tmv (v1, ublas::herm (m));
+ std::cout << "tmv (v1, herm (m)) = " << v1 << std::endl;
+#endif
+
+ // _t_sv
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m, ublas::lower_tag ());
+ ublas::blas_2::tsv (v1, m, ublas::lower_tag ());
+ std::cout << "tsv (v1, m) = " << v1 << " " << ublas::prod (m, v1) - v2 << std::endl;
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m, ublas::upper_tag ());
+ ublas::blas_2::tsv (v1, ublas::trans (m), ublas::lower_tag ());
+ std::cout << "tsv (v1, trans (m)) = " << v1 << " " << ublas::prod (ublas::trans (m), v1) - v2 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m, ublas::upper_tag ());
+ ublas::blas_2::tsv (v1, ublas::herm (m), ublas::lower_tag ());
+ std::cout << "tsv (v1, herm (m)) = " << v1 << " " << ublas::prod (ublas::herm (m), v1) - v2 << std::endl;
+#endif
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m, ublas::upper_tag ());
+ ublas::blas_2::tsv (v1, m, ublas::upper_tag ());
+ std::cout << "tsv (v1, m) = " << v1 << " " << ublas::prod (m, v1) - v2 << std::endl;
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m, ublas::lower_tag ());
+ ublas::blas_2::tsv (v1, ublas::trans (m), ublas::upper_tag ());
+ std::cout << "tsv (v1, trans (m)) = " << v1 << " " << ublas::prod (ublas::trans (m), v1) - v2 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m, ublas::lower_tag ());
+ ublas::blas_2::tsv (v1, ublas::herm (m), ublas::upper_tag ());
+ std::cout << "tsv (v1, herm (m)) = " << v1 << " " << ublas::prod (ublas::herm (m), v1) - v2 << std::endl;
+#endif
+
+ // _g_mv
+ // _s_mv
+ // _h_mv
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m);
+ ublas::blas_2::gmv (v1, value_type (1), value_type (1), m, v2);
+ std::cout << "gmv (v1, 1, 1, m, v2) = " << v1 << std::endl;
+ ublas::blas_2::gmv (v1, value_type (1), value_type (1), ublas::trans (m), v2);
+ std::cout << "gmv (v1, 1, 1, trans (m), v2) = " << v1 << std::endl;
+#ifdef USE_STD_COMPLEX
+ ublas::blas_2::gmv (v1, value_type (1), value_type (1), ublas::herm (m), v2);
+ std::cout << "gmv (v1, 1, 1, herm (m), v2) = " << v1 << std::endl;
+#endif
+
+ // _g_r
+ // _g_ru
+ // _g_rc
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m);
+ ublas::blas_2::gr (m, value_type (1), v1, v2);
+ std::cout << "gr (m, 1, v1, v2) = " << m << std::endl;
+ ublas::blas_2::gr (m, value_type (1), v1, ublas::conj (v2));
+ std::cout << "gr (m, 1, v1, conj (v2)) = " << m << std::endl;
+
+ // _s_r
+ initialize_vector (v1);
+ initialize_matrix (m);
+ ublas::blas_2::sr (m, value_type (1), v1);
+ std::cout << "sr (m, 1, v1) = " << m << std::endl;
+
+#ifdef USE_STD_COMPLEX
+ // _h_r
+ initialize_vector (v1);
+ initialize_matrix (m);
+ ublas::blas_2::hr (m, value_type (1), v1);
+ std::cout << "hr (m, 1, v1) = " << m << std::endl;
+#endif
+
+ // _s_r2
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m);
+ ublas::blas_2::sr2 (m, value_type (1), v1, v2);
+ std::cout << "sr2 (m, 1, v1, v2) = " << m << std::endl;
+
+#ifdef USE_STD_COMPLEX
+ // _h_r2
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_matrix (m);
+ ublas::blas_2::hr2 (m, value_type (1), v1, v2);
+ std::cout << "hr2 (m, 1, v1, v2) = " << m << std::endl;
+#endif
+ }
+}
+
+#ifdef USE_FLOAT
+template struct test_blas_2<ublas::vector<mp_test_type>, ublas::matrix<mp_test_type>, 3>;
+#endif
+
+#ifdef USE_DOUBLE
+template struct test_blas_2<ublas::vector<double>, ublas::matrix<double>, 3>;
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+template struct test_blas_2<ublas::vector<std::complex<mp_test_type> >, ublas::matrix<std::complex<mp_test_type> >, 3>;
+#endif
+
+#ifdef USE_DOUBLE
+template struct test_blas_2<ublas::vector<std::complex<double> >, ublas::matrix<std::complex<double> >, 3>;
+#endif
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test23.cpp b/libs/multiprecision/test/ublas_interop/test23.cpp
new file mode 100644
index 0000000000..d56771c25b
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test23.cpp
@@ -0,0 +1,208 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test2.hpp"
+
+template<class M, int N>
+void test_blas_3<M, N>::test () {
+ {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+
+ // _t_mm
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), m2, m1);
+ std::cout << "tmm (m1, 1, m2, m1) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), m2, ublas::trans (m1));
+ std::cout << "tmm (m1, 1, m2, trans (m1)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), ublas::trans (m2), m1);
+ std::cout << "tmm (m1, 1, trans (m2), m1) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), ublas::trans (m2), ublas::trans (m1));
+ std::cout << "tmm (m1, 1, trans (m2), trans (m1)) = " << m1 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), m2, ublas::herm (m1));
+ std::cout << "tmm (m1, 1, m2, herm (m1)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), ublas::herm (m2), m1);
+ std::cout << "tmm (m1, 1, herm (m2), m1) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), ublas::trans (m2), ublas::herm (m1));
+ std::cout << "tmm (m1, 1, trans (m2), herm (m1)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), ublas::herm (m2), ublas::trans (m1));
+ std::cout << "tmm (m1, 1, herm (m2), trans (m1)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::tmm (m1, value_type (1), ublas::herm (m2), ublas::herm (m1));
+ std::cout << "tmm (m1, 1, herm (m2), herm (m1)) = " << m1 << std::endl;
+#endif
+
+ // _t_sm
+ initialize_matrix (m1);
+ initialize_matrix (m2, ublas::lower_tag ());
+ initialize_matrix (m3);
+ ublas::blas_3::tsm (m1, value_type (1), m2, ublas::lower_tag ());
+ std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod (m2, m1) - value_type (1) * m3 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2, ublas::upper_tag ());
+ ublas::blas_3::tsm (m1, value_type (1), ublas::trans (m2), ublas::lower_tag ());
+ std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod (ublas::trans (m2), m1) - value_type (1) * m3 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_matrix (m1);
+ initialize_matrix (m2, ublas::upper_tag ());
+ ublas::blas_3::tsm (m1, value_type (1), ublas::herm (m2), ublas::lower_tag ());
+ std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod (ublas::herm (m2), m1) - value_type (1) * m3 << std::endl;
+#endif
+ initialize_matrix (m1);
+ initialize_matrix (m2, ublas::upper_tag ());
+ ublas::blas_3::tsm (m1, value_type (1), m2, ublas::upper_tag ());
+ std::cout << "tsm (m1, 1, m2) = " << m1 << " " << ublas::prod (m2, m1) - value_type (1) * m3 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2, ublas::lower_tag ());
+ ublas::blas_3::tsm (m1, value_type (1), ublas::trans (m2), ublas::upper_tag ());
+ std::cout << "tsm (m1, 1, trans (m2)) = " << m1 << " " << ublas::prod (ublas::trans (m2), m1) - value_type (1) * m3 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_matrix (m1);
+ initialize_matrix (m2, ublas::lower_tag ());
+ ublas::blas_3::tsm (m1, value_type (1), ublas::herm (m2), ublas::upper_tag ());
+ std::cout << "tsm (m1, 1, herm (m2)) = " << m1 << " " << ublas::prod (ublas::herm (m2), m1) - value_type (1) * m3 << std::endl;
+#endif
+
+ // _g_mm
+ // _s_mm
+ // _h_mm
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), m2, m3);
+ std::cout << "gmm (m1, 1, 1, m2, m3) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), ublas::trans (m2), m3);
+ std::cout << "gmm (m1, 1, 1, trans (m2), m3) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), m2, ublas::trans (m3));
+ std::cout << "gmm (m1, 1, 1, m2, trans (m3)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), ublas::trans (m2), ublas::trans (m3));
+ std::cout << "gmm (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
+#ifdef USE_STD_COMPLEX
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), ublas::herm (m2), m3);
+ std::cout << "gmm (m1, 1, 1, herm (m2), m3) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), m2, ublas::herm (m3));
+ std::cout << "gmm (m1, 1, 1, m2, herm (m3)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), ublas::herm (m2), ublas::trans (m3));
+ std::cout << "gmm (m1, 1, 1, herm (m2), trans (m3)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), ublas::trans (m2), ublas::herm (m3));
+ std::cout << "gmm (m1, 1, 1, trans (m2), herm (m3)) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::gmm (m1, value_type (1), value_type (1), ublas::herm (m2), ublas::herm (m3));
+ std::cout << "gmm (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
+#endif
+
+ // s_rk
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::srk (m1, value_type (1), value_type (1), m2);
+ std::cout << "srk (m1, 1, 1, m2) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::srk (m1, value_type (1), value_type (1), ublas::trans (m2));
+ std::cout << "srk (m1, 1, 1, trans (m2)) = " << m1 << std::endl;
+
+#ifdef USE_STD_COMPLEX
+ // h_rk
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::hrk (m1, value_type (1), value_type (1), m2);
+ std::cout << "hrk (m1, 1, 1, m2) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ ublas::blas_3::hrk (m1, value_type (1), value_type (1), ublas::herm (m2));
+ std::cout << "hrk (m1, 1, 1, herm (m2)) = " << m1 << std::endl;
+#endif
+
+ // s_r2k
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::sr2k (m1, value_type (1), value_type (1), m2, m3);
+ std::cout << "sr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::sr2k (m1, value_type (1), value_type (1), ublas::trans (m2), ublas::trans (m3));
+ std::cout << "sr2k (m1, 1, 1, trans (m2), trans (m3)) = " << m1 << std::endl;
+
+#ifdef USE_STD_COMPLEX
+ // h_r2k
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::hr2k (m1, value_type (1), value_type (1), m2, m3);
+ std::cout << "hr2k (m1, 1, 1, m2, m3) = " << m1 << std::endl;
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ ublas::blas_3::hr2k (m1, value_type (1), value_type (1), ublas::herm (m2), ublas::herm (m3));
+ std::cout << "hr2k (m1, 1, 1, herm (m2), herm (m3)) = " << m1 << std::endl;
+#endif
+ }
+}
+
+#ifdef USE_FLOAT
+template struct test_blas_3<ublas::matrix<mp_test_type>, 3>;
+#endif
+
+#ifdef USE_DOUBLE
+template struct test_blas_3<ublas::matrix<double>, 3>;
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+template struct test_blas_3<ublas::matrix<std::complex<mp_test_type> >, 3>;
+#endif
+
+#ifdef USE_DOUBLE
+template struct test_blas_3<ublas::matrix<std::complex<double> >, 3>;
+#endif
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test3.cpp b/libs/multiprecision/test/ublas_interop/test3.cpp
new file mode 100644
index 0000000000..fb2b94dadb
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test3.cpp
@@ -0,0 +1,20 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test3.hpp"
+
+int main () {
+ test_vector ();
+ test_matrix_vector ();
+ test_matrix ();
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test3.hpp b/libs/multiprecision/test/ublas_interop/test3.hpp
new file mode 100644
index 0000000000..d38d1d8647
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test3.hpp
@@ -0,0 +1,67 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST3_H
+#define TEST3_H
+
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996 4127 4100)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/vector_proxy.hpp>
+#include <boost/numeric/ublas/vector_sparse.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/matrix_sparse.hpp>
+#include <boost/numeric/ublas/vector_sparse.hpp>
+#ifdef USE_GENERALIZED_VECTOR_OF_VECTOR
+#include <boost/numeric/ublas/vector_of_vector.hpp>
+#endif
+#include <boost/numeric/ublas/io.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+void test_vector ();
+void test_matrix_vector ();
+void test_matrix ();
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test31.cpp b/libs/multiprecision/test/ublas_interop/test31.cpp
new file mode 100644
index 0000000000..a1484cfdcd
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test31.cpp
@@ -0,0 +1,248 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test3.hpp"
+
+// Test vector expression templates
+template<class V, int N>
+struct test_my_vector {
+ typedef typename V::value_type value_type;
+ typedef typename V::size_type size_type;
+ typedef typename ublas::type_traits<value_type>::real_type real_type;
+
+ template<class VP>
+ void test_with (VP &v1, VP &v2, VP &v3) const {
+ {
+ value_type t;
+ size_type i;
+ real_type n;
+
+ // Default Construct
+ default_construct<VP>::test ();
+
+ // Copy and swap
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 = v2;
+ std::cout << "v1 = v2 = " << v1 << std::endl;
+ v1.assign_temporary (v2);
+ std::cout << "v1.assign_temporary (v2) = " << v1 << std::endl;
+ v1.swap (v2);
+ std::cout << "v1.swap (v2) = " << v1 << " " << v2 << std::endl;
+
+ // Zero assignment
+ v1 = ublas::zero_vector<> (v1.size ());
+ std::cout << "v1.zero_vector = " << v1 << std::endl;
+ v1 = v2;
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ // Project range and slice
+ initialize_vector (v1);
+ initialize_vector (v2);
+ project (v1, ublas::range(0,1)) = project (v2, ublas::range(0,1));
+ project (v1, ublas::range(0,1)) = project (v2, ublas::slice(0,1,1));
+ project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::slice(0,1,2));
+ project (v1, ublas::slice(2,-1,2)) = project (v2, ublas::range(0,2));
+ std::cout << "v1 = range/slice " << v1 << std::endl;
+#endif
+
+ // Unary vector operations resulting in a vector
+ initialize_vector (v1);
+ v2 = - v1;
+ std::cout << "- v1 = " << v2 << std::endl;
+ v2 = ublas::conj (v1);
+ std::cout << "conj (v1) = " << v2 << std::endl;
+
+ // Binary vector operations resulting in a vector
+ initialize_vector (v1);
+ initialize_vector (v2);
+ initialize_vector (v3);
+ v3 = v1 + v2;
+ std::cout << "v1 + v2 = " << v3 << std::endl;
+
+ v3 = v1 - v2;
+ std::cout << "v1 - v2 = " << v3 << std::endl;
+
+ // Scaling a vector
+ t = N;
+ initialize_vector (v1);
+ v2 = value_type (1.) * v1;
+ std::cout << "1. * v1 = " << v2 << std::endl;
+ v2 = t * v1;
+ std::cout << "N * v1 = " << v2 << std::endl;
+ initialize_vector (v1);
+ v2 = v1 * value_type (1.);
+ std::cout << "v1 * 1. = " << v2 << std::endl;
+ v2 = v1 * t;
+ std::cout << "v1 * N = " << v2 << std::endl;
+
+ // Some assignments
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v2 += v1;
+ std::cout << "v2 += v1 = " << v2 << std::endl;
+ v2 -= v1;
+ std::cout << "v2 -= v1 = " << v2 << std::endl;
+ v2 = v2 + v1;
+ std::cout << "v2 = v2 + v1 = " << v2 << std::endl;
+ v2 = v2 - v1;
+ std::cout << "v2 = v2 - v1 = " << v2 << std::endl;
+ v1 *= value_type (1.);
+ std::cout << "v1 *= 1. = " << v1 << std::endl;
+ v1 *= t;
+ std::cout << "v1 *= N = " << v1 << std::endl;
+
+ // Unary vector operations resulting in a scalar
+ initialize_vector (v1);
+ t = ublas::sum (v1);
+ std::cout << "sum (v1) = " << t << std::endl;
+ n = ublas::norm_1 (v1);
+ std::cout << "norm_1 (v1) = " << n << std::endl;
+ n = ublas::norm_2 (v1);
+ std::cout << "norm_2 (v1) = " << n << std::endl;
+ n = ublas::norm_inf (v1);
+ std::cout << "norm_inf (v1) = " << n << std::endl;
+
+ i = ublas::index_norm_inf (v1);
+ std::cout << "index_norm_inf (v1) = " << i << std::endl;
+
+ // Binary vector operations resulting in a scalar
+ initialize_vector (v1);
+ initialize_vector (v2);
+ t = ublas::inner_prod (v1, v2);
+ std::cout << "inner_prod (v1, v2) = " << t << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N, N), v2 (N, N), v3 (N, N);
+ test_with (v1, v2, v3);
+
+#ifdef USE_RANGE
+ ublas::vector_range<V> vr1 (v1, ublas::range (0, N)),
+ vr2 (v2, ublas::range (0, N)),
+ vr3 (v3, ublas::range (0, N));
+ test_with (vr1, vr2, vr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::vector_slice<V> vs1 (v1, ublas::slice (0, 1, N)),
+ vs2 (v2, ublas::slice (0, 1, N)),
+ vs3 (v3, ublas::slice (0, 1, N));
+ test_with (vs1, vs2, vs3);
+#endif
+ }
+ }
+};
+
+// Test vector
+void test_vector () {
+ std::cout << "test_vector" << std::endl;
+
+#ifdef USE_SPARSE_VECTOR
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, map_array" << std::endl;
+ test_my_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, map_array" << std::endl;
+ test_my_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, map_array" << std::endl;
+ test_my_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, map_array" << std::endl;
+ test_my_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::map" << std::endl;
+ test_my_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::map" << std::endl;
+ test_my_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::map" << std::endl;
+ test_my_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::map" << std::endl;
+ test_my_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > , 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_COMPRESSED_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type compressed" << std::endl;
+ test_my_vector<ublas::compressed_vector<mp_test_type>, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double compressed" << std::endl;
+ test_my_vector<ublas::compressed_vector<double>, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type> compressed" << std::endl;
+ test_my_vector<ublas::compressed_vector<std::complex<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double> compressed" << std::endl;
+ test_my_vector<ublas::compressed_vector<std::complex<double> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_COORDINATE_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type coordinate" << std::endl;
+ test_my_vector<ublas::coordinate_vector<mp_test_type>, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double coordinate" << std::endl;
+ test_my_vector<ublas::coordinate_vector<double>, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type> coordinate" << std::endl;
+ test_my_vector<ublas::coordinate_vector<std::complex<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double> coordinate" << std::endl;
+ test_my_vector<ublas::coordinate_vector<std::complex<double> >, 3 > () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test32.cpp b/libs/multiprecision/test/ublas_interop/test32.cpp
new file mode 100644
index 0000000000..7240b4ce6f
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test32.cpp
@@ -0,0 +1,324 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test3.hpp"
+
+// Test matrix & vector expression templates
+template<class V, class M, int N>
+struct test_my_matrix_vector {
+ typedef typename V::value_type value_type;
+
+ template<class VP, class MP>
+ void test_with (VP &v1, VP &v2, MP &m1) const {
+ {
+ // Rows and columns
+ initialize_matrix (m1);
+ for (int i = 0; i < N; ++ i) {
+ v1 = ublas::row (m1, i);
+ std::cout << "row (m, " << i << ") = " << v1 << std::endl;
+ v1 = ublas::column (m1, i);
+ std::cout << "column (m, " << i << ") = " << v1 << std::endl;
+ }
+
+ // Outer product
+ initialize_vector (v1);
+ initialize_vector (v2);
+ m1 = ublas::outer_prod (v1, v2);
+ std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
+
+ // Matrix vector product
+ initialize_matrix (m1);
+ initialize_vector (v1);
+ v2 = ublas::prod (m1, v1);
+ std::cout << "prod (m1, v1) = " << v2 << std::endl;
+ v2 = ublas::prod (v1, m1);
+ std::cout << "prod (v1, m1) = " << v2 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N, N), v2 (N, N);
+ M m1 (N, N, N * N);
+
+ test_with (v1, v2, m1);
+
+ ublas::matrix_row<M> mr1 (m1, 0), mr2 (m1, N - 1);
+ test_with (mr1, mr2, m1);
+
+ ublas::matrix_column<M> mc1 (m1, 0), mc2 (m1, N - 1);
+ test_with (mc1, mc2, m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, m1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, m1);
+#endif
+ }
+ }
+};
+
+// Test matrix & vector
+void test_matrix_vector () {
+ std::cout << "test_matrix_vector" << std::endl;
+
+#ifdef USE_SPARSE_MATRIX
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >,
+ ublas::mapped_matrix<mp_test_type, ublas::row_major, ublas::map_array<std::size_t, mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
+ ublas::mapped_matrix<double, ublas::row_major, ublas::map_array<std::size_t, double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >,
+ ublas::mapped_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::map_array<std::size_t, std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
+ ublas::mapped_matrix<std::complex<double>, ublas::row_major, ublas::map_array<std::size_t, std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >,
+ ublas::mapped_matrix<mp_test_type, ublas::row_major, std::map<std::size_t, mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
+ ublas::mapped_matrix<double, ublas::row_major, std::map<std::size_t, double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >,
+ ublas::mapped_matrix<std::complex<mp_test_type>, ublas::row_major, std::map<std::size_t, std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
+ ublas::mapped_matrix<std::complex<double>, ublas::row_major, std::map<std::size_t, std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_SPARSE_VECTOR_OF_SPARSE_VECTOR
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, mapped_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >,
+ ublas::mapped_vector<mp_test_type, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, mapped_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
+ ublas::mapped_vector<double, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, double> > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, mapped_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >,
+ ublas::mapped_vector<std::complex<mp_test_type>, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, std::complex<mp_test_type> > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>,mapped_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
+ ublas::mapped_vector<std::complex<double>, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, std::complex<double> > > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, mapped_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >,
+ ublas::mapped_vector<mp_test_type, ublas::row_major, std::map<std::size_t, std::map<std::size_t, mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, mapped_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
+ ublas::mapped_vector<double, ublas::row_major, std::map<std::size_t, std::map<std::size_t, double> > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, mapped_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >,
+ ublas::mapped_vector<std::complex<mp_test_type>, ublas::row_major, std::map<std::size_t, std::map<std::size_t, std::complex<mp_test_type> > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, mapped_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
+ ublas::mapped_vector<std::complex<double>, ublas::row_major, std::map<std::size_t, std::map<std::size_t, std::complex<double> > > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_GENERALIZED_VECTOR_OF_VECTOR
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >,
+ ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >,
+ ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >, ublas::map_array<std::size_t, ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
+ ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >,
+ ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >, ublas::map_array<std::size_t, ublas::mapped_vector<double, ublas::map_array<std::size_t, double> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >,
+ ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >,
+ ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >, ublas::map_array<std::size_t, ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
+ ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >,
+ ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >, ublas::map_array<std::size_t, ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > > > > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >,
+ ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >,
+ ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >, std::map<std::size_t, ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
+ ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::vector<ublas::mapped_vector<double, std::map<std::size_t, double> > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >,
+ ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >, std::map<std::size_t, ublas::mapped_vector<double, std::map<std::size_t, double> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >,
+ ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >,
+ ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >, std::map<std::size_t, ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
+ ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > > >, 3 > () ();
+ test_my_matrix_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >,
+ ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >, std::map<std::size_t, ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > > > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_COMPRESSED_MATRIX
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type compressed" << std::endl;
+ test_my_matrix_vector<ublas::compressed_vector<mp_test_type>,
+ ublas::compressed_matrix<mp_test_type>, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double compressed" << std::endl;
+ test_my_matrix_vector<ublas::compressed_vector<double>,
+ ublas::compressed_matrix<double>, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type> compressed" << std::endl;
+ test_my_matrix_vector<ublas::compressed_vector<std::complex<mp_test_type> >,
+ ublas::compressed_matrix<std::complex<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double> compressed" << std::endl;
+ test_my_matrix_vector<ublas::compressed_vector<std::complex<double> >,
+ ublas::compressed_matrix<std::complex<double> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_COORDINATE_MATRIX
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type coordinate" << std::endl;
+ test_my_matrix_vector<ublas::coordinate_vector<mp_test_type>,
+ ublas::coordinate_matrix<mp_test_type>, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double coordinate" << std::endl;
+ test_my_matrix_vector<ublas::coordinate_vector<double>,
+ ublas::coordinate_matrix<double>, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type> coordinate" << std::endl;
+ test_my_matrix_vector<ublas::coordinate_vector<std::complex<mp_test_type> >,
+ ublas::coordinate_matrix<std::complex<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double> coordinate" << std::endl;
+ test_my_matrix_vector<ublas::coordinate_vector<std::complex<double> >,
+ ublas::coordinate_matrix<std::complex<double> >, 3 > () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test33.cpp b/libs/multiprecision/test/ublas_interop/test33.cpp
new file mode 100644
index 0000000000..46d735194b
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test33.cpp
@@ -0,0 +1,347 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test3.hpp"
+
+// Test matrix expression templates
+template<class M, int N>
+struct test_my_matrix {
+ typedef typename M::value_type value_type;
+
+ template<class MP>
+ void test_with (MP &m1, MP &m2, MP &m3) const {
+ {
+ value_type t;
+
+ // Default Construct
+ default_construct<MP>::test ();
+
+ // Copy and swap
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m1 = m2;
+ std::cout << "m1 = m2 = " << m1 << std::endl;
+ m1.assign_temporary (m2);
+ std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl;
+ m1.swap (m2);
+ std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl;
+
+ // Zero assignment
+ m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ());
+ std::cout << "m1.zero_matrix = " << m1 << std::endl;
+ m1 = m2;
+
+#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
+ // Project range and slice
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::range(0,1),ublas::range(0,1));
+ project (m1, ublas::range(0,1),ublas::range(0,1)) = project (m2, ublas::slice(0,1,1),ublas::slice(0,1,1));
+ project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::slice(0,1,2),ublas::slice(0,1,2));
+ project (m1, ublas::slice(2,-1,2),ublas::slice(2,-1,2)) = project (m2, ublas::range(0,2),ublas::range(0,2));
+ std::cout << "m1 = range/slice " << m1 << std::endl;
+#endif
+
+ // Unary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ m2 = - m1;
+ std::cout << "- m1 = " << m2 << std::endl;
+ m2 = ublas::conj (m1);
+ std::cout << "conj (m1) = " << m2 << std::endl;
+
+ // Binary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ initialize_matrix (m3);
+ m3 = m1 + m2;
+ std::cout << "m1 + m2 = " << m3 << std::endl;
+ m3 = m1 - m2;
+ std::cout << "m1 - m2 = " << m3 << std::endl;
+
+ // Scaling a matrix
+ t = N;
+ initialize_matrix (m1);
+ m2 = value_type (1.) * m1;
+ std::cout << "1. * m1 = " << m2 << std::endl;
+ m2 = t * m1;
+ std::cout << "N * m1 = " << m2 << std::endl;
+ initialize_matrix (m1);
+ m2 = m1 * value_type (1.);
+ std::cout << "m1 * 1. = " << m2 << std::endl;
+ m2 = m1 * t;
+ std::cout << "m1 * N = " << m2 << std::endl;
+
+ // Some assignments
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m2 += m1;
+ std::cout << "m2 += m1 = " << m2 << std::endl;
+ m2 -= m1;
+ std::cout << "m2 -= m1 = " << m2 << std::endl;
+ m2 = m2 + m1;
+ std::cout << "m2 = m2 + m1 = " << m2 << std::endl;
+ m2 = m2 - m1;
+ std::cout << "m2 = m2 - m1 = " << m2 << std::endl;
+ m1 *= value_type (1.);
+ std::cout << "m1 *= 1. = " << m1 << std::endl;
+ m1 *= t;
+ std::cout << "m1 *= N = " << m1 << std::endl;
+
+ // Transpose
+ initialize_matrix (m1);
+ m2 = ublas::trans (m1);
+ std::cout << "trans (m1) = " << m2 << std::endl;
+
+ // Hermitean
+ initialize_matrix (m1);
+ m2 = ublas::herm (m1);
+ std::cout << "herm (m1) = " << m2 << std::endl;
+
+ // Matrix multiplication
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = ublas::prod (m1, m2);
+ std::cout << "prod (m1, m2) = " << m3 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ M m1 (N, N, N * N), m2 (N, N, N * N), m3 (N, N, N * N);
+ test_with (m1, m2, m3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<M> mr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (m2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (m3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<M> ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+ }
+};
+
+// Test matrix
+void test_matrix () {
+ std::cout << "test_matrix" << std::endl;
+
+#ifdef USE_SPARSE_MATRIX
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, mapped_matrix map_array" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<mp_test_type, ublas::row_major, ublas::map_array<std::size_t, mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, mapped_matrix map_array" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<double, ublas::row_major, ublas::map_array<std::size_t, double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, mapped_matrix map_array" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::map_array<std::size_t, std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, mapped_matrix map_array" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<std::complex<double>, ublas::row_major, ublas::map_array<std::size_t, std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, mapped_matrix std::map" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<mp_test_type, ublas::row_major, std::map<std::size_t, mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, mapped_matrix std::map" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<double, ublas::row_major, std::map<std::size_t, double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, mapped_matrix std::map" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<std::complex<mp_test_type>, ublas::row_major, std::map<std::size_t, std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, mapped_matrix std::map" << std::endl;
+ test_my_matrix<ublas::mapped_matrix<std::complex<double>, ublas::row_major, std::map<std::size_t, std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_SPARSE_VECTOR_OF_SPARSE_VECTOR
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, mapped_vector_of_mapped_vector map_array" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<mp_test_type, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, mapped_vector_of_mapped_vector map_array" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<double, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, double> > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, mapped_vector_of_mapped_vector map_array" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<std::complex<mp_test_type>, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, std::complex<mp_test_type> > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, mapped_vector_of_mapped_vectormap_array" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<std::complex<double>, ublas::row_major, ublas::map_array<std::size_t, ublas::map_array<std::size_t, std::complex<double> > > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, mapped_vector_of_mapped_vector std::map" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<mp_test_type, ublas::row_major, std::map<std::size_t, std::map<std::size_t, mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, mapped_vector_of_mapped_vector std::map" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<double, ublas::row_major, std::map<std::size_t, std::map<std::size_t, double> > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, mapped_vector_of_mapped_vector std::map" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<std::complex<mp_test_type>, ublas::row_major, std::map<std::size_t, std::map<std::size_t, std::complex<mp_test_type> > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, mapped_vector_of_mapped_vector std::map" << std::endl;
+ test_my_matrix<ublas::mapped_vector_of_mapped_vector<std::complex<double>, ublas::row_major, std::map<std::size_t, std::map<std::size_t, std::complex<double> > > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_GENERALIZED_VECTOR_OF_VECTOR
+#ifdef USE_MAP_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type,generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> >, ublas::map_array<std::size_t, ublas::mapped_vector<mp_test_type, ublas::map_array<std::size_t, mp_test_type> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<double, ublas::map_array<std::size_t, double> >, ublas::map_array<std::size_t, ublas::mapped_vector<double, ublas::map_array<std::size_t, double> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > >, ublas::map_array<std::size_t, ublas::mapped_vector<std::complex<mp_test_type>, ublas::map_array<std::size_t, std::complex<mp_test_type> > > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, generalized_vector_of_vector map_array" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > >, ublas::map_array<std::size_t, ublas::mapped_vector<std::complex<double>, ublas::map_array<std::size_t, std::complex<double> > > > > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_MAP
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<mp_test_type, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> >, std::map<std::size_t, ublas::mapped_vector<mp_test_type, std::map<std::size_t, mp_test_type> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::vector<ublas::mapped_vector<double, std::map<std::size_t, double> > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<double, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<double, std::map<std::size_t, double> >, std::map<std::size_t, ublas::mapped_vector<double, std::map<std::size_t, double> > > > >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<mp_test_type>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > >, std::map<std::size_t, ublas::mapped_vector<std::complex<mp_test_type>, std::map<std::size_t, std::complex<mp_test_type> > > > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, generalized_vector_of_vector std::map" << std::endl;
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > > >, 3 > () ();
+ test_my_matrix<ublas::generalized_vector_of_vector<std::complex<double>, ublas::row_major, ublas::mapped_vector<ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > >, std::map<std::size_t, ublas::mapped_vector<std::complex<double>, std::map<std::size_t, std::complex<double> > > > > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_COMPRESSED_MATRIX
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type compressed_matrix" << std::endl;
+ test_my_matrix<ublas::compressed_matrix<mp_test_type>, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double compressed_matrix" << std::endl;
+ test_my_matrix<ublas::compressed_matrix<double>, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type> compressed_matrix" << std::endl;
+ test_my_matrix<ublas::compressed_matrix<std::complex<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double> compressed_matrix" << std::endl;
+ test_my_matrix<ublas::compressed_matrix<std::complex<double> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_COORDINATE_MATRIX
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type coordinate_matrix" << std::endl;
+ test_my_matrix<ublas::coordinate_matrix<mp_test_type>, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double coordinate_matrix" << std::endl;
+ test_my_matrix<ublas::coordinate_matrix<double>, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type> coordinate_matrix" << std::endl;
+ test_my_matrix<ublas::coordinate_matrix<std::complex<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double> coordinate_matrix" << std::endl;
+ test_my_matrix<ublas::coordinate_matrix<std::complex<double> >, 3 > () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test4.cpp b/libs/multiprecision/test/ublas_interop/test4.cpp
new file mode 100644
index 0000000000..bf5816f5e7
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test4.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test4.hpp"
+
+int main () {
+ test_matrix_vector ();
+ test_matrix ();
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test4.hpp b/libs/multiprecision/test/ublas_interop/test4.hpp
new file mode 100644
index 0000000000..d81e5a28d0
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test4.hpp
@@ -0,0 +1,68 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST4_H
+#define TEST4_H
+
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996 4127 4100)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/banded.hpp>
+#include <boost/numeric/ublas/io.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+//#define USE_BANDED
+#define USE_DIAGONAL
+
+
+void test_matrix_vector ();
+void test_matrix ();
+
+
+// FIXME slice are failing in assignment to zero elements
+#undef USE_SLICE
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test42.cpp b/libs/multiprecision/test/ublas_interop/test42.cpp
new file mode 100644
index 0000000000..325d8094dc
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test42.cpp
@@ -0,0 +1,361 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test4.hpp"
+
+// Test matrix & vector expression templates
+template<class V, class M, int N>
+struct test_my_matrix_vector {
+ typedef typename V::value_type value_type;
+
+ template<class VP, class MP>
+ void test_with (VP &v1, VP &v2, MP &m1) const {
+ {
+#ifndef USE_DIAGONAL
+ // Rows and columns
+ initialize_matrix (m1);
+ for (int i = 0; i < N; ++ i) {
+ v2 = ublas::row (m1, i);
+ std::cout << "row (m, " << i << ") = " << v2 << std::endl;
+ v2 = ublas::column (m1, i);
+ std::cout << "column (m, " << i << ") = " << v2 << std::endl;
+ }
+
+ // Outer product
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 (0) = 0;
+ v1 (N - 1) = 0;
+ m1 = ublas::outer_prod (v1, v2);
+ std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
+
+ // Matrix vector product
+ initialize_matrix (m1);
+ initialize_vector (v1);
+ v2 = ublas::prod (m1, v1);
+ std::cout << "prod (m1, v1) = " << v2 << std::endl;
+ v2 = ublas::prod (v1, m1);
+ std::cout << "prod (v1, m1) = " << v2 << std::endl;
+#endif
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N), v2 (N);
+#ifdef USE_BANDED
+ M m1 (N, N, 1, 1);
+#endif
+#ifdef USE_DIAGONAL
+ M m1 (N, N);
+#endif
+ test_with (v1, v2, m1);
+
+ ublas::matrix_row<M> mr1 (m1, 1), mr2 (m1, 1);
+ test_with (mr1, mr2, m1);
+
+ ublas::matrix_column<M> mc1 (m1, 1), mc2 (m1, 1);
+ test_with (mc1, mc2, m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, m1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, m1);
+#endif
+ }
+ }
+
+ void operator () (int) const {
+#ifdef USE_ADAPTOR
+ {
+#ifdef USE_BANDED
+ V v1 (N), v2 (N);
+ M m1 (N, N, 1, 1);
+ ublas::banded_adaptor<M> bam1 (m1, 1, 1);
+ test_with (v1, v2, bam1);
+
+ ublas::matrix_row<ublas::banded_adaptor<M> > mr1 (bam1, 1), mr2 (bam1, 1);
+ test_with (mr1, mr2, bam1);
+
+ ublas::matrix_column<ublas::banded_adaptor<M> > mc1 (bam1, 1), mc2 (bam1, 1);
+ test_with (mc1, mc2, bam1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<ublas::banded_adaptor<M> > mvr1 (bam1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (bam1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, bam1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<ublas::banded_adaptor<M> > mvs1 (bam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (bam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, bam1);
+#endif
+#endif
+#ifdef USE_DIAGONAL
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ ublas::diagonal_adaptor<M> dam1 (m1);
+ test_with (v1, v2, dam1);
+
+ ublas::matrix_row<ublas::diagonal_adaptor<M> > mr1 (dam1, 1), mr2 (dam1, 1);
+ test_with (mr1, mr2, dam1);
+
+ ublas::matrix_column<ublas::diagonal_adaptor<M> > mc1 (dam1, 1), mc2 (dam1, 1);
+ test_with (mc1, mc2, dam1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<ublas::diagonal_adaptor<M> > mvr1 (dam1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (dam1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, dam1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<ublas::diagonal_adaptor<M> > mvs1 (dam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (dam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, dam1);
+#endif
+#endif
+ }
+#endif
+ }
+};
+
+// Test matrix & vector
+void test_matrix_vector () {
+ std::cout << "test_matrix_vector" << std::endl;
+
+#ifdef USE_BANDED
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::banded_matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::banded_matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::banded_matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::banded_matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::banded_matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::banded_matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::banded_matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::banded_matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::banded_matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::banded_matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::banded_matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::banded_matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::banded_matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::banded_matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::banded_matrix<double, ublas::row_major, std::vector<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::banded_matrix<double, ublas::row_major, std::vector<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::banded_matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::banded_matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_DIAGONAL
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::diagonal_matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::diagonal_matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::diagonal_matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::diagonal_matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::diagonal_matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::diagonal_matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::diagonal_matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::diagonal_matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::diagonal_matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::diagonal_matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::diagonal_matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::diagonal_matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::diagonal_matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::diagonal_matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::diagonal_matrix<double, ublas::row_major, std::vector<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::diagonal_matrix<double, ublas::row_major, std::vector<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::diagonal_matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::diagonal_matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test43.cpp b/libs/multiprecision/test/ublas_interop/test43.cpp
new file mode 100644
index 0000000000..82682c9765
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test43.cpp
@@ -0,0 +1,326 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test4.hpp"
+
+// Test matrix expression templates
+template<class M, int N>
+struct test_my_matrix {
+ typedef typename M::value_type value_type;
+
+ template<class MP>
+ void test_with (MP &m1, MP &m2, MP &m3) const {
+ {
+ value_type t;
+
+ // Default Construct
+ default_construct<MP>::test ();
+
+ // Copy and swap
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m1 = m2;
+ std::cout << "m1 = m2 = " << m1 << std::endl;
+ m1.assign_temporary (m2);
+ std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl;
+ m1.swap (m2);
+ std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl;
+
+ // Zero assignment
+ m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ());
+ std::cout << "m1.zero_matrix = " << m1 << std::endl;
+ m1 = m2;
+
+ // Unary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ m2 = - m1;
+ std::cout << "- m1 = " << m2 << std::endl;
+ m2 = ublas::conj (m1);
+ std::cout << "conj (m1) = " << m2 << std::endl;
+
+ // Binary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = m1 + m2;
+ std::cout << "m1 + m2 = " << m3 << std::endl;
+ m3 = m1 - m2;
+ std::cout << "m1 - m2 = " << m3 << std::endl;
+
+ // Scaling a matrix
+ t = N;
+ initialize_matrix (m1);
+ m2 = value_type (1.) * m1;
+ std::cout << "1. * m1 = " << m2 << std::endl;
+ m2 = t * m1;
+ std::cout << "N * m1 = " << m2 << std::endl;
+ initialize_matrix (m1);
+ m2 = m1 * value_type (1.);
+ std::cout << "m1 * 1. = " << m2 << std::endl;
+ m2 = m1 * t;
+ std::cout << "m1 * N = " << m2 << std::endl;
+
+ // Some assignments
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m2 += m1;
+ std::cout << "m2 += m1 = " << m2 << std::endl;
+ m2 -= m1;
+ std::cout << "m2 -= m1 = " << m2 << std::endl;
+ m2 = m2 + m1;
+ std::cout << "m2 = m2 + m1 = " << m2 << std::endl;
+ m2 = m2 - m1;
+ std::cout << "m2 = m2 - m1 = " << m2 << std::endl;
+ m1 *= value_type (1.);
+ std::cout << "m1 *= 1. = " << m1 << std::endl;
+ m1 *= t;
+ std::cout << "m1 *= N = " << m1 << std::endl;
+
+ // Transpose
+ initialize_matrix (m1);
+ m2 = ublas::trans (m1);
+ std::cout << "trans (m1) = " << m2 << std::endl;
+
+ // Hermitean
+ initialize_matrix (m1);
+ m2 = ublas::herm (m1);
+ std::cout << "herm (m1) = " << m2 << std::endl;
+
+ // Matrix multiplication
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ // Banded times banded isn't banded
+ std::cout << "prod (m1, m2) = " << ublas::prod (m1, m2) << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+#ifdef USE_BANDED
+ M m1 (N, N, 1, 1), m2 (N, N, 1, 1), m3 (N, N, 1, 1);
+#endif
+#ifdef USE_DIAGONAL
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+#endif
+ test_with (m1, m2, m3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<M> mr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (m2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (m3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<M> ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+
+#ifdef USE_ADAPTOR
+ {
+#ifdef USE_BANDED
+ M m1 (N, N, 1, 1), m2 (N, N, 1, 1), m3 (N, N, 1, 1);
+ ublas::banded_adaptor<M> bam1 (m1, 1, 1), bam2 (m2, 1, 1), bam3 (m3, 1, 1);
+ test_with (bam1, bam2, bam3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<ublas::banded_adaptor<M> > mr1 (bam1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (bam2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (bam3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<ublas::banded_adaptor<M> > ms1 (bam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (bam2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (bam3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+#endif
+#ifdef USE_DIAGONAL
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ ublas::diagonal_adaptor<M> dam1 (m1), dam2 (m2), dam3 (m3);
+ test_with (dam1, dam2, dam3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<ublas::diagonal_adaptor<M> > mr1 (dam1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (dam2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (dam3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<ublas::diagonal_adaptor<M> > ms1 (dam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (dam2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (dam3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+#endif
+ }
+#endif
+
+ }
+};
+
+// Test matrix
+void test_matrix () {
+ std::cout << "test_matrix" << std::endl;
+
+#ifdef USE_BANDED
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::banded_matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix<ublas::banded_matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix<ublas::banded_matrix<double, ublas::row_major, std::vector<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::banded_matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::banded_matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+
+#ifdef USE_DIAGONAL
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<mp_test_type, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<double, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<std::complex<double>, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<mp_test_type, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<double, ublas::row_major, ublas::unbounded_array<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<std::complex<double>, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<mp_test_type, ublas::row_major, std::vector<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<double, ublas::row_major, std::vector<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<std::complex<mp_test_type>, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::diagonal_matrix<std::complex<double>, ublas::row_major, std::vector<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test5.cpp b/libs/multiprecision/test/ublas_interop/test5.cpp
new file mode 100644
index 0000000000..548cd60334
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test5.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test5.hpp"
+
+int main () {
+ test_matrix_vector ();
+ test_matrix ();
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test5.hpp b/libs/multiprecision/test/ublas_interop/test5.hpp
new file mode 100644
index 0000000000..d867dc5f66
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test5.hpp
@@ -0,0 +1,64 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST5_H
+#define TEST5_H
+
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996 4127 4100)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/triangular.hpp>
+#include <boost/numeric/ublas/io.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+void test_matrix_vector ();
+void test_matrix ();
+
+
+// FIXME slice are failing in assignment to zero elements
+#undef USE_SLICE
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test52.cpp b/libs/multiprecision/test/ublas_interop/test52.cpp
new file mode 100644
index 0000000000..9e13dfde7a
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test52.cpp
@@ -0,0 +1,214 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test5.hpp"
+
+// Test matrix & vector expression templates
+template<class V, class M, int N>
+struct test_my_matrix_vector {
+ typedef typename V::value_type value_type;
+
+ template<class VP, class MP>
+ void test_with (VP &v1, VP &v2, MP &m1) const {
+ {
+ // Rows and columns
+ initialize_matrix (m1);
+ for (int i = 0; i < N; ++ i) {
+ v2 = ublas::row (m1, i);
+ std::cout << "row (m, " << i << ") = " << v2 << std::endl;
+ v2 = ublas::column (m1, i);
+ std::cout << "column (m, " << i << ") = " << v2 << std::endl;
+ }
+
+ // Outer product
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 (0) = 0;
+ v2 (N - 1) = 0;
+ m1 = ublas::outer_prod (v1, v2);
+ std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
+
+ // Matrix vector product
+ initialize_matrix (m1);
+ initialize_vector (v1);
+ v2 = ublas::prod (m1, v1);
+ std::cout << "prod (m1, v1) = " << v2 << std::endl;
+ v2 = ublas::prod (v1, m1);
+ std::cout << "prod (v1, m1) = " << v2 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ test_with (v1, v2, m1);
+
+ ublas::matrix_row<M> mr1 (m1, N - 1), mr2 (m1, N - 1);
+ test_with (mr1, mr2, m1);
+
+ ublas::matrix_column<M> mc1 (m1, 0), mc2 (m1, 0);
+ test_with (mc1, mc2, m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, m1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, m1);
+#endif
+ }
+ }
+
+ void operator () (int) const {
+#ifdef USE_ADAPTOR
+ {
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ ublas::triangular_adaptor<M> tam1 (m1);
+ test_with (v1, v2, tam1);
+
+ ublas::matrix_row<ublas::triangular_adaptor<M> > mr1 (tam1, N - 1), mr2 (tam1, N - 1);
+ test_with (mr1, mr2, tam1);
+
+ ublas::matrix_column<ublas::triangular_adaptor<M> > mc1 (tam1, 0), mc2 (tam1, 0);
+ test_with (mc1, mc2, tam1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<ublas::triangular_adaptor<M> > mvr1 (tam1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (tam1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, tam1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<ublas::triangular_adaptor<M> > mvs1 (tam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (tam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, tam1);
+#endif
+ }
+#endif
+ }
+};
+
+// Test matrix & vector
+void test_matrix_vector () {
+ std::cout << "test_matrix_vector" << std::endl;
+
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::triangular_matrix<double, ublas::lower, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::triangular_matrix<double, ublas::lower, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::triangular_matrix<double, ublas::lower, ublas::row_major, ublas::unbounded_array<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::triangular_matrix<double, ublas::lower, ublas::row_major, ublas::unbounded_array<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, std::vector<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, std::vector<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::triangular_matrix<double, ublas::lower, ublas::row_major, std::vector<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::triangular_matrix<double, ublas::lower, ublas::row_major, std::vector<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () (0);
+
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, std::vector<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, std::vector<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test53.cpp b/libs/multiprecision/test/ublas_interop/test53.cpp
new file mode 100644
index 0000000000..041be1f5b7
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test53.cpp
@@ -0,0 +1,223 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test5.hpp"
+
+// Test matrix expression templates
+template<class M, int N>
+struct test_my_matrix {
+ typedef typename M::value_type value_type;
+
+ template<class MP>
+ void test_with (MP &m1, MP &m2, MP &m3) const {
+ {
+ value_type t;
+
+ // Default Construct
+ default_construct<MP>::test ();
+
+ // Copy and swap
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m1 = m2;
+ std::cout << "m1 = m2 = " << m1 << std::endl;
+ m1.assign_temporary (m2);
+ std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl;
+ m1.swap (m2);
+ std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl;
+
+ // Zero assignment
+ m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ());
+ std::cout << "m1.zero_matrix = " << m1 << std::endl;
+ m1 = m2;
+
+ // Unary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ m2 = - m1;
+ std::cout << "- m1 = " << m2 << std::endl;
+ m2 = ublas::conj (m1);
+ std::cout << "conj (m1) = " << m2 << std::endl;
+
+ // Binary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = m1 + m2;
+ std::cout << "m1 + m2 = " << m3 << std::endl;
+ m3 = m1 - m2;
+ std::cout << "m1 - m2 = " << m3 << std::endl;
+
+ // Scaling a matrix
+ t = N;
+ initialize_matrix (m1);
+ m2 = value_type (1.) * m1;
+ std::cout << "1. * m1 = " << m2 << std::endl;
+ m2 = t * m1;
+ std::cout << "N * m1 = " << m2 << std::endl;
+ initialize_matrix (m1);
+ m2 = m1 * value_type (1.);
+ std::cout << "m1 * 1. = " << m2 << std::endl;
+ m2 = m1 * t;
+ std::cout << "m1 * N = " << m2 << std::endl;
+
+ // Some assignments
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m2 += m1;
+ std::cout << "m2 += m1 = " << m2 << std::endl;
+ m2 -= m1;
+ std::cout << "m2 -= m1 = " << m2 << std::endl;
+ m2 = m2 + m1;
+ std::cout << "m2 = m2 + m1 = " << m2 << std::endl;
+ m2 = m2 - m1;
+ std::cout << "m2 = m2 - m1 = " << m2 << std::endl;
+ m1 *= value_type (1.);
+ std::cout << "m1 *= 1. = " << m1 << std::endl;
+ m1 *= t;
+ std::cout << "m1 *= N = " << m1 << std::endl;
+
+ // Transpose
+ initialize_matrix (m1);
+ // Transpose of a triangular isn't triangular of the same kind
+ std::cout << "trans (m1) = " << ublas::trans (m1) << std::endl;
+
+ // Hermitian
+ initialize_matrix (m1);
+ // Hermitian of a triangular isn't hermitian of the same kind
+ std::cout << "herm (m1) = " << ublas::herm (m1) << std::endl;
+
+ // Matrix multiplication
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = ublas::prod (m1, m2);
+ std::cout << "prod (m1, m2) = " << m3 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ test_with (m1, m2, m3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<M> mr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (m2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (m3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<M> ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+
+#ifdef USE_ADAPTOR
+ {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ ublas::triangular_adaptor<M> tam1 (m1), tam2 (m2), tam3 (m3);
+ test_with (tam1, tam2, tam3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<ublas::triangular_adaptor<M> > mr1 (tam1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (tam2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (tam3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<ublas::triangular_adaptor<M> > ms1 (tam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (tam2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (tam3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+#endif
+ }
+};
+
+// Test matrix
+void test_matrix () {
+ std::cout << "test_matrix" << std::endl;
+
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<double, ublas::lower, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<double, ublas::lower, ublas::row_major, ublas::unbounded_array<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<mp_test_type, ublas::lower, ublas::row_major, std::vector<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<double, ublas::lower, ublas::row_major, std::vector<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::triangular_matrix<std::complex<double>, ublas::lower, ublas::row_major, std::vector<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test6.cpp b/libs/multiprecision/test/ublas_interop/test6.cpp
new file mode 100644
index 0000000000..61a5c3105e
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test6.cpp
@@ -0,0 +1,19 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test6.hpp"
+
+int main () {
+ test_matrix_vector ();
+ test_matrix ();
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test6.hpp b/libs/multiprecision/test/ublas_interop/test6.hpp
new file mode 100644
index 0000000000..e84c2a0549
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test6.hpp
@@ -0,0 +1,62 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST6_H
+#define TEST6_H
+
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996 4127 4100)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_BOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/symmetric.hpp>
+#include <boost/numeric/ublas/io.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+void test_matrix_vector ();
+void test_matrix ();
+
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test62.cpp b/libs/multiprecision/test/ublas_interop/test62.cpp
new file mode 100644
index 0000000000..a7529d2940
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test62.cpp
@@ -0,0 +1,218 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test6.hpp"
+
+// Test matrix & vector expression templates
+template<class V, class M, int N>
+struct test_my_matrix_vector {
+ typedef typename V::value_type value_type;
+
+ template<class VP, class MP>
+ void test_with (VP &v1, VP &v2, MP &m1) const {
+ {
+ // Rows and columns
+ initialize_matrix (m1);
+ for (int i = 0; i < N; ++ i) {
+ v2 = ublas::row (m1, i);
+ std::cout << "row (m, " << i << ") = " << v2 << std::endl;
+ v2 = ublas::column (m1, i);
+ std::cout << "column (m, " << i << ") = " << v2 << std::endl;
+ }
+
+ // Outer product
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 (0) = 0;
+ v1 (N - 1) = 0;
+ v2 (0) = 0;
+ v2 (N - 1) = 0;
+ m1 = ublas::outer_prod (v1, v2);
+ std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
+
+ // Matrix vector product
+ initialize_matrix (m1);
+ initialize_vector (v1);
+ v2 = ublas::prod (m1, v1);
+ std::cout << "prod (m1, v1) = " << v2 << std::endl;
+ v2 = ublas::prod (v1, m1);
+ std::cout << "prod (v1, m1) = " << v2 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ test_with (v1, v2, m1);
+
+ ublas::matrix_row<M> mr1 (m1, N - 1), mr2 (m1, N - 1);
+ test_with (mr1, mr2, m1);
+
+ ublas::matrix_column<M> mc1 (m1, 0), mc2 (m1, 0);
+ test_with (mc1, mc2, m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, m1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, m1);
+#endif
+ }
+ }
+
+ void operator () (int) const {
+#ifdef USE_ADAPTOR
+ {
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ ublas::symmetric_adaptor<M> tam1 (m1);
+ test_with (v1, v2, tam1);
+
+ ublas::matrix_row<ublas::symmetric_adaptor<M> > mr1 (tam1, N - 1), mr2 (tam1, N - 1);
+ test_with (mr1, mr2, tam1);
+
+ ublas::matrix_column<ublas::symmetric_adaptor<M> > mc1 (tam1, 0), mc2 (tam1, 0);
+ test_with (mc1, mc2, tam1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<ublas::symmetric_adaptor<M> > mvr1 (tam1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (tam1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, tam1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<ublas::symmetric_adaptor<M> > mvs1 (tam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (tam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, tam1);
+#endif
+ }
+#endif
+ }
+};
+
+// Test matrix & vector
+void test_matrix_vector () {
+ std::cout << "test_matrix_vector" << std::endl;
+
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::bounded_array<mp_test_type, 3> >,
+ ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::bounded_array<double, 3> >,
+ ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::bounded_array<std::complex<mp_test_type>, 3> >,
+ ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::bounded_array<std::complex<double>, 3> >,
+ ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, ublas::unbounded_array<mp_test_type> >,
+ ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, ublas::unbounded_array<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, ublas::unbounded_array<double> >,
+ ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, ublas::unbounded_array<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, ublas::unbounded_array<std::complex<mp_test_type> > >,
+ ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, ublas::unbounded_array<std::complex<double> > >,
+ ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, std::vector<mp_test_type> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<mp_test_type, std::vector<mp_test_type> >,
+ ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, std::vector<mp_test_type> >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, std::vector<double> >, 3> () ();
+ test_my_matrix_vector<ublas::vector<double, std::vector<double> >,
+ ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, std::vector<double> >, 3> () (0);
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<mp_test_type>, std::vector<std::complex<mp_test_type> > >,
+ ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3> () (0);
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, std::vector<std::complex<double> > >, 3> () ();
+ test_my_matrix_vector<ublas::vector<std::complex<double>, std::vector<std::complex<double> > >,
+ ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, std::vector<std::complex<double> > >, 3> () (0);
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test63.cpp b/libs/multiprecision/test/ublas_interop/test63.cpp
new file mode 100644
index 0000000000..d36f09c1d6
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test63.cpp
@@ -0,0 +1,223 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test6.hpp"
+
+// Test matrix expression templates
+template<class M, int N>
+struct test_my_matrix {
+ typedef typename M::value_type value_type;
+
+ template<class MP>
+ void test_with (MP &m1, MP &m2, MP &m3) const {
+ {
+ value_type t;
+
+ // Default Construct
+ default_construct<MP>::test ();
+
+ // Copy and swap
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m1 = m2;
+ std::cout << "m1 = m2 = " << m1 << std::endl;
+ m1.assign_temporary (m2);
+ std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl;
+ m1.swap (m2);
+ std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl;
+
+ // Zero assignment
+ m1 = ublas::zero_matrix<> (m1.size1 (), m1.size2 ());
+ std::cout << "m1.zero_matrix = " << m1 << std::endl;
+ m1 = m2;
+
+ // Unary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ m2 = - m1;
+ std::cout << "- m1 = " << m2 << std::endl;
+ m2 = ublas::conj (m1);
+ std::cout << "conj (m1) = " << m2 << std::endl;
+
+ // Binary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = m1 + m2;
+ std::cout << "m1 + m2 = " << m3 << std::endl;
+ m3 = m1 - m2;
+ std::cout << "m1 - m2 = " << m3 << std::endl;
+
+ // Scaling a matrix
+ t = N;
+ initialize_matrix (m1);
+ m2 = value_type (1.) * m1;
+ std::cout << "1. * m1 = " << m2 << std::endl;
+ m2 = t * m1;
+ std::cout << "N * m1 = " << m2 << std::endl;
+ initialize_matrix (m1);
+ m2 = m1 * value_type (1.);
+ std::cout << "m1 * 1. = " << m2 << std::endl;
+ m2 = m1 * t;
+ std::cout << "m1 * N = " << m2 << std::endl;
+
+ // Some assignments
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m2 += m1;
+ std::cout << "m2 += m1 = " << m2 << std::endl;
+ m2 -= m1;
+ std::cout << "m2 -= m1 = " << m2 << std::endl;
+ m2 = m2 + m1;
+ std::cout << "m2 = m2 + m1 = " << m2 << std::endl;
+ m2 = m2 - m1;
+ std::cout << "m2 = m1 - m1 = " << m2 << std::endl;
+ m1 *= value_type (1.);
+ std::cout << "m1 *= 1. = " << m1 << std::endl;
+ m1 *= t;
+ std::cout << "m1 *= N = " << m1 << std::endl;
+
+ // Transpose
+ initialize_matrix (m1);
+ m2 = ublas::trans (m1);
+ std::cout << "trans (m1) = " << m2 << std::endl;
+
+ // Hermitean
+ initialize_matrix (m1);
+ m2 = ublas::herm (m1);
+ std::cout << "herm (m1) = " << m2 << std::endl;
+
+ // Matrix multiplication
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = ublas::prod (m1, m2);
+ std::cout << "prod (m1, m2) = " << m3 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ test_with (m1, m2, m3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<M> mr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (m2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (m3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<M> ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+
+#ifdef USE_ADAPTOR
+ {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ ublas::symmetric_adaptor<M> sam1 (m1), sam2 (m2), sam3 (m3);
+ test_with (sam1, sam2, sam3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<ublas::symmetric_adaptor<M> > mr1 (sam1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (sam2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (sam3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<ublas::symmetric_adaptor<M> > ms1 (sam1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (sam2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (sam3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+#endif
+ }
+};
+
+// Test matrix
+void test_matrix () {
+ std::cout << "test_matrix" << std::endl;
+
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, bounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::bounded_array<mp_test_type, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, bounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, ublas::bounded_array<double, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<mp_test_type>, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::bounded_array<std::complex<double>, 3 * 3> >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, unbounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, ublas::unbounded_array<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, unbounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, ublas::unbounded_array<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, ublas::unbounded_array<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "mp_test_type, std::vector" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<mp_test_type, ublas::lower, ublas::row_major, std::vector<mp_test_type> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "double, std::vector" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<double, ublas::lower, ublas::row_major, std::vector<double> >, 3 > () ();
+#endif
+
+#ifdef USE_STD_COMPLEX
+#ifdef USE_FLOAT
+ std::cout << "std::complex<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<std::complex<mp_test_type>, ublas::lower, ublas::row_major, std::vector<std::complex<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "std::complex<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::symmetric_matrix<std::complex<double>, ublas::lower, ublas::row_major, std::vector<std::complex<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test7.cpp b/libs/multiprecision/test/ublas_interop/test7.cpp
new file mode 100644
index 0000000000..f564031cef
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test7.cpp
@@ -0,0 +1,31 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include <iostream>
+
+#include <boost/numeric/interval.hpp>
+#include <boost/numeric/interval/io.hpp>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/io.hpp>
+
+#include "test7.hpp"
+
+// this testcase requires fix of task #2473
+
+int main () {
+ test_vector ();
+ test_matrix_vector ();
+ test_matrix ();
+ return 0;
+}
diff --git a/libs/multiprecision/test/ublas_interop/test7.hpp b/libs/multiprecision/test/ublas_interop/test7.hpp
new file mode 100644
index 0000000000..65325a2619
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test7.hpp
@@ -0,0 +1,66 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#ifndef TEST7_H
+#define TEST7_H
+
+#ifdef _MSC_VER
+# pragma warning(disable:4800 4996)
+#endif
+
+#include <boost/multiprecision/cpp_dec_float.hpp>
+
+#ifdef TEST_ET
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_on> mp_test_type;
+#else
+typedef boost::multiprecision::number<boost::multiprecision::cpp_dec_float<50>, boost::multiprecision::et_off> mp_test_type;
+#endif
+//typedef double mp_test_type;
+
+#define USE_RANGE
+#define USE_SLICE
+#define USE_FLOAT
+#define USE_UNBOUNDED_ARRAY
+#define USE_BOUNDED_ARRAY
+#define USE_STD_VECTOR
+#define USE_BOUNDED_VECTOR USE_MATRIX
+#define USE_UNBOUNDED_ARRAY
+#define USE_MAP_ARRAY
+#define USE_STD_MAP
+#define USE_MAPPED_VECTOR
+#define USE_COMPRESSED_VECTOR
+#define USE_COORDINATE_VECTOR
+#define USE_MAPPED_MATRIX
+#define USE_COMPRESSED_MATRIX
+#define USE_COORDINATE_MATRIX
+
+#include <iostream>
+
+#include <boost/numeric/interval.hpp>
+#include <boost/numeric/interval/io.hpp>
+
+#include <boost/numeric/ublas/vector.hpp>
+#include <boost/numeric/ublas/vector_proxy.hpp>
+#include <boost/numeric/ublas/matrix.hpp>
+#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/ublas/io.hpp>
+
+namespace ublas = boost::numeric::ublas;
+
+#include "common/init.hpp"
+
+void test_vector ();
+void test_matrix_vector ();
+void test_matrix ();
+
+
+#endif
diff --git a/libs/multiprecision/test/ublas_interop/test71.cpp b/libs/multiprecision/test/ublas_interop/test71.cpp
new file mode 100644
index 0000000000..5fc6c2b0f4
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test71.cpp
@@ -0,0 +1,174 @@
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+//
+// This file fails to compile - appears to be a known uBlas issue :-(
+//
+
+#include "test7.hpp"
+
+// Test vector expression templates
+template<class V, int N>
+struct test_my_vector {
+ typedef typename V::value_type value_type;
+ typedef typename V::size_type size_type;
+ typedef typename ublas::type_traits<value_type>::real_type real_type;
+
+ template<class VP>
+ void test_with (VP &v1, VP &v2, VP &v3) const {
+ {
+ value_type t;
+ size_type i;
+ real_type n;
+
+ // Copy and swap
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v1 = v2;
+ std::cout << "v1 = v2 = " << v1 << std::endl;
+ v1.assign_temporary (v2);
+ std::cout << "v1.assign_temporary (v2) = " << v1 << std::endl;
+ v1.swap (v2);
+ std::cout << "v1.swap (v2) = " << v1 << " " << v2 << std::endl;
+
+ // Zero assignment
+ v1 = ublas::zero_vector<value_type> (v1.size ());
+ std::cout << "v1.zero_vector = " << v1 << std::endl;
+ v1 = v2;
+
+ // Unary vector operations resulting in a vector
+ initialize_vector (v1);
+ v2 = - v1;
+ std::cout << "- v1 = " << v2 << std::endl;
+ v2 = ublas::conj (v1);
+ std::cout << "conj (v1) = " << v2 << std::endl;
+
+ // Binary vector operations resulting in a vector
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v3 = v1 + v2;
+ std::cout << "v1 + v2 = " << v3 << std::endl;
+
+ v3 = v1 - v2;
+ std::cout << "v1 - v2 = " << v3 << std::endl;
+
+ // Scaling a vector
+ t = value_type (N);
+ initialize_vector (v1);
+ v2 = value_type (1.) * v1;
+ std::cout << "1. * v1 = " << v2 << std::endl;
+// v2 = t * v1;
+ std::cout << "N * v1 = " << v2 << std::endl;
+ initialize_vector (v1);
+// v2 = v1 * value_type (1.);
+ std::cout << "v1 * 1. = " << v2 << std::endl;
+// v2 = v1 * t;
+ std::cout << "v1 * N = " << v2 << std::endl;
+
+ // Some assignments
+ initialize_vector (v1);
+ initialize_vector (v2);
+ v2 += v1;
+ std::cout << "v2 += v1 = " << v2 << std::endl;
+ v2 -= v1;
+ std::cout << "v2 -= v1 = " << v2 << std::endl;
+ v2 = v2 + v1;
+ std::cout << "v2 = v2 + v1 = " << v2 << std::endl;
+ v2 = v2 - v1;
+ std::cout << "v2 = v2 - v1 = " << v2 << std::endl;
+ v1 *= value_type (1.);
+ std::cout << "v1 *= 1. = " << v1 << std::endl;
+ v1 *= t;
+ std::cout << "v1 *= N = " << v1 << std::endl;
+
+ // Unary vector operations resulting in a scalar
+ initialize_vector (v1);
+ t = ublas::sum (v1);
+ std::cout << "sum (v1) = " << t << std::endl;
+ n = ublas::norm_1 (v1);
+ std::cout << "norm_1 (v1) = " << n << std::endl;
+ n = ublas::norm_2 (v1);
+ std::cout << "norm_2 (v1) = " << n << std::endl;
+ n = ublas::norm_inf (v1);
+ std::cout << "norm_inf (v1) = " << n << std::endl;
+
+ i = ublas::index_norm_inf (v1);
+ std::cout << "index_norm_inf (v1) = " << i << std::endl;
+
+ // Binary vector operations resulting in a scalar
+ initialize_vector (v1);
+ initialize_vector (v2);
+ t = ublas::inner_prod (v1, v2);
+ std::cout << "inner_prod (v1, v2) = " << t << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N), v2 (N), v3 (N);
+ test_with (v1, v2, v3);
+
+#ifdef USE_RANGE
+ ublas::vector_range<V> vr1 (v1, ublas::range (0, N)),
+ vr2 (v2, ublas::range (0, N)),
+ vr3 (v3, ublas::range (0, N));
+ test_with (vr1, vr2, vr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::vector_slice<V> vs1 (v1, ublas::slice (0, 1, N)),
+ vs2 (v2, ublas::slice (0, 1, N)),
+ vs3 (v3, ublas::slice (0, 1, N));
+ test_with (vs1, vs2, vs3);
+#endif
+ }
+ }
+};
+
+// Test vector
+void test_vector () {
+ std::cout << "test_vector" << std::endl;
+
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, bounded_array" << std::endl;
+ test_my_vector<ublas::vector<boost::numeric::interval<mp_test_type>, ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, bounded_array" << std::endl;
+ test_my_vector<ublas::vector<boost::numeric::interval<double>, ublas::bounded_array<boost::numeric::interval<double>, 3> >, 3 > () ();
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, unbounded_array" << std::endl;
+ test_my_vector<ublas::vector<boost::numeric::interval<mp_test_type>, ublas::unbounded_array<boost::numeric::interval<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, unbounded_array" << std::endl;
+ test_my_vector<ublas::vector<boost::numeric::interval<double>, ublas::unbounded_array<boost::numeric::interval<double> > >, 3 > () ();
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, std::vector" << std::endl;
+ test_my_vector<ublas::vector<boost::numeric::interval<mp_test_type>, std::vector<boost::numeric::interval<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, std::vector" << std::endl;
+ test_my_vector<ublas::vector<boost::numeric::interval<double>, std::vector<boost::numeric::interval<double> > >, 3 > () ();
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test72.cpp b/libs/multiprecision/test/ublas_interop/test72.cpp
new file mode 100644
index 0000000000..07b1d8a07b
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test72.cpp
@@ -0,0 +1,165 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test7.hpp"
+
+// Test matrix & vector expression templates
+template<class V, class M, int N>
+struct test_my_matrix_vector {
+ typedef typename V::value_type value_type;
+
+ template<class VP, class MP>
+ void test_with (VP &v1, VP &v2, MP &m1) const {
+ {
+ // Rows and columns
+ initialize_matrix (m1);
+ for (int i = 0; i < N; ++ i) {
+ v1 = ublas::row (m1, i);
+ std::cout << "row (m, " << i << ") = " << v1 << std::endl;
+ v1 = ublas::column (m1, i);
+ std::cout << "column (m, " << i << ") = " << v1 << std::endl;
+ }
+
+ // Outer product
+ initialize_vector (v1);
+ initialize_vector (v2);
+ m1 = ublas::outer_prod (v1, v2);
+ std::cout << "outer_prod (v1, v2) = " << m1 << std::endl;
+
+ // Matrix vector product
+ initialize_matrix (m1);
+ initialize_vector (v1);
+ v2 = ublas::prod (m1, v1);
+ std::cout << "prod (m1, v1) = " << v2 << std::endl;
+ v2 = ublas::prod (v1, m1);
+ std::cout << "prod (v1, m1) = " << v2 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ V v1 (N), v2 (N);
+ M m1 (N, N);
+ test_with (v1, v2, m1);
+
+ ublas::matrix_row<M> mr1 (m1, 0), mr2 (m1, 1);
+ test_with (mr1, mr2, m1);
+
+ ublas::matrix_column<M> mc1 (m1, 0), mc2 (m1, 1);
+ test_with (mc1, mc2, m1);
+
+#ifdef USE_RANGE
+ ublas::matrix_vector_range<M> mvr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mvr2 (m1, ublas::range (0, N), ublas::range (0, N));
+ test_with (mvr1, mvr2, m1);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_vector_slice<M> mvs1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ mvs2 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (mvs1, mvs2, m1);
+#endif
+ }
+ }
+};
+
+// Test matrix & vector
+void test_matrix_vector () {
+ std::cout << "test_matrix_vector" << std::endl;
+
+#ifdef USE_MATRIX
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<mp_test_type>, ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3> >,
+ ublas::matrix<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3 * 3> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<double>, ublas::bounded_array<boost::numeric::interval<double>, 3> >,
+ ublas::matrix<boost::numeric::interval<double>, ublas::row_major, ublas::bounded_array<boost::numeric::interval<double>, 3 * 3> >, 3> () ();
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<mp_test_type>, ublas::unbounded_array<boost::numeric::interval<mp_test_type> > >,
+ ublas::matrix<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::unbounded_array<boost::numeric::interval<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<double>, ublas::unbounded_array<boost::numeric::interval<double> > >,
+ ublas::matrix<boost::numeric::interval<double>, ublas::row_major, ublas::unbounded_array<boost::numeric::interval<double> > >, 3> () ();
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<mp_test_type>, std::vector<boost::numeric::interval<mp_test_type> > >,
+ ublas::matrix<boost::numeric::interval<mp_test_type>, ublas::row_major, std::vector<boost::numeric::interval<mp_test_type> > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<double>, std::vector<boost::numeric::interval<double> > >,
+ ublas::matrix<boost::numeric::interval<double>, ublas::row_major, std::vector<boost::numeric::interval<double> > >, 3> () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_VECTOR_OF_VECTOR
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<mp_test_type>, ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3> >,
+ ublas::vector_of_vector<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3>, 3 + 1> >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, bounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<double>, ublas::bounded_array<boost::numeric::interval<double>, 3> >,
+ ublas::vector_of_vector<boost::numeric::interval<double>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<boost::numeric::interval<double>, 3>, 3 + 1> >, 3> () ();
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<mp_test_type>, ublas::unbounded_array<boost::numeric::interval<mp_test_type> > >,
+ ublas::vector_of_vector<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<boost::numeric::interval<mp_test_type> > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, unbounded_array" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<double>, ublas::unbounded_array<boost::numeric::interval<double> > >,
+ ublas::vector_of_vector<boost::numeric::interval<double>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<boost::numeric::interval<double> > > >, 3> () ();
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<mp_test_type>, std::vector<boost::numeric::interval<mp_test_type> > >,
+ ublas::vector_of_vector<boost::numeric::interval<mp_test_type>, ublas::row_major, std::vector<std::vector<boost::numeric::interval<mp_test_type> > > >, 3> () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, std::vector" << std::endl;
+ test_my_matrix_vector<ublas::vector<boost::numeric::interval<double>, std::vector<boost::numeric::interval<double> > >,
+ ublas::vector_of_vector<boost::numeric::interval<double>, ublas::row_major, std::vector<std::vector<boost::numeric::interval<double> > > >, 3> () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/test/ublas_interop/test73.cpp b/libs/multiprecision/test/ublas_interop/test73.cpp
new file mode 100644
index 0000000000..60b10bb764
--- /dev/null
+++ b/libs/multiprecision/test/ublas_interop/test73.cpp
@@ -0,0 +1,202 @@
+//
+// Copyright (c) 2000-2002
+// Joerg Walter, Mathias Koch
+//
+// 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)
+//
+// The authors gratefully acknowledge the support of
+// GeNeSys mbH & Co. KG in producing this work.
+//
+
+#include "test7.hpp"
+
+// Test matrix expression templates
+template<class M, int N>
+struct test_my_matrix {
+ typedef typename M::value_type value_type;
+
+ template<class MP>
+ void test_with (MP &m1, MP &m2, MP &m3) const {
+ {
+ value_type t;
+
+ // Copy and swap
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m1 = m2;
+ std::cout << "m1 = m2 = " << m1 << std::endl;
+ m1.assign_temporary (m2);
+ std::cout << "m1.assign_temporary (m2) = " << m1 << std::endl;
+ m1.swap (m2);
+ std::cout << "m1.swap (m2) = " << m1 << " " << m2 << std::endl;
+
+ // Zero assignment
+ m1 = ublas::zero_matrix<value_type> (m1.size1 (), m1.size2 ());
+ std::cout << "m1.zero_matrix = " << m1 << std::endl;
+ m1 = m2;
+
+ // Unary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ m2 = - m1;
+ std::cout << "- m1 = " << m2 << std::endl;
+ m2 = ublas::conj (m1);
+ std::cout << "conj (m1) = " << m2 << std::endl;
+
+ // Binary matrix operations resulting in a matrix
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = m1 + m2;
+ std::cout << "m1 + m2 = " << m3 << std::endl;
+ m3 = m1 - m2;
+ std::cout << "m1 - m2 = " << m3 << std::endl;
+
+ // Scaling a matrix
+ t = N;
+ initialize_matrix (m1);
+ m2 = value_type (1.) * m1;
+ std::cout << "1. * m1 = " << m2 << std::endl;
+ m2 = t * m1;
+ std::cout << "N * m1 = " << m2 << std::endl;
+ initialize_matrix (m1);
+ m2 = m1 * value_type (1.);
+ std::cout << "m1 * 1. = " << m2 << std::endl;
+ m2 = m1 * t;
+ std::cout << "m1 * N = " << m2 << std::endl;
+
+ // Some assignments
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m2 += m1;
+ std::cout << "m2 += m1 = " << m2 << std::endl;
+ m2 -= m1;
+ std::cout << "m2 -= m1 = " << m2 << std::endl;
+ m2 = m2 + m1;
+ std::cout << "m2 = m2 + m1 = " << m2 << std::endl;
+ m2 = m2 - m1;
+ std::cout << "m2 = m1 - m1 = " << m2 << std::endl;
+ m1 *= value_type (1.);
+ std::cout << "m1 *= 1. = " << m1 << std::endl;
+ m1 *= t;
+ std::cout << "m1 *= N = " << m1 << std::endl;
+
+ // Transpose
+ initialize_matrix (m1);
+ m2 = ublas::trans (m1);
+ std::cout << "trans (m1) = " << m2 << std::endl;
+
+ // Hermitean
+ initialize_matrix (m1);
+ m2 = ublas::herm (m1);
+ std::cout << "herm (m1) = " << m2 << std::endl;
+
+ // Matrix multiplication
+ initialize_matrix (m1);
+ initialize_matrix (m2);
+ m3 = ublas::prod (m1, m2);
+ std::cout << "prod (m1, m2) = " << m3 << std::endl;
+ }
+ }
+ void operator () () const {
+ {
+ M m1 (N, N), m2 (N, N), m3 (N, N);
+ test_with (m1, m2, m3);
+
+#ifdef USE_RANGE
+ ublas::matrix_range<M> mr1 (m1, ublas::range (0, N), ublas::range (0, N)),
+ mr2 (m2, ublas::range (0, N), ublas::range (0, N)),
+ mr3 (m3, ublas::range (0, N), ublas::range (0, N));
+ test_with (mr1, mr2, mr3);
+#endif
+
+#ifdef USE_SLICE
+ ublas::matrix_slice<M> ms1 (m1, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms2 (m2, ublas::slice (0, 1, N), ublas::slice (0, 1, N)),
+ ms3 (m3, ublas::slice (0, 1, N), ublas::slice (0, 1, N));
+ test_with (ms1, ms2, ms3);
+#endif
+ }
+ }
+};
+
+// Test matrix
+void test_matrix () {
+ std::cout << "test_matrix" << std::endl;
+
+#ifdef USE_MATRIX
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3 * 3> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<boost::numeric::interval<double>, ublas::row_major, ublas::bounded_array<boost::numeric::interval<double>, 3 * 3> >, 3 > () ();
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::unbounded_array<boost::numeric::interval<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::matrix<boost::numeric::interval<double>, ublas::row_major, ublas::unbounded_array<boost::numeric::interval<double> > >, 3 > () ();
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::matrix<boost::numeric::interval<mp_test_type>, ublas::row_major, std::vector<boost::numeric::interval<mp_test_type> > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::matrix<boost::numeric::interval<double>, ublas::row_major, std::vector<boost::numeric::interval<double> > >, 3 > () ();
+#endif
+#endif
+#endif
+
+#ifdef USE_VECTOR_OF_VECTOR
+#ifdef USE_BOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, bounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<boost::numeric::interval<mp_test_type>, 3>, 3 + 1> >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, bounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<boost::numeric::interval<double>, ublas::row_major, ublas::bounded_array<ublas::bounded_array<boost::numeric::interval<double>, 3>, 3 + 1> >, 3 > () ();
+#endif
+#endif
+
+#ifdef USE_UNBOUNDED_ARRAY
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<boost::numeric::interval<mp_test_type>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<boost::numeric::interval<mp_test_type> > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, unbounded_array" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<boost::numeric::interval<double>, ublas::row_major, ublas::unbounded_array<ublas::unbounded_array<boost::numeric::interval<double> > > >, 3 > () ();
+#endif
+#endif
+
+#ifdef USE_STD_VECTOR
+#ifdef USE_FLOAT
+ std::cout << "boost::numeric::interval<mp_test_type>, std::vector" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<boost::numeric::interval<mp_test_type>, ublas::row_major, std::vector<std::vector<boost::numeric::interval<mp_test_type> > > >, 3 > () ();
+#endif
+
+#ifdef USE_DOUBLE
+ std::cout << "boost::numeric::interval<double>, std::vector" << std::endl;
+ test_my_matrix<ublas::vector_of_vector<boost::numeric::interval<double>, ublas::row_major, std::vector<std::vector<boost::numeric::interval<double> > > >, 3 > () ();
+#endif
+#endif
+#endif
+}
diff --git a/libs/multiprecision/tools/sincos.cpp b/libs/multiprecision/tools/sincos.cpp
new file mode 100644
index 0000000000..88dde74283
--- /dev/null
+++ b/libs/multiprecision/tools/sincos.cpp
@@ -0,0 +1,75 @@
+// 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)
+
+//[special_data_example
+
+#include <boost/multiprecision/mpfr.hpp>
+#include <boost/math/tools/test_data.hpp>
+#include <boost/test/included/prg_exec_monitor.hpp>
+#include <boost/math/tools/tuple.hpp>
+#include <fstream>
+
+using namespace boost::math::tools;
+using namespace boost::math;
+using namespace std;
+using namespace boost::multiprecision;
+
+typedef number<mpfr_float_backend<1000> > mp_type;
+
+
+boost::math::tuple<mp_type, mp_type, mp_type> generate(mp_type a)
+{
+ mp_type ts, tc;
+ ts = sin(a);
+ tc = cos(a);
+ return boost::math::make_tuple(a, ts, tc);
+}
+
+int cpp_main(int argc, char*argv [])
+{
+ parameter_info<mp_type> arg1, arg2;
+ test_data<mp_type> data;
+
+ bool cont;
+ std::string line;
+
+ if(argc < 1)
+ return 1;
+
+ do{
+ //
+ // User interface which prompts for
+ // range of input parameters:
+ //
+ if(0 == get_user_parameter_info(arg1, "a"))
+ return 1;
+ arg1.type |= dummy_param;
+
+ data.insert(&generate, arg1);
+
+ std::cout << "Any more data [y/n]?";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ cont = (line == "y");
+ }while(cont);
+ //
+ // Just need to write the results to a file:
+ //
+ std::cout << "Enter name of test data file [default=sincos.ipp]";
+ std::getline(std::cin, line);
+ boost::algorithm::trim(line);
+ if(line == "")
+ line = "sincos.ipp";
+ std::ofstream ofs(line.c_str());
+ line.erase(line.find('.'));
+ ofs << std::scientific << std::setprecision(500);
+ write_code(ofs, data, line.c_str());
+
+ return 0;
+}
+
+//]
+