Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r74502 - in sandbox/multiprecision: build doc example license src src/backends src/backends/float src/backends/float/efx src/backends/float/gmp src/backends/float/gmp/4-2-4 src/backends/float/gmp/4-2-4/vc9 src/backends/float/gmp/4-2-4/vc9/p4 src/backends/float/gmp/4-2-4/vc9/x64 src/backends/float/mpfr src/backends/float/mpfr/2-4-1 src/backends/float/mpfr/2-4-1/vc9 src/backends/float/mpfr/2-4-1/vc9/p4 src/backends/float/mpfr/2-4-1/vc9/x64 src/functions src/functions/constants src/functions/elementary src/functions/gamma src/functions/integer src/functions/tables src/functions/zeta src/utility test test/e_float_numerical_test test/imag test/imag/cases test/linpack_test test/linpack_test/gmp test/linpack_test/libf2c test/linpack_test/libf2c/vc9 test/linpack_test/libf2c/vc9/p4 test/linpack_test/libf2c/vc9/x64 test/naive_test test/real test/real/cases test/spot
From: e_float_at_[hidden]
Date: 2011-09-21 17:18:30


Author: christopher_kormanyos
Date: 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
New Revision: 74502
URL: http://svn.boost.org/trac/boost/changeset/74502

Log:
- Added contents to Boost.Multiprecision.
Added:
   sandbox/multiprecision/build/
   sandbox/multiprecision/build/Makefile (contents, props changed)
   sandbox/multiprecision/build/MakefileFiles.gmk (contents, props changed)
   sandbox/multiprecision/build/multiprecision.vcxproj (contents, props changed)
   sandbox/multiprecision/build/multiprecision.vcxproj.filters (contents, props changed)
   sandbox/multiprecision/build/multiprecision_vs2010.sln (contents, props changed)
   sandbox/multiprecision/build/vc_libs.txt (contents, props changed)
   sandbox/multiprecision/doc/
   sandbox/multiprecision/example/
   sandbox/multiprecision/example/example_001_basic_usage_real.cpp (contents, props changed)
   sandbox/multiprecision/example/example_002_basic_usage_imag.cpp (contents, props changed)
   sandbox/multiprecision/example/example_005_recursive_trapezoid_integral.cpp (contents, props changed)
   sandbox/multiprecision/example/example_008_gauss_laguerre.cpp (contents, props changed)
   sandbox/multiprecision/example/examples.h (contents, props changed)
   sandbox/multiprecision/license/
   sandbox/multiprecision/license/ACM_e_float_boost_license.pdf (contents, props changed)
   sandbox/multiprecision/license/LICENSE_1_0.pdf (contents, props changed)
   sandbox/multiprecision/license/LICENSE_1_0.txt (contents, props changed)
   sandbox/multiprecision/src/
   sandbox/multiprecision/src/backends/
   sandbox/multiprecision/src/backends/float/
   sandbox/multiprecision/src/backends/float/efx/
   sandbox/multiprecision/src/backends/float/efx/mp_float_efx.cpp (contents, props changed)
   sandbox/multiprecision/src/backends/float/gmp/
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/p4/
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib (contents, props changed)
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/p4/gmp.pdb (contents, props changed)
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/x64/
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib (contents, props changed)
   sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/x64/gmp.pdb (contents, props changed)
   sandbox/multiprecision/src/backends/float/gmp/mp_float_gmp.cpp (contents, props changed)
   sandbox/multiprecision/src/backends/float/gmp/mp_float_gmp_protos.h (contents, props changed)
   sandbox/multiprecision/src/backends/float/mp_float.cpp (contents, props changed)
   sandbox/multiprecision/src/backends/float/mp_float_base.cpp (contents, props changed)
   sandbox/multiprecision/src/backends/float/mpfr/
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/p4/
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.lib (contents, props changed)
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.pdb (contents, props changed)
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/x64/
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.lib (contents, props changed)
   sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.pdb (contents, props changed)
   sandbox/multiprecision/src/backends/float/mpfr/mp_float_mpfr.cpp (contents, props changed)
   sandbox/multiprecision/src/backends/float/mpfr/mp_float_mpfr_protos.h (contents, props changed)
   sandbox/multiprecision/src/functions/
   sandbox/multiprecision/src/functions/constants/
   sandbox/multiprecision/src/functions/constants/constants.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/elementary/
   sandbox/multiprecision/src/functions/elementary/elementary_complex.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/elementary/elementary_hyper_g.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/elementary/elementary_math.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/elementary/elementary_trans.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/elementary/elementary_trig.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/gamma/
   sandbox/multiprecision/src/functions/gamma/factorial.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/gamma/factorial2.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/gamma/gamma.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/gamma/gamma_util.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/gamma/gamma_util.h (contents, props changed)
   sandbox/multiprecision/src/functions/gamma/pochhammer.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/integer/
   sandbox/multiprecision/src/functions/integer/bernoulli_b.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/integer/prime.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/integer/prime_factor.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/integer/prime_factors.h (contents, props changed)
   sandbox/multiprecision/src/functions/tables/
   sandbox/multiprecision/src/functions/tables/A000142.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/tables/A000367.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/tables/A002445.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/tables/A006882.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/tables/A007318.cpp (contents, props changed)
   sandbox/multiprecision/src/functions/tables/tables.h (contents, props changed)
   sandbox/multiprecision/src/functions/zeta/
   sandbox/multiprecision/src/functions/zeta/zeta.cpp (contents, props changed)
   sandbox/multiprecision/src/utility/
   sandbox/multiprecision/src/utility/util_digit_scale.cpp (contents, props changed)
   sandbox/multiprecision/src/utility/util_power_j_pow_x.cpp (contents, props changed)
   sandbox/multiprecision/src/utility/util_timer.cpp (contents, props changed)
   sandbox/multiprecision/test/
   sandbox/multiprecision/test/Jamfile.v2 (contents, props changed)
   sandbox/multiprecision/test/e_float_numerical_test/
   sandbox/multiprecision/test/e_float_numerical_test/e_float_test.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/
   sandbox/multiprecision/test/imag/cases/
   sandbox/multiprecision/test/imag/cases/test_case_02101_z_sin.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02102_z_cos.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02103_z_exp.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02104_z_log.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02105_z_sqrt.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02106_z_rootn.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02111_z_asin.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02112_z_acos.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02113_z_atan.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02114_z_various_trig.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02115_z_various_elem_trans_log.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02116_z_various_elem.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02121_z_sinh.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02122_z_cosh.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02123_z_tanh.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02124_z_asinh.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02125_z_acosh.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02126_z_atanh.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02201_z_gamma.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02202_z_gamma_medium_x.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02901_z_zeta_small_x.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02902_z_zeta_all_x.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02903_z_zeta_neg_x.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/cases/test_case_02911_z_zeta_crit_strip.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/test_case_imag.h (contents, props changed)
   sandbox/multiprecision/test/imag/test_imag.cpp (contents, props changed)
   sandbox/multiprecision/test/imag/test_imag.h (contents, props changed)
   sandbox/multiprecision/test/linpack_test/
   sandbox/multiprecision/test/linpack_test/gmp/
   sandbox/multiprecision/test/linpack_test/gmp/gmp.h (contents, props changed)
   sandbox/multiprecision/test/linpack_test/gmp/gmpxx.h (contents, props changed)
   sandbox/multiprecision/test/linpack_test/libf2c/
   sandbox/multiprecision/test/linpack_test/libf2c/f2c.h (contents, props changed)
   sandbox/multiprecision/test/linpack_test/libf2c/vc9/
   sandbox/multiprecision/test/linpack_test/libf2c/vc9/p4/
   sandbox/multiprecision/test/linpack_test/libf2c/vc9/p4/libf2c.lib (contents, props changed)
   sandbox/multiprecision/test/linpack_test/libf2c/vc9/x64/
   sandbox/multiprecision/test/linpack_test/libf2c/vc9/x64/libf2c.lib (contents, props changed)
   sandbox/multiprecision/test/linpack_test/linpack-benchmark.cpp (contents, props changed)
   sandbox/multiprecision/test/naive_test/
   sandbox/multiprecision/test/naive_test/naive_test.cpp (contents, props changed)
   sandbox/multiprecision/test/real/
   sandbox/multiprecision/test/real/cases/
   sandbox/multiprecision/test/real/cases/test_case_0000x_overflow_underflow.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_0000y_write_to_ostream.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_0000z_global_ops_pod.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00011_various_elem_math.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00021_bernoulli.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00051_factorial.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00052_factorial2.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00071_various_int_func.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00101_sin.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00102_cos.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00103_exp.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00104_log.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00105_sqrt.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00106_rootn.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00111_sin_small_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00112_cos_x_near_pi_half.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00113_atan_x_small_to_large.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00114_various_trig.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00115_various_elem_trans.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00121_sinh.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00122_cosh.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00123_tanh.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00124_asinh.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00125_acosh.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00126_atanh.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00201_gamma.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00202_gamma_medium_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00203_gamma_small_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00204_gamma_tiny_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00205_gamma_near_neg_n.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00221_various_gamma_func.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00901_zeta_small_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00902_zeta_all_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/cases/test_case_00903_zeta_neg_x.cpp (contents, props changed)
   sandbox/multiprecision/test/real/test_case_real.h (contents, props changed)
   sandbox/multiprecision/test/real/test_real.cpp (contents, props changed)
   sandbox/multiprecision/test/real/test_real.h (contents, props changed)
   sandbox/multiprecision/test/spot/
   sandbox/multiprecision/test/spot/test_spot.cpp (contents, props changed)
   sandbox/multiprecision/test/spot/test_spot.h (contents, props changed)
   sandbox/multiprecision/test/test.cpp (contents, props changed)
   sandbox/multiprecision/test/test_case_base.cpp (contents, props changed)
   sandbox/multiprecision/test/test_case_base.h (contents, props changed)

Added: sandbox/multiprecision/build/Makefile
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/build/Makefile 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,194 @@
+
+# Copyright Christopher Kormanyos 2002 - 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)
+
+# 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
+
+###############################################################
+#
+# Makefile for multiprecision
+#
+###############################################################
+
+
+# ------------------------------------------------------------------------------
+# filelist
+# ------------------------------------------------------------------------------
+include MakefileFiles.gmk
+
+ifeq ($(MP),)
+ TYPE_MP = efx
+endif
+
+ifeq ($(MP),efx)
+ TYPE_MP = efx
+endif
+
+ifeq ($(MP),gmp)
+ TYPE_MP = gmp
+endif
+
+ifeq ($(MP),mpfr)
+ TYPE_MP = mpfr
+endif
+
+# ------------------------------------------------------------------------------
+# symbols
+# ------------------------------------------------------------------------------
+PAR_OPEN = \(
+PAR_CLOSE = \)
+
+
+# ------------------------------------------------------------------------------
+# targets
+# ------------------------------------------------------------------------------
+PATH_TARGET = unix-$(TYPE_MP)
+PATH_OBJ = $(PATH_TARGET)/obj
+PATH_ERR = $(PATH_TARGET)/err
+TARGET = mp_float
+EXTENSION = exe
+
+
+# ------------------------------------------------------------------------------
+# Tool parameters
+# ------------------------------------------------------------------------------
+CFLAGS_BASE = -std=c++0x -O3 -DBOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50 -I../../../
+CFLAGS_WARN = -Wall -Wextra -pedantic
+LFLAGS_BASE =
+
+ifeq ($(TYPE_MP),efx)
+ CFLAGS_BASE := $(CFLAGS_BASE) -DBOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_EFX
+ FILES_MP_TYPE = ../src/backends/float/efx/mp_float_efx
+endif
+
+ifeq ($(TYPE_MP),gmp)
+ CFLAGS_BASE := $(CFLAGS_BASE) -DBOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_GMP
+ LFLAGS_BASE := $(LFLAGS_BASE) -lgmp
+ FILES_MP_TYPE = ../src/backends/float/gmp/mp_float_gmp
+endif
+
+ifeq ($(TYPE_MP),mpfr)
+ CFLAGS_BASE := $(CFLAGS_BASE) -DBOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_MPFR
+ LFLAGS_BASE := $(LFLAGS_BASE) -lgmp -lmpfr
+ FILES_MP_TYPE = ../src/backends/float/mpfr/mp_float_mpfr
+endif
+
+CFLAGS = $(CFLAGS_BASE) $(CFLAGS_WARN)
+CFLAGS_NOWARN = $(CFLAGS_BASE)
+LFLAGS = $(LFLAGS_BASE)
+
+
+# ------------------------------------------------------------------------------
+# object files
+# ------------------------------------------------------------------------------
+FILES_ALL = $(FILES_MP_TYPE) \
+ $(FILES_MP) \
+ $(FILES_UTILITY) \
+ $(FILES_FUNCTIONS) \
+ $(FILES_EXAMPLES) \
+ $(FILES_TEST) \
+ $(FILES_TEST_SPOT) \
+ $(FILES_TEST_REAL) \
+ $(FILES_TEST_IMAG)
+
+FILES_O = $(addprefix $(PATH_OBJ)/, $(notdir $(addsuffix .o, $(FILES_ALL))))
+
+
+# ------------------------------------------------------------------------------
+# VPATH definition: VPATH is required for make to find the source files.
+# ------------------------------------------------------------------------------
+VPATH := $(sort $(dir $(FILES_ALL)))
+
+
+# ------------------------------------------------------------------------------
+# Development tools
+# ------------------------------------------------------------------------------
+#GCC = i686-w64-mingw32-gcc
+#CC = i686-w64-mingw32-g++
+GCC = gcc
+CC = g++
+SED = sed
+ECHO = echo
+MAKE = make
+MKDIR = mkdir
+RM = rm
+GAWK = gawk
+
+
+# ------------------------------------------------------------------------------
+# Main-Dependencies (target: all)
+# ------------------------------------------------------------------------------
+.PHONY: all
+all: OutputDirs Version $(PATH_TARGET)/$(TARGET).$(EXTENSION)
+
+
+# ------------------------------------------------------------------------------
+# Main-Dependencies (target: rebuild)
+# ------------------------------------------------------------------------------
+.PHONY: rebuild
+rebuild: clean all
+
+
+# ------------------------------------------------------------------------------
+# Clean project (target: clean)
+# ------------------------------------------------------------------------------
+.PHONY: clean
+clean: Version
+ @$(ECHO) +++ cleaning all
+ @-$(RM) -f $(PATH_TARGET)/$(TARGET).$(EXTENSION) > NUL 2> NUL
+ @-$(RM) -f $(PATH_OBJ)/*.* > NUL 2> NUL
+ @-$(RM) -f $(PATH_ERR)/*.* > NUL 2> NUL
+
+
+# ------------------------------------------------------------------------------
+# create output directories
+# ------------------------------------------------------------------------------
+.PHONY: OutputDirs
+OutputDirs:
+ # Create the output directories
+ @-$(MKDIR) -p $(PATH_TARGET)
+ @-$(MKDIR) -p $(PATH_OBJ)
+ @-$(MKDIR) -p $(PATH_ERR)
+
+
+# ------------------------------------------------------------------------------
+# version information
+# ------------------------------------------------------------------------------
+.PHONY: Version
+Version:
+ # Print the GNU make version and the GCC version
+ @-$(MAKE) --version | $(GAWK) '{ if(match($$0, "Make") > 0) print("GNUmake version: " $$0) }'
+ @-$(GCC) --version | $(GAWK) '{ if(match($$0, "gcc") > 0) print("GCC version: " $$0) }'
+
+
+# ------------------------------------------------------------------------------
+# link/locate application
+# ------------------------------------------------------------------------------
+$(PATH_TARGET)/$(TARGET).$(EXTENSION) : $(FILES_O)
+ @$(ECHO) +++ linking application: link to $(PATH_TARGET)/$(TARGET).$(EXTENSION)
+ @$(CC) $(FILES_O) $(LFLAGS) -o $(PATH_TARGET)/$(TARGET).$(EXTENSION)
+
+
+# ------------------------------------------------------------------------------
+# include dependency files
+# ------------------------------------------------------------------------------
+ifneq ($(MAKECMDGOALS),rebuild)
+-include $(subst .o,.d, $(FILES_O))
+endif
+
+
+# ------------------------------------------------------------------------------
+# pattern rule for cpp-files
+# ------------------------------------------------------------------------------
+$(PATH_OBJ)/%.o : %.cpp
+ # Compile the source file...
+ # ...and Reformat (using sed) any possible error/warning messages for the Visual Studio build window
+ # ...and Generate a dependency file (using the g++ flag -MM), reformating it with sed
+ @-$(ECHO) +++ compiling: $<
+ @-$(CC) $(CFLAGS) $< -c -o $(PATH_OBJ)/$(basename $(@F)).o 2> $(PATH_ERR)/$(basename $(@F)).err
+ @-$(SED) -e 's|.h:\([0-9]*\),|.h(\1) :|' -e 's|:\([0-9]*\):|(\1) :|' $(PATH_ERR)/$(basename $(@F)).err
+ @-$(CC) $(CFLAGS) -MM $< | $(SED) -e 's|\($(basename $(@F)).o\):|$(PATH_OBJ)/\1:|' > $(PATH_OBJ)/$(basename $(@F)).d

Added: sandbox/multiprecision/build/MakefileFiles.gmk
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/build/MakefileFiles.gmk 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,133 @@
+
+# Copyright Christopher Kormanyos 2002 - 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)
+
+# 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
+
+#
+# multiprecision files
+#
+FILES_MP = ../src/backends/float/mp_float \
+ ../src/backends/float/mp_float_base
+
+#
+# Utility files
+#
+FILES_UTILITY = ../src/utility/util_digit_scale \
+ ../src/utility/util_power_j_pow_x \
+ ../src/utility/util_timer
+
+#
+# Function files
+#
+FILES_FUNCTIONS = ../src/functions/constants/constants \
+ ../src/functions/elementary/elementary_complex \
+ ../src/functions/elementary/elementary_hyper_g \
+ ../src/functions/elementary/elementary_math \
+ ../src/functions/elementary/elementary_trans \
+ ../src/functions/elementary/elementary_trig \
+ ../src/functions/gamma/factorial \
+ ../src/functions/gamma/factorial2 \
+ ../src/functions/gamma/gamma \
+ ../src/functions/gamma/gamma_util \
+ ../src/functions/gamma/pochhammer \
+ ../src/functions/integer/bernoulli_b \
+ ../src/functions/integer/prime \
+ ../src/functions/integer/prime_factor \
+ ../src/functions/tables/A000142 \
+ ../src/functions/tables/A000367 \
+ ../src/functions/tables/A002445 \
+ ../src/functions/tables/A006882 \
+ ../src/functions/tables/A007318 \
+ ../src/functions/zeta/zeta
+
+#
+# Example files
+#
+FILES_EXAMPLES = ../example/example_001_basic_usage_real \
+ ../example/example_002_basic_usage_imag \
+ ../example/example_005_recursive_trapezoid_integral \
+ ../example/example_008_gauss_laguerre
+
+#
+# Test files
+#
+FILES_TEST = ../test/test \
+ ../test/test_case_base
+
+#
+# Spot test files
+#
+FILES_TEST_SPOT = ../test/spot/test_spot
+
+#
+# Real test files
+#
+FILES_TEST_REAL = ../test/real/test_real \
+ ../test/real/cases/test_case_0000x_overflow_underflow \
+ ../test/real/cases/test_case_0000y_write_to_ostream \
+ ../test/real/cases/test_case_0000z_global_ops_pod \
+ ../test/real/cases/test_case_00011_various_elem_math \
+ ../test/real/cases/test_case_00021_bernoulli \
+ ../test/real/cases/test_case_00051_factorial \
+ ../test/real/cases/test_case_00052_factorial2 \
+ ../test/real/cases/test_case_00071_various_int_func \
+ ../test/real/cases/test_case_00101_sin \
+ ../test/real/cases/test_case_00102_cos \
+ ../test/real/cases/test_case_00103_exp \
+ ../test/real/cases/test_case_00104_log \
+ ../test/real/cases/test_case_00105_sqrt \
+ ../test/real/cases/test_case_00106_rootn \
+ ../test/real/cases/test_case_00111_sin_small_x \
+ ../test/real/cases/test_case_00112_cos_x_near_pi_half \
+ ../test/real/cases/test_case_00113_atan_x_small_to_large \
+ ../test/real/cases/test_case_00114_various_trig \
+ ../test/real/cases/test_case_00115_various_elem_trans \
+ ../test/real/cases/test_case_00121_sinh \
+ ../test/real/cases/test_case_00122_cosh \
+ ../test/real/cases/test_case_00123_tanh \
+ ../test/real/cases/test_case_00124_asinh \
+ ../test/real/cases/test_case_00125_acosh \
+ ../test/real/cases/test_case_00126_atanh \
+ ../test/real/cases/test_case_00201_gamma \
+ ../test/real/cases/test_case_00202_gamma_medium_x \
+ ../test/real/cases/test_case_00203_gamma_small_x \
+ ../test/real/cases/test_case_00204_gamma_tiny_x \
+ ../test/real/cases/test_case_00205_gamma_near_neg_n \
+ ../test/real/cases/test_case_00221_various_gamma_func \
+ ../test/real/cases/test_case_00901_zeta_small_x \
+ ../test/real/cases/test_case_00902_zeta_all_x \
+ ../test/real/cases/test_case_00903_zeta_neg_x
+
+#
+# Imag test files
+#
+FILES_TEST_IMAG = ../test/imag/test_imag \
+ ../test/imag/cases/test_case_02101_z_sin \
+ ../test/imag/cases/test_case_02102_z_cos \
+ ../test/imag/cases/test_case_02103_z_exp \
+ ../test/imag/cases/test_case_02104_z_log \
+ ../test/imag/cases/test_case_02105_z_sqrt \
+ ../test/imag/cases/test_case_02106_z_rootn \
+ ../test/imag/cases/test_case_02111_z_asin \
+ ../test/imag/cases/test_case_02112_z_acos \
+ ../test/imag/cases/test_case_02113_z_atan \
+ ../test/imag/cases/test_case_02114_z_various_trig \
+ ../test/imag/cases/test_case_02115_z_various_elem_trans_log \
+ ../test/imag/cases/test_case_02116_z_various_elem \
+ ../test/imag/cases/test_case_02121_z_sinh \
+ ../test/imag/cases/test_case_02122_z_cosh \
+ ../test/imag/cases/test_case_02123_z_tanh \
+ ../test/imag/cases/test_case_02124_z_asinh \
+ ../test/imag/cases/test_case_02125_z_acosh \
+ ../test/imag/cases/test_case_02126_z_atanh \
+ ../test/imag/cases/test_case_02201_z_gamma \
+ ../test/imag/cases/test_case_02202_z_gamma_medium_x \
+ ../test/imag/cases/test_case_02901_z_zeta_small_x \
+ ../test/imag/cases/test_case_02902_z_zeta_all_x \
+ ../test/imag/cases/test_case_02903_z_zeta_neg_x \
+ ../test/imag/cases/test_case_02911_z_zeta_crit_strip

Added: sandbox/multiprecision/build/multiprecision.vcxproj
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/build/multiprecision.vcxproj 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,1344 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="debug-efx|Win32">
+ <Configuration>debug-efx</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="debug-efx|x64">
+ <Configuration>debug-efx</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="debug-gmp|Win32">
+ <Configuration>debug-gmp</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="debug-gmp|x64">
+ <Configuration>debug-gmp</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="debug-mpfr|Win32">
+ <Configuration>debug-mpfr</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="debug-mpfr|x64">
+ <Configuration>debug-mpfr</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="release-efx|Win32">
+ <Configuration>release-efx</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="release-efx|x64">
+ <Configuration>release-efx</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="release-gmp|Win32">
+ <Configuration>release-gmp</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="release-gmp|x64">
+ <Configuration>release-gmp</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="release-mpfr|Win32">
+ <Configuration>release-mpfr</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="release-mpfr|x64">
+ <Configuration>release-mpfr</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{79DD124E-E120-40F3-B2F1-127419BDC295}</ProjectGuid>
+ <RootNamespace>multiprecision</RootNamespace>
+ <ProjectName>multiprecision</ProjectName>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">$(SolutionDir)win32-release-gmp\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">$(SolutionDir)x64-release-gmp\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">$(SolutionDir)win32-release-efx\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">$(SolutionDir)x64-release-efx\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">$(SolutionDir)win32-debug-gmp\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">$(SolutionDir)x64-debug-gmp\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">$(SolutionDir)win32-debug-efx\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">$(SolutionDir)x64-debug-efx\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">$(SolutionDir)win32-release-mpfr\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">$(SolutionDir)x64-release-mpfr\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">$(SolutionDir)win32-debug-mpfr\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">$(OutDir)</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">$(SolutionDir)x64-debug-mpfr\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">$(OutDir)</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">
+ <Midl>
+ <TypeLibraryName>.\release-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;NDEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_GMP;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level4</WarningLevel>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\release-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;NDEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_GMP;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level4</WarningLevel>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">
+ <Midl>
+ <TypeLibraryName>.\release-efx/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;NDEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_EFX;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level4</WarningLevel>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\release-efx/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;NDEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_EFX;_SECURE_SCL= 0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level4</WarningLevel>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">
+ <Midl>
+ <TypeLibraryName>.\debug-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;_DEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_GMP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/NODEFAULTLIB:LIBCMT %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)multiprecision_debug.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\debug-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;_DEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_GMP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/NODEFAULTLIB:LIBCMT %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)multiprecision_debug.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">
+ <Midl>
+ <TypeLibraryName>.\debug-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;_DEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_EFX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)multiprecision_debug.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\debug-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;_DEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_EFX;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)multiprecision_debug.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">
+ <Midl>
+ <TypeLibraryName>.\release-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;NDEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_MPFR;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level4</WarningLevel>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib;../src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\release-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;NDEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_MPFR;_SECURE_SCL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <WarningLevel>Level4</WarningLevel>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib;../src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">
+ <Midl>
+ <TypeLibraryName>.\debug-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;_DEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_MPFR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>.\debug-gmp/</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/NODEFAULTLIB:LIBCMT %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib;../src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)multiprecision_debug.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\debug-gmp/multiprecision.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>$(SolutionDir)../../../;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_DIGITS10=50;_DEBUG;_CONSOLE;BOOST_MULTIPRECISION_BACKEND_MP_FLOAT_TYPE_MPFR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)multiprecision.pdb</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level4</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0407</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/NODEFAULTLIB:LIBCMT %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>../src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib;../src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)multiprecision.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(IntDir)multiprecision_debug.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Xdcmake>
+ <OutputFile>$(OutDir)multiprecision.xml</OutputFile>
+ </Xdcmake>
+ <Bscmake>
+ <OutputFile>$(OutDir)multiprecision.bsc</OutputFile>
+ </Bscmake>
+ <PostBuildEvent>
+ <Command>
+ </Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\example\example_001_basic_usage_real.cpp" />
+ <ClCompile Include="..\example\example_002_basic_usage_imag.cpp" />
+ <ClCompile Include="..\example\example_005_recursive_trapezoid_integral.cpp" />
+ <ClCompile Include="..\example\example_008_gauss_laguerre.cpp" />
+ <ClCompile Include="..\src\backends\float\efx\mp_float_efx.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\gmp\mp_float_gmp.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\mpfr\mp_float_mpfr.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\mp_float.cpp" />
+ <ClCompile Include="..\src\backends\float\mp_float_base.cpp" />
+ <ClCompile Include="..\src\functions\gamma\factorial.cpp" />
+ <ClCompile Include="..\src\functions\gamma\factorial2.cpp" />
+ <ClCompile Include="..\src\functions\gamma\gamma.cpp" />
+ <ClCompile Include="..\src\functions\gamma\gamma_util.cpp" />
+ <ClCompile Include="..\src\functions\gamma\pochhammer.cpp" />
+ <ClCompile Include="..\src\functions\tables\A000142.cpp">
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">MaxSpeed</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">MaxSpeed</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">Disabled</Optimization>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">Disabled</Optimization>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A000367.cpp">
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">MaxSpeed</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">MaxSpeed</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</FunctionLevelLinking>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A002445.cpp">
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">MaxSpeed</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">MaxSpeed</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</FunctionLevelLinking>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">Disabled</Optimization>
+ <InlineFunctionExpansion Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">Size</FavorSizeOrSpeed>
+ <StringPooling Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">false</StringPooling>
+ <FunctionLevelLinking Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</FunctionLevelLinking>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A006882.cpp" />
+ <ClCompile Include="..\src\functions\tables\A007318.cpp">
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">/bigobj %(AdditionalOptions)</AdditionalOptions>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\zeta\zeta.cpp" />
+ <ClCompile Include="..\src\functions\integer\bernoulli_b.cpp" />
+ <ClCompile Include="..\src\functions\integer\prime.cpp" />
+ <ClCompile Include="..\src\functions\integer\prime_factor.cpp" />
+ <ClCompile Include="..\src\functions\elementary\elementary_complex.cpp" />
+ <ClCompile Include="..\src\functions\elementary\elementary_hyper_g.cpp" />
+ <ClCompile Include="..\src\functions\elementary\elementary_math.cpp" />
+ <ClCompile Include="..\src\functions\elementary\elementary_trans.cpp" />
+ <ClCompile Include="..\src\functions\elementary\elementary_trig.cpp" />
+ <ClCompile Include="..\src\functions\constants\constants.cpp" />
+ <ClCompile Include="..\src\utility\util_digit_scale.cpp" />
+ <ClCompile Include="..\src\utility\util_power_j_pow_x.cpp" />
+ <ClCompile Include="..\src\utility\util_timer.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02101_z_sin.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02102_z_cos.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02103_z_exp.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02104_z_log.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02105_z_sqrt.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02106_z_rootn.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02111_z_asin.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02112_z_acos.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02113_z_atan.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02114_z_various_trig.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02115_z_various_elem_trans_log.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02116_z_various_elem.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02121_z_sinh.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02122_z_cosh.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02123_z_tanh.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02124_z_asinh.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02125_z_acosh.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02126_z_atanh.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02201_z_gamma.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02202_z_gamma_medium_x.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02901_z_zeta_small_x.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02902_z_zeta_all_x.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02903_z_zeta_neg_x.cpp" />
+ <ClCompile Include="..\test\imag\cases\test_case_02911_z_zeta_crit_strip.cpp" />
+ <ClCompile Include="..\test\imag\test_imag.cpp" />
+ <ClCompile Include="..\test\linpack_test\linpack-benchmark.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">C:\boost\boost_1_47;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\test\naive_test\naive_test.cpp">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_0000x_overflow_underflow.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_0000y_write_to_ostream.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_0000z_global_ops_pod.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00011_various_elem_math.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00021_bernoulli.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00051_factorial.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00052_factorial2.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00071_various_int_func.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00101_sin.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00102_cos.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00103_exp.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00104_log.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00105_sqrt.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00106_rootn.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00111_sin_small_x.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00112_cos_x_near_pi_half.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00113_atan_x_small_to_large.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00114_various_trig.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00115_various_elem_trans.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00121_sinh.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00122_cosh.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00123_tanh.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00124_asinh.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00125_acosh.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00126_atanh.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00201_gamma.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00202_gamma_medium_x.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00203_gamma_small_x.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00204_gamma_tiny_x.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00205_gamma_near_neg_n.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00221_various_gamma_func.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00901_zeta_small_x.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00902_zeta_all_x.cpp" />
+ <ClCompile Include="..\test\real\cases\test_case_00903_zeta_neg_x.cpp" />
+ <ClCompile Include="..\test\real\test_real.cpp" />
+ <ClCompile Include="..\test\spot\test_spot.cpp" />
+ <ClCompile Include="..\test\test.cpp" />
+ <ClCompile Include="..\test\test_case_base.cpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_complex.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_base.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_efx.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_functions.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_gmp.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_mpfr.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_alternating_sum.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_coefficient_expansion.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_digit_scale.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_find_root_base.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_find_root_bisect.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_find_root_newton_raphson.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_function_base.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_function_derivative.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_function_operation.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_interpolate.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_numeric_cast.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_point.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_power_j_pow_x.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_power_x_pow_n.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_ranged_function_operation.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_timer.hpp" />
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_trapezoid.hpp" />
+ <ClInclude Include="..\example\examples.h" />
+ <ClInclude Include="..\src\backends\float\gmp\mp_float_gmp_protos.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </ClInclude>
+ <ClInclude Include="..\src\backends\float\mpfr\mp_float_mpfr_protos.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ </ClInclude>
+ <ClInclude Include="..\src\functions\integer\prime_factors.h" />
+ <ClInclude Include="..\test\imag\test_case_imag.h" />
+ <ClInclude Include="..\test\imag\test_imag.h" />
+ <ClInclude Include="..\test\linpack_test\gmp\gmp.h" />
+ <ClInclude Include="..\test\linpack_test\gmp\gmpxx.h" />
+ <ClInclude Include="..\test\linpack_test\libf2c\f2c.h" />
+ <ClInclude Include="..\test\real\test_case_real.h" />
+ <ClInclude Include="..\test\real\test_real.h" />
+ <ClInclude Include="..\test\spot\test_spot.h" />
+ <ClInclude Include="..\test\test_case_base.h" />
+ <CustomBuildStep Include="..\src\multiprecision\efx\multiprecision_efx.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\efx\multiprecision_efx_array.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\gmp\multiprecision_gmp.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\gmp\multiprecision_gmp_protos.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\gmp\multiprecision_gmp_types.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\mpfr\multiprecision_mpfr.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\mpfr\multiprecision_mpfr_protos.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <CustomBuildStep Include="..\src\multiprecision\mpfr\multiprecision_mpfr_types.h">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ </CustomBuildStep>
+ <ClInclude Include="..\src\functions\gamma\gamma_util.h" />
+ <ClInclude Include="..\src\functions\tables\tables.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="..\license\ACM_multiprecision_boost_license.pdf">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\license\LICENSE_1_0.pdf">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="..\license\LICENSE_1_0.txt">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="Makefile">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="MakefileFiles.gmk">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </None>
+ <None Include="vc_libs.txt">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='debug-mpfr|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-efx|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-gmp|x64'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='release-mpfr|x64'">true</ExcludedFromBuild>
+ </None>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
+ </ImportGroup>
+</Project>
\ No newline at end of file

Added: sandbox/multiprecision/build/multiprecision.vcxproj.filters
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/build/multiprecision.vcxproj.filters 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="libs">
+ <UniqueIdentifier>{dc618afc-db82-427e-b3a5-6441ed18c876}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision">
+ <UniqueIdentifier>{bc66d909-39fc-45a0-89a3-5ff18bbefa82}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\build">
+ <UniqueIdentifier>{82b321c5-a710-4378-b292-b4267b51cda3}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\example">
+ <UniqueIdentifier>{b5648d3e-3c94-4e6d-82fc-a792a1ff820f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\licence">
+ <UniqueIdentifier>{e40684d3-e066-4eb2-9ab0-087f6548550c}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src">
+ <UniqueIdentifier>{eeb500a7-0118-4d22-bd9b-9d0f8a4f17ea}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions">
+ <UniqueIdentifier>{d45e8aee-a017-4781-897d-be24935b78be}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions\gamma">
+ <UniqueIdentifier>{7dce61f1-00ec-4e54-93bd-a72352543dd4}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions\tables">
+ <UniqueIdentifier>{a5b13044-8e0c-40ff-9c41-68c0c75ba923}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions\zeta">
+ <UniqueIdentifier>{94b0b952-b3ad-45c3-985a-b9e41815545f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions\integer">
+ <UniqueIdentifier>{4b82f0ab-4d72-4374-8907-8b953f02710f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions\elementary">
+ <UniqueIdentifier>{1eedc77c-29e7-4f5b-8b96-ffd90d877815}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\functions\constants">
+ <UniqueIdentifier>{cc4f2986-d17b-422b-9586-109c3d0b49da}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test">
+ <UniqueIdentifier>{bbddb5ca-79f9-477f-8652-e38bbe8e40ea}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\real">
+ <UniqueIdentifier>{6a01c86d-31b9-4a46-9121-74bd203d7961}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\real\cases">
+ <UniqueIdentifier>{665a964c-4598-4dc6-a02f-d9ae5c2dddcf}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\spot">
+ <UniqueIdentifier>{0a9fb06d-b5cc-47e2-b25e-e917904aee2a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\imag">
+ <UniqueIdentifier>{0c01fae0-3ff0-4f1a-ac00-d6238bdabd01}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\imag\cases">
+ <UniqueIdentifier>{c10ac75a-ed22-4f7d-89e1-4b0745923caf}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="boost">
+ <UniqueIdentifier>{f5907b86-108b-444b-9efc-f596cabf046f}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="boost\multiprecision">
+ <UniqueIdentifier>{087ba7fc-16a5-4e6d-b74a-3309a6462c13}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\linpack_test">
+ <UniqueIdentifier>{0aee33a7-b5df-4fb7-ba56-0865c0756b00}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\naive_test">
+ <UniqueIdentifier>{c1e4b722-ab0a-431d-a2fc-594922e9fcfe}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\linpack_test\libf2c">
+ <UniqueIdentifier>{73700a00-2458-408c-a554-8352b1fcf152}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\test\linpack_test\gmp">
+ <UniqueIdentifier>{8ed1a5cd-3ea1-4fc5-b19d-1ad9517e07d2}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\backends">
+ <UniqueIdentifier>{01e39304-f4d4-42b4-af61-697858303ab4}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\backends\float">
+ <UniqueIdentifier>{2f43ba4e-63e1-400f-8ba1-d21ea89c3b58}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\backends\float\efx">
+ <UniqueIdentifier>{f144bb12-c8de-4cc3-a45f-e28f1e69afc9}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\backends\float\gmp">
+ <UniqueIdentifier>{d4b78c47-26b2-49d0-8477-f530d6636723}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\backends\float\mpfr">
+ <UniqueIdentifier>{a497084a-d097-4a91-bb58-5a1304f5ae3b}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="libs\multiprecision\src\utility">
+ <UniqueIdentifier>{f184c194-4d14-4d89-b798-0645dda62457}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="boost\multiprecision\utility">
+ <UniqueIdentifier>{f48c3eb7-68f5-405b-8c2b-053d6bc62c49}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\src\functions\gamma\factorial.cpp">
+ <Filter>libs\multiprecision\src\functions\gamma</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\gamma\factorial2.cpp">
+ <Filter>libs\multiprecision\src\functions\gamma</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\gamma\gamma.cpp">
+ <Filter>libs\multiprecision\src\functions\gamma</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\gamma\gamma_util.cpp">
+ <Filter>libs\multiprecision\src\functions\gamma</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\gamma\pochhammer.cpp">
+ <Filter>libs\multiprecision\src\functions\gamma</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A000142.cpp">
+ <Filter>libs\multiprecision\src\functions\tables</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A000367.cpp">
+ <Filter>libs\multiprecision\src\functions\tables</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A002445.cpp">
+ <Filter>libs\multiprecision\src\functions\tables</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A006882.cpp">
+ <Filter>libs\multiprecision\src\functions\tables</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\tables\A007318.cpp">
+ <Filter>libs\multiprecision\src\functions\tables</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\zeta\zeta.cpp">
+ <Filter>libs\multiprecision\src\functions\zeta</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\integer\bernoulli_b.cpp">
+ <Filter>libs\multiprecision\src\functions\integer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\integer\prime.cpp">
+ <Filter>libs\multiprecision\src\functions\integer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\integer\prime_factor.cpp">
+ <Filter>libs\multiprecision\src\functions\integer</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\elementary\elementary_complex.cpp">
+ <Filter>libs\multiprecision\src\functions\elementary</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\elementary\elementary_hyper_g.cpp">
+ <Filter>libs\multiprecision\src\functions\elementary</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\elementary\elementary_math.cpp">
+ <Filter>libs\multiprecision\src\functions\elementary</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\elementary\elementary_trans.cpp">
+ <Filter>libs\multiprecision\src\functions\elementary</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\elementary\elementary_trig.cpp">
+ <Filter>libs\multiprecision\src\functions\elementary</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\functions\constants\constants.cpp">
+ <Filter>libs\multiprecision\src\functions\constants</Filter>
+ </ClCompile>
+ <ClCompile Include="..\example\example_001_basic_usage_real.cpp">
+ <Filter>libs\multiprecision\example</Filter>
+ </ClCompile>
+ <ClCompile Include="..\example\example_002_basic_usage_imag.cpp">
+ <Filter>libs\multiprecision\example</Filter>
+ </ClCompile>
+ <ClCompile Include="..\example\example_005_recursive_trapezoid_integral.cpp">
+ <Filter>libs\multiprecision\example</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\test.cpp">
+ <Filter>libs\multiprecision\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\test_case_base.cpp">
+ <Filter>libs\multiprecision\test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\spot\test_spot.cpp">
+ <Filter>libs\multiprecision\test\spot</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\test_real.cpp">
+ <Filter>libs\multiprecision\test\real</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_0000x_overflow_underflow.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00011_various_elem_math.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00021_bernoulli.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00051_factorial.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00052_factorial2.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00071_various_int_func.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00101_sin.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00102_cos.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00103_exp.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00104_log.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00105_sqrt.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00106_rootn.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00111_sin_small_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00112_cos_x_near_pi_half.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00113_atan_x_small_to_large.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00114_various_trig.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00115_various_elem_trans.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00121_sinh.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00122_cosh.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00123_tanh.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00124_asinh.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00125_acosh.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00126_atanh.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00201_gamma.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00202_gamma_medium_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00203_gamma_small_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00204_gamma_tiny_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00205_gamma_near_neg_n.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00221_various_gamma_func.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00901_zeta_small_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00902_zeta_all_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_00903_zeta_neg_x.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\test_imag.cpp">
+ <Filter>libs\multiprecision\test\imag</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02101_z_sin.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02102_z_cos.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02103_z_exp.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02104_z_log.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02105_z_sqrt.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02106_z_rootn.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02111_z_asin.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02112_z_acos.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02113_z_atan.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02114_z_various_trig.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02115_z_various_elem_trans_log.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02116_z_various_elem.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02121_z_sinh.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02122_z_cosh.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02123_z_tanh.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02124_z_asinh.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02125_z_acosh.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02126_z_atanh.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02201_z_gamma.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02202_z_gamma_medium_x.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02901_z_zeta_small_x.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02902_z_zeta_all_x.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02903_z_zeta_neg_x.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\imag\cases\test_case_02911_z_zeta_crit_strip.cpp">
+ <Filter>libs\multiprecision\test\imag\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_0000y_write_to_ostream.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\example\example_008_gauss_laguerre.cpp">
+ <Filter>libs\multiprecision\example</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\real\cases\test_case_0000z_global_ops_pod.cpp">
+ <Filter>libs\multiprecision\test\real\cases</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\linpack_test\linpack-benchmark.cpp">
+ <Filter>libs\multiprecision\test\linpack_test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\test\naive_test\naive_test.cpp">
+ <Filter>libs\multiprecision\test\naive_test</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\mp_float.cpp">
+ <Filter>libs\multiprecision\src\backends\float</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\mp_float_base.cpp">
+ <Filter>libs\multiprecision\src\backends\float</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\efx\mp_float_efx.cpp">
+ <Filter>libs\multiprecision\src\backends\float\efx</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\gmp\mp_float_gmp.cpp">
+ <Filter>libs\multiprecision\src\backends\float\gmp</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\backends\float\mpfr\mp_float_mpfr.cpp">
+ <Filter>libs\multiprecision\src\backends\float\mpfr</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\utility\util_digit_scale.cpp">
+ <Filter>libs\multiprecision\src\utility</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\utility\util_power_j_pow_x.cpp">
+ <Filter>libs\multiprecision\src\utility</Filter>
+ </ClCompile>
+ <ClCompile Include="..\src\utility\util_timer.cpp">
+ <Filter>libs\multiprecision\src\utility</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\src\functions\gamma\gamma_util.h">
+ <Filter>libs\multiprecision\src\functions\gamma</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\functions\tables\tables.h">
+ <Filter>libs\multiprecision\src\functions\tables</Filter>
+ </ClInclude>
+ <ClInclude Include="..\example\examples.h">
+ <Filter>libs\multiprecision\example</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\test_case_base.h">
+ <Filter>libs\multiprecision\test</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\spot\test_spot.h">
+ <Filter>libs\multiprecision\test\spot</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\real\test_case_real.h">
+ <Filter>libs\multiprecision\test\real</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\real\test_real.h">
+ <Filter>libs\multiprecision\test\real</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\imag\test_case_imag.h">
+ <Filter>libs\multiprecision\test\imag</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\imag\test_imag.h">
+ <Filter>libs\multiprecision\test\imag</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\functions\integer\prime_factors.h">
+ <Filter>libs\multiprecision\src\functions\integer</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\linpack_test\libf2c\f2c.h">
+ <Filter>libs\multiprecision\test\linpack_test\libf2c</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\linpack_test\gmp\gmp.h">
+ <Filter>libs\multiprecision\test\linpack_test\gmp</Filter>
+ </ClInclude>
+ <ClInclude Include="..\test\linpack_test\gmp\gmpxx.h">
+ <Filter>libs\multiprecision\test\linpack_test\gmp</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_base.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_efx.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_functions.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_gmp.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_float_mpfr.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\mp_complex.hpp">
+ <Filter>boost\multiprecision</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\backends\float\gmp\mp_float_gmp_protos.h">
+ <Filter>libs\multiprecision\src\backends\float\gmp</Filter>
+ </ClInclude>
+ <ClInclude Include="..\src\backends\float\mpfr\mp_float_mpfr_protos.h">
+ <Filter>libs\multiprecision\src\backends\float\mpfr</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_alternating_sum.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_coefficient_expansion.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_digit_scale.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_find_root_base.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_find_root_bisect.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_find_root_newton_raphson.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_function_derivative.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_function_operation.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_interpolate.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_numeric_cast.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_point.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_power_j_pow_x.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_power_x_pow_n.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_ranged_function_operation.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_timer.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_trapezoid.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\boost\multiprecision\utility\util_function_base.hpp">
+ <Filter>boost\multiprecision\utility</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Makefile">
+ <Filter>libs\multiprecision\build</Filter>
+ </None>
+ <None Include="MakefileFiles.gmk">
+ <Filter>libs\multiprecision\build</Filter>
+ </None>
+ <None Include="..\license\ACM_multiprecision_boost_license.pdf">
+ <Filter>libs\multiprecision\licence</Filter>
+ </None>
+ <None Include="..\license\LICENSE_1_0.pdf">
+ <Filter>libs\multiprecision\licence</Filter>
+ </None>
+ <None Include="..\license\LICENSE_1_0.txt">
+ <Filter>libs\multiprecision\licence</Filter>
+ </None>
+ <None Include="vc_libs.txt">
+ <Filter>libs\multiprecision\build</Filter>
+ </None>
+ </ItemGroup>
+</Project>
\ No newline at end of file

Added: sandbox/multiprecision/build/multiprecision_vs2010.sln
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/build/multiprecision_vs2010.sln 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,49 @@
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "multiprecision", "multiprecision.vcxproj", "{79DD124E-E120-40F3-B2F1-127419BDC295}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ debug-efx|Win32 = debug-efx|Win32
+ debug-efx|x64 = debug-efx|x64
+ debug-gmp|Win32 = debug-gmp|Win32
+ debug-gmp|x64 = debug-gmp|x64
+ debug-mpfr|Win32 = debug-mpfr|Win32
+ debug-mpfr|x64 = debug-mpfr|x64
+ release-efx|Win32 = release-efx|Win32
+ release-efx|x64 = release-efx|x64
+ release-gmp|Win32 = release-gmp|Win32
+ release-gmp|x64 = release-gmp|x64
+ release-mpfr|Win32 = release-mpfr|Win32
+ release-mpfr|x64 = release-mpfr|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-efx|Win32.ActiveCfg = debug-efx|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-efx|Win32.Build.0 = debug-efx|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-efx|x64.ActiveCfg = debug-efx|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-efx|x64.Build.0 = debug-efx|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-gmp|Win32.ActiveCfg = debug-gmp|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-gmp|Win32.Build.0 = debug-gmp|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-gmp|x64.ActiveCfg = debug-gmp|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-gmp|x64.Build.0 = debug-gmp|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-mpfr|Win32.ActiveCfg = debug-mpfr|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-mpfr|Win32.Build.0 = debug-mpfr|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-mpfr|x64.ActiveCfg = debug-mpfr|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.debug-mpfr|x64.Build.0 = debug-mpfr|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-efx|Win32.ActiveCfg = release-efx|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-efx|Win32.Build.0 = release-efx|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-efx|x64.ActiveCfg = release-efx|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-efx|x64.Build.0 = release-efx|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-gmp|Win32.ActiveCfg = release-gmp|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-gmp|Win32.Build.0 = release-gmp|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-gmp|x64.ActiveCfg = release-gmp|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-gmp|x64.Build.0 = release-gmp|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-mpfr|Win32.ActiveCfg = release-mpfr|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-mpfr|Win32.Build.0 = release-mpfr|Win32
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-mpfr|x64.ActiveCfg = release-mpfr|x64
+ {79DD124E-E120-40F3-B2F1-127419BDC295}.release-mpfr|x64.Build.0 = release-mpfr|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal

Added: sandbox/multiprecision/build/vc_libs.txt
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/build/vc_libs.txt 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,25 @@
+
+# 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
+
+Microsoft Visual C++ x86 gmp build needs these libraries:
+ ./src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib
+ ./src/backends/float/gmp/4-2-4/vc9/p4/gmp.pdb
+
+Microsoft Visual C++ x64 gmp build needs these libraries:
+ ./src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib
+ ./src/backends/float/gmp/4-2-4/vc9/x64/gmp.pdb
+
+Microsoft Visual C++ x86 mpfr build needs these libraries:
+ ./src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.lib
+ ./src/backends/float/mpfr2-4-1/vc9/p4/mpfr.pdb
+ ./src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib
+ ./src/backends/float/gmp/4-2-4/vc9/p4/gmp.pdb
+
+Microsoft Visual C++ x64 mpfr build needs these libraries:
+ ./src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.lib
+ ./src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.pdb
+ ./src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib
+ ./src/backends/float/gmp/4-2-4/vc9/x64/gmp.pdb
+

Added: sandbox/multiprecision/example/example_001_basic_usage_real.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/example/example_001_basic_usage_real.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,52 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <vector>
+#include <iostream>
+#include <algorithm>
+#include <iterator>
+
+#include <boost/multiprecision/mp_float.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+#include "examples.h"
+#include <boost/multiprecision/utility/util_timer.hpp>
+
+using boost::multiprecision::mp_float;
+
+void examples::nr_001::basic_usage_real(void)
+{
+ // Print 21 values of the function gamma[(222/10) + k]
+ // for 0 <= k < 21 to the standard output using mp_float. Also compute the computation
+ // time for the calculation using mp_float in [ms].
+ // A comparable Mathematica code is:
+ // Timing[Table[N[Gamma[(222/10) + k], 100],{k, 0, 20, 1}]].
+
+ const mp_float v(222 / boost::multiprecision::ten());
+
+ std::vector<mp_float> values(static_cast<std::size_t>(21u));
+
+ const boost::multiprecision::utility::timer tm;
+ for(boost::int32_t k = static_cast<boost::int32_t>(0); k < static_cast<boost::int32_t>(values.size()); k++)
+ {
+ values[static_cast<std::size_t>(k)] = boost::multiprecision::gamma(v + k);
+ }
+ const double elapsed = tm.elapsed();
+
+ std::cout << "Elapsed time: " << elapsed << "\n";
+
+ const std::streamsize original_prec = std::cout.precision(std::numeric_limits<mp_float>::digits10);
+ const std::ios::fmtflags original_flag = std::cout.setf(std::ios::showpos | std::ios::scientific);
+
+ std::copy(values.begin(), values.end(), std::ostream_iterator<mp_float>(std::cout, "\n"));
+
+ std::cout.precision(original_prec);
+ std::cout.unsetf(std::ios::showpos | std::ios::scientific);
+ std::cout.setf(original_flag);
+}

Added: sandbox/multiprecision/example/example_002_basic_usage_imag.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/example/example_002_basic_usage_imag.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,56 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <vector>
+#include <fstream>
+#include <algorithm>
+#include <iterator>
+
+#include <boost/multiprecision/mp_float.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+#include "examples.h"
+#include <boost/multiprecision/utility/util_timer.hpp>
+
+using boost::multiprecision::mp_float;
+using boost::multiprecision::mp_complex;
+
+void examples::nr_002::basic_usage_imag(void)
+{
+ // Print 21 values of the function riemann_zeta[(1/2) + (((1234/10) + k) I)]
+ // for 0 <= k < 21 to the standard output using mp_float. Also compute the
+ // computation time for the calculation using mp_float in [ms].
+ // A comparable Mathematica code is:
+ // Timing[Table[N[Zeta[(1/2) + (((1234/10) + k) I)], 100],{k, 0, 20, 1}]].
+
+ static const mp_float y(1234 / boost::multiprecision::ten());
+
+ std::vector<mp_complex> values(static_cast<std::size_t>(21u));
+
+ const boost::multiprecision::utility::timer tm;
+ for(boost::int32_t k = static_cast<boost::int32_t>(0); k < static_cast<boost::int32_t>(values.size()); k++)
+ {
+ const mp_complex z(boost::multiprecision::half(), y + k);
+
+ values[static_cast<std::size_t>(k)] = riemann_zeta(z);
+ }
+ const double elapsed = tm.elapsed();
+
+ std::cout << "Elapsed time: " << elapsed << "\n";
+
+ const std::streamsize original_prec = std::cout.precision(std::numeric_limits<mp_float>::digits10);
+ const std::ios::fmtflags original_flag = std::cout.setf(std::ios::showpos | std::ios::scientific);
+
+ std::copy(values.begin(), values.end(), std::ostream_iterator<mp_complex>(std::cout, "\n"));
+
+ std::cout.precision(original_prec);
+ std::cout.unsetf(std::ios::showpos | std::ios::scientific);
+ std::cout.setf(original_flag);
+}

Added: sandbox/multiprecision/example/example_005_recursive_trapezoid_integral.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/example/example_005_recursive_trapezoid_integral.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,67 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+#include "examples.h"
+#include <boost/lexical_cast.hpp>
+#include <boost/multiprecision/utility/util_trapezoid.hpp>
+
+using boost::multiprecision::mp_float;
+
+namespace examples
+{
+ namespace nr_005
+ {
+ class RecursiveTrapezoidJ0 : public boost::multiprecision::utility::recursive_trapezoid_rule<mp_float>
+ {
+ private:
+
+ static const mp_float& my_tol(void)
+ {
+ static const mp_float val("1E-" + boost::lexical_cast<std::string>(std::numeric_limits<mp_float>::digits10 / 2));
+ return val;
+ }
+
+ private:
+
+ const mp_float my_z;
+
+ public:
+
+ RecursiveTrapezoidJ0(const mp_float& z) : boost::multiprecision::utility::recursive_trapezoid_rule<mp_float>(boost::multiprecision::zero(), boost::multiprecision::pi(), my_tol()),
+ my_z(z) { }
+
+ virtual ~RecursiveTrapezoidJ0() { }
+
+ private:
+
+ virtual mp_float my_function(const mp_float& x) const
+ {
+ return cos(my_z * sin(x));
+ }
+ };
+ }
+}
+
+mp_float examples::nr_005::recursive_trapezoid_j0(const mp_float& x)
+{
+ const RecursiveTrapezoidJ0 rtj0(x);
+
+ return rtj0.operation() / boost::multiprecision::pi();
+}
+
+mp_float examples::nr_005::recursive_trapezoid_j0_test(void)
+{
+ static const mp_float x = 12 + boost::multiprecision::euler_gamma();
+
+ return recursive_trapezoid_j0(x);
+}

Added: sandbox/multiprecision/example/example_008_gauss_laguerre.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/example/example_008_gauss_laguerre.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,316 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <vector>
+
+#include <boost/multiprecision/mp_float.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+#include "examples.h"
+
+#include <boost/multiprecision/utility/util_digit_scale.hpp>
+#include <boost/multiprecision/utility/util_find_root_newton_raphson.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/multiprecision/utility/util_point.hpp>
+
+using boost::multiprecision::mp_float;
+
+namespace examples
+{
+ namespace nr_008
+ {
+ class GaussQuadAbscissasAndWeights : private boost::noncopyable
+ {
+ protected:
+
+ const boost::int32_t N;
+ std::vector<mp_float> xi;
+ std::vector<mp_float> wi;
+
+ protected:
+
+ GaussQuadAbscissasAndWeights(const boost::int32_t n) : N (n),
+ xi(0u),
+ wi(0u) { }
+
+ public:
+
+ virtual ~GaussQuadAbscissasAndWeights() { }
+
+ public:
+
+ const std::vector<mp_float>& abscissas(void) const { return xi; }
+ const std::vector<mp_float>& weights (void) const { return wi; }
+ };
+
+ class GuassLaguerreAbscissasAndWeights : public GaussQuadAbscissasAndWeights
+ {
+ private:
+
+ const mp_float alpha;
+
+ public:
+
+ GuassLaguerreAbscissasAndWeights(const boost::int32_t n, const mp_float& a = boost::multiprecision::zero());
+
+ virtual ~GuassLaguerreAbscissasAndWeights() { }
+
+ private:
+
+ class FindRootLaguerre : public boost::multiprecision::utility::find_root_newton_raphson<mp_float>
+ {
+ private:
+
+ static const mp_float& my_tol(void)
+ {
+ static const mp_float val = mp_float("1E-" + boost::lexical_cast<std::string>(boost::multiprecision::tol() - static_cast<boost::int64_t>(3)));
+ return val;
+ }
+
+ const boost::int32_t N;
+ const mp_float alpha;
+ mutable mp_float my_d;
+ mutable mp_float my_p2;
+
+ public:
+
+ FindRootLaguerre(const boost::int32_t n,
+ const mp_float& a,
+ const mp_float& lo,
+ const mp_float& hi) : boost::multiprecision::utility::find_root_newton_raphson<mp_float>(lo, hi, my_tol()),
+ N (n),
+ alpha(a),
+ my_d (static_cast<boost::uint32_t>(0u)),
+ my_p2(static_cast<boost::uint32_t>(0u)) { }
+
+ virtual ~FindRootLaguerre() { }
+
+ const mp_float& poly_p2(void) const { return my_p2; }
+
+ private:
+
+ virtual void my_function_derivative(const mp_float& x, mp_float& f, mp_float& d) const;
+
+ virtual mp_float my_function(const mp_float& x) const;
+ };
+
+ mp_float my_laguerre(const mp_float& x) const
+ {
+ static const FindRootLaguerre rl(N, alpha, boost::multiprecision::zero(), boost::multiprecision::million());
+ return rl.function(x);
+ }
+ };
+ }
+}
+
+examples::nr_008::GuassLaguerreAbscissasAndWeights::GuassLaguerreAbscissasAndWeights(const boost::int32_t n,
+ const mp_float& a) : GaussQuadAbscissasAndWeights(n),
+ alpha(a)
+{
+ // Walk through the function using a step-size of dynamic width
+ // to find the zero crossings of the Laguerre function.
+ // Store these zero crossings as bracketed root estimates.
+ std::vector<boost::multiprecision::utility::point<mp_float> > xlo_xhi_points;
+
+ // Estimate first Laguerre zero using the approximation of x1
+ // from Stroud and Secrest.
+ const double alf = to_double(alpha);
+ const double x1 = ((1.0 + alf) * (3.0 + (0.92 * alf))) / (1.0 + (2.4 * static_cast<double>(N)) + (1.8 * alf));
+
+ mp_float delta(x1 / 10.0);
+ mp_float x = delta;
+
+ bool bo_is_neg = isneg(my_laguerre(boost::multiprecision::zero()));
+
+ std::cout << "finding approximate roots..." << std::endl;
+
+ while(static_cast<boost::int32_t>(xlo_xhi_points.size()) < N)
+ {
+ x += delta;
+
+ if(isneg(my_laguerre(x)) != bo_is_neg)
+ {
+ // Refine the approximate root with 16 bisection iteration steps.
+ mp_float dx;
+ mp_float rt;
+ mp_float hi = x;
+ mp_float lo = x - delta;
+
+ if(my_laguerre(lo) < boost::multiprecision::zero())
+ {
+ dx = hi - lo;
+ rt = lo;
+ }
+ else
+ {
+ dx = lo - hi;
+ rt = hi;
+ }
+
+ // Here are the 16 bisection iteration steps.
+ for(boost::uint32_t j = static_cast<boost::uint32_t>(0u); j < static_cast<boost::uint32_t>(16u); j++)
+ {
+ dx /= static_cast<boost::int32_t>(2);
+
+ const mp_float x_mid = rt + dx;
+ const mp_float f_mid = my_laguerre(x_mid);
+
+ if(f_mid <= boost::multiprecision::zero())
+ {
+ rt = x_mid;
+ }
+ }
+
+ // Store the refined approximate root as a bracketed point.
+ xlo_xhi_points.push_back(boost::multiprecision::utility::point<mp_float>(rt - dx, rt + dx));
+
+ if(xlo_xhi_points.size() > static_cast<std::size_t>(1u))
+ {
+ const mp_float new_delta2 = (xlo_xhi_points.end() - static_cast<std::size_t>(1u))->x
+ - (xlo_xhi_points.end() - static_cast<std::size_t>(2u))->x;
+
+ // Dynamically adjust and set the new step-size.
+ delta = new_delta2 / static_cast<boost::int32_t>(2);
+ }
+
+ bo_is_neg = !bo_is_neg;
+ }
+ }
+
+ // Calculate the abscissas and weights to full precision.
+ for(std::size_t i = static_cast<std::size_t>(0u); i < xlo_xhi_points.size(); i++)
+ {
+ std::cout << "calculating abscissa and weight for index: " << i << std::endl;
+
+ // Find the abscissas using Newton-Raphson iteration.
+ const FindRootLaguerre rooti(N, alpha, xlo_xhi_points[i].x, xlo_xhi_points[i].y);
+ const mp_float ri = rooti.operation();
+
+ if(!rooti.success())
+ {
+ break;
+ }
+
+ // Calculate the weights.
+ mp_float f;
+ mp_float d;
+ rooti.function_derivative(ri, f, d);
+
+ // Store abscissas and weights.
+ xi.push_back(ri);
+
+ if(iszero(alpha))
+ {
+ wi.push_back(-boost::multiprecision::one() / ((d * N) * rooti.poly_p2()));
+ }
+ else
+ {
+ const mp_float norm_g = boost::multiprecision::gamma(alpha + N) / boost::multiprecision::factorial(static_cast<boost::uint32_t>(N - static_cast<boost::int32_t>(1)));
+ wi.push_back(-norm_g / ((d * N) * rooti.poly_p2()));
+ }
+ }
+}
+
+void examples::nr_008::GuassLaguerreAbscissasAndWeights::FindRootLaguerre::my_function_derivative(const mp_float& x, mp_float& f, mp_float& d) const
+{
+ f = my_function(x);
+ d = my_d;
+}
+
+mp_float examples::nr_008::GuassLaguerreAbscissasAndWeights::FindRootLaguerre::my_function(const mp_float& x) const
+{
+ mp_float p1(1);
+ mp_float p2(0);
+
+ for(boost::int32_t j = static_cast<boost::int32_t>(0); j < N; j++)
+ {
+ const mp_float p3(p2);
+ p2 = p1;
+
+ const boost::int32_t j_plus_one = static_cast<boost::int32_t>(j + static_cast<boost::int32_t>(1));
+ const boost::int32_t two_j_plus_one = static_cast<boost::int32_t>(j + j_plus_one);
+
+ p1 = (((two_j_plus_one + (alpha - x)) * p2) - ((j + alpha) * p3)) / j_plus_one;
+ }
+
+ my_d = ((N * p1) - ((N + alpha) * p2)) / x;
+ my_p2 = p2;
+
+ return p1;
+}
+
+namespace examples
+{
+ namespace nr_008
+ {
+ struct GaussLaguerreAi : public boost::multiprecision::utility::function_base<mp_float>
+ {
+ private:
+
+ const mp_float x;
+ const mp_float zeta;
+ const mp_float one_over_zeta;
+ mp_float factor;
+
+ public:
+
+ GaussLaguerreAi(const mp_float& X) : x(X),
+ zeta(boost::multiprecision::two_third() * (boost::multiprecision::sqrt(x) * x)),
+ one_over_zeta(boost::multiprecision::one() / zeta),
+ factor(0u)
+ {
+ const mp_float zeta_times_48_pow_sixth = rootn(zeta * static_cast<boost::int32_t>(48), static_cast<boost::int32_t>(6));
+ factor = boost::multiprecision::one() / ((boost::multiprecision::sqrt_pi() * zeta_times_48_pow_sixth) * (exp(zeta) * boost::multiprecision::gamma(boost::multiprecision::five() / static_cast<boost::int32_t>(6))));
+ }
+
+ virtual ~GaussLaguerreAi() { }
+
+ private:
+
+ virtual mp_float my_function(const mp_float& t) const
+ {
+ return factor / boost::multiprecision::rootn(boost::multiprecision::two() + (t * one_over_zeta), static_cast<boost::int32_t>(6));
+ }
+ };
+ }
+}
+
+mp_float examples::nr_008::gauss_laguerre_airy_a(const mp_float& x)
+{
+ static const boost::int32_t n_terms = static_cast<boost::int32_t>(boost::multiprecision::utility::digit_scale() * 400.0);
+
+ static const GuassLaguerreAbscissasAndWeights aw(n_terms, -boost::multiprecision::one() / static_cast<boost::int32_t>(6));
+
+ static const std::size_t sz = aw.weights().size();
+
+ const GaussLaguerreAi ai(x);
+
+ mp_float sum(0);
+
+ for(std::size_t i = static_cast<std::size_t>(0u); i < sz; i++)
+ {
+ const mp_float fi = ai.function(aw.abscissas()[i]);
+ const mp_float wi = aw.weights()[i];
+
+ const mp_float term = wi * fi;
+
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - sum.order());
+
+ if((i > static_cast<boost::int32_t>(20)) && (order_check < -boost::multiprecision::tol()))
+ {
+ break;
+ }
+
+ sum += term;
+ }
+
+ return sum;
+}

Added: sandbox/multiprecision/example/examples.h
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/example/examples.h 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,40 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+#ifndef _EXAMPLES_2010_01_02_H_
+ #define _EXAMPLES_2010_01_02_H_
+
+ #include <boost/multiprecision/mp_float_functions.hpp>
+
+ namespace examples
+ {
+ namespace nr_001
+ {
+ void basic_usage_real(void);
+ }
+
+ namespace nr_002
+ {
+ void basic_usage_imag(void);
+ }
+
+ namespace nr_005
+ {
+ boost::multiprecision::mp_float recursive_trapezoid_j0 (const boost::multiprecision::mp_float& x);
+ boost::multiprecision::mp_float recursive_trapezoid_j0_test(void);
+ }
+
+ namespace nr_008
+ {
+ boost::multiprecision::mp_float gauss_laguerre_airy_a(const boost::multiprecision::mp_float& x);
+ }
+ }
+
+#endif // _EXAMPLES_2010_01_02_H_

Added: sandbox/multiprecision/license/ACM_e_float_boost_license.pdf
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/license/LICENSE_1_0.pdf
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/license/LICENSE_1_0.txt
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/license/LICENSE_1_0.txt 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,23 @@
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.

Added: sandbox/multiprecision/src/backends/float/efx/mp_float_efx.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/efx/mp_float_efx.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,1873 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+// *****************************************************************************
+// Filename : e_float_efx.cpp
+//
+// Project : Multiple precision mathematics
+//
+// Date : 28.02.2004
+//
+// Description : Extended precision floating point data type, mp_float_efx.
+//
+// *****************************************************************************
+
+#include <iomanip>
+#include <algorithm>
+#include <numeric>
+#include <cmath>
+#include <utility>
+
+#include <boost/lexical_cast.hpp>
+#include <boost/noncopyable.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+#include <boost/multiprecision/utility/util_numeric_cast.hpp>
+
+using boost::multiprecision::mp_float_efx;
+
+mp_float_efx::mp_float_efx(const char n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (std::numeric_limits<char>::is_signed ? (n < static_cast<char>(0)) : false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long((!neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const signed char n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (n < static_cast<boost::int32_t>(0)),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long((!neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const unsigned char n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long(static_cast<unsigned long>(n));
+}
+
+mp_float_efx::mp_float_efx(const wchar_t n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (std::numeric_limits<wchar_t>::is_signed ? (n < static_cast<wchar_t>(0)) : false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long((!neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const signed short n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (n < static_cast<boost::int32_t>(0)),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long((!neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const unsigned short n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long(static_cast<unsigned long>(n));
+}
+
+mp_float_efx::mp_float_efx(const signed int n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (n < 0),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long((!neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const unsigned int n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long(n);
+}
+
+mp_float_efx::mp_float_efx(const signed long n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (n < static_cast<signed long>(0)),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long((!neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const unsigned long n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long(n);
+}
+
+mp_float_efx::mp_float_efx(const signed long long n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (n < static_cast<signed long long>(0)),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long_long((!neg) ? static_cast<unsigned long long>(n) : static_cast<unsigned long long>(-n));
+}
+
+mp_float_efx::mp_float_efx(const unsigned long long n) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ from_unsigned_long_long(n);
+}
+
+mp_float_efx::mp_float_efx(const float f) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ const bool b_neg = (f < 0.0f);
+
+ if(!boost::multiprecision::isfinite(static_cast<double>(f)))
+ {
+ operator=(boost::multiprecision::isnan(static_cast<double>(f)) ? my_value_nan() : ((!b_neg) ? my_value_inf() : -my_value_inf()));
+ return;
+ }
+
+ if(f == 0.0f)
+ {
+ operator=(boost::multiprecision::zero());
+ return;
+ }
+
+ const native_float_parts<float> fb((!b_neg) ? f : -f);
+
+ // Create an mp_float_efx from the fractional part of the
+ // mantissa expressed as an unsigned long long.
+ from_unsigned_long_long(fb.get_mantissa());
+
+ // Scale the unsigned long long representation to the fractional
+ // part of the float and multiply with the base-2 exponent.
+ const int p2 = fb.get_exponent() - (std::numeric_limits<float>::digits - 1);
+
+ if(p2 != 0) { operator*=(boost::multiprecision::pow2(static_cast<boost::int64_t>(p2))); }
+
+ neg = b_neg;
+}
+
+mp_float_efx::mp_float_efx(const double d) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ const bool b_neg = (d < 0.0);
+
+ if(!boost::multiprecision::isfinite(d))
+ {
+ operator=(boost::multiprecision::isnan(d) ? my_value_nan() : ((!b_neg) ? my_value_inf() : -my_value_inf()));
+ return;
+ }
+
+ if(d == 0.0)
+ {
+ operator=(boost::multiprecision::zero());
+ return;
+ }
+
+ const native_float_parts<double> db((!b_neg) ? d : -d);
+
+ // Create an mp_float_efx from the fractional part of the
+ // mantissa expressed as an unsigned long long.
+ from_unsigned_long_long(db.get_mantissa());
+
+ // Scale the unsigned long long representation to the fractional
+ // part of the double and multiply with the base-2 exponent.
+ const int p2 = db.get_exponent() - (std::numeric_limits<double>::digits - 1);
+
+ if(p2 != 0) { operator*=(boost::multiprecision::pow2(static_cast<boost::int64_t>(p2))); }
+
+ neg = b_neg;
+}
+
+mp_float_efx::mp_float_efx(const long double ld) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ const bool b_neg = (ld < static_cast<long double>(0.0));
+
+ if(!boost::multiprecision::isfinite(static_cast<double>(ld)))
+ {
+ operator=(boost::multiprecision::isnan(static_cast<double>(ld)) ? my_value_nan() : ((!b_neg) ? my_value_inf() : -my_value_inf()));
+ return;
+ }
+
+ if(ld == static_cast<long double>(0.0))
+ {
+ operator=(boost::multiprecision::zero());
+ return;
+ }
+
+ const native_float_parts<long double> ldb((!b_neg) ? ld : -ld);
+
+ // Create an mp_float_efx from the fractional part of the
+ // mantissa expressed as an unsigned long long.
+ from_unsigned_long_long(ldb.get_mantissa());
+
+ // Scale the unsigned long long representation to the fractional
+ // part of the long double and multiply with the base-2 exponent.
+ const int p2 = ldb.get_exponent() - (std::numeric_limits<long double>::digits - 1);
+
+ if(p2 != 0) { operator*=(boost::multiprecision::pow2(static_cast<boost::int64_t>(p2))); }
+
+ neg = b_neg;
+}
+
+mp_float_efx::mp_float_efx(const char* const s) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ if(!rd_string(s))
+ {
+ std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
+ exp = static_cast<boost::int64_t>(0);
+ neg = false;
+ fpclass = mp_NaN;
+ }
+}
+
+mp_float_efx::mp_float_efx(const std::string& str) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ if(!rd_string(str.c_str()))
+ {
+ std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
+ exp = static_cast<boost::int64_t>(0);
+ neg = false;
+ fpclass = mp_NaN;
+ }
+}
+
+mp_float_efx::mp_float_efx(const double mantissa,
+ const boost::int64_t exponent) : data (),
+ exp (static_cast<boost::int64_t>(0)),
+ neg (false),
+ fpclass (mp_finite),
+ prec_elem(mp_elem_number)
+{
+ // Create an mp_float_efx from mantissa and exponent.
+ // This ctor does not maintain the full precision of double.
+
+ const bool mantissa_is_iszero = (::fabs(mantissa) < ((std::numeric_limits<double>::min)() * (1.0 + std::numeric_limits<double>::epsilon())));
+
+ if(mantissa_is_iszero)
+ {
+ operator=((exponent == static_cast<boost::int64_t>(0)) ? boost::multiprecision::one() : boost::multiprecision::zero());
+ return;
+ }
+
+ const bool b_neg = (mantissa < 0.0);
+
+ double d = ((!b_neg) ? mantissa : -mantissa);
+ boost::int64_t e = exponent;
+
+ while(d > 10.0) { d /= 10.0; ++e; }
+ while(d < 1.0) { d *= 10.0; --e; }
+
+ boost::int32_t shift = static_cast<boost::int32_t>(e % static_cast<boost::int32_t>(mp_elem_digits10));
+
+ while(static_cast<boost::int32_t>(shift-- % mp_elem_digits10) != static_cast<boost::int32_t>(0))
+ {
+ d *= 10.0;
+ --e;
+ }
+
+ exp = e;
+ neg = b_neg;
+
+ std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
+
+ static const boost::int32_t digit_ratio = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) / static_cast<boost::int32_t>(mp_elem_digits10));
+ static const boost::int32_t digit_loops = static_cast<boost::int32_t>(digit_ratio + static_cast<boost::int32_t>(2));
+
+ for(boost::int32_t i = static_cast<boost::int32_t>(0); i < digit_loops; i++)
+ {
+ boost::uint32_t n = static_cast<boost::uint32_t>(static_cast<boost::uint64_t>(d));
+ data[i] = static_cast<boost::uint32_t>(n);
+ d -= static_cast<double>(n);
+ d *= static_cast<double>(mp_elem_mask);
+ }
+}
+
+void mp_float_efx::from_unsigned_long(const unsigned long u)
+{
+ std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
+
+ exp = static_cast<boost::int64_t>(0);
+
+ std::size_t i =static_cast<std::size_t>(0u);
+
+ unsigned long uu = u;
+
+ boost::uint32_t temp[(std::numeric_limits<unsigned long>::digits10 / static_cast<int>(mp_elem_digits10)) + 3] = { static_cast<boost::uint32_t>(0u) };
+
+ while(uu != static_cast<unsigned long>(0u))
+ {
+ temp[i] = static_cast<boost::uint32_t>(uu % static_cast<unsigned long>(mp_elem_mask));
+ uu = static_cast<unsigned long>(uu / static_cast<unsigned long>(mp_elem_mask));
+ ++i;
+ }
+
+ if(i > static_cast<std::size_t>(1u))
+ {
+ exp += static_cast<boost::int64_t>((i - 1u) * static_cast<std::size_t>(mp_elem_digits10));
+ }
+
+ std::reverse(temp, temp + i);
+ std::copy(temp, temp + (std::min)(i, static_cast<std::size_t>(mp_elem_number)), data.begin());
+}
+
+void mp_float_efx::from_unsigned_long_long(const unsigned long long u)
+{
+ std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
+
+ exp = static_cast<boost::int64_t>(0);
+
+ std::size_t i =static_cast<std::size_t>(0u);
+
+ unsigned long long uu = u;
+
+ boost::uint32_t temp[(std::numeric_limits<unsigned long long>::digits10 / static_cast<int>(mp_elem_digits10)) + 3] = { static_cast<boost::uint32_t>(0u) };
+
+ while(uu != static_cast<unsigned long long>(0u))
+ {
+ temp[i] = static_cast<boost::uint32_t>(uu % static_cast<unsigned long long>(mp_elem_mask));
+ uu = static_cast<unsigned long long>(uu / static_cast<unsigned long long>(mp_elem_mask));
+ ++i;
+ }
+
+ if(i > static_cast<std::size_t>(1u))
+ {
+ exp += static_cast<boost::int64_t>((i - 1u) * static_cast<std::size_t>(mp_elem_digits10));
+ }
+
+ std::reverse(temp, temp + i);
+ std::copy(temp, temp + (std::min)(i, static_cast<std::size_t>(mp_elem_number)), data.begin());
+}
+
+void mp_float_efx::mul_loop_uv(const boost::uint32_t* const u, const boost::uint32_t* const v, boost::uint32_t* const w, const boost::int32_t p)
+{
+ boost::uint64_t carry = static_cast<boost::uint64_t>(0u);
+
+ for(boost::int32_t j = static_cast<boost::int32_t>(p - 1u); j >= static_cast<boost::int32_t>(0); j--)
+ {
+ boost::uint64_t sum = carry;
+
+ for(boost::int32_t i = j; i >= static_cast<boost::int32_t>(0); i--)
+ {
+ sum += static_cast<boost::uint64_t>(u[i] * static_cast<boost::uint64_t>(v[j - i]));
+ }
+
+ w[j + 1] = static_cast<boost::uint32_t>(sum % static_cast<boost::uint32_t>(mp_elem_mask));
+ carry = static_cast<boost::uint64_t>(sum / static_cast<boost::uint32_t>(mp_elem_mask));
+ }
+
+ w[0u] = static_cast<boost::uint32_t>(carry);
+}
+
+boost::uint32_t mp_float_efx::mul_loop_n(boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p)
+{
+ boost::uint64_t carry = static_cast<boost::uint64_t>(0u);
+
+ // Multiplication loop.
+ for(boost::int32_t j = p - 1; j >= static_cast<boost::int32_t>(0); j--)
+ {
+ const boost::uint64_t t = static_cast<boost::uint64_t>(carry + static_cast<boost::uint64_t>(u[j] * static_cast<boost::uint64_t>(n)));
+ carry = static_cast<boost::uint64_t>(t / static_cast<boost::uint32_t>(mp_elem_mask));
+ u[j] = static_cast<boost::uint32_t>(t - static_cast<boost::uint64_t>(static_cast<boost::uint32_t>(mp_elem_mask) * static_cast<boost::uint64_t>(carry)));
+ }
+
+ return static_cast<boost::uint32_t>(carry);
+}
+
+boost::uint32_t mp_float_efx::div_loop_n(boost::uint32_t* const u, boost::uint32_t n, const boost::int32_t p)
+{
+ boost::uint64_t prev = static_cast<boost::uint64_t>(0u);
+
+ for(boost::int32_t j = static_cast<boost::int32_t>(0); j < p; j++)
+ {
+ const boost::uint64_t t = static_cast<boost::uint64_t>(u[j] + static_cast<boost::uint64_t>(prev * static_cast<boost::uint32_t>(mp_elem_mask)));
+ u[j] = static_cast<boost::uint32_t>(t / n);
+ prev = static_cast<boost::uint64_t>(t - static_cast<boost::uint64_t>(n * static_cast<boost::uint64_t>(u[j])));
+ }
+
+ return static_cast<boost::uint32_t>(prev);
+}
+
+void mp_float_efx::precision(const boost::int32_t prec_digits)
+{
+ if(prec_digits >= mp_digits10)
+ {
+ prec_elem = mp_elem_number;
+ }
+ else
+ {
+ const boost::int32_t elems = static_cast<boost::int32_t>( static_cast<boost::int32_t>( (prec_digits + (mp_elem_digits10 / 2)) / mp_elem_digits10)
+ + static_cast<boost::int32_t>(((prec_digits % mp_elem_digits10) != 0) ? 1 : 0));
+
+ prec_elem = (std::min)(mp_elem_number, (std::max)(elems, static_cast<boost::int32_t>(2)));
+ }
+}
+
+mp_float_efx& mp_float_efx::operator=(const mp_float_efx& v)
+{
+ data = v.data;
+ exp = v.exp;
+ neg = v.neg;
+ fpclass = v.fpclass;
+ prec_elem = v.prec_elem;
+
+ return *this;
+}
+
+mp_float_efx& mp_float_efx::operator+=(const mp_float_efx& v)
+{
+ if(isnan())
+ {
+ return *this;
+ }
+
+ if(isinf())
+ {
+ if(v.isinf() && (isneg() != v.isneg()))
+ {
+ *this = std::numeric_limits<mp_float_efx>::quiet_NaN();
+ }
+
+ return *this;
+ }
+
+ if(iszero())
+ {
+ return operator=(v);
+ }
+
+ // Get the offset for the add/sub operation.
+ static const boost::int64_t max_delta_exp = static_cast<boost::int64_t>((mp_elem_number - 1) * mp_elem_digits10);
+
+ const boost::int64_t ofs_exp = static_cast<boost::int64_t>(exp - v.exp);
+
+ // Check if the operation is out of range, requiring special handling.
+ if(v.iszero() || (ofs_exp > max_delta_exp))
+ {
+ // Result is *this unchanged since v is negligible compared to *this.
+ return *this;
+ }
+ else if(ofs_exp < -max_delta_exp)
+ {
+ // Result is *this = v since *this is negligible compared to v.
+ return operator=(v);
+ }
+
+ // Do the add/sub operation.
+
+ array_type::iterator p_u = data.begin();
+ array_type::const_iterator p_v = v.data.begin();
+ bool b_copy = false;
+ const boost::int32_t ofs = static_cast<boost::int32_t>(static_cast<boost::int32_t>(ofs_exp) / mp_elem_digits10);
+ array_type n_data;
+
+ if(neg == v.neg)
+ {
+ // Add v to *this, where the data array of either *this or v
+ // might have to be treated with a positive, negative or zero offset.
+ // The result is stored in *this. The data are added one element
+ // at a time, each element with carry.
+ if(ofs >= static_cast<boost::int32_t>(0))
+ {
+ std::copy(v.data.begin(), v.data.end() - static_cast<size_t>(ofs), n_data.begin() + static_cast<size_t>(ofs));
+ std::fill(n_data.begin(), n_data.begin() + static_cast<size_t>(ofs), static_cast<boost::uint32_t>(0u));
+ p_v = n_data.begin();
+ }
+ else
+ {
+ std::copy(data.begin(), data.end() - static_cast<size_t>(-ofs), n_data.begin() + static_cast<size_t>(-ofs));
+ std::fill(n_data.begin(), n_data.begin() + static_cast<size_t>(-ofs), static_cast<boost::uint32_t>(0u));
+ p_u = n_data.begin();
+ b_copy = true;
+ }
+
+ // Addition algorithm
+ boost::uint32_t carry = static_cast<boost::uint32_t>(0u);
+
+ for(boost::int32_t j = static_cast<boost::int32_t>(mp_elem_number - static_cast<boost::int32_t>(1)); j >= static_cast<boost::int32_t>(0); j--)
+ {
+ boost::uint32_t t = static_cast<boost::uint32_t>(static_cast<boost::uint32_t>(p_u[j] + p_v[j]) + carry);
+ carry = t / static_cast<boost::uint32_t>(mp_elem_mask);
+ p_u[j] = static_cast<boost::uint32_t>(t - static_cast<boost::uint32_t>(carry * static_cast<boost::uint32_t>(mp_elem_mask)));
+ }
+
+ if(b_copy)
+ {
+ data = n_data;
+ exp = v.exp;
+ }
+
+ // There needs to be a carry into the element -1 of the array data
+ if(carry != static_cast<boost::uint32_t>(0u))
+ {
+ std::copy_backward(data.begin(), data.end() - static_cast<std::size_t>(1u), data.end());
+ data[0] = carry;
+ exp += static_cast<boost::int64_t>(mp_elem_digits10);
+ }
+ }
+ else
+ {
+ // Subtract v from *this, where the data array of either *this or v
+ // might have to be treated with a positive, negative or zero offset.
+ if((ofs > static_cast<boost::int32_t>(0))
+ || ( (ofs == static_cast<boost::int32_t>(0))
+ && (cmp_data(v.data) > static_cast<boost::int32_t>(0)))
+ )
+ {
+ // In this case, |u| > |v| and ofs is positive.
+ // Copy the data of v, shifted down to a lower value
+ // into the data array m_n. Set the operand pointer p_v
+ // to point to the copied, shifted data m_n.
+ std::copy(v.data.begin(), v.data.end() - static_cast<size_t>(ofs), n_data.begin() + static_cast<size_t>(ofs));
+ std::fill(n_data.begin(), n_data.begin() + static_cast<size_t>(ofs), static_cast<boost::uint32_t>(0u));
+ p_v = n_data.begin();
+ }
+ else
+ {
+ if(ofs != static_cast<boost::int32_t>(0))
+ {
+ // In this case, |u| < |v| and ofs is negative.
+ // Shift the data of u down to a lower value.
+ std::copy_backward(data.begin(), data.end() - static_cast<size_t>(-ofs), data.end());
+ std::fill(data.begin(), data.begin() + static_cast<size_t>(-ofs), static_cast<boost::uint32_t>(0u));
+ }
+
+ // Copy the data of v into the data array n_data.
+ // Set the u-pointer p_u to point to m_n and the
+ // operand pointer p_v to point to the shifted
+ // data m_data.
+ n_data = v.data;
+ p_u = n_data.begin();
+ p_v = data.begin();
+ b_copy = true;
+ }
+
+ boost::int32_t j;
+
+ // Subtraction algorithm
+ boost::int32_t borrow = static_cast<boost::int32_t>(0);
+
+ for(j = static_cast<boost::int32_t>(mp_elem_number - static_cast<boost::int32_t>(1)); j >= static_cast<boost::int32_t>(0); j--)
+ {
+ boost::int32_t t = static_cast<boost::int32_t>(static_cast<boost::int32_t>( static_cast<boost::int32_t>(p_u[j])
+ - static_cast<boost::int32_t>(p_v[j])) - borrow);
+
+ // Underflow? Borrow?
+ if(t < static_cast<boost::int32_t>(0))
+ {
+ // Yes, underflow and borrow
+ t += static_cast<boost::int32_t>(mp_elem_mask);
+ borrow = static_cast<boost::int32_t>(1);
+ }
+ else
+ {
+ borrow = static_cast<boost::int32_t>(0);
+ }
+
+ p_u[j] = static_cast<boost::uint32_t>(static_cast<boost::uint32_t>(t) % static_cast<boost::uint32_t>(mp_elem_mask));
+ }
+
+ if(b_copy)
+ {
+ data = n_data;
+ exp = v.exp;
+ neg = v.neg;
+ }
+
+ // Is it necessary to justify the data?
+ const array_type::const_iterator first_nonzero_elem = std::find_if(data.begin(), data.end(), data_elem_is_non_zero_predicate);
+
+ if(first_nonzero_elem != data.begin())
+ {
+ if(first_nonzero_elem == data.end())
+ {
+ // This result of the subtraction is exactly zero.
+ // Reset the sign and the exponent.
+ neg = false;
+ exp = static_cast<boost::int64_t>(0);
+ }
+ else
+ {
+ // Justify the data
+ const std::size_t sj = static_cast<std::size_t>(std::distance<array_type::const_iterator>(data.begin(), first_nonzero_elem));
+
+ std::copy(data.begin() + static_cast<std::size_t>(sj), data.end(), data.begin());
+ std::fill(data.end() - sj, data.end(), static_cast<boost::uint32_t>(0u));
+
+ exp -= static_cast<boost::int64_t>(sj * static_cast<std::size_t>(mp_elem_digits10));
+ }
+ }
+ }
+
+ // Check for underflow.
+ if(iszero()) { return (*this = boost::multiprecision::zero()); }
+
+ // Check for overflow.
+ if( (exp >= std::numeric_limits<mp_float_efx>::max_exponent10)
+ && (boost::multiprecision::fabs(*this) > (std::numeric_limits<mp_float_efx>::max)())
+ )
+ {
+ const bool b_result_is_neg = neg;
+
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+ }
+
+ return *this;
+}
+
+mp_float_efx& mp_float_efx::operator-=(const mp_float_efx& v)
+{
+ // Use *this - v = -(-*this + v).
+ return (negate().operator+=(v)).negate();
+}
+
+mp_float_efx& mp_float_efx::operator*=(const mp_float_efx& v)
+{
+ // Evaluate the sign of the result.
+ const bool b_result_is_neg = (neg != v.neg);
+
+ // Artificially set the sign of the result to be positive.
+ neg = false;
+
+ // Handle special cases like zero, inf and NaN.
+ const bool b_u_is_inf = isinf();
+ const bool b_v_is_inf = v.isinf();
+ const bool b_u_is_zero = iszero();
+ const bool b_v_is_zero = v.iszero();
+
+ if( (isnan() || v.isnan())
+ || (b_u_is_inf && b_v_is_zero)
+ || (b_v_is_inf && b_u_is_zero)
+ )
+ {
+ return (*this = std::numeric_limits<mp_float_efx>::quiet_NaN());
+ }
+
+ if(b_u_is_inf || b_v_is_inf)
+ {
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+
+ return *this;
+ }
+
+ if(b_u_is_zero || b_v_is_zero)
+ {
+ return (*this = boost::multiprecision::zero());
+ }
+
+ // Check for overflow or underflow.
+ const bool u_exp_is_neg = (exp < static_cast<boost::int64_t>(0));
+ const bool v_exp_is_neg = (v.exp < static_cast<boost::int64_t>(0));
+
+ if(u_exp_is_neg == v_exp_is_neg)
+ {
+ // Get the unsigned base-10 exponents of *this and v and...
+ const boost::int64_t u_exp = ((!u_exp_is_neg) ? exp : static_cast<boost::int64_t>( -exp));
+ const boost::int64_t v_exp = ((!v_exp_is_neg) ? v.exp : static_cast<boost::int64_t>(-v.exp));
+
+ // Check the range of the upcoming multiplication.
+ const bool b_result_is_out_of_range = (v_exp >= static_cast<boost::int64_t>(mp_max_exp10 - u_exp));
+
+ if(b_result_is_out_of_range)
+ {
+ if(u_exp_is_neg)
+ {
+ *this = boost::multiprecision::zero();
+ }
+ else
+ {
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+ }
+
+ return *this;
+ }
+ }
+
+ // Set the exponent of the result.
+ exp += v.exp;
+
+ boost::array<boost::uint32_t, static_cast<std::size_t>(mp_elem_number + static_cast<boost::int32_t>(1))> w = {{ 0u }};
+
+ mul_loop_uv(data.data(), v.data.data(), w.data(), (std::min)(prec_elem, v.prec_elem));
+
+ // Copy the multiplication data into the result.
+ // Shift the result and adjust the exponent if necessary.
+ if(w[static_cast<std::size_t>(0u)] != static_cast<boost::uint32_t>(0u))
+ {
+ exp += static_cast<boost::int64_t>(mp_elem_digits10);
+
+ std::copy(w.begin(), w.end() - 1u, data.begin());
+ }
+ else
+ {
+ std::copy(w.begin() + 1u, w.end(), data.begin());
+ }
+
+ // Set the sign of the result.
+ neg = b_result_is_neg;
+
+ return *this;
+}
+
+mp_float_efx& mp_float_efx::operator/=(const mp_float_efx& v)
+{
+ const bool u_and_v_are_finite_and_identical = ( isfinite()
+ && (fpclass == v.fpclass)
+ && (exp == v.exp)
+ && (cmp_data(v.data) == static_cast<boost::int32_t>(0)));
+
+ if(u_and_v_are_finite_and_identical)
+ {
+ return (*this = ((neg == v.neg) ? boost::multiprecision::one() : boost::multiprecision::one_minus()));
+ }
+ else
+ {
+ return operator*=(mp_float_efx(v).calculate_inv());
+ }
+}
+
+// TBD: These need overflow and underflow checks.
+mp_float_efx& mp_float_efx::add_unsigned_long_long(const unsigned long long n) { return operator+=(mp_float_efx(n)); }
+mp_float_efx& mp_float_efx::sub_unsigned_long_long(const unsigned long long n) { return operator-=(mp_float_efx(n)); }
+
+mp_float_efx& mp_float_efx::mul_unsigned_long_long(const unsigned long long n)
+{
+ // Multiply *this with a constant unsigned long long.
+
+ // Evaluate the sign of the result.
+ const bool b_neg = neg;
+
+ // Artificially set the sign of the result to be positive.
+ neg = false;
+
+ // Handle special cases like zero, inf and NaN.
+ const bool b_u_is_inf = isinf();
+ const bool b_n_is_zero = (n == static_cast<boost::int32_t>(0));
+
+ if(isnan() || (b_u_is_inf && b_n_is_zero))
+ {
+ return (*this = std::numeric_limits<mp_float_efx>::quiet_NaN());
+ }
+
+ if(b_u_is_inf)
+ {
+ *this = ((!b_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+
+ return *this;
+ }
+
+ if(iszero() || b_n_is_zero)
+ {
+ // Multiplication by zero.
+ return (*this = boost::multiprecision::zero());
+ }
+
+ if(n >= static_cast<unsigned long long>(mp_elem_mask))
+ {
+ neg = b_neg;
+ return operator*=(mp_float_efx(n));
+ }
+
+ if(n == static_cast<unsigned long long>(1u))
+ {
+ neg = b_neg;
+ return *this;
+ }
+
+ // Set up the multiplication loop.
+ const boost::uint32_t nn = static_cast<boost::uint32_t>(n);
+ const boost::uint32_t carry = mul_loop_n(data.data(), nn, prec_elem);
+
+ // Handle the carry and adjust the exponent.
+ if(carry != static_cast<boost::uint32_t>(0u))
+ {
+ exp += static_cast<boost::int64_t>(mp_elem_digits10);
+
+ // Shift the result of the multiplication one element to the right.
+ std::copy_backward(data.begin(),
+ data.begin() + static_cast<std::size_t>(prec_elem - static_cast<boost::int32_t>(1)),
+ data.begin() + static_cast<std::size_t>(prec_elem));
+
+ data.front() = static_cast<boost::uint32_t>(carry);
+ }
+
+ if( (exp >= std::numeric_limits<mp_float_efx>::max_exponent10)
+ && (*this > (std::numeric_limits<mp_float_efx>::max)())
+ )
+ {
+ *this = ((!b_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+
+ return *this;
+ }
+
+ // Set the sign.
+ neg = b_neg;
+
+ return *this;
+}
+
+mp_float_efx& mp_float_efx::div_unsigned_long_long(const unsigned long long n)
+{
+ // Divide *this by a constant unsigned long long.
+
+ // Evaluate the sign of the result.
+ const bool b_neg = neg;
+
+ // Artificially set the sign of the result to be positive.
+ neg = false;
+
+ // Handle special cases like zero, inf and NaN.
+ if(isnan())
+ {
+ return *this;
+ }
+
+ if(isinf())
+ {
+ *this = ((!b_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+
+ return *this;
+ }
+
+ if(n == static_cast<unsigned long long>(0u))
+ {
+ // Divide by 0.
+ if(iszero())
+ {
+ return (*this = std::numeric_limits<mp_float_efx>::quiet_NaN());
+ }
+ else
+ {
+ *this = ((!isneg()) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+
+ return *this;
+ }
+ }
+
+ if(iszero())
+ {
+ return *this;
+ }
+
+ if(n >= static_cast<unsigned long long>(mp_elem_mask))
+ {
+ neg = b_neg;
+ return operator/=(mp_float_efx(n));
+ }
+
+ const boost::uint32_t nn = static_cast<boost::uint32_t>(n);
+
+ if(nn > static_cast<boost::uint32_t>(1u))
+ {
+ // Do the division loop.
+ const boost::uint32_t prev = div_loop_n(data.data(), nn, prec_elem);
+
+ // Determine if one leading zero is in the result data.
+ if(data[0] == static_cast<boost::uint32_t>(0u))
+ {
+ // Adjust the exponent
+ exp -= static_cast<boost::int64_t>(mp_elem_digits10);
+
+ // Shift result of the division one element to the left.
+ std::copy(data.begin() + static_cast<std::size_t>(1u),
+ data.begin() + static_cast<std::size_t>(prec_elem - static_cast<boost::int32_t>(1)),
+ data.begin());
+
+ data[prec_elem - static_cast<boost::int32_t>(1)] = static_cast<boost::uint32_t>(static_cast<boost::uint64_t>(prev * static_cast<boost::uint64_t>(mp_elem_mask)) / nn);
+ }
+ }
+
+ // Check for underflow.
+ if(iszero()) { return (*this = boost::multiprecision::zero()); }
+
+ // Set the sign of the result.
+ neg = b_neg;
+
+ return *this;
+}
+
+mp_float_efx& mp_float_efx::calculate_inv(void)
+{
+ // Compute the inverse of *this.
+ const bool b_neg = neg;
+
+ neg = false;
+
+ // Handle special cases like zero, inf and NaN.
+ if(iszero())
+ {
+ *this = ((!b_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+
+ return *this;
+ }
+
+ if(isnan())
+ {
+ return *this;
+ }
+
+ if(isinf())
+ {
+ return (*this = boost::multiprecision::zero());
+ }
+
+ if(isone())
+ {
+ *this = ((!b_neg) ? boost::multiprecision::one() : -boost::multiprecision::one());
+
+ return *this;
+ }
+
+ // Save the original *this.
+ mp_float_efx x(*this);
+
+ // Generate the initial estimate using division.
+ // Extract the mantissa and exponent for a "manual"
+ // computation of the estimate.
+ double dd;
+ boost::int64_t ne;
+ x.extract_parts(dd, ne);
+
+ // Do the inverse estimate using double precision estimates of mantissa and exponent.
+ operator=(mp_float_efx(1.0 / dd, -ne));
+
+ // Compute the inverse of *this. Quadratically convergent Newton-Raphson iteration
+ // is used. During the iterative steps, the precision of the calculation is limited
+ // to the minimum required in order to minimize the run-time.
+
+ static const boost::int32_t double_digits10_minus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) - static_cast<boost::int32_t>(1));
+
+ for(boost::int32_t digits = double_digits10_minus_one; digits <= static_cast<boost::int32_t>(boost::multiprecision::tol()); digits *= static_cast<boost::int32_t>(2))
+ {
+ // Adjust precision of the terms.
+ precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+ x.precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+
+ // Next iteration.
+ operator=(*this * (boost::multiprecision::two() - (*this * x)));
+ }
+
+ neg = b_neg;
+
+ prec_elem = mp_elem_number;
+
+ return *this;
+}
+
+mp_float_efx& mp_float_efx::calculate_sqrt(void)
+{
+ // Compute the square root of *this.
+
+ if(isneg() || (!isfinite()))
+ {
+ return (*this = std::numeric_limits<mp_float_efx>::quiet_NaN());
+ }
+
+ if(iszero() || isone())
+ {
+ return *this;
+ }
+
+ // Save the original *this.
+ mp_float_efx x(*this);
+
+ // Generate the initial estimate using division.
+ // Extract the mantissa and exponent for a "manual"
+ // computation of the estimate.
+ double dd;
+ boost::int64_t ne;
+ extract_parts(dd, ne);
+
+ // Force the exponent to be an even multiple of two.
+ if((ne % static_cast<boost::int64_t>(2)) != static_cast<boost::int64_t>(0))
+ {
+ ++ne;
+ dd /= 10.0;
+ }
+
+ // Setup the iteration.
+ // Estimate the square root using simple manipulations.
+ const double sqd = ::sqrt(dd);
+
+ *this = mp_float_efx(sqd, static_cast<boost::int64_t>(ne / static_cast<boost::int64_t>(2)));
+
+ // Estimate 1.0 / (2.0 * x0) using simple manipulations.
+ mp_float_efx vi(0.5 / sqd, static_cast<boost::int64_t>(-ne / static_cast<boost::int64_t>(2)));
+
+ // Compute the square root of x. Coupled Newton iteration
+ // as described in "Pi Unleashed" is used. During the
+ // iterative steps, the precision of the calculation is
+ // limited to the minimum required in order to minimize
+ // the run-time.
+ //
+ // Book references:
+ // http://www.jjj.de/pibook/pibook.html
+ // http://www.amazon.com/exec/obidos/tg/detail/-/3540665722/qid=1035535482/sr=8-7/ref=sr_8_7/104-3357872-6059916?v=glance&n=507846
+
+ static const boost::int32_t double_digits10_minus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) - static_cast<boost::int32_t>(1));
+
+ for(boost::int32_t digits = double_digits10_minus_one; digits <= static_cast<boost::int32_t>(boost::multiprecision::tol()); digits *= static_cast<boost::int32_t>(2))
+ {
+ // Adjust precision of the terms.
+ precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+ vi.precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+
+ // Next iteration of vi
+ vi += vi * (-((*this * vi) * static_cast<boost::int32_t>(2)) + boost::multiprecision::one());
+
+ // Next iteration of *this
+ *this += vi * (-(*this * *this) + x);
+ }
+
+ prec_elem = mp_elem_number;
+
+ return *this;
+}
+
+boost::int32_t mp_float_efx::cmp_data(const array_type& vd) const
+{
+ // Compare the data of *this with those of v.
+ // Return +1 for *this > v
+ // 0 for *this = v
+ // -1 for *this < v
+
+ const std::pair<array_type::const_iterator, array_type::const_iterator> mismatch_pair = std::mismatch(data.begin(), data.end(), vd.begin());
+
+ const bool is_equal = ((mismatch_pair.first == data.end()) && (mismatch_pair.second == vd.end()));
+
+ if(is_equal)
+ {
+ return static_cast<boost::int32_t>(0);
+ }
+ else
+ {
+ return ((*mismatch_pair.first > *mismatch_pair.second) ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1));
+ }
+}
+
+boost::int32_t mp_float_efx::cmp(const mp_float_efx& v) const
+{
+ // Compare v with *this.
+ // Return +1 for *this > v
+ // 0 for *this = v
+ // -1 for *this < v
+
+ // Handle all non-finite cases.
+ if((!isfinite()) || (!v.isfinite()))
+ {
+ // NaN can never equal NaN. Return an implementation-dependent
+ // signed result. Also note that comparison of NaN with NaN
+ // using operators greater-than or less-than is undefined.
+ if(isnan() || v.isnan()) { return (isnan() ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1)); }
+
+ if(isinf() && v.isinf())
+ {
+ // Both *this and v are infinite. They are equal if they have the same sign.
+ // Otherwise, *this is less than v if and only if *this is negative.
+ return ((neg == v.neg) ? static_cast<boost::int32_t>(0) : (neg ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1)));
+ }
+
+ if(isinf())
+ {
+ // *this is infinite, but v is finite.
+ // So negative infinite *this is less than any finite v.
+ // Whereas positive infinite *this is greater than any finite v.
+ return (isneg() ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1));
+ }
+ else
+ {
+ // *this is finite, and v is infinite.
+ // So any finite *this is greater than negative infinite v.
+ // Whereas any finite *this is less than positive infinite v.
+ return (v.neg ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1));
+ }
+ }
+
+ // And now handle all *finite* cases.
+ if(iszero())
+ {
+ // The value of *this is zero and v is either zero or non-zero.
+ return (v.iszero() ? static_cast<boost::int32_t>(0)
+ : (v.neg ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1)));
+ }
+ else if(v.iszero())
+ {
+ // The value of v is zero and *this is non-zero.
+ return (neg ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1));
+ }
+ else
+ {
+ // Both *this and v are non-zero.
+
+ if(neg != v.neg)
+ {
+ // The signs are different.
+ return (neg ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1));
+ }
+ else if(exp != v.exp)
+ {
+ // The signs are the same and the exponents are different.
+ const boost::int32_t val_cmp_exp = ((exp < v.exp) ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1));
+
+ return (neg ? val_cmp_exp : static_cast<boost::int32_t>(-val_cmp_exp));
+ }
+ else
+ {
+ // The signs are the same and the exponents are the same.
+ // Compare the data.
+ const boost::int32_t val_cmp_data = cmp_data(v.data);
+
+ return ((!neg) ? val_cmp_data : static_cast<boost::int32_t>(-val_cmp_data));
+ }
+ }
+}
+
+bool mp_float_efx::iszero(void) const
+{
+ return ((fpclass == mp_finite) && (data[0u] == static_cast<boost::uint32_t>(0u)));
+}
+
+bool mp_float_efx::isone(void) const
+{
+ // Check if the value of *this is identically 1 or very close to 1.
+
+ const bool not_negative_and_is_finite = ((!neg) && isfinite());
+
+ if(not_negative_and_is_finite)
+ {
+ if((data[0u] == static_cast<boost::uint32_t>(1u)) && (exp == static_cast<boost::int64_t>(0)))
+ {
+ const array_type::const_iterator it_non_zero = std::find_if(data.begin(), data.end(), data_elem_is_non_zero_predicate);
+ return (it_non_zero == data.end());
+ }
+ else if((data[0u] == static_cast<boost::uint32_t>(mp_elem_mask - 1)) && (exp == static_cast<boost::int64_t>(-mp_elem_digits10)))
+ {
+ const array_type::const_iterator it_non_nine = std::find_if(data.begin(), data.end(), data_elem_is_non_nine_predicate);
+ return (it_non_nine == data.end());
+ }
+ }
+
+ return false;
+}
+
+bool mp_float_efx::isint(void) const
+{
+ if(fpclass != mp_finite) { return false; }
+
+ if(iszero()) { return true; }
+
+ if(exp < static_cast<boost::int64_t>(0)) { return false; } // |*this| < 1.
+
+ const array_type::size_type offset_decimal_part = static_cast<array_type::size_type>(exp / mp_elem_digits10) + 1u;
+
+ if(offset_decimal_part >= static_cast<array_type::size_type>(mp_elem_number))
+ {
+ // The number is too large to resolve the integer part.
+ // It considered to be a pure integer.
+ return true;
+ }
+
+ array_type::const_iterator it_non_zero = std::find_if(data.begin() + offset_decimal_part, data.end(), data_elem_is_non_zero_predicate);
+
+ return (it_non_zero == data.end());
+}
+
+mp_float_efx& mp_float_efx::operator++(void) { return *this += boost::multiprecision::one(); }
+mp_float_efx& mp_float_efx::operator--(void) { return *this -= boost::multiprecision::one(); }
+
+void mp_float_efx::extract_parts(double& mantissa, boost::int64_t& exponent) const
+{
+ // Extract the approximate parts mantissa and base-10 exponent from the input mp_float_efx value x.
+
+ // Extracts the mantissa and exponent.
+ exponent = exp;
+
+ boost::uint32_t p10 = static_cast<boost::uint32_t>(1u);
+ boost::uint32_t test = data[0u];
+
+ for(;;)
+ {
+ test /= static_cast<boost::uint32_t>(10u);
+
+ if(test == static_cast<boost::uint32_t>(0u))
+ {
+ break;
+ }
+
+ p10 *= static_cast<boost::uint32_t>(10u);
+ ++exponent;
+ }
+
+ mantissa = static_cast<double>(data[0])
+ + (static_cast<double>(data[1]) / static_cast<double>(mp_elem_mask))
+ + ((static_cast<double>(data[2]) / static_cast<double>(mp_elem_mask)) / static_cast<double>(mp_elem_mask));
+
+ mantissa /= static_cast<double>(p10);
+
+ if(neg) { mantissa = -mantissa; }
+}
+
+double mp_float_efx::extract_double(void) const
+{
+ // Returns the double conversion of a mp_float_efx.
+
+ // Check for non-normal mp_float_efx.
+ if(!isfinite())
+ {
+ if(isnan())
+ {
+ return std::numeric_limits<double>::quiet_NaN();
+ }
+ else
+ {
+ return ((!neg) ? std::numeric_limits<double>::infinity()
+ : -std::numeric_limits<double>::infinity());
+ }
+ }
+
+ const mp_float_efx xx(boost::multiprecision::fabs(*this));
+
+ // Check for zero mp_float_efx.
+ if(iszero() || (xx < boost::multiprecision::double_min()))
+ {
+ return 0.0;
+ }
+
+ // Check if mp_float_efx exceeds the maximum of double.
+ if(xx > boost::multiprecision::double_max())
+ {
+ return ((!neg) ? std::numeric_limits<double>::infinity()
+ : -std::numeric_limits<double>::infinity());
+ }
+
+ std::stringstream ss;
+
+ ss << std::setprecision(static_cast<std::streamsize>(std::numeric_limits<double>::digits10 + (2 + 1)))
+ << std::scientific
+ << *this;
+
+ double d;
+ ss >> d;
+
+ return d;
+}
+
+long double mp_float_efx::extract_long_double(void) const
+{
+ // Returns the long double conversion of a mp_float_efx.
+
+ // Check for non-normal mp_float_efx.
+ if(!isfinite())
+ {
+ if(isnan())
+ {
+ return std::numeric_limits<long double>::quiet_NaN();
+ }
+ else
+ {
+ return ((!neg) ? std::numeric_limits<long double>::infinity()
+ : -std::numeric_limits<long double>::infinity());
+ }
+ }
+
+ const mp_float_efx xx(boost::multiprecision::fabs(*this));
+
+ // Check for zero mp_float_efx.
+ if(iszero() || (xx < boost::multiprecision::long_double_min()))
+ {
+ return static_cast<long double>(0.0);
+ }
+
+ // Check if mp_float_efx exceeds the maximum of double.
+ if(xx > boost::multiprecision::long_double_max())
+ {
+ return ((!neg) ? std::numeric_limits<long double>::infinity()
+ : -std::numeric_limits<long double>::infinity());
+ }
+
+ std::stringstream ss;
+
+ ss << std::setprecision(static_cast<std::streamsize>(std::numeric_limits<long double>::digits10 + (2 + 1)))
+ << std::scientific
+ << *this;
+
+ long double ld;
+ ss >> ld;
+
+ return ld;
+}
+
+signed long long mp_float_efx::extract_signed_long_long(void) const
+{
+ // Extracts a signed long long from *this.
+ // If (x > maximum of signed long long) or (x < minimum of signed long long),
+ // then the maximum or minimum of signed long long is returned accordingly.
+
+ if(exp < static_cast<boost::int64_t>(0))
+ {
+ return static_cast<signed long long>(0);
+ }
+
+ const bool b_neg = isneg();
+
+ unsigned long long val;
+
+ if((!b_neg) && (*this > boost::multiprecision::signed_long_long_max()))
+ {
+ return (std::numeric_limits<signed long long>::max)();
+ }
+ else if(b_neg && (*this < boost::multiprecision::signed_long_long_min()))
+ {
+ return (std::numeric_limits<signed long long>::min)();
+ }
+ else
+ {
+ // Extract the data into an unsigned long long value.
+ const mp_float_efx xn(boost::multiprecision::fabs(extract_integer_part()));
+
+ val = static_cast<unsigned long long>(xn.data[0]);
+
+ const boost::int32_t imax = (std::min)(static_cast<boost::int32_t>(static_cast<boost::int32_t>(xn.exp) / mp_elem_digits10), static_cast<boost::int32_t>(mp_elem_number - static_cast<boost::int32_t>(1)));
+
+ for(boost::int32_t i = static_cast<boost::int32_t>(1); i <= imax; i++)
+ {
+ val *= static_cast<unsigned long long>(mp_elem_mask);
+ val += static_cast<unsigned long long>(xn.data[i]);
+ }
+ }
+
+ return ((!b_neg) ? static_cast<signed long long>(val) : static_cast<signed long long>(-static_cast<signed long long>(val)));
+}
+
+unsigned long long mp_float_efx::extract_unsigned_long_long(void) const
+{
+ // Extracts an unsigned long long from *this.
+ // If x exceeds the maximum of unsigned long long,
+ // then the maximum of unsigned long long is returned.
+ // If x is negative, then the unsigned long long cast of
+ // the signed long long extracted value is returned.
+
+ if(isneg())
+ {
+ return static_cast<unsigned long long>(extract_signed_long_long());
+ }
+
+ if(exp < static_cast<boost::int64_t>(0))
+ {
+ return static_cast<unsigned long long>(0u);
+ }
+
+ const mp_float_efx xn(extract_integer_part());
+
+ unsigned long long val;
+
+ if(xn > boost::multiprecision::unsigned_long_long_max())
+ {
+ return (std::numeric_limits<unsigned long long>::max)();
+ }
+ else
+ {
+ // Extract the data into an unsigned long long value.
+ val = static_cast<unsigned long long>(xn.data[0]);
+
+ const boost::int32_t imax = (std::min)(static_cast<boost::int32_t>(static_cast<boost::int32_t>(xn.exp) / mp_elem_digits10), static_cast<boost::int32_t>(mp_elem_number - static_cast<boost::int32_t>(1)));
+
+ for(boost::int32_t i = static_cast<boost::int32_t>(1); i <= imax; i++)
+ {
+ val *= static_cast<unsigned long long>(mp_elem_mask);
+ val += static_cast<unsigned long long>(xn.data[i]);
+ }
+ }
+
+ return val;
+}
+
+mp_float_efx mp_float_efx::extract_integer_part(void) const
+{
+ // Compute the signed integer part of x.
+
+ if(!isfinite())
+ {
+ return *this;
+ }
+
+ if(exp < static_cast<boost::int64_t>(0))
+ {
+ // The absolute value of the number is smaller than 1.
+ // Thus the integer part is zero.
+ return boost::multiprecision::zero();
+ }
+ else if(exp >= static_cast<boost::int64_t>(std::numeric_limits<mp_float_efx>::digits10 - 1))
+ {
+ // The number is too large to resolve the integer part.
+ // Thus it is already a pure integer part.
+ return *this;
+ }
+
+ // Make a local copy.
+ mp_float_efx x = *this;
+
+ // Clear out the decimal portion
+ const size_t first_clear = (static_cast<size_t>(x.exp) / static_cast<size_t>(mp_elem_digits10)) + 1u;
+ const size_t last_clear = static_cast<size_t>(mp_elem_number);
+
+ std::fill(x.data.begin() + first_clear, x.data.begin() + last_clear, static_cast<boost::uint32_t>(0u));
+
+ return x;
+}
+
+mp_float_efx mp_float_efx::extract_decimal_part(void) const
+{
+ // Compute the signed decimal part of x.
+
+ if(!isfinite())
+ {
+ return *this;
+ }
+
+ if(iszero())
+ {
+ return boost::multiprecision::zero();
+ }
+
+ if(exp < static_cast<boost::int64_t>(0))
+ {
+ // The absolute value of the number is smaller than 1.
+ // Thus it is already a pure decimal part.
+ return *this;
+ }
+ else if(exp >= static_cast<boost::int64_t>(std::numeric_limits<mp_float_efx>::digits10 - 1))
+ {
+ // The number is too large to have a decimal part.
+ // Thus the decimal part is zero.
+ return boost::multiprecision::zero();
+ }
+
+ mp_float_efx x = *this;
+
+ const std::size_t first_copy = static_cast<size_t>((static_cast<size_t>(x.exp) / static_cast<size_t>(mp_elem_digits10)) + 1u);
+ const std::size_t last_copy = static_cast<size_t>(mp_elem_number);
+
+ std::copy(x.data.begin() + first_copy,
+ x.data.begin() + last_copy,
+ x.data.begin());
+
+ const size_t first_clear = static_cast<size_t>(mp_elem_number - first_copy);
+ const size_t last_clear = static_cast<size_t>(mp_elem_number);
+
+ std::fill(x.data.begin() + first_clear, x.data.begin() + last_clear, static_cast<boost::uint32_t>(0u));
+
+ // Is it necessary to justify the data?
+ const array_type::const_iterator first_nonzero_elem = std::find_if(x.data.begin(),
+ x.data.end(),
+ data_elem_is_non_zero_predicate);
+
+ std::size_t sj = static_cast<std::size_t>(0u);
+
+ if(first_nonzero_elem != x.data.begin())
+ {
+ if(first_nonzero_elem == x.data.end())
+ {
+ // The decimal part is exactly zero.
+ // Reset the sign and the exponent.
+ x.neg = false;
+ x.exp = static_cast<boost::int64_t>(0);
+ }
+ else
+ {
+ // Justify the data
+ sj = static_cast<std::size_t>(std::distance<array_type::const_iterator>(x.data.begin(), first_nonzero_elem));
+
+ std::copy(x.data.begin() + sj,
+ x.data.end(),
+ x.data.begin());
+
+ std::fill(x.data.begin() + static_cast<std::size_t>(static_cast<std::size_t>(mp_elem_number) - sj),
+ x.data.end(),
+ static_cast<boost::uint32_t>(0u));
+ }
+ }
+
+ x.exp -= static_cast<boost::int64_t>((first_copy + sj) * static_cast<size_t>(mp_elem_digits10));
+
+ return x;
+}
+
+const mp_float_efx& mp_float_efx::my_value_nan(void) const
+{
+ static mp_float_efx val = boost::multiprecision::zero();
+ val.fpclass = mp_NaN;
+ static const mp_float_efx qnan(val);
+ return qnan;
+}
+
+const mp_float_efx& mp_float_efx::my_value_inf(void) const
+{
+ static mp_float_efx val = boost::multiprecision::zero();
+ val.fpclass = mp_inf;
+ static const mp_float_efx inf(val);
+ return inf;
+}
+
+boost::int64_t mp_float_efx::get_order_fast(void) const
+{
+ if((!isfinite()) || (data[0] == static_cast<boost::uint32_t>(0u)))
+ {
+ return static_cast<boost::int64_t>(0);
+ }
+ else
+ {
+ const double dx = ::log10(static_cast<double>(data[0])) + (std::numeric_limits<double>::epsilon() * 0.9);
+ return static_cast<boost::int64_t>(exp + static_cast<boost::int64_t>(static_cast<boost::int32_t>(dx)));
+ }
+}
+
+void mp_float_efx::get_output_string(std::string& str, boost::int64_t& my_exp, const std::size_t number_of_digits) const
+{
+ // Determine the number of elements needed to provide the requested digits from mp_float_efx.
+ const std::size_t number_of_elements = (std::min)(static_cast<std::size_t>((number_of_digits / static_cast<std::size_t>(mp_elem_digits10)) + 2u),
+ static_cast<std::size_t>(mp_elem_number));
+
+ // Extract the remaining digits from mp_float_efx after the decimal point.
+ str = boost::lexical_cast<std::string>(data[0]);
+
+ // Extract all of the digits from mp_float_efx, beginning with the first data element.
+ for(std::size_t i = static_cast<std::size_t>(1u); i < number_of_elements; i++)
+ {
+ std::stringstream ss;
+
+ ss << std::setw(static_cast<std::streamsize>(mp_elem_digits10))
+ << std::setfill(static_cast<char>('0'))
+ << data[i];
+
+ str += ss.str();
+ }
+
+ // Cut the output to the size of the precision.
+ if(str.length() > number_of_digits)
+ {
+ // Get the digit after the last needed digit for rounding
+ const boost::uint32_t round = static_cast<boost::uint32_t>(static_cast<boost::uint32_t>(str.at(number_of_digits)) - static_cast<boost::uint32_t>('0'));
+
+ // Truncate the string
+ str = str.substr(static_cast<std::size_t>(0u), number_of_digits);
+
+ if(round >= static_cast<boost::uint32_t>(5u))
+ {
+ std::size_t ix = static_cast<std::size_t>(str.length() - 1u);
+
+ // Every trailing 9 must be rounded up
+ while(ix && (static_cast<boost::int32_t>(str.at(ix)) - static_cast<boost::int32_t>('0') == static_cast<boost::int32_t>(9)))
+ {
+ str.at(ix) = static_cast<char>('0');
+ --ix;
+ }
+
+ if(!ix)
+ {
+ // There were nothing but trailing nines.
+ if(static_cast<boost::int32_t>(static_cast<boost::int32_t>(str.at(ix)) - static_cast<boost::int32_t>(0x30)) == static_cast<boost::int32_t>(9))
+ {
+ // Increment up to the next order and adjust exponent.
+ str.at(ix) = static_cast<char>('1');
+ ++my_exp;
+ }
+ else
+ {
+ // Round up this digit.
+ ++str.at(ix);
+ }
+ }
+ else
+ {
+ // Round up the last digit.
+ ++str[ix];
+ }
+ }
+ }
+}
+
+bool mp_float_efx::rd_string(const char* const s)
+{
+ std::string str(s);
+
+ // Get a possible exponent and remove it.
+ exp = static_cast<boost::int64_t>(0);
+
+ std::size_t pos;
+
+ if( ((pos = str.find('e')) != std::string::npos)
+ || ((pos = str.find('E')) != std::string::npos)
+ )
+ {
+ // Remove the exponent part from the string.
+ exp = boost::multiprecision::utility::numeric_cast<boost::int64_t>(static_cast<const char* const>(str.c_str() + (pos + 1u)));
+ str = str.substr(static_cast<std::size_t>(0u), pos);
+ }
+
+ // Get a possible +/- sign and remove it.
+ neg = false;
+
+ if((pos = str.find(static_cast<char>('-'))) != std::string::npos)
+ {
+ neg = true;
+ str.erase(pos, static_cast<std::size_t>(1u));
+ }
+
+ if((pos = str.find(static_cast<char>('+'))) != std::string::npos)
+ {
+ str.erase(pos, static_cast<std::size_t>(1u));
+ }
+
+ // Remove leading zeros for all input types.
+ const std::string::iterator fwd_it_leading_zero = std::find_if(str.begin(), str.end(), char_is_nonzero_predicate);
+
+ if(fwd_it_leading_zero != str.begin())
+ {
+ if(fwd_it_leading_zero == str.end())
+ {
+ // The string contains nothing but leading zeros.
+ // This string represents zero.
+ operator=(boost::multiprecision::zero());
+ return true;
+ }
+ else
+ {
+ str.erase(str.begin(), fwd_it_leading_zero);
+ }
+ }
+
+ // Put the input string into the standard mp_float_efx input form
+ // aaa.bbbbE+/-n, where aa has 1...mp_elem_digits10, bbbb has an
+ // even multiple of mp_elem_digits10 which are possibly zero padded
+ // on the right-end, and n is a signed 32-bit integer which is an
+ // even multiple of mp_elem_digits10.
+
+ // Find a possible decimal point.
+ pos = str.find(static_cast<char>('.'));
+
+ if(pos != std::string::npos)
+ {
+ // Remove all trailing insignificant zeros.
+ const std::string::const_reverse_iterator rit_non_zero = std::find_if(str.rbegin(), str.rend(), char_is_nonzero_predicate);
+
+ if(rit_non_zero != str.rbegin())
+ {
+ const std::string::size_type ofs = str.length() - std::distance<std::string::const_reverse_iterator>(str.rbegin(), rit_non_zero);
+ str.erase(str.begin() + ofs, str.end());
+ }
+
+ // Check if the input is identically zero.
+ if(str == std::string("."))
+ {
+ operator=(boost::multiprecision::zero());
+ return true;
+ }
+
+ // Remove leading significant zeros just after the decimal point
+ // and adjust the exponent accordingly.
+ // Note that the while-loop operates only on strings of the form ".000abcd..."
+ // and peels away the zeros just after the decimal point.
+ if(str.at(static_cast<std::size_t>(0u)) == static_cast<char>('.'))
+ {
+ const std::string::iterator it_non_zero = std::find_if(str.begin() + 1u, str.end(), char_is_nonzero_predicate);
+
+ std::size_t delta_exp = static_cast<std::size_t>(0u);
+
+ if(str.at(static_cast<std::size_t>(1u)) == static_cast<char>('0'))
+ {
+ delta_exp = std::distance<std::string::const_iterator>(str.begin() + 1u, it_non_zero);
+ }
+
+ // Bring one single digit into the mantissa and adjust exponent accordingly.
+ str.erase(str.begin(), it_non_zero);
+ str.insert(static_cast<std::size_t>(1u), ".");
+ exp -= static_cast<boost::int64_t>(delta_exp + 1u);
+ }
+ }
+ else
+ {
+ // Input string has no decimal point: Append decimal point.
+ str.append(".");
+ }
+
+ // Shift the decimal point such that the exponent is an even multiple of mp_elem_digits10.
+ std::size_t n_shift = static_cast<std::size_t>(0u);
+ const std::size_t n_exp_rem = static_cast<std::size_t>(exp % static_cast<boost::int64_t>(mp_elem_digits10));
+
+ if((exp % static_cast<boost::int64_t>(mp_elem_digits10)) != static_cast<boost::int64_t>(0))
+ {
+ n_shift = ((exp < static_cast<boost::int64_t>(0))
+ ? static_cast<std::size_t>(n_exp_rem + static_cast<std::size_t>(mp_elem_digits10))
+ : static_cast<std::size_t>(n_exp_rem));
+ }
+
+ // Make sure that there are enough digits for the decimal point shift.
+ pos = str.find(static_cast<char>('.'));
+
+ std::size_t pos_plus_one = static_cast<std::size_t>(pos + 1u);
+
+ if((str.length() - pos_plus_one) < n_shift)
+ {
+ const std::size_t sz = static_cast<std::size_t>(n_shift - (str.length() - pos_plus_one));
+
+ str.append(std::string(sz, static_cast<char>('0')));
+ }
+
+ // Do the decimal point shift.
+ if(n_shift != static_cast<std::size_t>(0u))
+ {
+ str.insert(static_cast<std::size_t>(pos_plus_one + n_shift), ".");
+
+ str.erase(pos, static_cast<std::size_t>(1u));
+
+ exp -= static_cast<boost::int64_t>(n_shift);
+ }
+
+ // Cut the size of the mantissa to <= mp_elem_digits10.
+ pos = str.find(static_cast<char>('.'));
+ pos_plus_one = static_cast<std::size_t>(pos + 1u);
+
+ if(pos > static_cast<std::size_t>(mp_elem_digits10))
+ {
+ const boost::int32_t n_pos = static_cast<boost::int32_t>(pos);
+ const boost::int32_t n_rem_is_zero = ((static_cast<boost::int32_t>(n_pos % mp_elem_digits10) == static_cast<boost::int32_t>(0)) ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(0));
+ const boost::int32_t n = static_cast<boost::int32_t>(static_cast<boost::int32_t>(n_pos / mp_elem_digits10) - n_rem_is_zero);
+
+ str.insert(static_cast<std::size_t>(static_cast<boost::int32_t>(n_pos - static_cast<boost::int32_t>(n * mp_elem_digits10))), ".");
+
+ str.erase(pos_plus_one, static_cast<std::size_t>(1u));
+
+ exp += static_cast<boost::int64_t>(static_cast<boost::int64_t>(n) * static_cast<boost::int64_t>(mp_elem_digits10));
+ }
+
+ // Pad the decimal part such that its value is an even
+ // multiple of mp_elem_digits10.
+ pos = str.find(static_cast<char>('.'));
+ pos_plus_one = static_cast<std::size_t>(pos + 1u);
+
+ const boost::int32_t n_dec = static_cast<boost::int32_t>(static_cast<boost::int32_t>(str.length() - 1u) - static_cast<boost::int32_t>(pos));
+ const boost::int32_t n_rem = static_cast<boost::int32_t>(n_dec % mp_elem_digits10);
+ boost::int32_t n_cnt = ((n_rem != static_cast<boost::int32_t>(0)) ? static_cast<boost::int32_t>(mp_elem_digits10 - n_rem)
+ : static_cast<boost::int32_t>(0));
+
+ if(n_cnt != static_cast<boost::int32_t>(0))
+ {
+ str.append(static_cast<std::size_t>(n_cnt), static_cast<char>('0'));
+ }
+
+ // Truncate decimal part if it is too long.
+ const std::size_t max_dec = static_cast<std::size_t>((mp_elem_number - 1) * mp_elem_digits10);
+
+ if(static_cast<std::size_t>(str.length() - pos) > max_dec)
+ {
+ str = str.substr(static_cast<std::size_t>(0u),
+ static_cast<std::size_t>(pos_plus_one + max_dec));
+ }
+
+ // Now the input string has the standard mp_float_efx input form.
+ // (See the comment above.)
+
+ // Set all the data elements to 0.
+ std::fill(data.begin(), data.end(), static_cast<boost::uint32_t>(0u));
+
+ // Extract the data.
+
+ // First get the digits to the left of the decimal point...
+ data[0u] = boost::multiprecision::utility::numeric_cast<boost::uint32_t>(str.substr(static_cast<std::size_t>(0u), pos));
+
+ // ...then get the remaining digits to the right of the decimal point.
+ const std::string::size_type i_end = ((str.length() - pos_plus_one) / static_cast<std::string::size_type>(mp_elem_digits10));
+
+ for(std::string::size_type i = static_cast<std::string::size_type>(0u); i < i_end; i++)
+ {
+ const std::string::const_iterator it = str.begin()
+ + pos_plus_one
+ + (i * static_cast<std::string::size_type>(mp_elem_digits10));
+
+ data[i + 1u] = boost::multiprecision::utility::numeric_cast<boost::uint32_t>(std::string(it, it + static_cast<std::string::size_type>(mp_elem_digits10)));
+ }
+
+ // Check for overflow...
+ if(exp > std::numeric_limits<mp_float_efx>::max_exponent10)
+ {
+ const bool b_result_is_neg = neg;
+
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_efx>::infinity()
+ : -std::numeric_limits<mp_float_efx>::infinity());
+ }
+
+ // ...and check for underflow.
+ if(exp <= std::numeric_limits<mp_float_efx>::min_exponent10)
+ {
+ if(exp == std::numeric_limits<mp_float_efx>::min_exponent10)
+ {
+ // Check for identity with the minimum value.
+ mp_float_efx test = *this;
+
+ test.exp = static_cast<boost::int64_t>(0);
+
+ if(test.isone())
+ {
+ *this = boost::multiprecision::zero();
+ }
+ }
+ else
+ {
+ *this = boost::multiprecision::zero();
+ }
+ }
+
+ return true;
+}

Added: sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/p4/gmp.lib
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/p4/gmp.pdb
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/x64/gmp.lib
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/gmp/4-2-4/vc9/x64/gmp.pdb
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/gmp/mp_float_gmp.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/gmp/mp_float_gmp.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,1144 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <sstream>
+#include <iomanip>
+#include <vector>
+#include <algorithm>
+#include <cfloat>
+
+#include <boost/array.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+#include <boost/multiprecision/utility/util_numeric_cast.hpp>
+
+#include "mp_float_gmp_protos.h"
+
+using boost::multiprecision::mp_float_gmp;
+
+#if defined(__GNUC__)
+ static inline boost::int32_t _isnan (float x) { return static_cast<boost::int32_t>(std::isnan <float>(x)); }
+ static inline boost::int32_t _finite(float x) { return static_cast<boost::int32_t>(std::isfinite<float>(x)); }
+#endif
+
+namespace
+{
+ const double& d_log2(void)
+ {
+ static const double value_log2 = 0.3010299956639811952137389;
+ return value_log2;
+ }
+
+ bool has_exp_or_has_dec_predicate(const char& c)
+ {
+ return ( (c == static_cast<char>('e'))
+ || (c == static_cast<char>('E'))
+ || (c == static_cast<char>('.')));
+ }
+}
+
+void mp_float_gmp::init(void)
+{
+ static bool precision_is_initialized;
+
+ if(precision_is_initialized == false)
+ {
+ precision_is_initialized = true;
+ ::mpf_set_default_prec(static_cast<unsigned long>(mp_digits2 + static_cast<boost::int32_t>(4)));
+ }
+}
+
+const boost::int64_t& mp_float_gmp::max_exp2(void)
+{
+ static const boost::int64_t val_max_exp2 = static_cast<boost::int64_t>(static_cast<double>(mp_max_exp10) / ::d_log2());
+ return val_max_exp2;
+}
+
+const boost::int64_t& mp_float_gmp::min_exp2(void)
+{
+ static const boost::int64_t val_min_exp2 = static_cast<boost::int64_t>(static_cast<double>(mp_min_exp10) / ::d_log2());
+ return val_min_exp2;
+}
+
+
+
+mp_float_gmp::mp_float_gmp() : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ ::mpf_init(rop);
+}
+
+mp_float_gmp::mp_float_gmp(const char n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (std::numeric_limits<char>::is_signed ? (n < static_cast<char>(0)) : false);
+ from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const wchar_t n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (std::numeric_limits<wchar_t>::is_signed ? (n < static_cast<wchar_t>(0)) : false);
+ from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const signed char n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (n < static_cast<signed char>(0));
+ from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const signed short n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (n < static_cast<signed short>(0));
+ from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const signed int n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (n < static_cast<signed int>(0));
+ from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const signed long n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (n < static_cast<signed long>(0));
+ from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const signed long long n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ const bool b_neg = (n < static_cast<signed long long>(0));
+ from_unsigned_long_long((!b_neg) ? static_cast<unsigned long long>(n) : static_cast<unsigned long long>(-n));
+ if(b_neg) { ::mpf_neg(rop, rop); }
+}
+
+mp_float_gmp::mp_float_gmp(const unsigned char n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ from_unsigned_long(static_cast<unsigned long>(n));
+}
+
+mp_float_gmp::mp_float_gmp(const unsigned short n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ from_unsigned_long(static_cast<unsigned long>(n));
+}
+
+mp_float_gmp::mp_float_gmp(const unsigned int n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ from_unsigned_long(static_cast<unsigned long>(n));
+}
+
+mp_float_gmp::mp_float_gmp(const unsigned long n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ from_unsigned_long(static_cast<unsigned long>(n));
+}
+
+mp_float_gmp::mp_float_gmp(const unsigned long long n) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ from_unsigned_long_long(static_cast<unsigned long long>(n));
+}
+
+mp_float_gmp::mp_float_gmp(const float f) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+
+ const bool b_neg = (f < 0.0f);
+
+ if(::_finite(f) == 0)
+ {
+ operator=((::_isnan(f) != 0) ? my_value_nan() : ((!b_neg) ? my_value_inf() : -my_value_inf()));
+ return;
+ }
+
+ const native_float_parts<float> fb((!b_neg) ? f : -f);
+
+ // Create an mp_float_gmp from the fractional part of the
+ // mantissa expressed as an unsigned long long.
+ from_unsigned_long_long(fb.get_mantissa());
+
+ // Scale the unsigned long long representation to the fractional
+ // part of the float and multiply with the base-2 exponent.
+ const int p2 = fb.get_exponent() - (std::numeric_limits<float>::digits - 1);
+
+ if(p2 != 0) { operator*=(boost::multiprecision::pow2(static_cast<boost::int64_t>(p2))); }
+
+ if(b_neg)
+ {
+ ::mpf_neg(rop, rop);
+ }
+}
+
+mp_float_gmp::mp_float_gmp(const double d) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ ::mpf_init_set_d(rop, d);
+}
+
+mp_float_gmp::mp_float_gmp(const long double ld) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+
+ const bool b_neg = (ld < static_cast<long double>(0.0));
+
+ if(::_finite(static_cast<double>(ld)) == 0)
+ {
+ operator=(::_isnan(static_cast<double>(ld)) ? my_value_nan() : ((!b_neg) ? my_value_inf() : -my_value_inf()));
+ return;
+ }
+
+ const native_float_parts<long double> fb((!b_neg) ? ld : -ld);
+
+ // Create an mp_float_gmp from the fractional part of the
+ // mantissa expressed as an unsigned long long.
+ from_unsigned_long_long(fb.get_mantissa());
+
+ // Scale the unsigned long long representation to the fractional
+ // part of the long double and multiply with the base-2 exponent.
+ const int p2 = fb.get_exponent() - (std::numeric_limits<long double>::digits - 1);
+
+ if(p2 != 0) { operator*=(boost::multiprecision::pow2(static_cast<boost::int64_t>(p2))); }
+
+ if(b_neg)
+ {
+ ::mpf_neg(rop, rop);
+ }
+}
+
+mp_float_gmp::mp_float_gmp(const char* const s) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ static_cast<void>(rd_string(s));
+}
+
+mp_float_gmp::mp_float_gmp(const std::string& str) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ static_cast<void>(rd_string(str.c_str()));
+}
+
+mp_float_gmp::mp_float_gmp(const mp_float_gmp& mp) : fpclass (mp.fpclass),
+ prec_elem(mp.prec_elem)
+{
+ init();
+ ::mpf_init_set(rop, mp.rop);
+}
+
+mp_float_gmp::mp_float_gmp(const double mantissa, const boost::int64_t exponent) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+
+ const bool mantissa_is_iszero = (::fabs(mantissa) < ((std::numeric_limits<double>::min)() * 2.0));
+
+ if(mantissa_is_iszero)
+ {
+ if(exponent == static_cast<boost::int64_t>(0))
+ {
+ ::mpf_init_set(rop, boost::multiprecision::one().rop);
+ }
+ else
+ {
+ ::mpf_init_set(rop, boost::multiprecision::zero().rop);
+ }
+ }
+ else
+ {
+ ::mpf_init_set(rop, boost::multiprecision::zero().rop);
+ operator=(mp_float_gmp(mantissa));
+ operator*=(mp_float_gmp("1E" + boost::lexical_cast<std::string>(exponent)));
+ }
+}
+
+mp_float_gmp::mp_float_gmp(const ::mpf_t& op) : fpclass (mp_finite),
+ prec_elem(mp_max_digits10)
+{
+ init();
+ ::mpf_init_set(rop, op);
+}
+
+mp_float_gmp::~mp_float_gmp()
+{
+ ::mpf_set_prec_raw(rop, static_cast<unsigned long int>(mp_digits2));
+ ::mpf_clear(rop);
+}
+
+void mp_float_gmp::from_unsigned_long_long(const unsigned long long u)
+{
+ if(u <= static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ from_unsigned_long(static_cast<unsigned long>(u));
+ }
+ else
+ {
+ ::mpf_init_set_str(rop, boost::lexical_cast<std::string>(u).c_str(), 10);
+ }
+}
+
+void mp_float_gmp::from_unsigned_long(const unsigned long u)
+{
+ ::mpf_init_set_ui(rop, u);
+}
+
+void mp_float_gmp::precision(const boost::int32_t prec_digits)
+{
+ const unsigned long int digits2_request = static_cast<unsigned long int>(static_cast<boost::uint64_t>(static_cast<double>(prec_digits) / ::d_log2()));
+ const unsigned long int d2 = static_cast<unsigned long int>(mp_digits2);
+ const unsigned long int digits2_set = (std::min)(digits2_request, d2);
+
+ prec_elem = static_cast<boost::int32_t>(static_cast<boost::int64_t>(static_cast<double>(digits2_set) * ::d_log2()));
+
+ ::mpf_set_prec_raw(rop, digits2_set);
+}
+
+mp_float_gmp& mp_float_gmp::operator=(const mp_float_gmp& v)
+{
+ fpclass = v.fpclass;
+ prec_elem = v.prec_elem;
+
+ ::mpf_set (rop, v.rop);
+ ::mpf_set_prec_raw(rop, static_cast<unsigned long>(static_cast<boost::uint64_t>(static_cast<double>(prec_elem) / ::d_log2())));
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::operator+=(const mp_float_gmp& v)
+{
+ if(isnan())
+ {
+ return *this;
+ }
+
+ if(isinf())
+ {
+ if(v.isinf() && (isneg() != v.isneg()))
+ {
+ *this = std::numeric_limits<mp_float_gmp>::quiet_NaN();
+ }
+
+ return *this;
+ }
+
+ ::mpf_add(rop, rop, v.rop);
+
+ // Check for overflow.
+ long u_exp2_signed;
+ static_cast<void>(::mpf_get_d_2exp(&u_exp2_signed, rop));
+
+ if( (u_exp2_signed >= std::numeric_limits<mp_float_gmp>::max_exponent)
+ && (boost::multiprecision::fabs(*this) > (std::numeric_limits<mp_float_gmp>::max)())
+ )
+ {
+ const bool b_result_is_neg = isneg();
+
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+ }
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::operator-=(const mp_float_gmp& v)
+{
+ // Use *this - v = -(-*this + v).
+ return (negate().operator+=(v)).negate();
+}
+
+mp_float_gmp& mp_float_gmp::operator*=(const mp_float_gmp& v)
+{
+ const bool b_u_is_inf = isinf();
+ const bool b_v_is_inf = v.isinf();
+
+ if( (isnan() || v.isnan())
+ || (b_u_is_inf && v.iszero())
+ || (b_v_is_inf && iszero())
+ )
+ {
+ return *this = std::numeric_limits<mp_float_gmp>::quiet_NaN();
+ }
+
+ if(b_u_is_inf || b_v_is_inf)
+ {
+ const bool b_result_is_neg = (isneg() != v.isneg());
+
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+
+ return *this;
+ }
+
+ // Get the base-2 exponent of *this and v and...
+ long u_exp2_signed;
+ long v_exp2_signed;
+ static_cast<void>(::mpf_get_d_2exp(&u_exp2_signed, rop));
+ static_cast<void>(::mpf_get_d_2exp(&v_exp2_signed, v.rop));
+
+ // Check for overflow or underflow.
+ const bool u_exp2_is_neg = (u_exp2_signed < static_cast<long>(0));
+ const bool v_exp2_is_neg = (v_exp2_signed < static_cast<long>(0));
+
+ if(u_exp2_is_neg == v_exp2_is_neg)
+ {
+ // Get the unsigned base-2 exponents of *this and v and...
+ const boost::int64_t u_exp2 = ((!u_exp2_is_neg) ? u_exp2_signed : -u_exp2_signed);
+ const boost::int64_t v_exp2 = ((!v_exp2_is_neg) ? v_exp2_signed : -v_exp2_signed);
+
+ // Check the range of the upcoming multiplication.
+ const bool b_result_is_out_of_range = (v_exp2 >= static_cast<long>(static_cast<long>(mp_max_exp) - u_exp2));
+
+ if(b_result_is_out_of_range)
+ {
+ if(u_exp2_is_neg)
+ {
+ *this = boost::multiprecision::zero();
+ }
+ else
+ {
+ const bool b_result_is_neg = (isneg() != v.isneg());
+
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+ }
+
+ return *this;
+ }
+ }
+
+ // Multiply *this by v.
+ ::mpf_mul(rop, rop, v.rop);
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::operator/=(const mp_float_gmp& v)
+{
+ return operator*=(mp_float_gmp(v).calculate_inv());
+}
+
+// TBD: This needs an overflow and underflow check.
+mp_float_gmp& mp_float_gmp::add_unsigned_long_long(const unsigned long long n)
+{
+ if(n <= (std::numeric_limits<unsigned long>::max)())
+ {
+ ::mpf_add_ui(rop, rop, static_cast<unsigned long>(n));
+ return *this;
+ }
+ else
+ {
+ return operator+=(mp_float_gmp(n));
+ }
+}
+
+// TBD: This needs an overflow and underflow check.
+mp_float_gmp& mp_float_gmp::sub_unsigned_long_long(const unsigned long long n)
+{
+ if(n <= (std::numeric_limits<unsigned long>::max)())
+ {
+ ::mpf_sub_ui(rop, rop, static_cast<unsigned long>(n));
+ return *this;
+ }
+ else
+ {
+ return operator+=(mp_float_gmp(n));
+ }
+}
+
+mp_float_gmp& mp_float_gmp::mul_unsigned_long_long(const unsigned long long n)
+{
+ // Multiply *this with a constant unsigned long long.
+
+ const bool b_u_is_inf = isinf();
+ const bool b_n_is_zero = (n == static_cast<boost::int32_t>(0));
+
+ if(isnan() || (b_u_is_inf && b_n_is_zero))
+ {
+ return (*this = std::numeric_limits<mp_float_gmp>::quiet_NaN());
+ }
+
+ if(b_u_is_inf)
+ {
+ *this = ((!isneg()) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+ return *this;
+ }
+
+ if(n > static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ operator*=(mp_float_gmp(n));
+ }
+ else
+ {
+ ::mpf_mul_ui(rop, rop, static_cast<unsigned long>(n));
+ }
+
+ // Check for overflow.
+ long u_exp2_signed;
+ static_cast<void>(::mpf_get_d_2exp(&u_exp2_signed, rop));
+
+ if( (u_exp2_signed >= std::numeric_limits<mp_float_gmp>::max_exponent)
+ && (boost::multiprecision::fabs(*this) > (std::numeric_limits<mp_float_gmp>::max)())
+ )
+ {
+ *this = ((!isneg()) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+ }
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::div_unsigned_long_long(const unsigned long long n)
+{
+ if(isnan())
+ {
+ return *this;
+ }
+
+ if(isinf())
+ {
+ *this = ((!isneg()) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+ return *this;
+ }
+
+ if(n == static_cast<boost::int32_t>(0))
+ {
+ // Divide by 0.
+ if(iszero())
+ {
+ return (*this = std::numeric_limits<mp_float_gmp>::quiet_NaN());
+ }
+ else
+ {
+ *this = ((!isneg()) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+ return *this;
+ }
+ }
+
+ if(iszero())
+ {
+ return *this;
+ }
+
+ if(n > static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ operator/=(mp_float_gmp(n));
+ }
+ else
+ {
+ ::mpf_div_ui(rop, rop, static_cast<unsigned long>(n));
+ }
+
+ // Check for underflow.
+ long u_exp2_signed;
+ static_cast<void>(::mpf_get_d_2exp(&u_exp2_signed, rop));
+
+ if( (u_exp2_signed <= std::numeric_limits<mp_float_gmp>::min_exponent)
+ && (boost::multiprecision::fabs(*this) < (std::numeric_limits<mp_float_gmp>::min)())
+ )
+ {
+ return (*this = boost::multiprecision::zero());
+ }
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::calculate_inv(void)
+{
+ // Compute the inverse of *this.
+
+ bool b_result_is_neg = isneg();
+
+ if(iszero())
+ {
+ *this = ((!b_result_is_neg) ? std::numeric_limits<mp_float_gmp>::infinity()
+ : -std::numeric_limits<mp_float_gmp>::infinity());
+
+ return *this;
+ }
+
+ if(isnan())
+ {
+ return *this;
+ }
+
+ if(isinf())
+ {
+ return (*this = boost::multiprecision::zero());
+ }
+
+ if(isone())
+ {
+ *this = ((!b_result_is_neg) ? boost::multiprecision::one() : -boost::multiprecision::one());
+
+ return *this;
+ }
+
+ ::mpf_ui_div(rop, static_cast<unsigned long int>(1u), rop);
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::calculate_sqrt(void)
+{
+ // Compute the square root of *this.
+
+ if(isneg() || !isfinite())
+ {
+ return *this = std::numeric_limits<mp_float_gmp>::quiet_NaN();
+ }
+
+ if(iszero() || isone())
+ {
+ return *this;
+ }
+
+ ::mpf_sqrt(rop, rop);
+
+ return *this;
+}
+
+boost::int32_t mp_float_gmp::cmp(const mp_float_gmp& v) const
+{
+ // Handle all non-finite cases.
+ if((!isfinite()) || (!v.isfinite()))
+ {
+ // NaN can never equal NaN. Return an implementation-dependent
+ // signed result. Also note that comparison of NaN with NaN
+ // using operators greater-than or less-than is undefined.
+ if(isnan() || v.isnan()) { return (isnan() ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1)); }
+
+ if(isinf() && v.isinf())
+ {
+ // Both *this and v are infinite. They are equal if they have the same sign.
+ // Otherwise, *this is less than v if and only if *this is negative.
+ return ((isneg() == v.isneg()) ? static_cast<boost::int32_t>(0) : (isneg() ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1)));
+ }
+
+ if(isinf())
+ {
+ // *this is infinite, but v is finite.
+ // So negative infinite *this is less than any finite v.
+ // Whereas positive infinite *this is greater than any finite v.
+ return (isneg() ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1));
+ }
+ else
+ {
+ // *this is finite, and v is infinite.
+ // So any finite *this is greater than negative infinite v.
+ // Whereas any finite *this is less than positive infinite v.
+ return (v.isneg() ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1));
+ }
+ }
+
+ // And now handle all *finite* cases.
+ if(iszero() && v.iszero())
+ {
+ return static_cast<boost::int32_t>(0);
+ }
+ else
+ {
+ const int result = ::mpf_cmp(rop, v.rop);
+
+ if (result > 0) { return static_cast<boost::int32_t>(1); }
+ else if(result < 0) { return static_cast<boost::int32_t>(-1); }
+ else { return static_cast<boost::int32_t>(0); }
+ }
+}
+
+bool mp_float_gmp::iszero(void) const
+{
+ return (::mpf_sgn(rop) == 0);
+}
+
+bool mp_float_gmp::isone(void) const
+{
+ // Check if the value of *this is identically 1 or very close to 1.
+ return (isint() && (cmp(boost::multiprecision::one()) == static_cast<boost::int32_t>(0)));
+}
+
+bool mp_float_gmp::isint(void) const
+{
+ // Check if the value of *this is pure integer or very close to pure integer.
+ return (::mpf_integer_p(rop) != 0);
+}
+
+bool mp_float_gmp::isneg(void) const
+{
+ if(isinf())
+ {
+ return (fpclass == mp_inf_neg);
+ }
+ else
+ {
+ return (::mpf_sgn(rop) < 0);
+ }
+}
+
+const mp_float_gmp& mp_float_gmp::my_value_nan(void) const
+{
+ static mp_float_gmp val(0u);
+ val.fpclass = mp_NaN;
+ static const mp_float_gmp qnan(val);
+ return qnan;
+}
+
+const mp_float_gmp& mp_float_gmp::my_value_inf(void) const
+{
+ static mp_float_gmp val(0u);
+ val.fpclass = mp_inf_pos;
+ static const mp_float_gmp inf(val);
+ return inf;
+}
+
+mp_float_gmp& mp_float_gmp::negate(void)
+{
+ if(fpclass == mp_inf_pos)
+ {
+ fpclass = mp_inf_neg;
+ }
+ else if(fpclass == mp_inf_neg)
+ {
+ fpclass = mp_inf_pos;
+ }
+ else
+ {
+ ::mpf_neg(rop, rop);
+ }
+
+ return *this;
+}
+
+mp_float_gmp& mp_float_gmp::operator++(void) { ::mpf_add_ui(rop, rop, static_cast<unsigned long>(1u)); return *this; }
+mp_float_gmp& mp_float_gmp::operator--(void) { ::mpf_sub_ui(rop, rop, static_cast<unsigned long>(1u)); return *this; }
+
+void mp_float_gmp::extract_parts(double& mantissa, boost::int64_t& exponent) const
+{
+ const bool b_neg = isneg();
+
+ long n2;
+ const double d2 = ::mpf_get_d_2exp(&n2, (boost::multiprecision::fabs(*this)).rop);
+ const double x_exp = static_cast<double>(static_cast<double>(n2) * ::d_log2());
+
+ const double x_exp_integer_part = static_cast<double>(static_cast<long>(x_exp));
+ const double x_exp_decimal_part = static_cast<double>(x_exp - x_exp_integer_part);
+
+ double m = d2 * ::pow(10.0, x_exp_decimal_part);
+ boost::int64_t e = static_cast<boost::int64_t>(x_exp_integer_part);
+
+ if(m < 1.0)
+ {
+ m *= 10.0;
+ e -= static_cast<boost::int64_t>(1);
+ }
+
+ mantissa = ((!b_neg) ? m : -m);
+ exponent = e;
+}
+
+double mp_float_gmp::extract_double(void) const
+{
+ const bool b_neg = isneg();
+
+ // Check for non-normal mp_float_gmp.
+ if(!isfinite())
+ {
+ if(isnan())
+ {
+ return std::numeric_limits<double>::quiet_NaN();
+ }
+ else
+ {
+ return ((!b_neg) ? std::numeric_limits<double>::infinity()
+ : -std::numeric_limits<double>::infinity());
+ }
+ }
+
+ const mp_float_gmp xx(boost::multiprecision::fabs(*this));
+
+ // Check for zero mp_float_gmp.
+ if(iszero() || (xx < boost::multiprecision::double_min()))
+ {
+ return 0.0;
+ }
+
+ // Check if mp_float_gmp exceeds the maximum of double.
+ if(xx > boost::multiprecision::double_max())
+ {
+ return ((!b_neg) ? std::numeric_limits<double>::infinity()
+ : -std::numeric_limits<double>::infinity());
+ }
+
+ const double dx = ::mpf_get_d(xx.rop);
+
+ return ((!b_neg) ? dx : -dx);
+}
+
+long double mp_float_gmp::extract_long_double(void) const
+{
+ // Returns the long double conversion of a mp_float_gmp.
+
+ const bool b_neg = isneg();
+
+ // Check for non-normal mp_float_gmp.
+ if(!isfinite())
+ {
+ if(isnan())
+ {
+ return std::numeric_limits<long double>::quiet_NaN();
+ }
+ else
+ {
+ return ((!b_neg) ? std::numeric_limits<long double>::infinity()
+ : -std::numeric_limits<long double>::infinity());
+ }
+ }
+
+ const mp_float_gmp xx(boost::multiprecision::fabs(*this));
+
+ // Check for zero mp_float_gmp.
+ if(iszero() || (xx < boost::multiprecision::long_double_min()))
+ {
+ return static_cast<long double>(0.0);
+ }
+
+ // Check if mp_float_gmp exceeds the maximum of double.
+ if(xx > boost::multiprecision::long_double_max())
+ {
+ return ((!b_neg) ? std::numeric_limits<long double>::infinity()
+ : -std::numeric_limits<long double>::infinity());
+ }
+
+ std::stringstream ss;
+
+ ss << std::setprecision(static_cast<std::streamsize>(std::numeric_limits<long double>::digits10 + (2 + 1)))
+ << std::scientific
+ << *this;
+
+ long double ld;
+ ss >> ld;
+
+ return ld;
+}
+
+signed long long mp_float_gmp::extract_signed_long_long(void) const
+{
+ const bool b_neg = isneg();
+
+ // Make a rounded copy.
+ mp_float_gmp xr = *this;
+
+ if(isint())
+ {
+ ((!b_neg) ? xr += boost::multiprecision::half() : xr -= boost::multiprecision::half());
+ }
+
+ const mp_float_gmp nx = boost::multiprecision::fabs(xr.extract_integer_part());
+
+ if(nx > boost::multiprecision::signed_long_long_max())
+ {
+ return ((!b_neg) ? (std::numeric_limits<signed long long>::max)()
+ : -(std::numeric_limits<signed long long>::max)());
+ }
+
+ if(nx < boost::multiprecision::one())
+ {
+ return static_cast<signed long long>(0);
+ }
+
+ if(nx.isone())
+ {
+ return ((!b_neg) ? static_cast<signed long long>(1) : static_cast<signed long long>(-1));
+ }
+
+ // Extract a signed long long-type string from mp_float_gmp.
+ static const char c0 = static_cast<char>('\0');
+ std::vector<char> str(64u, c0);
+ mp_exp_t p10;
+
+ static_cast<void>(::mpf_get_str(&str[0], &p10, 10, str.size() - 1u, nx.rop));
+
+ std::string str_sll(static_cast<std::size_t>(p10), static_cast<char>('0'));
+ std::copy(str.begin(), std::find(str.begin(), str.end(), c0), str_sll.begin());
+
+ // Get the signed long long result.
+ const signed long long n = boost::multiprecision::utility::numeric_cast<signed long long>(str_sll);
+
+ return ((!b_neg) ? n : -n);
+}
+
+unsigned long long mp_float_gmp::extract_unsigned_long_long(void) const
+{
+ if(isneg())
+ {
+ return static_cast<unsigned long long>(extract_signed_long_long());
+ }
+
+ // Make a rounded copy.
+ mp_float_gmp xr = *this;
+
+ if(isint())
+ {
+ xr += boost::multiprecision::half();
+ }
+
+ const mp_float_gmp nx = xr.extract_integer_part();
+
+ if(nx > boost::multiprecision::unsigned_long_long_max())
+ {
+ return (std::numeric_limits<unsigned long long>::max)();
+ }
+
+ if(nx < boost::multiprecision::one())
+ {
+ return static_cast<unsigned long long>(0u);
+ }
+
+ if(nx.isone())
+ {
+ return static_cast<unsigned long long>(1u);
+ }
+
+ // Extract an unsigned long long-type string from mp_float_gmp.
+ static const char c0 = static_cast<char>('\0');
+ std::vector<char> str(64u, c0);
+ mp_exp_t p10;
+
+ static_cast<void>(::mpf_get_str(&str[0], &p10, 10, str.size() - 1u, nx.rop));
+
+ std::string str_ull(static_cast<std::size_t>(p10), static_cast<char>('0'));
+ std::copy(str.begin(), std::find(str.begin(), str.end(), c0), str_ull.begin());
+
+ // Get the unsigned long long result.
+ const unsigned long long n = boost::multiprecision::utility::numeric_cast<unsigned long long>(str_ull);
+
+ return n;
+}
+
+mp_float_gmp mp_float_gmp::extract_integer_part(void) const
+{
+ const bool b_neg = isneg();
+
+ const mp_float_gmp xx = boost::multiprecision::fabs(*this);
+
+ mp_float_gmp nx(xx);
+ ::mpf_floor(nx.rop, xx.rop);
+
+ return ((!b_neg) ? nx : -nx);
+}
+
+mp_float_gmp mp_float_gmp::extract_decimal_part(void) const
+{
+ const bool b_neg = isneg();
+
+ const mp_float_gmp xx = boost::multiprecision::fabs(*this);
+
+ const mp_float_gmp dx = xx - xx.extract_integer_part();
+
+ return ((!b_neg) ? dx : -dx);
+}
+
+boost::int64_t mp_float_gmp::get_order_exact(void) const
+{
+ // Get the order-10 of the mp_float_gmp. This is done using a partial
+ // string extraction with 10 decimal digits.
+
+ // Create a format string for 10-digits and scientific notation.
+ std::string str_fmt = std::string("%.10Fe");
+
+ // Get the ten digits.
+ boost::array<char, 64u> buf = {{ static_cast<char>('0') }};
+
+ static_cast<void>(gmp_sprintf(buf.data(), str_fmt.c_str(), rop));
+
+ const std::string str = std::string(buf.data());
+
+ // Extract the base-10 exponent.
+ const std::size_t pos_letter_e = str.rfind(static_cast<char>('e'));
+
+ const boost::int64_t my_exp = ((pos_letter_e != std::string::npos) ? boost::multiprecision::utility::numeric_cast<boost::int64_t>(static_cast<const char* const>(str.c_str() + (pos_letter_e + 1u)))
+ : static_cast<boost::int64_t>(0));
+
+ return my_exp;
+}
+
+boost::int64_t mp_float_gmp::get_order_fast(void) const
+{
+ const mp_float_gmp xx = boost::multiprecision::fabs(*this);
+
+ if(xx.iszero() || xx.isone())
+ {
+ return static_cast<boost::int64_t>(0);
+ }
+ else
+ {
+ signed long int n2;
+ const double d2 = ::mpf_get_d_2exp(&n2, xx.rop);
+ const double lg10x = static_cast<double>(::log10(d2) + (static_cast<double>(n2) * ::d_log2()));
+
+ return ((lg10x < 0.0) ? static_cast<boost::int64_t>(lg10x - 0.5)
+ : static_cast<boost::int64_t>(lg10x + 0.5));
+ }
+}
+
+void mp_float_gmp::get_output_string(std::string& str, boost::int64_t& my_exp, const std::size_t number_of_digits) const
+{
+ static_cast<void>(my_exp);
+
+ // Create a format string such as "%+.99Fe" in order to extract 100 digits
+ // in scientific notation with the lowercase and noshowpos flags.
+ const std::size_t the_number_of_digits_scientific = static_cast<std::size_t>((std::max)(number_of_digits, static_cast<std::size_t>(1u)) - static_cast<std::size_t>(1u));
+
+ const std::string str_fmt = std::string("%.") + (boost::lexical_cast<std::string>(the_number_of_digits_scientific) + "Fe");
+
+ // Get the string representation of the mp_float_gmp in scientific notation (lowercase, noshowpos).
+ boost::array<char, static_cast<std::size_t>(mp_float_gmp::mp_max_digits10 + 32)> buf = {{ static_cast<char>('0') }};
+
+ static_cast<void>(gmp_sprintf(buf.data(), str_fmt.c_str(), rop));
+
+ str = std::string(buf.data());
+
+ // Obtain the raw digits from the scientific notation string.
+
+ // TBD: Well, this is a bit silly. First get the string in
+ // scientific notation, then reduce it to raw digits.
+ // Perhaps this can be improved.
+ // Get the raw digits from a string in scientific notation (lowercase, showpos).
+
+ // Erase the negative sign, if present.
+ if(str.at(0u) == static_cast<char>('-'))
+ {
+ str.erase(str.begin(), str.begin() + 1u);
+ }
+
+ // Erase the exponent.
+ const std::size_t pos_letter_e = str.rfind(static_cast<char>('e'));
+
+ if(pos_letter_e != std::string::npos)
+ {
+ str.erase(str.begin() + pos_letter_e, str.end());
+ }
+
+ // Erase the decimal point.
+ const std::size_t pos_decimal_point = str.rfind(static_cast<char>('.'));
+
+ if(pos_decimal_point != std::string::npos)
+ {
+ str.erase(str.begin() + pos_decimal_point, str.begin() + (pos_decimal_point + 1u));
+ }
+}
+
+bool mp_float_gmp::rd_string(const char* const s)
+{
+ std::string str(s);
+
+ // Remove spaces and tabs
+ static const char spc = static_cast<char>(' ');
+ static const char tab = static_cast<char>('\t');
+
+ str.erase(std::remove(str.begin(), str.end(), spc), str.end());
+ str.erase(std::remove(str.begin(), str.end(), tab), str.end());
+
+ // Get possible + sign and remove it
+
+ if( (!str.empty())
+ && str.at(static_cast<std::size_t>(0u)) == static_cast<char>('+')
+ )
+ {
+ str.erase(static_cast<std::size_t>(0u),
+ static_cast<std::size_t>(1u));
+ }
+
+ // Get possible - sign and remove it
+
+ bool b_negate = false;
+
+ if( (!str.empty())
+ && str.at(static_cast<std::size_t>(0u)) == static_cast<char>('-')
+ )
+ {
+ b_negate = true;
+ str.erase(static_cast<std::size_t>(0u),
+ static_cast<std::size_t>(1u));
+ }
+
+ // Remove leading zeros for all input types
+ while( (!str.empty())
+ && str.at(static_cast<std::size_t>(0u)) == static_cast<char>('0')
+ )
+ {
+ str.erase(static_cast<std::size_t>(0u), static_cast<std::size_t>(1u));
+ }
+
+ // Scale very long pure integer input strings. Convert these into a string with
+ // a decimal point and an exponent.
+
+ const std::string::const_iterator it = std::find_if(str.begin(), str.end(), ::has_exp_or_has_dec_predicate);
+
+ const bool is_pure_integer = (it == str.end());
+
+ bool b_scaled = false;
+
+ if(is_pure_integer && (str.length() > static_cast<std::size_t>(boost::multiprecision::tol())))
+ {
+ b_scaled = true;
+
+ const std::size_t exp = static_cast<std::size_t>(str.length() - static_cast<std::size_t>(1u));
+
+ const std::string str_exp = "E" + boost::lexical_cast<std::string>(exp);
+
+ str = str.substr(static_cast<std::size_t>(0u),
+ static_cast<std::size_t>(static_cast<std::size_t>(boost::multiprecision::tol()) - 1u));
+
+ str.insert(static_cast<std::size_t>(1u), ".");
+
+ str += str_exp;
+ }
+
+ // Set the mp_float_gmp value.
+ const boost::int32_t n_set_result = static_cast<boost::int32_t>(::mpf_init_set_str(rop, str.c_str(), 10));
+
+ if(b_negate) { negate(); }
+
+ return (n_set_result == static_cast<boost::int32_t>(0));
+}

Added: sandbox/multiprecision/src/backends/float/gmp/mp_float_gmp_protos.h
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/gmp/mp_float_gmp_protos.h 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,73 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+#ifndef _E_FLOAT_GMP_PROTOS_2009_05_02_H_
+ #define _E_FLOAT_GMP_PROTOS_2009_05_02_H_
+
+ // Wrap the function names of GMP.
+ extern "C"
+ {
+ void __gmpf_set (mpf_ptr, mpf_srcptr);
+ void __gmpf_set_default_prec(unsigned long int);
+ void __gmpf_set_prec (mpf_ptr, unsigned long int);
+ void __gmpf_set_prec_raw (mpf_ptr, unsigned long int);
+ void __gmpf_init (mpf_ptr);
+ void __gmpf_init_set (mpf_ptr, mpf_srcptr);
+ int __gmpf_init_set_str (mpf_ptr, const char*, int);
+ void __gmpf_init_set_ui (mpf_ptr, unsigned long int);
+ void __gmpf_init_set_d (mpf_ptr, double);
+ void __gmpf_clear (mpf_ptr);
+ void __gmpf_neg (mpf_ptr, mpf_srcptr);
+ void __gmpf_add_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+ void __gmpf_sub_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+ void __gmpf_mul_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+ void __gmpf_div_ui (mpf_ptr, mpf_srcptr, unsigned long int);
+ void __gmpf_ui_div (mpf_ptr, unsigned long int, mpf_srcptr);
+ void __gmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr);
+ void __gmpf_mul (mpf_ptr, mpf_srcptr, mpf_srcptr);
+ void __gmpf_div (mpf_ptr, mpf_srcptr, mpf_srcptr);
+ void __gmpf_floor (mpf_ptr, mpf_srcptr);
+ void __gmpf_sqrt (mpf_ptr, mpf_srcptr);
+ int __gmpf_cmp (mpf_srcptr, mpf_srcptr);
+ int __gmpf_integer_p (mpf_srcptr);
+ double __gmpf_get_d (mpf_srcptr);
+ double __gmpf_get_d_2exp (signed long int*, mpf_srcptr);
+ char* __gmpf_get_str (char*, mp_exp_t*, int, size_t, mpf_srcptr);
+ int __gmp_sprintf (char*, const char*, ...);
+ }
+
+ inline void mpf_set (mpf_ptr dst, mpf_srcptr src) { ::__gmpf_set (dst, src); }
+ inline void mpf_set_default_prec(unsigned long int p) { ::__gmpf_set_default_prec (p); }
+ inline void mpf_set_prec_raw (mpf_ptr dst, unsigned long int p) { ::__gmpf_set_prec_raw (dst, p); }
+ inline void mpf_init (mpf_ptr dst) { ::__gmpf_init (dst); }
+ inline void mpf_init_set (mpf_ptr dst, mpf_srcptr src) { ::__gmpf_init_set (dst, src); }
+ inline int mpf_init_set_str (mpf_ptr dst, const char* str, int n) { return ::__gmpf_init_set_str (dst, str, n); }
+ inline void mpf_init_set_ui (mpf_ptr dst, unsigned long int u) { ::__gmpf_init_set_ui (dst, u); }
+ inline void mpf_init_set_d (mpf_ptr dst, double d) { ::__gmpf_init_set_d (dst, d); }
+ inline void mpf_clear (mpf_ptr dst) { ::__gmpf_clear (dst); }
+ inline void mpf_neg (mpf_ptr dst, mpf_srcptr src) { ::__gmpf_neg (dst, src); }
+ inline void mpf_add_ui (mpf_ptr dst, mpf_srcptr src, unsigned long int u) { ::__gmpf_add_ui (dst, src, u); }
+ inline void mpf_sub_ui (mpf_ptr dst, mpf_srcptr src, unsigned long int u) { ::__gmpf_sub_ui (dst, src, u); }
+ inline void mpf_mul_ui (mpf_ptr dst, mpf_srcptr src, unsigned long int u) { ::__gmpf_mul_ui (dst, src, u); }
+ inline void mpf_div_ui (mpf_ptr dst, mpf_srcptr src, unsigned long int u) { ::__gmpf_div_ui (dst, src, u); }
+ inline void mpf_ui_div (mpf_ptr dst, unsigned long int u, mpf_srcptr src) { ::__gmpf_ui_div (dst, u, src); }
+ inline void mpf_add (mpf_ptr dst, mpf_srcptr u, mpf_srcptr v) { ::__gmpf_add (dst, u, v); }
+ inline void mpf_mul (mpf_ptr dst, mpf_srcptr u, mpf_srcptr v) { ::__gmpf_mul (dst, u, v); }
+ inline void mpf_floor (mpf_ptr dst, mpf_srcptr x) { ::__gmpf_floor (dst, x); }
+ inline void mpf_sqrt (mpf_ptr dst, mpf_srcptr x) { ::__gmpf_sqrt (dst, x); }
+ inline int mpf_cmp (mpf_srcptr x, mpf_srcptr y) { return ::__gmpf_cmp (x, y); }
+ inline int mpf_sgn (mpf_srcptr x) { return ((x->_mp_size < 0) ? -1 : ((x->_mp_size > 0) ? 1 : 0)); }
+ inline int mpf_integer_p (mpf_srcptr src) { return ::__gmpf_integer_p (src); }
+ inline double mpf_get_d (mpf_srcptr x) { return ::__gmpf_get_d (x); }
+ inline double mpf_get_d_2exp (signed long int* e, mpf_srcptr x) { return ::__gmpf_get_d_2exp (e, x); }
+ inline char* mpf_get_str (char* str, mp_exp_t* e, int i, size_t s, mpf_srcptr x) { return ::__gmpf_get_str (str, e, i, s, x); }
+ #define gmp_sprintf __gmp_sprintf
+
+#endif // _E_FLOAT_GMP_PROTOS_2009_05_02_H_

Added: sandbox/multiprecision/src/backends/float/mp_float.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/mp_float.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,29 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float.hpp>
+#include <boost/lexical_cast.hpp>
+
+using boost::multiprecision::mp_float;
+
+const mp_float& boost::multiprecision::value_nan(void) { static const mp_float val = mp_float().my_value_nan(); return val; }
+const mp_float& boost::multiprecision::value_inf(void) { static const mp_float val = mp_float().my_value_inf(); return val; }
+const mp_float& boost::multiprecision::value_max(void) { static const mp_float val = mp_float().my_value_max(); return val; }
+const mp_float& boost::multiprecision::value_min(void) { static const mp_float val = mp_float().my_value_min(); return val; }
+
+const mp_float& boost::multiprecision::value_eps(void)
+{
+ static const mp_float val("1E-" + boost::lexical_cast<std::string>(std::numeric_limits<mp_float>::digits10 - 1));
+ return val;
+}
+
+const mp_float& boost::multiprecision::zero(void) { static const mp_float val(0u); return val; }
+const mp_float& boost::multiprecision::one (void) { static const mp_float val(1u); return val; }
+const mp_float& boost::multiprecision::half(void) { static const mp_float val("0.5"); return val; }

Added: sandbox/multiprecision/src/backends/float/mp_float_base.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/mp_float_base.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,582 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float.hpp>
+#include <boost/lexical_cast.hpp>
+
+using boost::multiprecision::mp_float_base;
+using boost::multiprecision::mp_float;
+
+namespace
+{
+ typedef enum enum_os_float_field_type
+ {
+ os_float_field_scientific,
+ os_float_field_fixed,
+ os_float_field_none
+ }
+ os_float_field_type;
+
+ void wr_string_scientific(std::string& str,
+ const boost::int64_t my_exp,
+ const std::size_t os_precision,
+ const bool my_showpoint,
+ const bool my_uppercase,
+ const bool trim_trailing_zeros = false);
+
+ void wr_string_fixed(std::string& str,
+ const boost::int64_t my_exp,
+ const std::size_t os_precision,
+ const bool my_showpoint,
+ const bool trim_trailing_zeros = false);
+
+ void special_handle_string_not_finite(std::string& str,
+ const mp_float& f,
+ const bool my_showpos,
+ const bool my_uppercase);
+
+ void special_extend_string_to_precision(std::string& str, const std::size_t os_precision);
+}
+
+bool mp_float_base::digits_match_lib_dll_is_ok;
+
+// Create a loud link error if the digits in the
+// mp_float headers mismatch those in a Lib or DLL.
+template<> boost::int32_t boost::multiprecision::digits_match_lib_dll<mp_float_base::mp_digits10>(void) { return mp_float_base::mp_digits10; }
+
+std::ostream& boost::multiprecision::operator<<(std::ostream& os, const mp_float_base& f)
+{
+ std::string str;
+ f.wr_string(str, os);
+ return (os << str);
+}
+
+std::istream& boost::multiprecision::operator>>(std::istream& is, mp_float_base& f)
+{
+ std::string str;
+ static_cast<void>(is >> str);
+ static_cast<void>(f.rd_string(str.c_str()));
+ return is;
+}
+
+const mp_float& mp_float_base::my_value_max(void) const
+{
+ static const std::string str_max = std::string("9." + std::string(static_cast<std::size_t>(mp_max_digits10), static_cast<char>('9')))
+ + std::string("e+" + boost::lexical_cast<std::string>(std::numeric_limits<mp_float>::max_exponent10));
+ static const mp_float val_max(str_max);
+ return val_max;
+}
+
+const mp_float& mp_float_base::my_value_min(void) const
+{
+ static const mp_float val_min("1.0e" + boost::lexical_cast<std::string>(std::numeric_limits<mp_float>::min_exponent10));
+ return val_min;
+}
+
+mp_float& mp_float_base::add_signed_long_long(const signed long long n)
+{
+ if(n < static_cast<signed long long>(0))
+ {
+ negate();
+ add_unsigned_long_long(static_cast<unsigned long long>(-n));
+ negate();
+ }
+ else
+ {
+ add_unsigned_long_long(static_cast<unsigned long long>(n));
+ }
+
+ return static_cast<mp_float&>(*this);
+}
+
+mp_float& mp_float_base::sub_signed_long_long(const signed long long n)
+{
+ return add_signed_long_long(static_cast<signed long long>(-n));
+}
+
+mp_float& mp_float_base::mul_signed_long_long(const signed long long n)
+{
+ const bool b_neg = (n < static_cast<signed long long>(0));
+
+ mul_unsigned_long_long((!b_neg) ? static_cast<unsigned long long>(n) : static_cast<unsigned long long>(-n));
+
+ if(b_neg) { negate(); }
+
+ return static_cast<mp_float&>(*this);
+}
+
+mp_float& mp_float_base::div_signed_long_long(const signed long long n)
+{
+ const bool b_neg = (n < static_cast<signed long long>(0));
+
+ div_unsigned_long_long((!b_neg) ? static_cast<unsigned long long>(n) : static_cast<unsigned long long>(-n));
+
+ if(b_neg) { negate(); }
+
+ return static_cast<mp_float&>(*this);
+}
+
+void mp_float_base::wr_string(std::string& str, std::ostream& os) const
+{
+ // Assess the format flags.
+ const std::ios::fmtflags my_flags = os.flags();
+
+ // Obtain the showpos flag.
+ const bool my_showpos = ((my_flags & std::ios::showpos) != static_cast<std::ios::fmtflags>(0u));
+ const bool my_uppercase = ((my_flags & std::ios::uppercase) != static_cast<std::ios::fmtflags>(0u));
+
+ // Use special handling for non-finite numbers (inf and nan).
+ if(!isfinite()) { ::special_handle_string_not_finite(str, static_cast<const mp_float&>(*this), my_showpos, my_uppercase); return; }
+
+ // Get the base-10 exponent.
+ boost::int64_t my_exp = get_order_exact();
+
+ // Get the output stream's precision and limit it to max_digits10.
+ // Erroneous zero or negative precision (theoretically impossible)
+ // will be set to ostream's default precision.
+ static const std::stringstream str_default;
+ static const std::streamsize prec_default = str_default.precision();
+
+ const std::size_t os_precision = ((os.precision() <= static_cast<std::streamsize>(0)) ? static_cast<std::size_t>(prec_default) : static_cast<std::size_t>(os.precision()));
+
+ // Determine the kind of output format requested (scientific, fixed, none).
+ os_float_field_type my_float_field;
+
+ if ((my_flags & std::ios::scientific) != static_cast<std::ios::fmtflags>(0u)) { my_float_field = os_float_field_scientific; }
+ else if((my_flags & std::ios::fixed) != static_cast<std::ios::fmtflags>(0u)) { my_float_field = os_float_field_fixed; }
+ else { my_float_field = os_float_field_none; }
+
+ bool use_scientific = false;
+ bool use_fixed = false;
+
+ if (my_float_field == os_float_field_scientific) { use_scientific = true; }
+ else if(my_float_field == os_float_field_fixed) { use_fixed = true; }
+ else // os_float_field_none
+ {
+ // Set up the range for dynamic detection of scientific notation.
+ // If the exponent is less than -4 or larger than a precision-dependent
+ // positive bound, then scientific notation is used.
+ static const boost::int64_t neg_bound_for_scientific_neg_exp = static_cast<boost::int64_t>(-4);
+ const boost::int64_t min_bound_for_scientific_pos_exp = (std::max)(static_cast<boost::int64_t>(os_precision), static_cast<boost::int64_t>(prec_default));
+ const boost::int64_t pos_bound_for_scientific_pos_exp = (std::min)(static_cast<boost::int64_t>(std::numeric_limits<mp_float>::digits10), min_bound_for_scientific_pos_exp);
+
+ if( (my_exp < neg_bound_for_scientific_neg_exp)
+ || (my_exp >= pos_bound_for_scientific_pos_exp)
+ )
+ {
+ use_scientific = true;
+ }
+ else
+ {
+ use_fixed = true;
+ }
+ }
+
+ // Ascertain the number of digits requested from mp_float.
+ std::size_t the_number_of_digits_i_want_from_e_float = static_cast<std::size_t>(0u);
+ const std::size_t max10_plus_one = static_cast<std::size_t>(std::numeric_limits<mp_float>::max_digits10 + 1);
+
+ if(use_scientific)
+ {
+ // The float-field is scientific. The number of digits is given by
+ // (1 + the ostream's precision), not to exceed (max_digits10 + 1).
+ const std::size_t prec_plus_one = static_cast<std::size_t>(1u + os_precision);
+ the_number_of_digits_i_want_from_e_float = (std::min)(max10_plus_one, prec_plus_one);
+ }
+ else if(use_fixed)
+ {
+ // The float-field is scientific. The number of all-digits depends
+ // on the form of the number.
+
+ if(my_exp >= static_cast<boost::int64_t>(0))
+ {
+ // If the number is larger than 1 in absolute value, then the number of
+ // digits is given by the width of the integer part plus the ostream's
+ // precision, not to exceed (max_digits10 + 1).
+ const std::size_t exp_plus_one = static_cast<std::size_t>(my_exp + 1);
+ const std::size_t exp_plus_one_plus_my_precision = static_cast<std::size_t>(exp_plus_one + os_precision);
+
+ the_number_of_digits_i_want_from_e_float = (std::min)(exp_plus_one_plus_my_precision, max10_plus_one);
+ }
+ else
+ {
+ const boost::int64_t exp_plus_one = static_cast<boost::int64_t>(my_exp + 1);
+ const boost::int64_t exp_plus_one_plus_my_precision = static_cast<boost::int64_t>(exp_plus_one + static_cast<boost::int64_t>(os_precision));
+
+ the_number_of_digits_i_want_from_e_float = (std::min)(static_cast<std::size_t>((std::max)(exp_plus_one_plus_my_precision, static_cast<boost::int64_t>(0))), max10_plus_one);
+ }
+ }
+
+ // If the float field is not set, reduce the number of digits requested
+ // from mp_float such that it neither exceeds the ostream's precision
+ // nor mp_float's max_digits10.
+ if(my_float_field == os_float_field_none)
+ {
+ const std::size_t max_digits = (std::min)(os_precision, static_cast<std::size_t>(std::numeric_limits<mp_float>::max_digits10));
+ the_number_of_digits_i_want_from_e_float = (std::min)(the_number_of_digits_i_want_from_e_float, max_digits);
+ }
+
+ // Extract the rounded output string with the desired number of digits.
+ get_output_string(str, my_exp, the_number_of_digits_i_want_from_e_float);
+
+ // Obtain additional format information.
+ const bool my_showpoint = ((my_flags & std::ios::showpoint) != static_cast<std::ios::fmtflags>(0u));
+
+ // Write the output string in the desired format.
+ if (my_float_field == os_float_field_scientific) { wr_string_scientific(str, my_exp, os_precision, my_showpoint, my_uppercase); }
+ else if(my_float_field == os_float_field_fixed) { wr_string_fixed(str, my_exp, os_precision, my_showpoint); }
+ else // os_float_field_none
+ {
+ (use_scientific ? wr_string_scientific(str, my_exp, os_precision, my_showpoint, my_uppercase, true)
+ : wr_string_fixed(str, my_exp, os_precision, my_showpoint, true));
+ }
+
+ // Append the sign.
+ if (isneg()) { str.insert(static_cast<std::size_t>(0u), "-"); }
+ else if(my_showpos) { str.insert(static_cast<std::size_t>(0u), "+"); }
+
+ // Handle std::setw(...), std::setfill(...), std::left, std::right, std::internal.
+ const std::size_t my_width = ((os.width() >= static_cast<std::streamsize>(0)) ? static_cast<std::size_t>(os.width())
+ : static_cast<std::size_t>(0u));
+
+ if(my_width > str.length())
+ {
+ // Get the number of fill characters.
+ const std::size_t n_fill = static_cast<std::size_t>(my_width - str.length());
+
+ // Left-justify is the exception, std::right and std::internal justify right.
+ const bool my_left = ((my_flags & std::ios::left) != static_cast<std::ios::fmtflags>(0u));
+
+ // Justify left or right and insert the fill characters.
+ str.insert((my_left ? str.end() : str.begin()), n_fill, os.fill());
+ }
+}
+
+namespace
+{
+ void special_handle_string_not_finite(std::string& str,
+ const mp_float& f,
+ const bool my_showpos,
+ const bool my_uppercase)
+ {
+ // Handle INF and NaN.
+ if(f.isinf())
+ {
+ if(my_uppercase)
+ {
+ str = ((!f.isneg()) ? (my_showpos ? std::string("+INF") : std::string("INF")) : std::string("-INF"));
+ }
+ else
+ {
+ str = ((!f.isneg()) ? (my_showpos ? std::string("+inf") : std::string("inf")) : std::string("-inf"));
+ }
+ }
+ else
+ {
+ str = (my_uppercase ? std::string("NAN") : std::string("nan"));
+ }
+ }
+
+ void wr_string_scientific(std::string& str,
+ const boost::int64_t my_exp,
+ const std::size_t os_precision,
+ const bool my_showpoint,
+ const bool my_uppercase,
+ const bool trim_trailing_zeros)
+ {
+ if(os_precision > static_cast<std::size_t>(str.length() - 1u))
+ {
+ // Zero-extend the string to the given precision if necessary.
+ const std::size_t n_pad = static_cast<std::size_t>(os_precision - (str.length() - 1u));
+
+ str.insert(str.end(), n_pad, static_cast<char>('0'));
+ }
+
+ // Insert the decimal point.
+ str.insert(static_cast<std::size_t>(1u), ".");
+
+ // Trim the trailing zeros, where the trim-characteristics depend on the showpoint flag.
+ if(trim_trailing_zeros)
+ {
+ const std::string::const_reverse_iterator rit_non_zero = std::find_if(str.rbegin(), str.rend(), mp_float_base::char_is_nonzero_predicate);
+
+ if(rit_non_zero != str.rbegin())
+ {
+ const std::size_t ofs = str.length() - std::distance<std::string::const_reverse_iterator>(str.rbegin(), rit_non_zero);
+ str.erase(str.begin() + ofs, str.end());
+ }
+ }
+
+ // Perform the final manipulations on the digits of the string.
+ if(my_showpoint)
+ {
+ if(trim_trailing_zeros) { ::special_extend_string_to_precision(str, os_precision); }
+ }
+ else
+ {
+ // Remove the trailing decimal point if necessary.
+ if(*(str.end() - 1u) == static_cast<char>('.'))
+ {
+ str.erase(str.end() - 1u, str.end());
+ }
+ }
+
+ // Append the exponent in uppercase or lower case, including its sign.
+ const bool b_exp_is_neg = (my_exp < static_cast<boost::int64_t>(0));
+ const boost::uint64_t u_exp = static_cast<boost::uint64_t>(!b_exp_is_neg ? my_exp : static_cast<boost::int64_t>(-my_exp));
+
+ str += (my_uppercase ? "E" : "e");
+ str += (b_exp_is_neg ? "-" : "+");
+ std::string str_exp = boost::lexical_cast<std::string>(static_cast<boost::int64_t>(u_exp));
+
+ // Format the exponent string to have a width that is an even multiple of three.
+ const std::size_t str_exp_len = str_exp.length();
+ const std::size_t str_exp_len_mod3 = static_cast<std::size_t>(str_exp_len % 3u);
+ const std::size_t str_exp_len_pad = ((str_exp_len_mod3 != static_cast<std::size_t>(0u)) ? static_cast<std::size_t>(3u - (str_exp_len % 3u))
+ : static_cast<std::size_t>(0u));
+
+ str += std::string(str_exp_len_pad, static_cast<char>('0'));
+ str += str_exp;
+ }
+
+ void wr_string_fixed(std::string& str,
+ const boost::int64_t my_exp,
+ const std::size_t os_precision,
+ const bool my_showpoint,
+ const bool trim_trailing_zeros)
+ {
+ const std::size_t input_str_len = str.length();
+
+ if(my_exp < static_cast<boost::int64_t>(0))
+ {
+ // The number is less than one in magnitude. Insert the decimal
+ // point using "0." as well as the needed number of leading zeros.
+ const std::size_t minus_exp_minus_one = static_cast<std::size_t>(-my_exp - 1);
+ const std::string str_zero_insert((std::min)(minus_exp_minus_one, os_precision), static_cast<char>('0'));
+
+ const boost::int64_t n_pad = static_cast<boost::int64_t>(static_cast<boost::int64_t>(os_precision) - static_cast<boost::int64_t>(str.length() + str_zero_insert.length()));
+
+ str.insert(0u, "0." + str_zero_insert);
+
+ // Zero-extend the string to the given precision if necessary.
+ if(n_pad > static_cast<boost::int64_t>(0))
+ {
+ str.insert(str.end(), static_cast<std::size_t>(n_pad), static_cast<char>('0'));
+ }
+ }
+ else
+ {
+ // Insert the decimal point.
+ const std::size_t my_exp_plus_one = static_cast<std::size_t>(my_exp + 1);
+
+ // The number string is not large enough to hold the integer part of the number.
+ // Zero extend the integer part of the string.
+ if(input_str_len < my_exp_plus_one)
+ {
+ str.insert(str.end(), static_cast<std::size_t>(my_exp_plus_one- str.length()), static_cast<char>('0'));
+ }
+
+ str.insert(my_exp_plus_one, ".");
+
+ // Zero-extend the string to the given precision if necessary.
+ const boost::int64_t n_pad = static_cast<boost::int64_t>(os_precision) - static_cast<boost::int64_t>(static_cast<boost::int64_t>(str.length() - 1u) - (my_exp + 1));
+
+ if(n_pad > static_cast<boost::int64_t>(0))
+ {
+ str.insert(str.end(), static_cast<std::size_t>(n_pad), static_cast<char>('0'));
+ }
+ }
+
+ // Trim the trailing zeros, where the trim-characteristics depend on the showpoint flag.
+ if(trim_trailing_zeros)
+ {
+ const std::string::const_reverse_iterator rit_non_zero = std::find_if(str.rbegin(), str.rend(), mp_float_base::char_is_nonzero_predicate);
+
+ if(rit_non_zero != str.rbegin())
+ {
+ const std::size_t ofs = str.length() - std::distance<std::string::const_reverse_iterator>(str.rbegin(), rit_non_zero);
+ str.erase(str.begin() + ofs, str.end());
+ }
+ }
+
+ // Perform the final manipulations on the digits of the string.
+ if(my_showpoint)
+ {
+ if(trim_trailing_zeros) { ::special_extend_string_to_precision(str, os_precision); }
+ }
+ else
+ {
+ // Remove the trailing decimal point if necessary.
+ if(*(str.end() - 1u) == static_cast<char>('.'))
+ {
+ str.erase(str.end() - 1u, str.end());
+ }
+ }
+ }
+
+ void special_extend_string_to_precision(std::string& str, const std::size_t os_precision)
+ {
+ // This is the special case of showpoint in combination with
+ // a non-fixed, non-scientific representation. The string has
+ // to be zero extended such that the total width of its entire
+ // non-zero part exactly equals the precision.
+
+ // Check if the number is less than 1.
+ if( (str.at(static_cast<std::size_t>(0u)) == static_cast<char>('0'))
+ && (str.at(static_cast<std::size_t>(1u)) == static_cast<char>('.'))
+ )
+ {
+ if(str.length() == static_cast<std::size_t>(2u))
+ {
+ // This string represents zero and needs zero extension.
+ str.insert(str.end(), os_precision, static_cast<char>('0'));
+ }
+ else
+ {
+ // This is a non-zero decimal less than 1 that needs zero extension.
+ const std::string::const_iterator it_non_zero = std::find_if(str.begin() + 2u, str.end(), mp_float_base::char_is_nonzero_predicate);
+ const std::size_t len_non_zero_part = std::distance<std::string::const_iterator>(it_non_zero, str.end());
+ const std::size_t u_pad = static_cast<std::size_t>(os_precision - len_non_zero_part);
+ str.insert(str.end(), u_pad, static_cast<char>('0'));
+ }
+ }
+ else
+ {
+ // This is a number greater than or equal to 1 that needs zero extension.
+ const std::size_t u_pad = static_cast<std::size_t>(os_precision - static_cast<std::size_t>(str.length() - static_cast<std::size_t>(1u)));
+ str.insert(str.end(), u_pad, static_cast<char>('0'));
+ }
+ }
+}
+
+mp_float mp_float_base::my_ldexp (const mp_float&, int) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_frexp (const mp_float&, int*) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_fmod (const mp_float&, const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_cbrt (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_rootn (const mp_float&, const boost::uint32_t) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_exp (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_log (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_sin (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_cos (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_tan (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_asin (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_acos (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_atan (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_sinh (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_cosh (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_tanh (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_asinh (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_acosh (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_atanh (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_gamma (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_riemann_zeta (const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_cyl_bessel_jn(const boost::int32_t, const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+mp_float mp_float_base::my_cyl_bessel_yn(const boost::int32_t, const mp_float&) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+
+/*
+#include <iostream>
+#include <boost/array>
+#include <vector>
+#include <string>
+#include <algorithm>
+#include <iterator>
+#include <sstream>
+#include <regex>
+
+namespace
+{
+ struct regex_matcher
+ {
+ private:
+ regex_matcher();
+ const regex_matcher& operator=(const regex_matcher&);
+
+ std::match_results<std::string::const_iterator>& results;
+ const std::string& str;
+
+ public:
+ regex_matcher(std::match_results<std::string::const_iterator>& mr, const std::string& s) : results(mr), str(s) { }
+
+ regex_matcher(const regex_matcher& rxm) : results(rxm.results), str(rxm.str) { }
+
+ bool operator()(const std::regex& rx) const { return std::regex_match(str, results, rx); }
+ };
+
+ template<typename T>
+ std::string lexical_cast(const T& t)
+ {
+ std::stringstream ss;
+ ss << t;
+ return ss.str();
+ }
+}
+
+bool rd_string(const std::string& str)
+{
+ // Use regular expressions to do a preliminary parse of the input string.
+
+ // Here is the key to the upcoming regular expressions.
+ // [1] = sign(s)
+ // [2] = leading zeros
+ // [3] = mantissa
+ // [4] = dot
+ // [5] = decimal part
+ // [6] = exponent letter e or E
+ // [7] = exponent sign + or -
+ // [8] = exponent's leading zeros
+ // [9] = exponent value
+ static const std::array<std::regex, 6u> the_regs_data =
+ {{
+ std::regex("([+|-]*)([0]*)([0-9]+)([.])([0-9]*)([e|E])([+|-]*)([0]*)([0-9]+)"), // Exponent with dot, integer part required.
+ std::regex("([+|-]*)([0]*)([0-9]*)([.])([0-9]+)([e|E])([+|-]*)([0]*)([0-9]+)"), // Exponent with dot, decimal part required.
+ std::regex("([+|-]*)([0]*)([0-9]+)()()([e|E])([+|-]*)([0]*)([0-9]+)"), // Exponent no dot, integer part required.
+ std::regex("([+|-]*)([0]*)([0-9]+)([.])([0-9]*)()()()()"), // Fixed with dot, integer part required.
+ std::regex("([+|-]*)([0]*)([0-9]*)([.])([0-9]+)()()()()"), // Fixed with dot, decimal part required.
+ std::regex("([+|-]*)([0]*)([0-9]+)()()()()()()") // Fixed no dot.
+ }};
+
+ static const std::vector<std::regex> the_regs(the_regs_data.begin(), the_regs_data.end());
+
+ std::match_results<std::string::const_iterator> mr;
+
+ const std::vector<std::regex>::const_iterator it_rx = std::find_if(the_regs.begin(), the_regs.end(), ::regex_matcher(mr, str));
+
+ const bool b_match = (it_rx != the_regs.end());
+
+ (b_match ? std::cout << "Match OK: index = " << std::distance(the_regs.begin(), it_rx) << std::endl
+ : std::cout << "Match failed!" << std::endl);
+
+ for(std::match_results<std::string::const_iterator>::const_iterator it_mr = mr.begin(); it_mr != mr.end(); ++it_mr)
+ {
+ std::cout << "mr-index: " + lexical_cast(std::distance(mr.begin(), it_mr)) << ", " << *it_mr << std::endl;
+ }
+
+ std::cout << std::endl;
+
+ return b_match;
+}
+
+int main(void)
+{
+ std::string str;
+
+ for(;;)
+ {
+ std::cout << "Enter FP string: ";
+ std::cin >> str;
+
+ if(str == "exit") { break; }
+
+ static_cast<void>(rd_string(str));
+ }
+}
+*/

Added: sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.lib
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/p4/mpfr.pdb
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.lib
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/mpfr/2-4-1/vc9/x64/mpfr.pdb
==============================================================================
Binary file. No diff available.

Added: sandbox/multiprecision/src/backends/float/mpfr/mp_float_mpfr.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/mpfr/mp_float_mpfr.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,631 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <sstream>
+#include <iomanip>
+#include <cstdio>
+#include <cstdarg>
+
+#include <boost/array.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+#include <boost/multiprecision/utility/util_numeric_cast.hpp>
+#include "mp_float_mpfr_protos.h"
+
+using boost::multiprecision::mp_float_mpfr;
+
+namespace
+{
+ const double& d_log2(void)
+ {
+ static const double value_log2 = 0.3010299956639811952137389;
+ return value_log2;
+ }
+}
+
+void mp_float_mpfr::init(void)
+{
+ static bool precision_is_initialized;
+
+ if(precision_is_initialized == false)
+ {
+ precision_is_initialized = true;
+ ::mpfr_set_default_prec(static_cast<mp_prec_t>(mp_digits2 + static_cast<boost::int32_t>(4)));
+ }
+}
+
+mp_float_mpfr::mp_float_mpfr() { init(); ::mpfr_init(rop); }
+
+mp_float_mpfr::mp_float_mpfr(const char n) { init(); const bool b_neg = (std::numeric_limits<char>::is_signed ? (n < static_cast<char> (0)) : false); from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+mp_float_mpfr::mp_float_mpfr(const wchar_t n) { init(); const bool b_neg = (std::numeric_limits<wchar_t>::is_signed ? (n < static_cast<wchar_t>(0)) : false); from_unsigned_long((!b_neg) ? static_cast<unsigned long>(n) : static_cast<unsigned long>(-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+
+mp_float_mpfr::mp_float_mpfr(const signed char n) { init(); const bool b_neg = (n < static_cast<signed char>(0)); from_unsigned_long ((!b_neg) ? static_cast<unsigned long> (n) : static_cast<unsigned long> (-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+mp_float_mpfr::mp_float_mpfr(const signed short n) { init(); const bool b_neg = (n < static_cast<signed short>(0)); from_unsigned_long ((!b_neg) ? static_cast<unsigned long> (n) : static_cast<unsigned long> (-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+mp_float_mpfr::mp_float_mpfr(const signed int n) { init(); const bool b_neg = (n < static_cast<signed int>(0)); from_unsigned_long ((!b_neg) ? static_cast<unsigned long> (n) : static_cast<unsigned long> (-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+mp_float_mpfr::mp_float_mpfr(const signed long n) { init(); const bool b_neg = (n < static_cast<signed long>(0)); from_unsigned_long ((!b_neg) ? static_cast<unsigned long> (n) : static_cast<unsigned long> (-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+mp_float_mpfr::mp_float_mpfr(const signed long long n) { init(); const bool b_neg = (n < static_cast<signed long long>(0)); from_unsigned_long_long((!b_neg) ? static_cast<unsigned long long>(n) : static_cast<unsigned long long>(-n)); if(b_neg) { ::mpfr_neg(rop, rop, GMP_RNDN); } }
+
+mp_float_mpfr::mp_float_mpfr(const unsigned char n) { init(); from_unsigned_long (static_cast<unsigned long> (n)); }
+mp_float_mpfr::mp_float_mpfr(const unsigned short n) { init(); from_unsigned_long (static_cast<unsigned long> (n)); }
+mp_float_mpfr::mp_float_mpfr(const unsigned int n) { init(); from_unsigned_long (static_cast<unsigned long> (n)); }
+mp_float_mpfr::mp_float_mpfr(const unsigned long n) { init(); from_unsigned_long (static_cast<unsigned long> (n)); }
+mp_float_mpfr::mp_float_mpfr(const unsigned long long n) { init(); from_unsigned_long_long(static_cast<unsigned long long>(n)); }
+
+mp_float_mpfr::mp_float_mpfr(const float f)
+{
+ init();
+
+ const bool b_neg = (f < 0.0f);
+
+ if(!boost::multiprecision::isfinite(static_cast<double>(f)))
+ {
+ (boost::multiprecision::isnan(static_cast<double>(f)) ? mpfr_set_nan(rop) : ((!b_neg) ? ::mpfr_set_inf(rop, 1) : ::mpfr_set_inf(rop, -1)));
+ return;
+ }
+
+ if(f == 0.0f)
+ {
+ mpfr_init_set_ui(rop, 0uL, GMP_RNDN);
+ return;
+ }
+
+ const native_float_parts<float> fb((!b_neg) ? f : -f);
+
+ // Create an mp_float_mpfr from the fractional part of the
+ // mantissa expressed as an unsigned long long.
+ from_unsigned_long_long(fb.get_mantissa());
+
+ // Scale the unsigned long long representation to the fractional
+ // part of the float and multiply with the base-2 exponent.
+ const int p2 = fb.get_exponent() - (std::numeric_limits<float>::digits - 1);
+
+ if(p2 != 0) { mpfr_mul_2si(rop, rop, static_cast<signed long>(p2), GMP_RNDN); }
+
+ if(b_neg)
+ {
+ ::mpfr_neg(rop, rop, GMP_RNDN);
+ }
+}
+
+mp_float_mpfr::mp_float_mpfr(const double d) { init(); mpfr_init_set_d(rop, d, GMP_RNDN); }
+mp_float_mpfr::mp_float_mpfr(const long double ld) { init(); mpfr_init_set_ld(rop, ld, GMP_RNDN); }
+mp_float_mpfr::mp_float_mpfr(const mp_float_mpfr& f) { init(); mpfr_init_set(rop, f.rop, GMP_RNDN); }
+
+mp_float_mpfr::mp_float_mpfr(const char* s) { init(); static_cast<void>(rd_string(s)); }
+mp_float_mpfr::mp_float_mpfr(const std::string& str) { init(); static_cast<void>(rd_string(str.c_str())); }
+
+mp_float_mpfr::mp_float_mpfr(const double mantissa, const boost::int64_t exponent)
+{
+ init();
+
+ const bool mantissa_is_iszero = (::fabs(mantissa) < ((std::numeric_limits<double>::min)() * 2.0));
+
+ if(mantissa_is_iszero)
+ {
+ if(exponent == static_cast<boost::int64_t>(0))
+ {
+ mpfr_init_set(rop, (boost::multiprecision::one()).rop, GMP_RNDN);
+ }
+ else
+ {
+ mpfr_init_set(rop, (boost::multiprecision::zero()).rop, GMP_RNDN);
+ }
+ }
+ else
+ {
+ mpfr_init_set(rop, (boost::multiprecision::zero()).rop, GMP_RNDN);
+ operator=(mp_float_mpfr(mantissa));
+ operator*=(mp_float_mpfr("1E" + boost::lexical_cast<std::string>(exponent)));
+ }
+}
+
+mp_float_mpfr::~mp_float_mpfr()
+{
+ ::mpfr_clear(rop);
+}
+
+void mp_float_mpfr::from_unsigned_long_long(const unsigned long long u)
+{
+ if(u <= static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ from_unsigned_long(static_cast<unsigned long>(u));
+ }
+ else
+ {
+ static_cast<void>(::mpfr_init_set_str(rop, boost::lexical_cast<std::string>(u).c_str(), 10, GMP_RNDN));
+ }
+}
+
+void mp_float_mpfr::from_unsigned_long(const unsigned long u)
+{
+ mpfr_init_set_ui(rop, u, GMP_RNDN);
+}
+
+const mp_float_mpfr& mp_float_mpfr::my_value_nan(void) const
+{
+ static const mp_float_mpfr val;
+ return val;
+}
+
+const mp_float_mpfr& mp_float_mpfr::my_value_inf(void) const
+{
+ static const mp_float_mpfr inf = boost::multiprecision::one() / boost::multiprecision::zero();
+ return inf;
+}
+
+mp_float_mpfr& mp_float_mpfr::operator=(const mp_float_mpfr& v)
+{
+ static_cast<void>(::mpfr_set(rop, v.rop, GMP_RNDN));
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::operator+=(const mp_float_mpfr& v)
+{
+ static_cast<void>(::mpfr_add(rop, rop, v.rop, GMP_RNDN));
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::operator-=(const mp_float_mpfr& v)
+{
+ static_cast<void>(::mpfr_sub(rop, rop, v.rop, GMP_RNDN));
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::operator*=(const mp_float_mpfr& v)
+{
+ static_cast<void>(::mpfr_mul(rop, rop, v.rop, GMP_RNDN));
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::operator/=(const mp_float_mpfr& v)
+{
+ static_cast<void>(::mpfr_div(rop, rop, v.rop, GMP_RNDN));
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::add_unsigned_long_long(const unsigned long long n)
+{
+ if(n > static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ operator+=(mp_float_mpfr(n));
+ }
+ else
+ {
+ static_cast<void>(::mpfr_add_ui(rop, rop, static_cast<unsigned long>(n), GMP_RNDN));
+ }
+
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::sub_unsigned_long_long(const unsigned long long n)
+{
+ if(n > static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ operator-=(mp_float_mpfr(n));
+ }
+ else
+ {
+ static_cast<void>(::mpfr_sub_ui(rop, rop, static_cast<unsigned long>(n), GMP_RNDN));
+ }
+
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::mul_unsigned_long_long(const unsigned long long n)
+{
+ if(n > static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ operator*=(mp_float_mpfr(n));
+ }
+ else
+ {
+ static_cast<void>(::mpfr_mul_ui(rop, rop, static_cast<unsigned long>(n), GMP_RNDN));
+ }
+
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::div_unsigned_long_long(const unsigned long long n)
+{
+ if(n > static_cast<unsigned long long>((std::numeric_limits<unsigned long>::max)()))
+ {
+ operator/=(mp_float_mpfr(n));
+ }
+ else
+ {
+ static_cast<void>(::mpfr_div_ui(rop, rop, static_cast<unsigned long>(n), GMP_RNDN));
+ }
+
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::negate(void)
+{
+ ::mpfr_neg(rop, rop, GMP_RNDN);
+ return *this;
+}
+
+boost::int32_t mp_float_mpfr::cmp(const mp_float_mpfr& v) const
+{
+ // Handle all non-finite cases.
+ if((!isfinite()) || (!v.isfinite()))
+ {
+ // NaN can never equal NaN. Return an implementation-dependent
+ // signed result. Also note that comparison of NaN with NaN
+ // using operators greater-than or less-than is undefined.
+ if(isnan() || v.isnan()) { return (isnan() ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1)); }
+
+ if(isinf() && v.isinf())
+ {
+ // Both *this and v are infinite. They are equal if they have the same sign.
+ // Otherwise, *this is less than v if and only if *this is negative.
+ return ((isneg() == v.isneg()) ? static_cast<boost::int32_t>(0) : (isneg() ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1)));
+ }
+
+ if(isinf())
+ {
+ // *this is infinite, but v is finite.
+ // So negative infinite *this is less than any finite v.
+ // Whereas positive infinite *this is greater than any finite v.
+ return (isneg() ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1));
+ }
+ else
+ {
+ // *this is finite, and v is infinite.
+ // So any finite *this is greater than negative infinite v.
+ // Whereas any finite *this is less than positive infinite v.
+ return (v.isneg() ? static_cast<boost::int32_t>(1) : static_cast<boost::int32_t>(-1));
+ }
+ }
+
+ // And now handle all *finite* cases.
+ if(iszero() && v.iszero())
+ {
+ return static_cast<boost::int32_t>(0);
+ }
+ else
+ {
+ return static_cast<boost::int32_t>(::mpfr_cmp(rop, v.rop));
+ }
+}
+
+mp_float_mpfr& mp_float_mpfr::calculate_sqrt(void)
+{
+ static_cast<void>(::mpfr_sqrt(rop, rop, GMP_RNDN));
+ return *this;
+}
+
+mp_float_mpfr& mp_float_mpfr::calculate_inv(void)
+{
+ static_cast<void>(::mpfr_div(rop, boost::multiprecision::one().rop, rop, GMP_RNDN));
+ return *this;
+}
+
+bool mp_float_mpfr::isnan (void) const { return (::mpfr_nan_p (rop) != 0); }
+bool mp_float_mpfr::isinf (void) const { return (::mpfr_inf_p (rop) != 0); }
+bool mp_float_mpfr::isfinite(void) const { return ((!isnan()) && (!isinf())); }
+bool mp_float_mpfr::isone (void) const { return ((::mpfr_integer_p(rop) != 0) && (::mpfr_get_si(rop, GMP_RNDN) == static_cast<unsigned long>(1uL))); }
+bool mp_float_mpfr::isint (void) const { return (::mpfr_integer_p(rop) != 0); }
+bool mp_float_mpfr::isneg (void) const { return (::mpfr_sgn (rop) < 0); }
+
+bool mp_float_mpfr::iszero(void) const
+{
+ return (::mpfr_zero_p(rop) != 0);
+}
+
+mp_float_mpfr& mp_float_mpfr::operator++(void) { ::mpfr_add_ui(rop, rop, static_cast<unsigned long>(1uL), GMP_RNDN); return *this; }
+mp_float_mpfr& mp_float_mpfr::operator--(void) { ::mpfr_sub_ui(rop, rop, static_cast<unsigned long>(1uL), GMP_RNDN); return *this; }
+
+void mp_float_mpfr::extract_parts(double& mantissa, boost::int64_t& exponent) const
+{
+ const bool b_neg = isneg();
+
+ long n2;
+ const double d2 = ::mpfr_get_d_2exp(&n2, (boost::multiprecision::fabs(*this)).rop, GMP_RNDN);
+ const double x_exp = static_cast<double>(static_cast<double>(n2) * ::d_log2());
+
+ const double x_exp_integer_part = static_cast<double>(static_cast<long>(x_exp));
+ const double x_exp_decimal_part = static_cast<double>(x_exp - x_exp_integer_part);
+
+ double m = d2 * ::pow(10.0, x_exp_decimal_part);
+ boost::int64_t e = static_cast<boost::int64_t>(x_exp_integer_part);
+
+ if(m < 1.0)
+ {
+ m *= 10.0;
+ e -= static_cast<boost::int64_t>(1);
+ }
+
+ mantissa = ((!b_neg) ? m : -m);
+ exponent = e;
+}
+
+double mp_float_mpfr::extract_double(void) const
+{
+ const bool b_neg = isneg();
+
+ // Check for non-normal mp_float_mpfr.
+ if(!isfinite())
+ {
+ if(isnan())
+ {
+ return std::numeric_limits<double>::quiet_NaN();
+ }
+ else
+ {
+ return ((!b_neg) ? std::numeric_limits<double>::infinity()
+ : -std::numeric_limits<double>::infinity());
+ }
+ }
+
+ const mp_float_mpfr xx(boost::multiprecision::fabs(*this));
+
+ // Check for zero mp_float_mpfr.
+ if(iszero() || (xx < boost::multiprecision::double_min()))
+ {
+ return 0.0;
+ }
+
+ // Check if mp_float_mpfr exceeds the maximum of double.
+ if(xx > boost::multiprecision::double_max())
+ {
+ return ((!b_neg) ? std::numeric_limits<double>::infinity()
+ : -std::numeric_limits<double>::infinity());
+ }
+
+ const double dx = ::mpfr_get_d(xx.rop, GMP_RNDN);
+
+ return ((!b_neg) ? dx : -dx);
+}
+
+long double mp_float_mpfr::extract_long_double(void) const
+{
+ const bool b_neg = isneg();
+
+ // Check for non-normal mp_float_mpfr.
+ if(!isfinite())
+ {
+ if(isnan())
+ {
+ return std::numeric_limits<long double>::quiet_NaN();
+ }
+ else
+ {
+ return ((!b_neg) ? std::numeric_limits<long double>::infinity()
+ : -std::numeric_limits<long double>::infinity());
+ }
+ }
+
+ const mp_float_mpfr xx(boost::multiprecision::fabs(*this));
+
+ // Check for zero mp_float_mpfr.
+ if(iszero() || (xx < boost::multiprecision::long_double_min()))
+ {
+ return static_cast<long double>(0.0);
+ }
+
+ // Check if mp_float_mpfr exceeds the maximum of double.
+ if(xx > boost::multiprecision::long_double_max())
+ {
+ return ((!b_neg) ? std::numeric_limits<long double>::infinity()
+ : -std::numeric_limits<long double>::infinity());
+ }
+
+ const long double ldx = ::mpfr_get_ld(xx.rop, GMP_RNDN);
+
+ return ((!b_neg) ? ldx : -ldx);
+}
+
+signed long long mp_float_mpfr::extract_signed_long_long(void) const
+{
+ const bool b_neg = isneg();
+
+ const mp_float_mpfr nx = boost::multiprecision::fabs(*this);
+
+ if(nx > boost::multiprecision::signed_long_long_max())
+ {
+ return ((!b_neg) ? (std::numeric_limits<signed long long>::max)()
+ : -(std::numeric_limits<signed long long>::max)());
+ }
+
+ if(nx < boost::multiprecision::one())
+ {
+ return static_cast<signed long long>(0);
+ }
+
+ if(nx.isone())
+ {
+ return ((!b_neg) ? static_cast<signed long long>(1) : static_cast<signed long long>(-1));
+ }
+
+ boost::array<char, 64u> str = {{ static_cast<char>('0') }};
+
+ mp_exp_t p10;
+
+ static_cast<void>(::mpfr_get_str(str.data(), &p10, 10, str.size() - 1u, nx.rop, GMP_RNDN));
+
+ std::string str_sll(static_cast<std::size_t>(p10), static_cast<char>('0'));
+
+ std::copy(str.begin(), str.begin() + str_sll.size(), str_sll.begin());
+
+ const signed long long n = boost::multiprecision::utility::numeric_cast<signed long long>(str_sll);
+
+ return ((!b_neg) ? n : -n);
+}
+
+unsigned long long mp_float_mpfr::extract_unsigned_long_long(void) const
+{
+ if(isneg())
+ {
+ return static_cast<unsigned long long>(extract_signed_long_long());
+ }
+
+ if(*this > boost::multiprecision::unsigned_long_long_max())
+ {
+ return (std::numeric_limits<unsigned long long>::max)();
+ }
+
+ if(*this < boost::multiprecision::one())
+ {
+ return static_cast<unsigned long long>(0u);
+ }
+
+ if(isone())
+ {
+ return static_cast<unsigned long long>(1u);
+ }
+
+ boost::array<char, 64u> str = {{ static_cast<char>('0') }};
+
+ mp_exp_t p10;
+
+ static_cast<void>(::mpfr_get_str(str.data(), &p10, 10, str.size() - 1u, rop, GMP_RNDN));
+
+ std::string str_ull(static_cast<std::size_t>(p10), static_cast<char>('0'));
+
+ std::copy(str.begin(), str.begin() + str_ull.size(), str_ull.begin());
+
+ const unsigned long long n = boost::multiprecision::utility::numeric_cast<unsigned long long>(str_ull);
+
+ return n;
+}
+
+mp_float_mpfr mp_float_mpfr::extract_integer_part(void) const
+{
+ const bool b_neg = isneg();
+
+ mp_float_mpfr nx;
+
+ ::mpfr_floor(nx.rop, (boost::multiprecision::fabs(*this)).rop, GMP_RNDN);
+
+ return ((!b_neg) ? nx : -nx);
+}
+
+mp_float_mpfr mp_float_mpfr::extract_decimal_part(void) const
+{
+ const bool b_neg = isneg();
+
+ const mp_float_mpfr xx = boost::multiprecision::fabs(*this);
+
+ const mp_float_mpfr dx = xx - xx.extract_integer_part();
+
+ return ((!b_neg) ? dx : -dx);
+}
+
+boost::int64_t mp_float_mpfr::get_order_exact(void) const
+{
+ // Get the order-10 of the mp_float_mpfr. This is done using a partial
+ // string extraction with 10 decimal digits.
+
+ // Create a format string for 10-digits and scientific notation.
+ std::string str_fmt = std::string("%.10RNe");
+
+ // Get the ten digits.
+ boost::array<char, 64u> buf = {{ static_cast<char>(0) }};
+
+ ::mpfr_sprintf(buf.data(), str_fmt.c_str(), rop);
+
+ const std::string str = std::string(buf.data());
+
+ // Extract the base-10 exponent.
+ const std::size_t pos_letter_e = str.rfind(static_cast<char>('e'));
+
+ const boost::int64_t my_exp = ((pos_letter_e != std::string::npos) ? boost::multiprecision::utility::numeric_cast<boost::int64_t>(static_cast<const char* const>(str.c_str() + (pos_letter_e + 1u)))
+ : static_cast<boost::int64_t>(0));
+
+ return my_exp;
+}
+
+boost::int64_t mp_float_mpfr::get_order_fast(void) const
+{
+ const mp_float_mpfr xx = boost::multiprecision::fabs(*this);
+
+ if(xx.iszero() || xx.isone())
+ {
+ return static_cast<boost::int64_t>(0);
+ }
+ else
+ {
+ signed long int n2;
+ const double d2 = ::mpfr_get_d_2exp(&n2, xx.rop, GMP_RNDN);
+ const double lg10x = static_cast<double>(::log10(d2) + (static_cast<double>(n2) * ::d_log2()));
+
+ return ((lg10x < 0.0) ? static_cast<boost::int64_t>(lg10x - 0.5)
+ : static_cast<boost::int64_t>(lg10x + 0.5));
+ }
+}
+
+void mp_float_mpfr::get_output_string(std::string& str, boost::int64_t&, const std::size_t number_of_digits) const
+{
+ // Create a format string such as "%+.99RNe" in order to extract 100 digits
+ // in scientific notation with the lowercase and noshowpos flags.
+ const std::size_t the_number_of_digits_scientific = static_cast<std::size_t>((std::max)(number_of_digits, static_cast<std::size_t>(1u)) - static_cast<std::size_t>(1u));
+
+ const std::string str_fmt = std::string("%.") + (boost::lexical_cast<std::string>(the_number_of_digits_scientific) + "RNe");
+
+ // Get the string representation of the mp_float_mpfr in scientific notation (lowercase, noshowpos).
+ boost::array<char, static_cast<std::size_t>(mp_float_mpfr::mp_max_digits10 + 32)> buf = {{ static_cast<char>(0) }};
+
+ ::mpfr_sprintf(buf.data(), str_fmt.c_str(), rop);
+
+ str = std::string(buf.data());
+
+ // Obtain the raw digits from the scientific notation string.
+
+ // TBD: Well, this is a bit silly. First get the string in
+ // scientific notation, then reduce it to raw digits.
+ // Perhaps this can be improved.
+ // Get the raw digits from a string in scientific notation (lowercase, showpos).
+
+ // Erase the negative sign, if present.
+ if(str.at(0u) == static_cast<char>('-'))
+ {
+ str.erase(str.begin(), str.begin() + 1u);
+ }
+
+ // Erase the exponent.
+ const std::size_t pos_letter_e = str.rfind(static_cast<char>('e'));
+
+ if(pos_letter_e != std::string::npos)
+ {
+ str.erase(str.begin() + pos_letter_e, str.end());
+ }
+
+ // Erase the decimal point.
+ const std::size_t pos_decimal_point = str.rfind(static_cast<char>('.'));
+
+ if(pos_decimal_point != std::string::npos)
+ {
+ str.erase(str.begin() + pos_decimal_point, str.begin() + (pos_decimal_point + 1u));
+ }
+}
+
+bool mp_float_mpfr::rd_string(const char* const s) { return (::mpfr_init_set_str(rop, s, 10, GMP_RNDN) == 1); }
+
+mp_float_mpfr mp_float_mpfr::my_cbrt (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_cbrt (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_rootn (const mp_float_mpfr& x, const boost::uint32_t p) { mp_float_mpfr res; static_cast<void>(::mpfr_root (res.rop, x.rop, static_cast<unsigned long int>(p), GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_exp (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_exp (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_log (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_log (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_sin (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_sin (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_cos (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_cos (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_tan (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_tan (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_asin (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_asin (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_acos (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_acos (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_atan (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_atan (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_sinh (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_sinh (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_cosh (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_cosh (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_tanh (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_tanh (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_asinh (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_asinh(res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_acosh (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_acosh(res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_atanh (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_atanh(res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_gamma (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_gamma(res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_riemann_zeta (const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_zeta (res.rop, x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_cyl_bessel_jn(const boost::int32_t n, const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_jn(res.rop, static_cast<long>(n), x.rop, GMP_RNDN)); return res; }
+mp_float_mpfr mp_float_mpfr::my_cyl_bessel_yn(const boost::int32_t n, const mp_float_mpfr& x) { mp_float_mpfr res; static_cast<void>(::mpfr_yn(res.rop, static_cast<long>(n), x.rop, GMP_RNDN)); return res; }

Added: sandbox/multiprecision/src/backends/float/mpfr/mp_float_mpfr_protos.h
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/backends/float/mpfr/mp_float_mpfr_protos.h 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,92 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+#ifndef _E_FLOAT_MPFR_PROTOS_2009_11_15_H_
+ #define _E_FLOAT_MPFR_PROTOS_2009_11_15_H_
+
+ // Wrap the function names of MPFR.
+ extern "C"
+ {
+ #define MPFR_SIGN(x) ((x)->_mpfr_sign)
+
+ void mpfr_init(mpfr_ptr);
+ void mpfr_set_default_prec(mp_prec_t);
+ void mpfr_clear(mpfr_ptr);
+
+ int mpfr_set4 (mpfr_ptr, mpfr_srcptr, mp_rnd_t, int);
+ #define mpfr_set(x, y, rnd) mpfr_set4((x), (y), (rnd), MPFR_SIGN(y))
+ int mpfr_set_ui (mpfr_ptr, unsigned long, mp_rnd_t);
+ int mpfr_set_d (mpfr_ptr, double, mp_rnd_t);
+ int mpfr_set_ld (mpfr_ptr, long double, mp_rnd_t);
+ void mpfr_set_inf(mpfr_t, int);
+ void mpfr_set_nan(mpfr_t);
+
+ #define mpfr_init_set(x, y, rnd) ( mpfr_init(x), static_cast<void>(mpfr_set ((x), (y), (rnd))))
+ #define mpfr_init_set_ui(x, i, rnd) ( mpfr_init(x), static_cast<void>(mpfr_set_ui((x), (i), (rnd))))
+ #define mpfr_init_set_d(x, d, rnd) ( mpfr_init(x), static_cast<void>(mpfr_set_d((x), (d), (rnd))))
+ #define mpfr_init_set_ld(x, ld, rnd) ( mpfr_init(x), static_cast<void>(mpfr_set_ld((x), (ld), (rnd))))
+ int mpfr_init_set_str(mpfr_ptr, const char*, int, mp_rnd_t);
+
+ int mpfr_add(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_sub(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_mul(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_div(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t);
+
+ int mpfr_add_ui(mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t);
+ int mpfr_sub_ui(mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t);
+ int mpfr_mul_ui(mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t);
+ int mpfr_div_ui(mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t);
+ int mpfr_mul_2si(mpfr_t, mpfr_t, signed long, mp_rnd_t);
+
+ int mpfr_cmp3(mpfr_srcptr, mpfr_srcptr, int);
+ #define mpfr_cmp(b, c) mpfr_cmp3((b), (c), 1)
+
+ int mpfr_neg(mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+
+ int mpfr_nan_p (mpfr_srcptr);
+ int mpfr_inf_p (mpfr_srcptr);
+ int mpfr_number_p (mpfr_srcptr);
+ int mpfr_zero_p (mpfr_srcptr);
+ int mpfr_integer_p(mpfr_srcptr);
+ int mpfr_sgn (mpfr_srcptr);
+
+ int mpfr_sprintf(char*, const char*, ...);
+
+ double mpfr_get_d (mpfr_srcptr, mp_rnd_t);
+ long double mpfr_get_ld (mpfr_srcptr, mp_rnd_t);
+ unsigned long mpfr_get_si (mpfr_srcptr, mp_rnd_t);
+ double mpfr_get_d_2exp(signed long int*, mpfr_srcptr, mp_rnd_t);
+ char* mpfr_get_str (char*, mp_exp_t*, int, size_t, mpfr_srcptr, mp_rnd_t);
+
+ int mpfr_floor(mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_sqrt (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_cbrt (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_root (mpfr_ptr, mpfr_srcptr, unsigned long int, mp_rnd_t);
+ int mpfr_sin (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_cos (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_tan (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_asin (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_acos (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_atan (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_sinh (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_cosh (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_tanh (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_asinh(mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_acosh(mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_atanh(mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_exp (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_log (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_gamma(mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_zeta (mpfr_ptr, mpfr_srcptr, mp_rnd_t);
+ int mpfr_jn (mpfr_ptr, long, mpfr_srcptr, mp_rnd_t);
+ int mpfr_yn (mpfr_ptr, long, mpfr_srcptr, mp_rnd_t);
+ }
+
+#endif // _E_FLOAT_MPFR_PROTOS_2009_11_15_H_

Added: sandbox/multiprecision/src/functions/constants/constants.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/constants/constants.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,455 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+
+using boost::multiprecision::mp_float;
+
+const mp_float& boost::multiprecision::two (void) { static const mp_float val( 2u); return val; }
+const mp_float& boost::multiprecision::three (void) { static const mp_float val( 3u); return val; }
+const mp_float& boost::multiprecision::four (void) { static const mp_float val( 4u); return val; }
+const mp_float& boost::multiprecision::five (void) { static const mp_float val( 5u); return val; }
+const mp_float& boost::multiprecision::six (void) { static const mp_float val( 6u); return val; }
+const mp_float& boost::multiprecision::seven (void) { static const mp_float val( 7u); return val; }
+const mp_float& boost::multiprecision::eight (void) { static const mp_float val( 8u); return val; }
+const mp_float& boost::multiprecision::nine (void) { static const mp_float val( 9u); return val; }
+const mp_float& boost::multiprecision::ten (void) { static const mp_float val( 10u); return val; }
+const mp_float& boost::multiprecision::twenty (void) { static const mp_float val( 20u); return val; }
+const mp_float& boost::multiprecision::thirty (void) { static const mp_float val( 30u); return val; }
+const mp_float& boost::multiprecision::forty (void) { static const mp_float val( 40u); return val; }
+const mp_float& boost::multiprecision::fifty (void) { static const mp_float val( 50u); return val; }
+const mp_float& boost::multiprecision::hundred (void) { static const mp_float val( 100u); return val; }
+const mp_float& boost::multiprecision::two_hundred (void) { static const mp_float val( 200u); return val; }
+const mp_float& boost::multiprecision::three_hundred (void) { static const mp_float val( 300u); return val; }
+const mp_float& boost::multiprecision::four_hundred (void) { static const mp_float val( 400u); return val; }
+const mp_float& boost::multiprecision::five_hundred (void) { static const mp_float val( 500u); return val; }
+const mp_float& boost::multiprecision::thousand (void) { static const mp_float val( 1000u); return val; }
+const mp_float& boost::multiprecision::two_k (void) { static const mp_float val( 2000u); return val; }
+const mp_float& boost::multiprecision::three_k (void) { static const mp_float val( 3000u); return val; }
+const mp_float& boost::multiprecision::four_k (void) { static const mp_float val( 4000u); return val; }
+const mp_float& boost::multiprecision::five_k (void) { static const mp_float val( 5000u); return val; }
+const mp_float& boost::multiprecision::ten_k (void) { static const mp_float val( 10000u); return val; }
+const mp_float& boost::multiprecision::twenty_k (void) { static const mp_float val( 20000u); return val; }
+const mp_float& boost::multiprecision::thirty_k (void) { static const mp_float val( 30000u); return val; }
+const mp_float& boost::multiprecision::forty_k (void) { static const mp_float val( 40000u); return val; }
+const mp_float& boost::multiprecision::fifty_k (void) { static const mp_float val( 50000u); return val; }
+const mp_float& boost::multiprecision::hundred_k (void) { static const mp_float val( 100000u); return val; }
+const mp_float& boost::multiprecision::million (void) { static const mp_float val( 1000000u); return val; }
+const mp_float& boost::multiprecision::ten_M (void) { static const mp_float val( 10000000u); return val; }
+const mp_float& boost::multiprecision::hundred_M (void) { static const mp_float val( 100000000u); return val; }
+const mp_float& boost::multiprecision::billion (void) { static const mp_float val(1000000000u); return val; }
+const mp_float& boost::multiprecision::trillion (void) { static const mp_float val( "1e12"); return val; }
+const mp_float& boost::multiprecision::googol (void) { static const mp_float val( "1e100"); return val; }
+const mp_float& boost::multiprecision::int32_min (void) { static const mp_float val((std::numeric_limits<boost::int32_t>::min)()); return val; }
+const mp_float& boost::multiprecision::int32_max (void) { static const mp_float val((std::numeric_limits<boost::int32_t>::max)()); return val; }
+const mp_float& boost::multiprecision::int64_min (void) { static const mp_float val((std::numeric_limits<boost::int64_t>::min)()); return val; }
+const mp_float& boost::multiprecision::int64_max (void) { static const mp_float val((std::numeric_limits<boost::int64_t>::max)()); return val; }
+const mp_float& boost::multiprecision::unsigned_long_long_max(void) { static const mp_float val((std::numeric_limits<unsigned long long>::max)()); return val; }
+const mp_float& boost::multiprecision::signed_long_long_min (void) { static const mp_float val((std::numeric_limits<signed long long>::min)()); return val; }
+const mp_float& boost::multiprecision::signed_long_long_max (void) { static const mp_float val((std::numeric_limits<signed long long>::max)()); return val; }
+const mp_float& boost::multiprecision::double_min (void) { static const mp_float val((std::numeric_limits<double>::min)()); return val; }
+const mp_float& boost::multiprecision::double_max (void) { static const mp_float val((std::numeric_limits<double>::max)()); return val; }
+const mp_float& boost::multiprecision::long_double_min (void) { static const mp_float val((std::numeric_limits<long double>::min)()); return val; }
+const mp_float& boost::multiprecision::long_double_max (void) { static const mp_float val((std::numeric_limits<long double>::max)()); return val; }
+const mp_float& boost::multiprecision::one_minus (void) { static const mp_float val(-1 ); return val; }
+const mp_float& boost::multiprecision::tenth (void) { static const mp_float val(boost::multiprecision::one() / static_cast<boost::int32_t>(10)); return val; }
+const mp_float& boost::multiprecision::eighth (void) { static const mp_float val(boost::multiprecision::one() / static_cast<boost::int32_t>( 8)); return val; }
+const mp_float& boost::multiprecision::sixteenth (void) { static const mp_float val(boost::multiprecision::one() / static_cast<boost::int32_t>(16)); return val; }
+const mp_float& boost::multiprecision::fifth (void) { static const mp_float val(boost::multiprecision::one() / static_cast<boost::int32_t>( 5)); return val; }
+const mp_float& boost::multiprecision::quarter (void) { static const mp_float val(boost::multiprecision::one() / static_cast<boost::int32_t>( 4)); return val; }
+const mp_float& boost::multiprecision::third (void) { static const mp_float val(boost::multiprecision::one() / static_cast<boost::int32_t>( 3)); return val; }
+const mp_float& boost::multiprecision::two_third (void) { static const mp_float val(boost::multiprecision::two() / static_cast<boost::int32_t>( 3)); return val; }
+const mp_float& boost::multiprecision::four_third (void) { static const mp_float val(boost::multiprecision::four() / static_cast<boost::int32_t>( 3)); return val; }
+const mp_float& boost::multiprecision::three_half (void) { static const mp_float val(boost::multiprecision::one() + boost::multiprecision::half()); return val; }
+
+const mp_float& boost::multiprecision::sqrt2(void)
+{
+ // 1100 digits of sqrt(2)
+ static const std::string str =
+ std::string("1.")
+ + std::string("4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727")
+ + std::string("3501384623091229702492483605585073721264412149709993583141322266592750559275579995050115278206057147")
+ + std::string("0109559971605970274534596862014728517418640889198609552329230484308714321450839762603627995251407989")
+ + std::string("6872533965463318088296406206152583523950547457502877599617298355752203375318570113543746034084988471")
+ + std::string("6038689997069900481503054402779031645424782306849293691862158057846311159666871301301561856898723723")
+ + std::string("5288509264861249497715421833420428568606014682472077143585487415565706967765372022648544701585880162")
+ + std::string("0758474922657226002085584466521458398893944370926591800311388246468157082630100594858704003186480342")
+ + std::string("1948972782906410450726368813137398552561173220402450912277002269411275736272804957381089675040183698")
+ + std::string("6836845072579936472906076299694138047565482372899718032680247442062926912485905218100445984215059112")
+ + std::string("0249441341728531478105803603371077309182869314710171111683916581726889419758716582152128229518488472")
+ + std::string("0896946338628915628827659526351405422676532396946175112916024087155101351504553812875600526314680171")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::sqrt3(void)
+{
+ // 1100 digits of sqrt(3)
+ static const std::string str =
+ std::string("1.")
+ + std::string("7320508075688772935274463415058723669428052538103806280558069794519330169088000370811461867572485756")
+ + std::string("7562614141540670302996994509499895247881165551209437364852809323190230558206797482010108467492326501")
+ + std::string("5312343266903322886650672254668921837971227047131660367861588019049986537379859389467650347506576050")
+ + std::string("7566183481296061009476021871903250831458295239598329977898245082887144638329173472241639845878553976")
+ + std::string("6795806381835366611084317378089437831610208830552490167002352071114428869599095636579708716849807289")
+ + std::string("9493296484283020786408603988738697537582317317831395992983007838702877053913369563312103707264019249")
+ + std::string("1067682311992883756411414220167427521023729942708310598984594759876642888977961478379583902288548529")
+ + std::string("0357603385280806438197234466105968972287286526415382266469842002119548415527844118128653450703519165")
+ + std::string("0016689294415480846071277143999762926834629577438361895110127148638746976545982451788550975379013880")
+ + std::string("6649619119622229571105552429237231921977382625616314688420328537166829386496119170497388363954959381")
+ + std::string("4575767185337363312591089965542462483478719760523599776919232357022030530284038591541497107242955920")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::pi(void)
+{
+ // 1100 digits of pi
+ static const std::string str =
+ std::string("3.")
+ + std::string("1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679")
+ + std::string("8214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196")
+ + std::string("4428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273")
+ + std::string("7245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094")
+ + std::string("3305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912")
+ + std::string("9833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132")
+ + std::string("0005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235")
+ + std::string("4201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859")
+ + std::string("5024459455346908302642522308253344685035261931188171010003137838752886587533208381420617177669147303")
+ + std::string("5982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989")
+ + std::string("3809525720106548586327886593615338182796823030195203530185296899577362259941389124972177528347913152")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::pi_half (void) { static const mp_float val = boost::multiprecision::pi() / static_cast<boost::int32_t>(2); return val; }
+const mp_float& boost::multiprecision::pi_quarter(void) { static const mp_float val = boost::multiprecision::pi() / static_cast<boost::int32_t>(4); return val; }
+const mp_float& boost::multiprecision::pi_squared(void) { static const mp_float val = boost::multiprecision::pi() * boost::multiprecision::pi(); return val; }
+const mp_float& boost::multiprecision::two_pi (void) { static const mp_float val = boost::multiprecision::pi() * static_cast<boost::int32_t>(2); return val; }
+const mp_float& boost::multiprecision::degree (void) { static const mp_float val = boost::multiprecision::pi() / static_cast<boost::int32_t>(180); return val; }
+const mp_float& boost::multiprecision::sqrt_pi (void) { static const mp_float val = boost::multiprecision::sqrt(boost::multiprecision::pi()); return val; }
+
+const mp_float& boost::multiprecision::exp1(void)
+{
+ // 1100 digits of e
+ static const std::string str =
+ std::string("2.")
+ + std::string("7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274")
+ + std::string("2746639193200305992181741359662904357290033429526059563073813232862794349076323382988075319525101901")
+ + std::string("1573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069")
+ + std::string("5517027618386062613313845830007520449338265602976067371132007093287091274437470472306969772093101416")
+ + std::string("9283681902551510865746377211125238978442505695369677078544996996794686445490598793163688923009879312")
+ + std::string("7736178215424999229576351482208269895193668033182528869398496465105820939239829488793320362509443117")
+ + std::string("3012381970684161403970198376793206832823764648042953118023287825098194558153017567173613320698112509")
+ + std::string("9618188159304169035159888851934580727386673858942287922849989208680582574927961048419844436346324496")
+ + std::string("8487560233624827041978623209002160990235304369941849146314093431738143640546253152096183690888707016")
+ + std::string("7683964243781405927145635490613031072085103837505101157477041718986106873969655212671546889570350354")
+ + std::string("0212340784981933432106817012100562788023519303322474501585390473041995777709350366041699732972508869")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::ln2(void)
+{
+ // 1100 digits of ln2
+ static const std::string str =
+ std::string("0.")
+ + std::string("6931471805599453094172321214581765680755001343602552541206800094933936219696947156058633269964186875")
+ + std::string("4200148102057068573368552023575813055703267075163507596193072757082837143519030703862389167347112335")
+ + std::string("0115364497955239120475172681574932065155524734139525882950453007095326366642654104239157814952043740")
+ + std::string("4303855008019441706416715186447128399681717845469570262716310645461502572074024816377733896385506952")
+ + std::string("6066834113727387372292895649354702576265209885969320196505855476470330679365443254763274495125040606")
+ + std::string("9438147104689946506220167720424524529612687946546193165174681392672504103802546259656869144192871608")
+ + std::string("2938031727143677826548775664850856740776484514644399404614226031930967354025744460703080960850474866")
+ + std::string("3852313818167675143866747664789088143714198549423151997354880375165861275352916610007105355824987941")
+ + std::string("4729509293113897155998205654392871700072180857610252368892132449713893203784393530887748259701715591")
+ + std::string("0708823683627589842589185353024363421436706118923678919237231467232172053401649256872747782344535347")
+ + std::string("6481149418642386776774406069562657379600867076257199184734022651462837904883062033061144630073719489")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::ln3(void)
+{
+ // 1100 digits of ln3
+ static const std::string str =
+ std::string("1.")
+ + std::string("0986122886681096913952452369225257046474905578227494517346943336374942932186089668736157548137320887")
+ + std::string("8797002906595786574236800422593051982105280187076727741060316276918338136717937369884436095990374257")
+ + std::string("0316795911521145591917750671347054940166775580222203170252946897560690106521505642868138036317373298")
+ + std::string("5777823669916547921318181490200301038236301222486527481982259910974524908964580534670088459650857484")
+ + std::string("4411901885708764749486707961308582941160216612118400140982551439194876889367984943022557315353296853")
+ + std::string("4529525145921387649468593256279441655694157827231035516886610211846989043994306313825528573646688282")
+ + std::string("4988136822800634143910786893251456437510204451627561934973982116941585740535361758900975122233797736")
+ + std::string("9696877543547951357129821770175812421223514058101632724655889372495649191852429607966842346470693772")
+ + std::string("3725265508203207833392805589285314687309513260645830918439749682223032576546753331182301964927525759")
+ + std::string("9132217851353390237482964339502546074245824934666866121881436526565429542767610505477795422933973323")
+ + std::string("4011737431939745798470185595484940594783539438410106029307622922281312074893063445340252777326856271")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::ln10(void)
+{
+ // 1100 digits of ln10
+ static const std::string str =
+ std::string("2.")
+ + std::string("3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983")
+ + std::string("4196778404228624863340952546508280675666628736909878168948290720832555468084379989482623319852839350")
+ + std::string("5308965377732628846163366222287698219886746543667474404243274365155048934314939391479619404400222105")
+ + std::string("1017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806")
+ + std::string("4450706480002775026849167465505868569356734206705811364292245544057589257242082413146956890167589402")
+ + std::string("5677631135691929203337658714166023010570308963457207544037084746994016826928280848118428931484852494")
+ + std::string("8644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938")
+ + std::string("6629769795221107182645497347726624257094293225827985025855097852653832076067263171643095059950878075")
+ + std::string("2371033310119785754733154142180842754386359177811705430982748238504564801909561029929182431823752535")
+ + std::string("7709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978")
+ + std::string("7488737713456862091670584980782805975119385444500997813114691593466624107184669231010759843831919129")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::log10_2(void)
+{
+ // 1100 digits of log10(2)
+ static const std::string str =
+ std::string("0.")
+ + std::string("3010299956639811952137388947244930267681898814621085413104274611271081892744245094869272521181861720")
+ + std::string("4068447719143099537909476788113352350599969233370469557506450296425419340266181973431160294350118390")
+ + std::string("2898178582617154439531861929046353884699520239310849612462540400263312594621478845847318282672683982")
+ + std::string("3261965427935076313175483509271389649469177857689180507900075995480878154597145850319648776261224922")
+ + std::string("9082911819095149899717161986047767650006782051791255732862866834200040292050983708457222489549429756")
+ + std::string("2149707244659708613689609221909482761214391496528235167826492314804027746243244163311538738259303883")
+ + std::string("0393806332161302390518805821319156854616929053015051319269853784884187183200657535694683929717421320")
+ + std::string("1090589689085058562464098721839687664853985623516127730263892787826084983668103030843141556081394361")
+ + std::string("7674548856663424538123733932422469594349060212044504296827460688478546115684768410643797950046596991")
+ + std::string("7745657540864018464079456529544341077408293999745400737217016801948890554856910694003754116899634157")
+ + std::string("5929721806443038102815203392388085633198685453987393548560657842896848982613944260846632782952602877")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::euler_gamma(void)
+{
+ // 1100 digits of Euler gamma
+ static const std::string str =
+ std::string("0.")
+ + std::string("5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495")
+ + std::string("1463144724980708248096050401448654283622417399764492353625350033374293733773767394279259525824709491")
+ + std::string("6008735203948165670853233151776611528621199501507984793745085705740029921354786146694029604325421519")
+ + std::string("0587755352673313992540129674205137541395491116851028079842348775872050384310939973613725530608893312")
+ + std::string("6760017247953783675927135157722610273492913940798430103417771778088154957066107501016191663340152278")
+ + std::string("9358679654972520362128792265559536696281763887927268013243101047650596370394739495763890657296792960")
+ + std::string("1009015125195950922243501409349871228247949747195646976318506676129063811051824197444867836380861749")
+ + std::string("4551698927923018773910729457815543160050021828440960537724342032854783670151773943987003023703395183")
+ + std::string("2869000155819398804270741154222781971652301107356583396734871765049194181230004065469314299929777956")
+ + std::string("9303100503086303418569803231083691640025892970890985486825777364288253954925873629596133298574739302")
+ + std::string("3734388470703702844129201664178502487333790805627549984345907616431671031467107223700218107450444187")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::catalan(void)
+{
+ // 1100 digits of Catalan's constant
+ static const std::string str =
+ std::string("0.")
+ + std::string("9159655941772190150546035149323841107741493742816721342664981196217630197762547694793565129261151062")
+ + std::string("4857442261919619957903589880332585905943159473748115840699533202877331946051903872747816408786590902")
+ + std::string("4706484152163000228727640942388259957741508816397470252482011560707644883807873370489900864775113225")
+ + std::string("9971343407485407553230768565335768095835260219382323950800720680355761048235733942319149829836189977")
+ + std::string("0690364041808621794110191753274314997823397610551224779530324875371878665828082360570225594194818097")
+ + std::string("5350971131571261580424272363643985001738287597797653068370092980873887495610893659771940968726844441")
+ + std::string("6680462162433986483891628044828150627302274207388431172218272190472255870531908685735423498539498309")
+ + std::string("9191159673884645086151524996242370437451777372351775440708538464401321748392999947572446199754961975")
+ + std::string("8706400747487070149093767887304586997986064487497464387206238513712392736304998503539223928787979063")
+ + std::string("3644032354784535851927777787270906083031994301332316712476158709792455479119092126201854803963934243")
+ + std::string("4956537596739494354730014385180705051250748861328564129344959502298722983162894816461622573989476232")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::glaisher(void)
+{
+ // 1100 digits of Glaisher's constant
+ static const std::string str =
+ std::string("1.")
+ + std::string("2824271291006226368753425688697917277676889273250011920637400217404063088588264611297364919582023743")
+ + std::string("9420646120399000748933157791362775280404159072573861727522143343271434397873350679152573668569078765")
+ + std::string("6114668644999778496275451817431239465276128213808180219264516851546143919901083573730703504903888123")
+ + std::string("4188136749781330509377083368222249411587483734806439997883007012556700128699415770543205392758540581")
+ + std::string("7315881554817629703847432504677751473746000316160230466132963429915580958792933634388728870198895346")
+ + std::string("0725233184702489001091776941712153569193674967261270398013526526688689782188974017293758407501674721")
+ + std::string("1489528881599666874316451389030696264559870469543740253099606800842447417554061490189444139386196089")
+ + std::string("1296821735287986298843422036698990060698088878584958749408530734711709013266756750331052340522105414")
+ + std::string("1767761563081919199971852370477613123153741353047258198147974517610275408349431438496523413945337306")
+ + std::string("5832325673954957601692256427736926358821692159870775858274695751628415506485858908341282275562095470")
+ + std::string("0291859326307937337694207752229094018708695195737807113096673517703001997619162841026237527268163782")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::khinchin(void)
+{
+ // 1100 digits of Khinchin's constant
+ static const std::string str =
+ std::string("2.")
+ + std::string("6854520010653064453097148354817956938203822939944629530511523455572188595371520028011411749318476979")
+ + std::string("9515346590528809008289767771641096305179253348325966838185231542133211949962603932852204481940961806")
+ + std::string("8664166428930847788062036073705350103367263357728904990427070272345170262523702354581068631850103237")
+ + std::string("4655803775026442524852869468234189949157306618987207994137235500057935736698933950879021244642075289")
+ + std::string("7414591476930184490506017934993852254704042033779856398310157090222339100002207725096513324604444391")
+ + std::string("9169146085968234821283246228292710126906974182348477675457348986254203392662351862086778136650969658")
+ + std::string("3146995271837448054012195366666049648269890827548115254721177330319675947383719393578106059230401890")
+ + std::string("7113496246737068412217946810740608918276695667117166837405904739368809534504899970471763904513432323")
+ + std::string("7715103219651503824698888324870935399469608264781812056634946712578436664579740977848366204977774868")
+ + std::string("2765697087163192938512899314199518611673792654620563505951385713761697126872299805327673278710513763")
+ + std::string("9563719023145289003058136910904799672757571385043565050641590820999623402779053834180985121278529455")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::golden_ratio(void)
+{
+ // 1100 digits of the golden ratio
+ static const std::string str =
+ std::string("1.")
+ + std::string("6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374")
+ + std::string("8475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992829026788")
+ + std::string("0675208766892501711696207032221043216269548626296313614438149758701220340805887954454749246185695364")
+ + std::string("8644492410443207713449470495658467885098743394422125448770664780915884607499887124007652170575179788")
+ + std::string("3416625624940758906970400028121042762177111777805315317141011704666599146697987317613560067087480710")
+ + std::string("1317952368942752194843530567830022878569978297783478458782289110976250030269615617002504643382437764")
+ + std::string("8610283831268330372429267526311653392473167111211588186385133162038400522216579128667529465490681131")
+ + std::string("7159934323597349498509040947621322298101726107059611645629909816290555208524790352406020172799747175")
+ + std::string("3427775927786256194320827505131218156285512224809394712341451702237358057727861600868838295230459264")
+ + std::string("7878017889921990270776903895321968198615143780314997411069260886742962267575605231727775203536139362")
+ + std::string("1076738937645560606059216589466759551900400555908950229530942312482355212212415444006470340565734798")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::extreme_value_skewness(void)
+{
+ // 1100 digits of the extreme value distribution skewness
+ // Mathematica: N[12 Sqrt[6] Zeta[3]/Pi^3, 1101]
+ static const std::string str =
+ std::string("1.")
+ + std::string("1395470994046486574927930193898461120875997958365518247216557100852480077060706857071875468869385150")
+ + std::string("1894272048688553376986765366075828644841024041679714157616857834895702411080704529137366329462558680")
+ + std::string("2015498788776135705587959418756809080074611906006528647805347822929577145038743873949415294942796280")
+ + std::string("0895597703063466053535550338267721294164578901640163603544404938283861127819804918174973533694090594")
+ + std::string("3094963822672055237678432023017824416203652657301470473548274848068762500300316769691474974950757965")
+ + std::string("8640779777748741897542093874605477776538884083378029488863880220988107155275203245233994097178778984")
+ + std::string("3488995668362387892097897322246698071290011857605809901090220903955815127463328974447572119951192970")
+ + std::string("3684453635456559086126406960279692862247058250100678008419431185138019869693206366891639436908462809")
+ + std::string("9756051372711251054914491837034685476095423926553367264355374652153595857163724698198860485357368964")
+ + std::string("3807049634423621246870868566707915720704996296083373077647528285782964567312903914752617978405994377")
+ + std::string("9064157147206717895272199736902453130842229559980076472936976287378945035706933650987259357729800315")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::rayleigh_skewness(void)
+{
+ // 1100 digits of the Rayleigh distribution skewness
+ // Mathematica: N[2 Sqrt[Pi] (Pi - 3)/((4 - Pi)^(3/2)), 1100]
+ static const std::string str =
+ std::string("0.")
+ + std::string("6311106578189371381918993515442277798440422031347194976580945856929268196174737254599050270325373067")
+ + std::string("9440004726436754739597525250317640394102954301685809920213808351450851396781817932734836994829371322")
+ + std::string("5797376021347531983451654130317032832308462278373358624120822253764532674177325950686466133508511968")
+ + std::string("2389168716630349407238090652663422922072397393006683401992961569208109477307776249225072042971818671")
+ + std::string("4058887072693437217879039875871765635655476241624825389439481561152126886932506682176611183750503553")
+ + std::string("1218982627032068396407180216351425758181396562859085306247387212297187006230007438534686340210168288")
+ + std::string("8956816965453815849613622117088096547521391672977226658826566757207615552041767516828171274858145957")
+ + std::string("6137539156656005855905288420585194082284972984285863898582313048515484073396332610565441264220790791")
+ + std::string("0194897267890422924599776483890102027823328602965235306539844007677157873140562950510028206251529523")
+ + std::string("7428049693650605954398446899724157486062545281504433364675815915402937209673727753199567661561209251")
+ + std::string("4695589950526053470201635372590001578503476490223746511106018091907936826431407434894024396366284848")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::rayleigh_kurtosis(void)
+{
+ // 1100 digits of the Rayleigh distribution kurtosis
+ // Mathematica: N[3 - (6 Pi^2 - 24 Pi + 16)/((Pi - 4)^2), 1101]
+ static const std::string str =
+ std::string("3.")
+ + std::string("2450893006876380628486604106197544154170667317892093617713376449336790454087415905149061936867934897")
+ + std::string("7426462632766222863025885280475303127822220268263096589513724730667617861820932858778449728296659479")
+ + std::string("3509930847868156538858152415545518545531216798298547693461311645548952424632118645472682463069545526")
+ + std::string("1983053031855607397851202464589880370383506850067796236695992134911848393006954201076208202808484125")
+ + std::string("6133354144360242773961231033129953293849110813453065649115333206743995085094897184520870169529618137")
+ + std::string("1386582922293062730416145656063188572844644520145571288064202952779173502297498984505977966704775822")
+ + std::string("5618195941007999394816250555243512667729218321194759827137580052728640801190395474421829335542653964")
+ + std::string("2635117940160187084211929489404610340511995002504673867278772758560400939592040029761998053665442841")
+ + std::string("1577415214507922011979312846237719442003310251741466941617588043270228799439065296867165276320363613")
+ + std::string("8733430815475656049776923162323269916006398895573867114723876996574699420608567147551765179203903001")
+ + std::string("5455211712707351783064330032429944926162677960388580113035455983189062640894597247867450273307835796")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}
+
+const mp_float& boost::multiprecision::rayleigh_kurtosis_excess(void)
+{
+ // 1100 digits of the Rayleigh distribution kurtosis excess
+ // Mathematica: N[- (6 Pi^2 - 24 Pi + 16)/((Pi - 4)^2), 1100]
+ static const std::string str =
+ std::string("0.")
+ + std::string("2450893006876380628486604106197544154170667317892093617713376449336790454087415905149061936867934897")
+ + std::string("7426462632766222863025885280475303127822220268263096589513724730667617861820932858778449728296659479")
+ + std::string("3509930847868156538858152415545518545531216798298547693461311645548952424632118645472682463069545526")
+ + std::string("1983053031855607397851202464589880370383506850067796236695992134911848393006954201076208202808484125")
+ + std::string("6133354144360242773961231033129953293849110813453065649115333206743995085094897184520870169529618137")
+ + std::string("1386582922293062730416145656063188572844644520145571288064202952779173502297498984505977966704775822")
+ + std::string("5618195941007999394816250555243512667729218321194759827137580052728640801190395474421829335542653964")
+ + std::string("2635117940160187084211929489404610340511995002504673867278772758560400939592040029761998053665442841")
+ + std::string("1577415214507922011979312846237719442003310251741466941617588043270228799439065296867165276320363613")
+ + std::string("8733430815475656049776923162323269916006398895573867114723876996574699420608567147551765179203903001")
+ + std::string("5455211712707351783064330032429944926162677960388580113035455983189062640894597247867450273307835796")
+ ;
+
+ static const mp_float val(str.c_str());
+ return val;
+}

Added: sandbox/multiprecision/src/functions/elementary/elementary_complex.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/elementary/elementary_complex.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,241 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+#include <boost/multiprecision/utility/util_power_x_pow_n.hpp>
+
+using boost::multiprecision::mp_float;
+using boost::multiprecision::mp_complex;
+
+bool operator==(const mp_complex& u, const mp_float& v) { return ((u.real() == v) && boost::multiprecision::iszero(u.imag())); }
+bool operator!=(const mp_complex& u, const mp_float& v) { return ((u.real() != v) || !boost::multiprecision::iszero(u.imag())); }
+
+bool operator==(const mp_float& u, const mp_complex& v) { return ((u == v.real()) && boost::multiprecision::iszero(v.imag())); }
+bool operator!=(const mp_float& u, const mp_complex& v) { return ((u != v.real()) || !boost::multiprecision::iszero(v.imag())); }
+
+mp_float boost::multiprecision::abs(const mp_complex& z) { return boost::multiprecision::sqrt(boost::multiprecision::norm(z)); }
+mp_float boost::multiprecision::arg(const mp_complex& z) { return boost::multiprecision::atan2(z.imag(), z.real()); }
+
+mp_complex boost::multiprecision::polar(const mp_float& mod, const mp_float& arg)
+{
+ mp_float s, c;
+ boost::multiprecision::sincos(arg, &s, &c);
+ return mp_complex(c, s) * mod;
+}
+
+mp_complex boost::multiprecision::sin(const mp_complex& z)
+{
+ mp_float sin_x, cos_x, sinh_y, cosh_y;
+
+ boost::multiprecision::sincos (z.real(), &sin_x, &cos_x);
+ boost::multiprecision::sinhcosh(z.imag(), &sinh_y, &cosh_y);
+
+ return mp_complex(sin_x * cosh_y, cos_x * sinh_y);
+}
+
+mp_complex boost::multiprecision::cos(const mp_complex& z)
+{
+ mp_float sin_x, cos_x, sinh_y, cosh_y;
+
+ boost::multiprecision::sincos (z.real(), &sin_x, &cos_x);
+ boost::multiprecision::sinhcosh(z.imag(), &sinh_y, &cosh_y);
+
+ return mp_complex(cos_x * cosh_y, -(sin_x * sinh_y));
+}
+
+void boost::multiprecision::sincos(const mp_complex& z, mp_complex* const p_sin, mp_complex* const p_cos)
+{
+ mp_float sin_x, cos_x, sinh_y, cosh_y;
+
+ boost::multiprecision::sincos (z.real(), &sin_x, &cos_x);
+ boost::multiprecision::sinhcosh(z.imag(), &sinh_y, &cosh_y);
+
+ const bool b_wants_sin = (p_sin != static_cast<mp_complex* const>(0u));
+ const bool b_wants_cos = (p_cos != static_cast<mp_complex* const>(0u));
+
+ if(b_wants_sin) { *p_sin = mp_complex(sin_x * cosh_y, cos_x * sinh_y); }
+ if(b_wants_cos) { *p_cos = mp_complex(cos_x * cosh_y, -(sin_x * sinh_y)); }
+}
+
+mp_complex boost::multiprecision::tan(const mp_complex& z)
+{
+ mp_complex s, c;
+ boost::multiprecision::sincos(z, &s, &c);
+ return s * boost::multiprecision::inv(c);
+}
+
+mp_complex boost::multiprecision::csc(const mp_complex& z) { return boost::multiprecision::inv(boost::multiprecision::sin(z)); }
+mp_complex boost::multiprecision::sec(const mp_complex& z) { return boost::multiprecision::inv(boost::multiprecision::cos(z)); }
+mp_complex boost::multiprecision::cot(const mp_complex& z) { return boost::multiprecision::inv(boost::multiprecision::tan(z)); }
+
+mp_complex boost::multiprecision::asin(const mp_complex& z)
+{
+ return -boost::multiprecision::iz(boost::multiprecision::log(boost::multiprecision::iz(z) + boost::multiprecision::sqrt(boost::multiprecision::one() - (z * z))));
+}
+
+mp_complex boost::multiprecision::acos(const mp_complex& z)
+{
+ return mp_complex(boost::multiprecision::pi_half(), boost::multiprecision::zero()) - boost::multiprecision::asin(z);
+}
+
+mp_complex boost::multiprecision::atan(const mp_complex& z)
+{
+ const mp_complex izz = boost::multiprecision::iz(z);
+ return boost::multiprecision::iz(boost::multiprecision::log(boost::multiprecision::one() - izz) - boost::multiprecision::log(boost::multiprecision::one() + izz)) / static_cast<boost::int32_t>(2);
+}
+
+mp_complex boost::multiprecision::inv(const mp_complex& z)
+{
+ // Compute inverse 1 / (x + iy) = (x - iy) / (x^2 + y^2)
+ return mp_complex(z.real(), -z.imag()) * boost::multiprecision::norm(z).calculate_inv();
+}
+
+mp_complex boost::multiprecision::sqrt(const mp_complex& z)
+{
+ // Equation from MPFUN documentation page 12.
+ // See: http://www.nersc.gov/~dhb/mpdist/mpdist.html
+
+ // Pure zero?
+ if(boost::multiprecision::iszero(z))
+ {
+ return boost::multiprecision::zero();
+ }
+ else
+ {
+ // sqrt(*this) = (s, I / 2s) for R >= 0
+ // (|I| / 2s, +-s) for R < 0
+ // where s = sqrt{ [ |R| + sqrt(R^2 + I^2) ] / 2 },
+ // and the +- sign is the same as the sign of I.
+ const mp_float s = boost::multiprecision::sqrt((boost::multiprecision::fabs(z.real()) + boost::multiprecision::abs(z)) / static_cast<boost::int32_t>(2));
+
+ if(boost::multiprecision::iszero(z.real()) || !boost::multiprecision::isneg(z.real()))
+ {
+ return mp_complex(s, (z.imag() / s) / static_cast<boost::int32_t>(2));
+ }
+ else
+ {
+ const bool imag_is_pos = boost::multiprecision::iszero(z.imag()) || (!boost::multiprecision::isneg(z.imag()));
+
+ return mp_complex((boost::multiprecision::fabs(z.imag()) / s) / static_cast<boost::int32_t>(2), (imag_is_pos ? s : -s));
+ }
+ }
+}
+
+mp_complex boost::multiprecision::exp(const mp_complex& z)
+{
+ mp_float s, c;
+ boost::multiprecision::sincos(z.imag(), &s, &c);
+ return mp_complex(c , s) * boost::multiprecision::exp(z.real());
+}
+
+mp_complex boost::multiprecision::log(const mp_complex& z)
+{
+ return mp_complex(boost::multiprecision::log(boost::multiprecision::norm(z)) / static_cast<boost::int32_t>(2), boost::multiprecision::atan2(z.imag(), z.real()));
+}
+
+mp_complex boost::multiprecision::log10(const mp_complex& z)
+{
+ return boost::multiprecision::log(z) / boost::multiprecision::ln10();
+}
+
+mp_complex boost::multiprecision::loga(const mp_complex& a, const mp_complex& z)
+{
+ return boost::multiprecision::log(z) / boost::multiprecision::log(a);
+}
+
+mp_complex boost::multiprecision::pown(const mp_complex& z, const boost::int64_t p)
+{
+ return boost::multiprecision::utility::x_pow_n_template<mp_complex>(z, p);
+}
+
+mp_complex boost::multiprecision::pow(const mp_complex& z, const mp_complex& a)
+{
+ return (boost::multiprecision::isint(a) ? boost::multiprecision::pown(z, boost::multiprecision::to_int64(a.real()))
+ : boost::multiprecision::exp(a * boost::multiprecision::log(z)));
+}
+
+mp_complex boost::multiprecision::rootn(const mp_complex& z, const boost::int32_t p)
+{
+ if(p < static_cast<boost::int32_t>(0))
+ {
+ return boost::multiprecision::pown(boost::multiprecision::one() / z, static_cast<boost::int64_t>(-p));
+ }
+ else if(p == static_cast<boost::int32_t>(0))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+ else if(p == static_cast<boost::int32_t>(1))
+ {
+ return z;
+ }
+ else
+ {
+ return boost::multiprecision::polar(boost::multiprecision::rootn(boost::multiprecision::norm(z), static_cast<boost::int32_t>(2) * p), boost::multiprecision::arg(z) / p);
+ }
+}
+
+mp_complex boost::multiprecision::sinh(const mp_complex& z)
+{
+ mp_float sin_y, cos_y, sinh_x, cosh_x;
+
+ boost::multiprecision::sincos (z.imag(), &sin_y, &cos_y);
+ boost::multiprecision::sinhcosh(z.real(), &sinh_x, &cosh_x);
+
+ return mp_complex(cos_y * sinh_x, cosh_x * sin_y);
+}
+
+mp_complex boost::multiprecision::cosh(const mp_complex& z)
+{
+ mp_float sin_y, cos_y, sinh_x, cosh_x;
+
+ boost::multiprecision::sincos (z.imag(), &sin_y, &cos_y);
+ boost::multiprecision::sinhcosh(z.real(), &sinh_x, &cosh_x);
+
+ return mp_complex(cos_y * cosh_x, sin_y * sinh_x);
+}
+
+void boost::multiprecision::sinhcosh(const mp_complex& z, mp_complex* const p_sinh, mp_complex* const p_cosh)
+{
+ mp_float sin_y, cos_y, sinh_x, cosh_x;
+
+ boost::multiprecision::sincos (z.imag(), &sin_y, &cos_y);
+ boost::multiprecision::sinhcosh(z.real(), &sinh_x, &cosh_x);
+
+ const bool b_wants_sinh = (p_sinh != static_cast<mp_complex* const>(0u));
+ const bool b_wants_cosh = (p_cosh != static_cast<mp_complex* const>(0u));
+
+ if(b_wants_sinh) { *p_sinh = mp_complex(cos_y * sinh_x, cosh_x * sin_y); }
+ if(b_wants_cosh) { *p_cosh = mp_complex(cos_y * cosh_x, sin_y * sinh_x); }
+}
+
+mp_complex boost::multiprecision::tanh(const mp_complex& z)
+{
+ mp_complex sh, ch;
+ boost::multiprecision::sinhcosh(z, &sh, &ch);
+ return sh * boost::multiprecision::inv(ch);
+}
+
+mp_complex boost::multiprecision::asinh(const mp_complex& z)
+{
+ return boost::multiprecision::log(z + boost::multiprecision::sqrt((z * z) + boost::multiprecision::one()));
+}
+
+mp_complex boost::multiprecision::acosh(const mp_complex& z)
+{
+ const mp_complex zp(z.real() + boost::multiprecision::one(), z.imag());
+ const mp_complex zm(z.real() - boost::multiprecision::one(), z.imag());
+
+ return boost::multiprecision::log(z + (zp * boost::multiprecision::sqrt(zm / zp)));
+}
+
+mp_complex boost::multiprecision::atanh(const mp_complex& z)
+{
+ return (boost::multiprecision::log(boost::multiprecision::one() + z) - boost::multiprecision::log(boost::multiprecision::one() - z)) / static_cast<boost::int32_t>(2);
+}

Added: sandbox/multiprecision/src/functions/elementary/elementary_hyper_g.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/elementary/elementary_hyper_g.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,318 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <numeric>
+#include <functional>
+
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+using boost::multiprecision::mp_float;
+
+mp_float boost::multiprecision::hyp0F0(const mp_float& x)
+{
+ // Compute the series representation of Hypergeometric0F0 taken from
+ // http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric0F0/06/01/
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+
+ mp_float H0F0 = boost::multiprecision::one() + x_pow_n_div_n_fact;
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_0f0(; ; x).
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(x_pow_n_div_n_fact.order() - H0F0.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ H0F0 += x_pow_n_div_n_fact;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? H0F0 : std::numeric_limits<mp_float>::quiet_NaN());
+}
+
+mp_float boost::multiprecision::hyp0F1(const mp_float& b, const mp_float& x)
+{
+ // Compute the series representation of Hypergeometric0F1 taken from
+ // http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric0F1/06/01/01/
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+ mp_float pochham_b (b);
+ mp_float bp (b);
+
+ mp_float H0F1 = boost::multiprecision::one() + (x_pow_n_div_n_fact / pochham_b);
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_0f1(; b; x).
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ pochham_b *= ++bp;
+
+ const mp_float term = x_pow_n_div_n_fact / pochham_b;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - H0F1.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ H0F1 += term;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? H0F1 : std::numeric_limits<mp_float>::quiet_NaN());
+}
+
+mp_float boost::multiprecision::hyp1F0(const mp_float& a, const mp_float& x)
+{
+ // Compute the series representation of Hypergeometric1F0 taken from
+ // http://functions.wolfram.com/HypergeometricFunctions/Hypergeometric1F0/06/01/01/
+ // and also see the corresponding section for the power function (i.e. x^a).
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+ mp_float pochham_a (a);
+ mp_float ap (a);
+
+ mp_float H1F0 = boost::multiprecision::one() + (pochham_a * x_pow_n_div_n_fact);
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_1f0(a; ; x).
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ pochham_a *= ++ap;
+
+ const mp_float term = pochham_a * x_pow_n_div_n_fact;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - H1F0.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ H1F0 += term;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? H1F0 : std::numeric_limits<mp_float>::quiet_NaN());
+}
+
+mp_float boost::multiprecision::hyp1F1(const mp_float& a, const mp_float& b, const mp_float& x)
+{
+ // Compute the series representation of hyperg_1f1 taken from
+ // Abramowitz and Stegun 13.1.2, page 504.
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+ mp_float pochham_a (a);
+ mp_float pochham_b (b);
+ mp_float ap (a);
+ mp_float bp (b);
+
+ mp_float H1F1 = boost::multiprecision::one() + ((pochham_a / pochham_b) * x_pow_n_div_n_fact);
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_1f1(a, b ; x).
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ pochham_a *= ++ap;
+ pochham_b *= ++bp;
+
+ const mp_float term = (pochham_a / pochham_b) * x_pow_n_div_n_fact;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - H1F1.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ H1F1 += term;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? H1F1 : std::numeric_limits<mp_float>::quiet_NaN());
+}
+
+mp_float boost::multiprecision::hyp2F0(const mp_float& a, const mp_float& b, const mp_float& x)
+{
+ // Compute the series representation of hyperg_2f0.
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+ mp_float pochham_a (a);
+ mp_float pochham_b (b);
+ mp_float ap (a);
+ mp_float bp (b);
+
+ mp_float H2F0 = boost::multiprecision::one() + ((pochham_a * pochham_b) * x_pow_n_div_n_fact);
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_2f0(a, b; ; x).
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ pochham_a *= ++ap;
+ pochham_b *= ++bp;
+
+ const mp_float term = (pochham_a * pochham_b) * x_pow_n_div_n_fact;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - H2F0.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ H2F0 += term;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? H2F0 : std::numeric_limits<mp_float>::quiet_NaN());
+}
+
+mp_float boost::multiprecision::hyp2F1(const mp_float& a, const mp_float& b, const mp_float& c, const mp_float& x)
+{
+ // Compute the series representation of hyperg_2f1 taken from
+ // Abramowitz and Stegun 15.1.1.
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+ mp_float pochham_a (a);
+ mp_float pochham_b (b);
+ mp_float pochham_c (c);
+ mp_float ap (a);
+ mp_float bp (b);
+ mp_float cp (c);
+
+ mp_float H2F1 = boost::multiprecision::one() + (((pochham_a * pochham_b) / pochham_c) * x_pow_n_div_n_fact);
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_2f1(a, b; c; x).
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ pochham_a *= ++ap;
+ pochham_b *= ++bp;
+ pochham_c *= ++cp;
+
+ const mp_float term = ((pochham_a * pochham_b) / pochham_c) * x_pow_n_div_n_fact;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - H2F1.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ H2F1 += term;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? H2F1 : std::numeric_limits<mp_float>::quiet_NaN());
+}
+
+mp_float boost::multiprecision::hypPFQ(const std::deque<mp_float>& a, const std::deque<mp_float>& b, const mp_float& x)
+{
+ // Compute the series representation of hyperg_pfq.
+ // There are no checks on input range or parameter boundaries.
+
+ mp_float x_pow_n_div_n_fact(x);
+
+ // The pochhammer symbols for the multiplications in the series expansion
+ // will be stored in STL-containers.
+ std::vector<mp_float> ap(a.begin(), a.end());
+ std::vector<mp_float> bp(b.begin(), b.end());
+
+ // Initialize the pochhammer product terms with the products of the form:
+ // [(a0)_1 * (a1)_1 * (a2)_1 * ...], or [(b0)_1 * (b1)_1 * (b2)_1 * ...].
+ mp_float pochham_a = std::accumulate(ap.begin(), ap.end(), boost::multiprecision::one(), std::multiplies<mp_float>());
+ mp_float pochham_b = std::accumulate(bp.begin(), bp.end(), boost::multiprecision::one(), std::multiplies<mp_float>());
+
+ mp_float HPFQ = boost::multiprecision::one() + ((pochham_a / pochham_b) * x_pow_n_div_n_fact);
+
+ boost::int32_t n;
+
+ // Series expansion of hyperg_pfq[{a0, a1, a2, ...}; {b0, b1, b2, ...}; x].
+ for(n = static_cast<boost::int32_t>(2); n < boost::multiprecision::max_iteration(); n++)
+ {
+ x_pow_n_div_n_fact *= x;
+ x_pow_n_div_n_fact /= n;
+
+ // Increment each of the pochhammer elements in a and b.
+ std::transform(ap.begin(), ap.end(), ap.begin(), std::bind1st(std::plus<mp_float>(), boost::multiprecision::one()));
+ std::transform(bp.begin(), bp.end(), bp.begin(), std::bind1st(std::plus<mp_float>(), boost::multiprecision::one()));
+
+ // Multiply the pochhammer product terms with the products of the incremented
+ // pochhammer elements. These are products of the form:
+ // [(a0)_k * (a1)_k * (a2)_k * ...], or [(b0)_k * (b1)_k * (b2)_k * ...].
+ pochham_a *= std::accumulate(ap.begin(), ap.end(), boost::multiprecision::one(), std::multiplies<mp_float>());
+ pochham_b *= std::accumulate(bp.begin(), bp.end(), boost::multiprecision::one(), std::multiplies<mp_float>());
+
+ const mp_float term = (pochham_a / pochham_b) * x_pow_n_div_n_fact;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - HPFQ.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ HPFQ += term;
+ }
+
+ return ((n < boost::multiprecision::max_iteration()) ? HPFQ : std::numeric_limits<mp_float>::quiet_NaN());
+}

Added: sandbox/multiprecision/src/functions/elementary/elementary_math.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/elementary/elementary_math.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,246 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+
+using boost::multiprecision::mp_float;
+
+#if defined(__GNUC__)
+ static inline int _isnan (double x) { return std::isnan <double>(x); }
+ static inline int _finite(double x) { return std::isfinite<double>(x); }
+#endif
+
+mp_float boost::multiprecision::floor(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x) || boost::multiprecision::isint(x)) { return x; }
+
+ return (boost::multiprecision::isneg(x) ? boost::multiprecision::integer_part(x - boost::multiprecision::one())
+ : boost::multiprecision::integer_part(x));
+}
+
+mp_float boost::multiprecision::ceil(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x) || boost::multiprecision::isint(x)) { return x; }
+
+ return (boost::multiprecision::isneg(x) ? boost::multiprecision::integer_part(x)
+ : boost::multiprecision::integer_part(x + boost::multiprecision::one()));
+}
+
+boost::int32_t boost::multiprecision::sgn(const mp_float& x)
+{
+ if(boost::multiprecision::iszero(x))
+ {
+ return static_cast<boost::int32_t>(0);
+ }
+ else
+ {
+ return (boost::multiprecision::isneg(x) ? static_cast<boost::int32_t>(-1) : static_cast<boost::int32_t>(1));
+ }
+}
+
+mp_float ldexp(const mp_float& v, int e)
+{
+ return v * boost::multiprecision::pow2(e);
+}
+
+mp_float boost::multiprecision::frexp(const mp_float& v, int* expon)
+{
+ double d;
+ boost::int64_t i;
+
+ v.extract_parts(d, i);
+
+ *expon = static_cast<int>(i);
+
+ return v * boost::multiprecision::pow2(static_cast<boost::int64_t>(-i));
+}
+
+mp_float boost::multiprecision::fmod(const mp_float& v1, const mp_float& v2)
+{
+ const mp_float n = (boost::multiprecision::isneg(v1) ? boost::multiprecision::ceil(v1 / v2) : boost::multiprecision::floor(v1 / v2));
+
+ return v1 - (n * v2);
+}
+
+bool boost::multiprecision::isfinite(const double x) { return (::_finite(x) != 0); }
+bool boost::multiprecision::isnan (const double x) { return (::_isnan (x) != 0); }
+
+double boost::multiprecision::to_double(const mp_float& x) { return x.extract_double(); }
+double boost::multiprecision::to_double(const mp_complex& z) { return boost::multiprecision::to_double(z.real()); }
+
+boost::int64_t boost::multiprecision::to_int64(const double x) { return static_cast<boost::int64_t>(x); }
+boost::int64_t boost::multiprecision::to_int64(const mp_float& x) { return static_cast<boost::int64_t>(x.extract_signed_long_long()); }
+boost::int64_t boost::multiprecision::to_int64(const mp_complex& z) { return boost::multiprecision::to_int64(z.real()); }
+
+bool boost::multiprecision::isint(const double x)
+{
+ static const double delta = (std::numeric_limits<double>::min)() * 2.0;
+
+ const double xx = ::fabs(x);
+
+ if((xx - ::floor(xx)) < delta)
+ {
+ return true;
+ }
+ else if((::ceil(xx) - xx) < delta)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+boost::int32_t boost::multiprecision::to_int32(const double x)
+{
+ const boost::int64_t n32_max = static_cast<boost::int64_t>((std::numeric_limits<boost::int32_t>::max)());
+ const boost::int64_t n32_min = static_cast<boost::int64_t>((std::numeric_limits<boost::int32_t>::min)());
+
+ const boost::int64_t n64 = boost::multiprecision::to_int64(x);
+
+ return static_cast<boost::int32_t>((std::min)((std::max)(n64, n32_min), n32_max));
+}
+
+boost::int32_t boost::multiprecision::to_int32(const mp_float& x)
+{
+ const boost::int64_t n32_max = static_cast<boost::int64_t>((std::numeric_limits<boost::int32_t>::max)());
+ const boost::int64_t n32_min = static_cast<boost::int64_t>((std::numeric_limits<boost::int32_t>::min)());
+
+ const boost::int64_t n64 = boost::multiprecision::to_int64(x);
+
+ return static_cast<boost::int32_t>((std::min)((std::max)(n64, n32_min), n32_max));
+}
+
+boost::int32_t boost::multiprecision::to_int32(const mp_complex& z)
+{
+ return boost::multiprecision::to_int32(z.real());
+}
+
+void boost::multiprecision::to_parts(const mp_float& x, double& mantissa, boost::int64_t& exponent)
+{
+ x.extract_parts(mantissa, exponent);
+}
+
+mp_float boost::multiprecision::integer_part(const mp_float& x)
+{
+ return x.extract_integer_part();
+}
+
+mp_float boost::multiprecision::decimal_part(const mp_float& x)
+{
+ return x.extract_decimal_part();
+}
+
+bool boost::multiprecision::small_arg(const double x)
+{
+ static const double one_sixth = 1.0 / 6.0;
+ static const double small_tol = ::pow(std::numeric_limits<double>::epsilon(), one_sixth);
+
+ return (::fabs(x) < small_tol);
+}
+
+bool boost::multiprecision::small_arg(const mp_float& x)
+{
+ static const double lim_d = static_cast<double>(static_cast<boost::int32_t>(boost::multiprecision::tol())) / 10.0;
+ static const boost::int64_t lim = (std::max)(static_cast<boost::int64_t>(lim_d), static_cast<boost::int64_t>(6));
+
+ return (x.order() < static_cast<boost::int64_t>(-lim));
+}
+
+bool boost::multiprecision::small_arg(const mp_complex& z)
+{
+ return boost::multiprecision::small_arg(boost::multiprecision::abs(z));
+}
+
+bool boost::multiprecision::large_arg(const double x)
+{
+ static const double one_sixth = 1.0 / 6.0;
+ static const double small_tol = ::pow(std::numeric_limits<double>::epsilon(), one_sixth);
+ static const double large_tol = 1.0 / small_tol;
+
+ return (::fabs(x) > large_tol);
+}
+
+bool boost::multiprecision::large_arg(const mp_float& x)
+{
+ static const double lim_d = static_cast<double>(static_cast<boost::int32_t>(boost::multiprecision::tol())) / 10.0;
+ static const boost::int64_t lim = (std::max)(static_cast<boost::int64_t>(lim_d), static_cast<boost::int64_t>(6));
+
+ return (x.order() > lim);
+}
+
+bool boost::multiprecision::large_arg(const mp_complex& z) { return boost::multiprecision::large_arg(z.real()); }
+
+bool boost::multiprecision::near_one(const double x) { return boost::multiprecision::small_arg(::fabs(1.0 - x)); }
+bool boost::multiprecision::near_one(const mp_float& x) { return boost::multiprecision::small_arg(boost::multiprecision::fabs(boost::multiprecision::one() - x)); }
+bool boost::multiprecision::near_one(const mp_complex& z) { return boost::multiprecision::near_one(z.real()) && boost::multiprecision::iszero(z.imag()); }
+
+bool boost::multiprecision::near_int(const double x)
+{
+ if(boost::multiprecision::isint(x))
+ {
+ return true;
+ }
+ else
+ {
+ const double xx = ::fabs(x);
+
+ if(boost::multiprecision::small_arg(xx - ::floor(xx)))
+ {
+ return true;
+ }
+ else if(boost::multiprecision::small_arg(::ceil(xx) - xx))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+bool boost::multiprecision::near_int(const mp_float& x)
+{
+ if(boost::multiprecision::isint(x))
+ {
+ return true;
+ }
+ else
+ {
+ const mp_float xx = boost::multiprecision::fabs(x);
+
+ if(boost::multiprecision::small_arg(xx - boost::multiprecision::floor(xx)))
+ {
+ return true;
+ }
+ else if(boost::multiprecision::small_arg(boost::multiprecision::ceil(xx) - xx))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+bool boost::multiprecision::near_int(const mp_complex& z)
+{
+ if(boost::multiprecision::isint(z))
+ {
+ return true;
+ }
+ else
+ {
+ return boost::multiprecision::iszero(z.imag()) && boost::multiprecision::near_int(z.real());
+ }
+}

Added: sandbox/multiprecision/src/functions/elementary/elementary_trans.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/elementary/elementary_trans.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,876 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <vector>
+#include <numeric>
+#include <map>
+
+#include <boost/array.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+#include <boost/multiprecision/utility/util_power_x_pow_n.hpp>
+
+using boost::multiprecision::mp_float;
+
+namespace ElementaryTrans_Series
+{
+ static mp_float rootn_inv(const mp_float& x, const boost::int32_t p);
+}
+
+mp_float boost::multiprecision::pown(const mp_float& x, const boost::int64_t p)
+{
+ return boost::multiprecision::utility::x_pow_n_template<mp_float>(x, p);
+}
+
+mp_float boost::multiprecision::pow2(const boost::int64_t p)
+{
+ // Create a static const table of p^2 for -128 < p < +128.
+ // Note: The size of this table must be odd-numbered and
+ // symmetric about 0.
+ static const boost::array<mp_float, 255u> p2_data =
+ {{
+ mp_float("5.877471754111437539843682686111228389093327783860437607543758531392086297273635864257812500000000000e-39"),
+ mp_float("1.175494350822287507968736537222245677818665556772087521508751706278417259454727172851562500000000000e-38"),
+ mp_float("2.350988701644575015937473074444491355637331113544175043017503412556834518909454345703125000000000000e-38"),
+ mp_float("4.701977403289150031874946148888982711274662227088350086035006825113669037818908691406250000000000000e-38"),
+ mp_float("9.403954806578300063749892297777965422549324454176700172070013650227338075637817382812500000000000000e-38"),
+ mp_float("1.880790961315660012749978459555593084509864890835340034414002730045467615127563476562500000000000000e-37"),
+ mp_float("3.761581922631320025499956919111186169019729781670680068828005460090935230255126953125000000000000000e-37"),
+ mp_float("7.523163845262640050999913838222372338039459563341360137656010920181870460510253906250000000000000000e-37"),
+ mp_float("1.504632769052528010199982767644474467607891912668272027531202184036374092102050781250000000000000000e-36"),
+ mp_float("3.009265538105056020399965535288948935215783825336544055062404368072748184204101562500000000000000000e-36"),
+ mp_float("6.018531076210112040799931070577897870431567650673088110124808736145496368408203125000000000000000000e-36"),
+ mp_float("1.203706215242022408159986214115579574086313530134617622024961747229099273681640625000000000000000000e-35"),
+ mp_float("2.407412430484044816319972428231159148172627060269235244049923494458198547363281250000000000000000000e-35"),
+ mp_float("4.814824860968089632639944856462318296345254120538470488099846988916397094726562500000000000000000000e-35"),
+ mp_float("9.629649721936179265279889712924636592690508241076940976199693977832794189453125000000000000000000000e-35"),
+ mp_float("1.925929944387235853055977942584927318538101648215388195239938795566558837890625000000000000000000000e-34"),
+ mp_float("3.851859888774471706111955885169854637076203296430776390479877591133117675781250000000000000000000000e-34"),
+ mp_float("7.703719777548943412223911770339709274152406592861552780959755182266235351562500000000000000000000000e-34"),
+ mp_float("1.540743955509788682444782354067941854830481318572310556191951036453247070312500000000000000000000000e-33"),
+ mp_float("3.081487911019577364889564708135883709660962637144621112383902072906494140625000000000000000000000000e-33"),
+ mp_float("6.162975822039154729779129416271767419321925274289242224767804145812988281250000000000000000000000000e-33"),
+ mp_float("1.232595164407830945955825883254353483864385054857848444953560829162597656250000000000000000000000000e-32"),
+ mp_float("2.465190328815661891911651766508706967728770109715696889907121658325195312500000000000000000000000000e-32"),
+ mp_float("4.930380657631323783823303533017413935457540219431393779814243316650390625000000000000000000000000000e-32"),
+ mp_float("9.860761315262647567646607066034827870915080438862787559628486633300781250000000000000000000000000000e-32"),
+ mp_float("1.972152263052529513529321413206965574183016087772557511925697326660156250000000000000000000000000000e-31"),
+ mp_float("3.944304526105059027058642826413931148366032175545115023851394653320312500000000000000000000000000000e-31"),
+ mp_float("7.888609052210118054117285652827862296732064351090230047702789306640625000000000000000000000000000000e-31"),
+ mp_float("1.577721810442023610823457130565572459346412870218046009540557861328125000000000000000000000000000000e-30"),
+ mp_float("3.155443620884047221646914261131144918692825740436092019081115722656250000000000000000000000000000000e-30"),
+ mp_float("6.310887241768094443293828522262289837385651480872184038162231445312500000000000000000000000000000000e-30"),
+ mp_float("1.262177448353618888658765704452457967477130296174436807632446289062500000000000000000000000000000000e-29"),
+ mp_float("2.524354896707237777317531408904915934954260592348873615264892578125000000000000000000000000000000000e-29"),
+ mp_float("5.048709793414475554635062817809831869908521184697747230529785156250000000000000000000000000000000000e-29"),
+ mp_float("1.009741958682895110927012563561966373981704236939549446105957031250000000000000000000000000000000000e-28"),
+ mp_float("2.019483917365790221854025127123932747963408473879098892211914062500000000000000000000000000000000000e-28"),
+ mp_float("4.038967834731580443708050254247865495926816947758197784423828125000000000000000000000000000000000000e-28"),
+ mp_float("8.077935669463160887416100508495730991853633895516395568847656250000000000000000000000000000000000000e-28"),
+ mp_float("1.615587133892632177483220101699146198370726779103279113769531250000000000000000000000000000000000000e-27"),
+ mp_float("3.231174267785264354966440203398292396741453558206558227539062500000000000000000000000000000000000000e-27"),
+ mp_float("6.462348535570528709932880406796584793482907116413116455078125000000000000000000000000000000000000000e-27"),
+ mp_float("1.292469707114105741986576081359316958696581423282623291015625000000000000000000000000000000000000000e-26"),
+ mp_float("2.584939414228211483973152162718633917393162846565246582031250000000000000000000000000000000000000000e-26"),
+ mp_float("5.169878828456422967946304325437267834786325693130493164062500000000000000000000000000000000000000000e-26"),
+ mp_float("1.033975765691284593589260865087453566957265138626098632812500000000000000000000000000000000000000000e-25"),
+ mp_float("2.067951531382569187178521730174907133914530277252197265625000000000000000000000000000000000000000000e-25"),
+ mp_float("4.135903062765138374357043460349814267829060554504394531250000000000000000000000000000000000000000000e-25"),
+ mp_float("8.271806125530276748714086920699628535658121109008789062500000000000000000000000000000000000000000000e-25"),
+ mp_float("1.654361225106055349742817384139925707131624221801757812500000000000000000000000000000000000000000000e-24"),
+ mp_float("3.308722450212110699485634768279851414263248443603515625000000000000000000000000000000000000000000000e-24"),
+ mp_float("6.617444900424221398971269536559702828526496887207031250000000000000000000000000000000000000000000000e-24"),
+ mp_float("1.323488980084844279794253907311940565705299377441406250000000000000000000000000000000000000000000000e-23"),
+ mp_float("2.646977960169688559588507814623881131410598754882812500000000000000000000000000000000000000000000000e-23"),
+ mp_float("5.293955920339377119177015629247762262821197509765625000000000000000000000000000000000000000000000000e-23"),
+ mp_float("1.058791184067875423835403125849552452564239501953125000000000000000000000000000000000000000000000000e-22"),
+ mp_float("2.117582368135750847670806251699104905128479003906250000000000000000000000000000000000000000000000000e-22"),
+ mp_float("4.235164736271501695341612503398209810256958007812500000000000000000000000000000000000000000000000000e-22"),
+ mp_float("8.470329472543003390683225006796419620513916015625000000000000000000000000000000000000000000000000000e-22"),
+ mp_float("1.694065894508600678136645001359283924102783203125000000000000000000000000000000000000000000000000000e-21"),
+ mp_float("3.388131789017201356273290002718567848205566406250000000000000000000000000000000000000000000000000000e-21"),
+ mp_float("6.776263578034402712546580005437135696411132812500000000000000000000000000000000000000000000000000000e-21"),
+ mp_float("1.355252715606880542509316001087427139282226562500000000000000000000000000000000000000000000000000000e-20"),
+ mp_float("2.710505431213761085018632002174854278564453125000000000000000000000000000000000000000000000000000000e-20"),
+ mp_float("5.421010862427522170037264004349708557128906250000000000000000000000000000000000000000000000000000000e-20"),
+ mp_float("1.084202172485504434007452800869941711425781250000000000000000000000000000000000000000000000000000000e-19"),
+ mp_float("2.168404344971008868014905601739883422851562500000000000000000000000000000000000000000000000000000000e-19"),
+ mp_float("4.336808689942017736029811203479766845703125000000000000000000000000000000000000000000000000000000000e-19"),
+ mp_float("8.673617379884035472059622406959533691406250000000000000000000000000000000000000000000000000000000000e-19"),
+ mp_float("1.734723475976807094411924481391906738281250000000000000000000000000000000000000000000000000000000000e-18"),
+ mp_float("3.469446951953614188823848962783813476562500000000000000000000000000000000000000000000000000000000000e-18"),
+ mp_float("6.938893903907228377647697925567626953125000000000000000000000000000000000000000000000000000000000000e-18"),
+ mp_float("1.387778780781445675529539585113525390625000000000000000000000000000000000000000000000000000000000000e-17"),
+ mp_float("2.775557561562891351059079170227050781250000000000000000000000000000000000000000000000000000000000000e-17"),
+ mp_float("5.551115123125782702118158340454101562500000000000000000000000000000000000000000000000000000000000000e-17"),
+ mp_float("1.110223024625156540423631668090820312500000000000000000000000000000000000000000000000000000000000000e-16"),
+ mp_float("2.220446049250313080847263336181640625000000000000000000000000000000000000000000000000000000000000000e-16"),
+ mp_float("4.440892098500626161694526672363281250000000000000000000000000000000000000000000000000000000000000000e-16"),
+ mp_float("8.881784197001252323389053344726562500000000000000000000000000000000000000000000000000000000000000000e-16"),
+ mp_float("1.776356839400250464677810668945312500000000000000000000000000000000000000000000000000000000000000000e-15"),
+ mp_float("3.552713678800500929355621337890625000000000000000000000000000000000000000000000000000000000000000000e-15"),
+ mp_float("7.105427357601001858711242675781250000000000000000000000000000000000000000000000000000000000000000000e-15"),
+ mp_float("1.421085471520200371742248535156250000000000000000000000000000000000000000000000000000000000000000000e-14"),
+ mp_float("2.842170943040400743484497070312500000000000000000000000000000000000000000000000000000000000000000000e-14"),
+ mp_float("5.684341886080801486968994140625000000000000000000000000000000000000000000000000000000000000000000000e-14"),
+ mp_float("1.136868377216160297393798828125000000000000000000000000000000000000000000000000000000000000000000000e-13"),
+ mp_float("2.273736754432320594787597656250000000000000000000000000000000000000000000000000000000000000000000000e-13"),
+ mp_float("4.547473508864641189575195312500000000000000000000000000000000000000000000000000000000000000000000000e-13"),
+ mp_float("9.094947017729282379150390625000000000000000000000000000000000000000000000000000000000000000000000000e-13"),
+ mp_float("1.818989403545856475830078125000000000000000000000000000000000000000000000000000000000000000000000000e-12"),
+ mp_float("3.637978807091712951660156250000000000000000000000000000000000000000000000000000000000000000000000000e-12"),
+ mp_float("7.275957614183425903320312500000000000000000000000000000000000000000000000000000000000000000000000000e-12"),
+ mp_float("1.455191522836685180664062500000000000000000000000000000000000000000000000000000000000000000000000000e-11"),
+ mp_float("2.910383045673370361328125000000000000000000000000000000000000000000000000000000000000000000000000000e-11"),
+ mp_float("5.820766091346740722656250000000000000000000000000000000000000000000000000000000000000000000000000000e-11"),
+ mp_float("1.164153218269348144531250000000000000000000000000000000000000000000000000000000000000000000000000000e-10"),
+ mp_float("2.328306436538696289062500000000000000000000000000000000000000000000000000000000000000000000000000000e-10"),
+ mp_float("4.656612873077392578125000000000000000000000000000000000000000000000000000000000000000000000000000000e-10"),
+ mp_float("9.313225746154785156250000000000000000000000000000000000000000000000000000000000000000000000000000000e-10"),
+ mp_float("1.862645149230957031250000000000000000000000000000000000000000000000000000000000000000000000000000000e-9"),
+ mp_float("3.725290298461914062500000000000000000000000000000000000000000000000000000000000000000000000000000000e-9"),
+ mp_float("7.450580596923828125000000000000000000000000000000000000000000000000000000000000000000000000000000000e-9"),
+ mp_float("1.490116119384765625000000000000000000000000000000000000000000000000000000000000000000000000000000000e-8"),
+ mp_float("2.980232238769531250000000000000000000000000000000000000000000000000000000000000000000000000000000000e-8"),
+ mp_float("5.960464477539062500000000000000000000000000000000000000000000000000000000000000000000000000000000000e-8"),
+ mp_float("1.192092895507812500000000000000000000000000000000000000000000000000000000000000000000000000000000000e-7"),
+ mp_float("2.384185791015625000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-7"),
+ mp_float("4.768371582031250000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-7"),
+ mp_float("9.536743164062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-7"),
+ mp_float("1.907348632812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-6"),
+ mp_float("3.814697265625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-6"),
+ mp_float("7.629394531250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e-6"),
+ mp_float("0.000015258789062500000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.000030517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.000061035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.000122070312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.000244140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.000488281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.000976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.001953125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.003906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.007812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.01562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.03125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ mp_float("0.06250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"),
+ boost::multiprecision::eighth(),
+ boost::multiprecision::quarter(),
+ boost::multiprecision::half(),
+ boost::multiprecision::one(),
+ boost::multiprecision::two(),
+ boost::multiprecision::four(),
+ boost::multiprecision::eight(),
+ mp_float(16),
+ mp_float(32),
+ mp_float(64),
+ mp_float(128),
+ mp_float(256),
+ mp_float(512),
+ mp_float(1024),
+ mp_float(2048),
+ mp_float(4096),
+ mp_float(8192),
+ mp_float(16384),
+ mp_float(32768),
+ mp_float(65536),
+ mp_float(131072),
+ mp_float(262144),
+ mp_float(524288),
+ mp_float(static_cast<boost::uint32_t>(1uL << 20u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 21u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 22u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 23u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 24u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 25u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 26u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 27u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 28u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 29u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 30u)),
+ mp_float(static_cast<boost::uint32_t>(1uL << 31u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 32u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 33u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 34u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 35u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 36u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 37u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 38u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 39u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 40u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 41u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 42u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 43u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 44u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 45u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 46u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 47u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 48u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 49u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 50u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 51u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 52u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 53u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 54u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 55u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 56u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 57u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 58u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 59u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 60u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 61u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 62u)),
+ mp_float(static_cast<boost::uint64_t>(1uLL << 63u)),
+ mp_float("1.844674407370955161600000000000000000000000000000000000000000000000000000000000000000000000000000000e19"),
+ mp_float("3.689348814741910323200000000000000000000000000000000000000000000000000000000000000000000000000000000e19"),
+ mp_float("7.378697629483820646400000000000000000000000000000000000000000000000000000000000000000000000000000000e19"),
+ mp_float("1.475739525896764129280000000000000000000000000000000000000000000000000000000000000000000000000000000e20"),
+ mp_float("2.951479051793528258560000000000000000000000000000000000000000000000000000000000000000000000000000000e20"),
+ mp_float("5.902958103587056517120000000000000000000000000000000000000000000000000000000000000000000000000000000e20"),
+ mp_float("1.180591620717411303424000000000000000000000000000000000000000000000000000000000000000000000000000000e21"),
+ mp_float("2.361183241434822606848000000000000000000000000000000000000000000000000000000000000000000000000000000e21"),
+ mp_float("4.722366482869645213696000000000000000000000000000000000000000000000000000000000000000000000000000000e21"),
+ mp_float("9.444732965739290427392000000000000000000000000000000000000000000000000000000000000000000000000000000e21"),
+ mp_float("1.888946593147858085478400000000000000000000000000000000000000000000000000000000000000000000000000000e22"),
+ mp_float("3.777893186295716170956800000000000000000000000000000000000000000000000000000000000000000000000000000e22"),
+ mp_float("7.555786372591432341913600000000000000000000000000000000000000000000000000000000000000000000000000000e22"),
+ mp_float("1.511157274518286468382720000000000000000000000000000000000000000000000000000000000000000000000000000e23"),
+ mp_float("3.022314549036572936765440000000000000000000000000000000000000000000000000000000000000000000000000000e23"),
+ mp_float("6.044629098073145873530880000000000000000000000000000000000000000000000000000000000000000000000000000e23"),
+ mp_float("1.208925819614629174706176000000000000000000000000000000000000000000000000000000000000000000000000000e24"),
+ mp_float("2.417851639229258349412352000000000000000000000000000000000000000000000000000000000000000000000000000e24"),
+ mp_float("4.835703278458516698824704000000000000000000000000000000000000000000000000000000000000000000000000000e24"),
+ mp_float("9.671406556917033397649408000000000000000000000000000000000000000000000000000000000000000000000000000e24"),
+ mp_float("1.934281311383406679529881600000000000000000000000000000000000000000000000000000000000000000000000000e25"),
+ mp_float("3.868562622766813359059763200000000000000000000000000000000000000000000000000000000000000000000000000e25"),
+ mp_float("7.737125245533626718119526400000000000000000000000000000000000000000000000000000000000000000000000000e25"),
+ mp_float("1.547425049106725343623905280000000000000000000000000000000000000000000000000000000000000000000000000e26"),
+ mp_float("3.094850098213450687247810560000000000000000000000000000000000000000000000000000000000000000000000000e26"),
+ mp_float("6.189700196426901374495621120000000000000000000000000000000000000000000000000000000000000000000000000e26"),
+ mp_float("1.237940039285380274899124224000000000000000000000000000000000000000000000000000000000000000000000000e27"),
+ mp_float("2.475880078570760549798248448000000000000000000000000000000000000000000000000000000000000000000000000e27"),
+ mp_float("4.951760157141521099596496896000000000000000000000000000000000000000000000000000000000000000000000000e27"),
+ mp_float("9.903520314283042199192993792000000000000000000000000000000000000000000000000000000000000000000000000e27"),
+ mp_float("1.980704062856608439838598758400000000000000000000000000000000000000000000000000000000000000000000000e28"),
+ mp_float("3.961408125713216879677197516800000000000000000000000000000000000000000000000000000000000000000000000e28"),
+ mp_float("7.922816251426433759354395033600000000000000000000000000000000000000000000000000000000000000000000000e28"),
+ mp_float("1.584563250285286751870879006720000000000000000000000000000000000000000000000000000000000000000000000e29"),
+ mp_float("3.169126500570573503741758013440000000000000000000000000000000000000000000000000000000000000000000000e29"),
+ mp_float("6.338253001141147007483516026880000000000000000000000000000000000000000000000000000000000000000000000e29"),
+ mp_float("1.267650600228229401496703205376000000000000000000000000000000000000000000000000000000000000000000000e30"),
+ mp_float("2.535301200456458802993406410752000000000000000000000000000000000000000000000000000000000000000000000e30"),
+ mp_float("5.070602400912917605986812821504000000000000000000000000000000000000000000000000000000000000000000000e30"),
+ mp_float("1.014120480182583521197362564300800000000000000000000000000000000000000000000000000000000000000000000e31"),
+ mp_float("2.028240960365167042394725128601600000000000000000000000000000000000000000000000000000000000000000000e31"),
+ mp_float("4.056481920730334084789450257203200000000000000000000000000000000000000000000000000000000000000000000e31"),
+ mp_float("8.112963841460668169578900514406400000000000000000000000000000000000000000000000000000000000000000000e31"),
+ mp_float("1.622592768292133633915780102881280000000000000000000000000000000000000000000000000000000000000000000e32"),
+ mp_float("3.245185536584267267831560205762560000000000000000000000000000000000000000000000000000000000000000000e32"),
+ mp_float("6.490371073168534535663120411525120000000000000000000000000000000000000000000000000000000000000000000e32"),
+ mp_float("1.298074214633706907132624082305024000000000000000000000000000000000000000000000000000000000000000000e33"),
+ mp_float("2.596148429267413814265248164610048000000000000000000000000000000000000000000000000000000000000000000e33"),
+ mp_float("5.192296858534827628530496329220096000000000000000000000000000000000000000000000000000000000000000000e33"),
+ mp_float("1.038459371706965525706099265844019200000000000000000000000000000000000000000000000000000000000000000e34"),
+ mp_float("2.076918743413931051412198531688038400000000000000000000000000000000000000000000000000000000000000000e34"),
+ mp_float("4.153837486827862102824397063376076800000000000000000000000000000000000000000000000000000000000000000e34"),
+ mp_float("8.307674973655724205648794126752153600000000000000000000000000000000000000000000000000000000000000000e34"),
+ mp_float("1.661534994731144841129758825350430720000000000000000000000000000000000000000000000000000000000000000e35"),
+ mp_float("3.323069989462289682259517650700861440000000000000000000000000000000000000000000000000000000000000000e35"),
+ mp_float("6.646139978924579364519035301401722880000000000000000000000000000000000000000000000000000000000000000e35"),
+ mp_float("1.329227995784915872903807060280344576000000000000000000000000000000000000000000000000000000000000000e36"),
+ mp_float("2.658455991569831745807614120560689152000000000000000000000000000000000000000000000000000000000000000e36"),
+ mp_float("5.316911983139663491615228241121378304000000000000000000000000000000000000000000000000000000000000000e36"),
+ mp_float("1.063382396627932698323045648224275660800000000000000000000000000000000000000000000000000000000000000e37"),
+ mp_float("2.126764793255865396646091296448551321600000000000000000000000000000000000000000000000000000000000000e37"),
+ mp_float("4.253529586511730793292182592897102643200000000000000000000000000000000000000000000000000000000000000e37"),
+ mp_float("8.507059173023461586584365185794205286400000000000000000000000000000000000000000000000000000000000000e37"),
+ mp_float("1.701411834604692317316873037158841057280000000000000000000000000000000000000000000000000000000000000e38")
+ }};
+
+ if((p > static_cast<boost::int64_t>(-128)) && (p < static_cast<boost::int64_t>(+128)))
+ {
+ return p2_data[static_cast<std::size_t>(p + ((p2_data.size() - 1u) / 2u))];
+ }
+
+ // Compute and return 2^p.
+ if(p < static_cast<boost::int64_t>(0))
+ {
+ return boost::multiprecision::pow2(static_cast<boost::int64_t>(-p)).calculate_inv();
+ }
+ else if(p < static_cast<boost::int64_t>(std::numeric_limits<boost::uint64_t>::digits))
+ {
+ const boost::uint64_t p2 = static_cast<boost::uint64_t>(static_cast<boost::uint64_t>(1uLL) << p);
+ return mp_float(p2);
+ }
+ else
+ {
+ return boost::multiprecision::utility::x_pow_n_template(boost::multiprecision::two(), p);
+ }
+}
+
+static mp_float ElementaryTrans_Series::rootn_inv(const mp_float& x, const boost::int32_t p)
+{
+ // Compute the value of [1 / (rootn of x)] with n = p.
+
+ // Generate the initial estimate using 1 / rootn.
+ // Extract the mantissa and exponent for a "manual"
+ // computation of the estimate.
+ double dd;
+ boost::int64_t ne;
+ boost::multiprecision::to_parts(x, dd, ne);
+
+ // Adjust exponent and mantissa such that ne is an even power of p.
+ while(ne % static_cast<boost::int64_t>(p))
+ {
+ ++ne;
+ dd /= 10.0;
+ }
+
+ // Estimate the one over the root using simple manipulations.
+ const double one_over_rtn_d = ::pow(dd, -1.0 / static_cast<double>(p));
+
+ // Set the result equal to the initial guess.
+ mp_float result(one_over_rtn_d, static_cast<boost::int64_t>(-ne / p));
+
+ static const boost::int32_t double_digits10_minus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) - static_cast<boost::int32_t>(1));
+
+ for(boost::int32_t digits = double_digits10_minus_one; digits <= static_cast<boost::int32_t>(boost::multiprecision::tol()); digits *= static_cast<boost::int32_t>(2))
+ {
+ // Adjust precision of the terms.
+ result.precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+
+ // Next iteration
+ mp_float term = (((-boost::multiprecision::pown(result, p) * x) + boost::multiprecision::one()) / p) + boost::multiprecision::one();
+
+ term.precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+
+ result *= term;
+
+ }
+
+ result.precision(static_cast<boost::int32_t>(boost::multiprecision::tol()));
+
+ return result;
+}
+
+mp_float boost::multiprecision::inv (const mp_float& x) { return mp_float(x).calculate_inv(); }
+mp_float boost::multiprecision::sqrt(const mp_float& x) { return mp_float(x).calculate_sqrt(); }
+
+mp_float boost::multiprecision::cbrt(const mp_float& x)
+{
+ return boost::multiprecision::rootn(x, static_cast<boost::int32_t>(3));
+}
+
+mp_float boost::multiprecision::rootn(const mp_float& x, const boost::int32_t p)
+{
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(p < static_cast<boost::int32_t>(0))
+ {
+ return boost::multiprecision::rootn(boost::multiprecision::one() / x, static_cast<boost::int32_t>(-p));
+ }
+
+ if((p == static_cast<boost::int32_t>(0)) || boost::multiprecision::isneg(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+ else if(p == static_cast<boost::int32_t>(1))
+ {
+ return x;
+ }
+ else if(p == static_cast<boost::int32_t>(2))
+ {
+ return boost::multiprecision::sqrt(x);
+ }
+ else if((p == static_cast<boost::int32_t>(3)) && x.has_its_own_cbrt())
+ {
+ return mp_float::my_cbrt(x);
+ }
+
+ const mp_float rtn = (x.has_its_own_rootn() ? mp_float::my_rootn(x, p)
+ : ElementaryTrans_Series::rootn_inv(x, p).calculate_inv());
+
+ return rtn;
+}
+
+mp_float boost::multiprecision::exp(const mp_float& x)
+{
+ if(x.has_its_own_exp())
+ {
+ return mp_float::my_exp(x);
+ }
+
+ // Handle special arguments.
+ if(boost::multiprecision::isnan(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(boost::multiprecision::isinf(x))
+ {
+ return ((!boost::multiprecision::isneg(x)) ? std::numeric_limits<mp_float>::infinity() : boost::multiprecision::zero());
+ }
+
+ if(boost::multiprecision::iszero(x) || (x.order() < -boost::multiprecision::tol()))
+ {
+ return boost::multiprecision::one();
+ }
+
+ // Get local copy of argument and force it to be positive.
+ const bool bo_x_is_neg = boost::multiprecision::isneg(x);
+
+ const mp_float xx = ((!bo_x_is_neg) ? x : -x);
+
+ // Check the range of the argument.
+ static const mp_float maximum_arg_for_exp = std::numeric_limits<mp_float>::max_exponent;
+
+ if(xx > maximum_arg_for_exp)
+ {
+ // Overflow / underflow
+ return ((!bo_x_is_neg) ? std::numeric_limits<mp_float>::infinity() : boost::multiprecision::zero());
+ }
+
+ // Check for pure-integer arguments which can be either signed or unsigned.
+ if(boost::multiprecision::isint(x))
+ {
+ return boost::multiprecision::pown(boost::multiprecision::exp1(), boost::multiprecision::to_int64(x));
+ }
+
+ // The algorithm for exp has been taken from MPFUN.
+ // exp(t) = [ (1 + r + r^2/2! + r^3/3! + r^4/4! ...)^p2 ] * 2^n
+ // where p2 is a power of 2 such as 2048, r = t_prime / p2, and
+ // t_prime = t - n*ln2, with n chosen to minimize the absolute
+ // value of t_prime. In the resulting Taylor series, which is
+ // implemented as a hypergeometric function, |r| is bounded by
+ // ln2 / p2. For small arguments, no scaling is done.
+
+ const bool b_scale = (xx.order() > static_cast<boost::int64_t>(-4));
+
+ // Compute the exponential series of the (possibly) scaled argument.
+ mp_float exp_series;
+
+ if(b_scale)
+ {
+ // Compute 1 / ln2 as a warm-cached constant value.
+ static const mp_float one_over_ln2 = boost::multiprecision::one() / boost::multiprecision::ln2();
+
+ const mp_float nf = boost::multiprecision::integer_part(xx * one_over_ln2);
+
+ // The scaling is 2^11 = 2048.
+ const boost::int32_t p2 = static_cast<boost::int32_t>(boost::uint32_t(1u) << 11);
+
+ exp_series = boost::multiprecision::pown(boost::multiprecision::hyp0F0((xx - (nf * boost::multiprecision::ln2())) / p2), static_cast<boost::int64_t>(p2)) * boost::multiprecision::pow2(boost::multiprecision::to_int64(nf));
+ }
+ else
+ {
+ exp_series = boost::multiprecision::hyp0F0(xx);
+ }
+
+ return ((!bo_x_is_neg) ? exp_series : (boost::multiprecision::one() / exp_series));
+}
+
+namespace Log_Series
+{
+ static mp_float AtOne(const mp_float& x)
+ {
+ // This subroutine computes the series representation of Log[1 + x]
+ // for small x without losing precision.
+
+ // http://functions.wolfram.com/ElementaryFunctions/Log/26/01/01/
+
+ return x * boost::multiprecision::hyp2F1( boost::multiprecision::one(), boost::multiprecision::one(), boost::multiprecision::two(), -x);
+ }
+}
+
+mp_float boost::multiprecision::log(const mp_float& x)
+{
+ // Handle special arguments.
+ if(boost::multiprecision::isnan(x) || boost::multiprecision::isneg(x) || boost::multiprecision::isinf(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(x.has_its_own_log())
+ {
+ return mp_float::my_log(x);
+ }
+
+ if(boost::multiprecision::iszero(x))
+ {
+ return -std::numeric_limits<mp_float>::infinity();
+ }
+
+ if(boost::multiprecision::isone(x))
+ {
+ return boost::multiprecision::zero();
+ }
+
+ // Make a local copy
+ mp_float xx = x;
+
+ // Compute the delta of the argument compared to one.
+ const mp_float x_minus_one = xx - boost::multiprecision::one();
+
+ if(boost::multiprecision::near_one(xx))
+ {
+ return Log_Series::AtOne(x_minus_one);
+ }
+
+ // For large arguments, the value will be broken into two parts
+ // in order to facilitate the convergence of the Newton iteration.
+ const bool b_correction = ( (xx.order() > static_cast<boost::int64_t>(+1000))
+ || (xx.order() < static_cast<boost::int64_t>(-1000)));
+
+ mp_float correction;
+
+ if(b_correction)
+ {
+ // The argument xx is of the form a * 10^b.
+ // It will be broken into two parts: log(a) + b * log(10).
+ const bool b_neg_exp = (xx.order() < static_cast<boost::int64_t>(0));
+
+ // Remove a large power of ten from the argument. But be sure to leave the argument
+ // large enough (or small enough) to avoid entering the near-one range.
+ const boost::int64_t n_order = xx.order();
+ const boost::int64_t n_exp = ((!b_neg_exp) ? n_order : -n_order);
+ const boost::int64_t delta_exp = static_cast<boost::int64_t>(n_exp - static_cast<boost::int64_t>(8));
+
+ // Convert the scaling power of ten to a string and subsequently to an mp_float.
+ const mp_float mp_delta_exp("1E" + boost::lexical_cast<std::string>(delta_exp));
+
+ !b_neg_exp ? xx /= mp_delta_exp : xx *= mp_delta_exp;
+
+ correction = boost::multiprecision::ln10() * mp_float(delta_exp);
+
+ if(b_neg_exp)
+ {
+ correction = -correction;
+ }
+ }
+
+ // Generate the initial estimate using double precision log combined with
+ // the exponent for a "manual" computation of the initial iteration estimate.
+
+ static const double lg10_d = ::log(10.0);
+
+ static const boost::int64_t n32_min = static_cast<boost::int64_t>((std::numeric_limits<boost::int32_t>::min)());
+ static const boost::int64_t n32_max = static_cast<boost::int64_t>((std::numeric_limits<boost::int32_t>::max)());
+
+ // computation of the estimate.
+ double dd;
+ boost::int64_t ne;
+ boost::multiprecision::to_parts(xx, dd, ne);
+
+ const double nd = ((ne < static_cast<boost::int64_t>(0)) ? static_cast<double>(static_cast<boost::int32_t>((std::max)(ne, n32_min)))
+ : static_cast<double>(static_cast<boost::int32_t>((std::min)(ne, n32_max))));
+
+ const double dlog = ::log(dd) + (nd * lg10_d);
+
+ const double d10 = ((!boost::multiprecision::iszero(dlog)) ? ::log10(::fabs(dlog)) + 0.5 : 0.0);
+
+ const boost::int64_t p10 = (boost::multiprecision::ispos(dlog) ? static_cast<boost::int64_t>(d10) : static_cast<boost::int64_t>(-d10));
+
+ mp_float log_val = ((!boost::multiprecision::iszero(dlog)) ? mp_float(dlog / ::pow(10.0, static_cast<double>(static_cast<boost::int32_t>(p10))), p10)
+ : x_minus_one);
+
+ // Newton-Raphson iteration
+ static const boost::int32_t double_digits10_minus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) - static_cast<boost::int32_t>(1));
+
+ for(boost::int32_t digits = double_digits10_minus_one; digits <= static_cast<boost::int32_t>(boost::multiprecision::tol()); digits *= static_cast<boost::int32_t>(2))
+ {
+ // Adjust precision of the terms.
+ log_val.precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+ xx.precision(static_cast<boost::int32_t>(digits * static_cast<boost::int32_t>(2)));
+
+ const mp_float exp_minus_log = boost::multiprecision::exp(-log_val);
+
+ log_val += (xx * exp_minus_log) - boost::multiprecision::one();
+ }
+
+ return ((!b_correction) ? log_val : log_val + correction);
+}
+
+mp_float boost::multiprecision::log10(const mp_float& x) { return boost::multiprecision::log(x) / boost::multiprecision::ln10(); }
+mp_float boost::multiprecision::loga (const mp_float& a, const mp_float& x) { return boost::multiprecision::log(x) / boost::multiprecision::log(a); }
+mp_float boost::multiprecision::log1p(const mp_float& x) { return Log_Series::AtOne(x); }
+
+mp_float boost::multiprecision::log1p1m2(const mp_float& x)
+{
+ // This subroutine calculates the series representation of (1/2) Log[(1 + x) / (1 - x)]
+ // for small x without losing precision.
+
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return x;
+ }
+
+ if((x <= boost::multiprecision::one_minus()) || (x >= boost::multiprecision::one()))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ // for values of x near one.
+ const mp_float x2 = x * x;
+ mp_float xn = x;
+
+ mp_float sum = xn;
+
+ // Series representation of (1/2) Log[(1 + x) / (1 - x)] as given in
+ // Schaum's Outlines: Mathematical Handbook of Formulas and Tables,
+ // Second Edition, equation 22.8, page 136.
+ for(boost::int32_t n = static_cast<boost::int32_t>(3); n < boost::multiprecision::max_iteration(); n += static_cast<boost::int32_t>(2))
+ {
+ xn *= x2;
+
+ const mp_float term = xn / n;
+
+ if(n > static_cast<boost::int32_t>(20))
+ {
+ const boost::int64_t order_check = static_cast<boost::int64_t>(term.order() - sum.order());
+
+ if(order_check < -boost::multiprecision::tol())
+ {
+ break;
+ }
+ }
+
+ sum += term;
+ }
+
+ return sum;
+}
+
+mp_float boost::multiprecision::pow(const mp_float& x, const mp_float& a)
+{
+ if(!boost::multiprecision::isfinite(x) || boost::multiprecision::isone(a))
+ {
+ return x;
+ }
+
+ if(boost::multiprecision::iszero(x))
+ {
+ return boost::multiprecision::one();
+ }
+
+ if(boost::multiprecision::iszero(a))
+ {
+ return boost::multiprecision::one();
+ }
+
+ const bool bo_a_isint = boost::multiprecision::isint(a);
+
+ if(boost::multiprecision::isneg(x) && !bo_a_isint)
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(a <= boost::multiprecision::one_minus())
+ {
+ return boost::multiprecision::one() / boost::multiprecision::pow(x, -a);
+ }
+
+ const mp_float a_int = boost::multiprecision::integer_part(a);
+ const boost::int64_t an = boost::multiprecision::to_int64(a_int);
+ const mp_float da = a - a_int;
+
+ if(bo_a_isint)
+ {
+ return boost::multiprecision::pown(x, an);
+ }
+
+ static const mp_float nine_tenths = boost::multiprecision::nine() / static_cast<boost::int32_t>(10);
+
+ if(boost::multiprecision::ispos(x) && (x > boost::multiprecision::tenth()) && (x < nine_tenths))
+ {
+ if(boost::multiprecision::small_arg(a))
+ {
+ // Series expansion for small a.
+ return boost::multiprecision::hyp0F0(a * boost::multiprecision::log(x));
+ }
+ else
+ {
+ // Series expansion for moderately sized x. Note that for large power of a,
+ // the power of the integer part of a is calculated using the pown function.
+ return ((an != static_cast<boost::int64_t>(0)) ? boost::multiprecision::hyp1F0(-da, boost::multiprecision::one() - x) * boost::multiprecision::pown(x, an)
+ : boost::multiprecision::hyp1F0( -a, boost::multiprecision::one() - x));
+ }
+ }
+ else
+ {
+ // Series expansion for pow(x, a). Note that for large power of a, the power
+ // of the integer part of a is calculated using the pown function.
+ return ((an != static_cast<boost::int64_t>(0)) ? boost::multiprecision::exp(da * boost::multiprecision::log(x)) * boost::multiprecision::pown(x, an)
+ : boost::multiprecision::exp( a * boost::multiprecision::log(x)));
+ }
+}
+
+mp_float boost::multiprecision::sinh(const mp_float& x)
+{
+ if(x.has_its_own_sinh())
+ {
+ return mp_float::my_sinh(x);
+ }
+
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return x;
+ }
+
+ mp_float s;
+ boost::multiprecision::sinhcosh(x, &s, static_cast<mp_float*>(0u));
+ return s;
+}
+
+mp_float boost::multiprecision::cosh(const mp_float& x)
+{
+ if(x.has_its_own_cosh())
+ {
+ return mp_float::my_cosh(x);
+ }
+
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return x;
+ }
+
+ mp_float c;
+ boost::multiprecision::sinhcosh(x, static_cast<mp_float*>(0u), &c);
+ return c;
+}
+
+void boost::multiprecision::sinhcosh(const mp_float& x, mp_float* const p_sinh, mp_float* const p_cosh)
+{
+ if(!boost::multiprecision::isfinite(x) || (!p_sinh && !p_cosh))
+ {
+ return;
+ }
+
+ if(boost::multiprecision::iszero(x))
+ {
+ if(p_sinh)
+ {
+ *p_sinh = boost::multiprecision::zero();
+ }
+
+ if(p_cosh)
+ {
+ *p_cosh = boost::multiprecision::one();
+ }
+
+ return;
+ }
+
+ const mp_float e_px = boost::multiprecision::exp(x);
+ const mp_float e_mx = boost::multiprecision::one() / e_px;
+
+ if(p_sinh != static_cast<mp_float* const>(0u)) { *p_sinh = (e_px - e_mx) / static_cast<boost::int32_t>(2); }
+ if(p_cosh != static_cast<mp_float* const>(0u)) { *p_cosh = (e_px + e_mx) / static_cast<boost::int32_t>(2); }
+}
+
+mp_float boost::multiprecision::tanh(const mp_float& x)
+{
+ if(x.has_its_own_tanh())
+ {
+ return mp_float::my_tanh(x);
+ }
+
+ mp_float c, s;
+ boost::multiprecision::sinhcosh(x, &s, &c);
+ return s * c.calculate_inv();
+}
+
+mp_float boost::multiprecision::asinh(const mp_float& x)
+{
+ if(x.has_its_own_asinh())
+ {
+ return mp_float::my_asinh(x);
+ }
+
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(boost::multiprecision::iszero(x))
+ {
+ return boost::multiprecision::zero();
+ }
+ else
+ {
+ const mp_float value = boost::multiprecision::log(boost::multiprecision::fabs(x) + boost::multiprecision::sqrt((x * x) + boost::multiprecision::one()));
+
+ return !boost::multiprecision::isneg(x) ? value : -value;
+ }
+}
+
+mp_float boost::multiprecision::acosh(const mp_float& x)
+{
+ if(x.has_its_own_acosh())
+ {
+ return mp_float::my_acosh(x);
+ }
+
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(boost::multiprecision::isneg(x) || x < boost::multiprecision::one())
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(boost::multiprecision::isone(x))
+ {
+ return boost::multiprecision::one();
+ }
+
+ const mp_float x_minus_one = x - boost::multiprecision::one();
+
+ if(boost::multiprecision::small_arg(x_minus_one))
+ {
+ return (boost::multiprecision::sqrt2() * boost::multiprecision::sqrt(x_minus_one))
+ * boost::multiprecision::hyp2F1( boost::multiprecision::half(),
+ boost::multiprecision::half(),
+ boost::multiprecision::three_half(),
+ -x_minus_one / static_cast<boost::int32_t>(2));
+ }
+ else
+ {
+ return boost::multiprecision::log(x + boost::multiprecision::sqrt((x * x) - boost::multiprecision::one()));
+ }
+}
+
+mp_float boost::multiprecision::atanh(const mp_float& x)
+{
+ if(x.has_its_own_atanh())
+ {
+ return mp_float::my_atanh(x);
+ }
+
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return x;
+ }
+
+ const mp_float xx = boost::multiprecision::fabs(x);
+
+ if(xx >= boost::multiprecision::one())
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ const mp_float value = (boost::multiprecision::small_arg(x) ? boost::multiprecision::log1p1m2(x)
+ : (boost::multiprecision::log((boost::multiprecision::one() + x) / (boost::multiprecision::one() - x)) / static_cast<boost::int32_t>(2)));
+
+ return ((!boost::multiprecision::isneg(xx)) ? value : -value);
+}

Added: sandbox/multiprecision/src/functions/elementary/elementary_trig.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/elementary/elementary_trig.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,501 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+// *****************************************************************************
+// Filename : e_float_math.cpp
+//
+// Project : Multiple precision mathematics
+//
+// Date : 28.02.2004
+//
+// Description : Real variable mathematics for mp_float.
+//
+// *****************************************************************************
+
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+using boost::multiprecision::mp_float;
+
+mp_float boost::multiprecision::sin(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(x.has_its_own_sin())
+ {
+ return mp_float::my_sin(x);
+ }
+
+ // Local copy of the argument
+ mp_float xx = x;
+
+ // Analyze and prepare the phase of the argument.
+ // Make a local, positive copy of the argument, xx.
+ // The argument xx will be reduced to 0 <= xx <= pi/2.
+ bool b_negate_sin = false;
+
+ if(boost::multiprecision::isneg(x))
+ {
+ xx = -xx;
+ b_negate_sin = !b_negate_sin;
+ }
+
+ // Remove even multiples of pi.
+ if(xx > boost::multiprecision::pi())
+ {
+ mp_float n_pi = boost::multiprecision::integer_part(xx / boost::multiprecision::pi());
+ xx -= n_pi * boost::multiprecision::pi();
+
+ // Adjust signs if the multiple of pi is not even.
+ const bool b_n_pi_is_even = boost::multiprecision::iszero(boost::multiprecision::decimal_part(n_pi / static_cast<boost::int32_t>(2)));
+
+ if(!b_n_pi_is_even)
+ {
+ b_negate_sin = !b_negate_sin;
+ }
+ }
+
+ // Reduce the argument to 0 <= xx <= pi/2.
+ if(xx > boost::multiprecision::pi_half())
+ {
+ xx = boost::multiprecision::pi() - xx;
+ }
+
+ const bool b_zero = boost::multiprecision::iszero(xx);
+ const bool b_pi_half = boost::multiprecision::iszero(xx - boost::multiprecision::pi_half());
+
+ // Check if the reduced argument is very close to 0 or pi/2.
+ const bool b_near_zero = boost::multiprecision::small_arg(xx);
+ const mp_float delta_pi_half = boost::multiprecision::pi_half() - xx;
+ const bool b_near_pi_half = boost::multiprecision::small_arg(delta_pi_half);
+
+ mp_float sin_val;
+
+ if(b_zero)
+ {
+ sin_val = boost::multiprecision::zero();
+ }
+ else if(b_pi_half)
+ {
+ sin_val = boost::multiprecision::one();
+ }
+ else if(b_near_zero)
+ {
+ const mp_float x_squared = xx * xx;
+
+ sin_val = xx * boost::multiprecision::hyp0F1(boost::multiprecision::three_half(), -x_squared / static_cast<boost::int32_t>(4));
+ }
+ else if(b_near_pi_half)
+ {
+ sin_val = boost::multiprecision::hyp0F1(boost::multiprecision::half(), -(delta_pi_half * delta_pi_half) / static_cast<boost::int32_t>(4));
+ }
+ else
+ {
+ // Scale to a small argument for an efficient Taylor series,
+ // implemented as a hypergeometric function. Use a standard
+ // divide by three identity a certain number of times.
+ // Here we use division by 3^9 --> (19683 = 3^9).
+
+ const bool b_scale = (xx.order() > static_cast<boost::int64_t>(-4));
+
+ static const boost::int32_t n_scale = static_cast<boost::int32_t>(9);
+ static const boost::int32_t n_three_pow_scale = static_cast<boost::int32_t>(static_cast<boost::int64_t>(::pow(3.0, static_cast<double>(n_scale)) + 0.5));
+
+ if(b_scale)
+ {
+ xx /= n_three_pow_scale;
+ }
+
+ // Now with small arguments, we are ready for a series expansion.
+ sin_val = xx * boost::multiprecision::hyp0F1(boost::multiprecision::three_half(), -(xx * xx) / static_cast<boost::int32_t>(4));
+
+ // Convert back using multiple angle identity.
+ if(b_scale)
+ {
+ for(boost::int32_t k = static_cast<boost::int32_t>(0); k < n_scale; k++)
+ {
+ // Rescale the cosine value using the multiple angle identity.
+ sin_val = - ((sin_val * (sin_val * sin_val)) * static_cast<boost::int32_t>(4))
+ + (sin_val * static_cast<boost::int32_t>(3));
+ }
+ }
+ }
+
+ return ((!b_negate_sin) ? sin_val : -sin_val);
+}
+
+mp_float boost::multiprecision::cos(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(x.has_its_own_cos())
+ {
+ return mp_float::my_cos(x);
+ }
+
+ // Local copy of the argument
+ mp_float xx = x;
+
+ // Analyze and prepare the phase of the argument.
+ // Make a local, positive copy of the argument, xx.
+ // The argument xx will be reduced to 0 <= xx <= pi/2.
+ bool b_negate_cos = false;
+
+ if(boost::multiprecision::isneg(x))
+ {
+ xx = -xx;
+ }
+
+ // Remove even multiples of pi.
+ if(xx > boost::multiprecision::pi())
+ {
+ mp_float n_pi = boost::multiprecision::integer_part(xx / boost::multiprecision::pi());
+ xx -= n_pi * boost::multiprecision::pi();
+
+ // Adjust signs if the multiple of pi is not even.
+ const bool b_n_pi_is_even = boost::multiprecision::iszero(boost::multiprecision::decimal_part(n_pi / static_cast<boost::int32_t>(2)));
+
+ if(!b_n_pi_is_even)
+ {
+ b_negate_cos = !b_negate_cos;
+ }
+ }
+
+ // Reduce the argument to 0 <= xx <= pi/2.
+ if(xx > boost::multiprecision::pi_half())
+ {
+ xx = boost::multiprecision::pi() - xx;
+ b_negate_cos = !b_negate_cos;
+ }
+
+ const bool b_zero = boost::multiprecision::iszero(xx);
+ const bool b_pi_half = boost::multiprecision::iszero(xx - boost::multiprecision::pi_half());
+
+ // Check if the reduced argument is very close to 0 or pi/2.
+ const bool b_near_zero = boost::multiprecision::small_arg(xx);
+ const mp_float delta_pi_half = boost::multiprecision::pi_half() - xx;
+ const bool b_near_pi_half = boost::multiprecision::small_arg(delta_pi_half);
+
+ mp_float cos_val;
+
+ if(b_zero)
+ {
+ cos_val = boost::multiprecision::one();
+ }
+ else if(b_pi_half)
+ {
+ cos_val = boost::multiprecision::zero();
+ }
+ else if(b_near_zero)
+ {
+ const mp_float x_squared = xx * xx;
+
+ cos_val = boost::multiprecision::hyp0F1(boost::multiprecision::half(), -x_squared / static_cast<boost::int32_t>(4));
+ }
+ else if(b_near_pi_half)
+ {
+ cos_val = delta_pi_half * boost::multiprecision::hyp0F1(boost::multiprecision::three_half(), -(delta_pi_half * delta_pi_half) / static_cast<boost::int32_t>(4));
+ }
+ else
+ {
+ // Scale to a small argument for an efficient Taylor series,
+ // implemented as a hypergeometric function. Use a standard
+ // divide by three identity a certain number of times.
+ // Here we use division by 3^9 --> (19683 = 3^9).
+
+ const bool b_scale = (xx.order() > static_cast<boost::int64_t>(-4));
+
+ static const boost::int32_t n_scale = static_cast<boost::int32_t>(9);
+ static const boost::int32_t n_three_pow_scale = static_cast<boost::int32_t>(static_cast<boost::int64_t>(::pow(3.0, static_cast<double>(n_scale)) + 0.5));
+
+ if(b_scale)
+ {
+ xx /= n_three_pow_scale;
+ }
+
+ // Now with small arguments, we are ready for a series expansion.
+ cos_val = boost::multiprecision::hyp0F1(boost::multiprecision::half(), -(xx * xx) / static_cast<boost::int32_t>(4));
+
+ // Convert back using multiple angle identity.
+ if(b_scale)
+ {
+ for(boost::int32_t k = static_cast<boost::int32_t>(0); k < n_scale; k++)
+ {
+ // Rescale the cosine value using the multiple angle identity.
+ cos_val = ((cos_val * (cos_val * cos_val)) * static_cast<boost::int32_t>(4))
+ - (cos_val * static_cast<boost::int32_t>(3));
+ }
+ }
+ }
+
+ return ((!b_negate_cos) ? cos_val : -cos_val);
+}
+
+void boost::multiprecision::sincos(const mp_float& x, mp_float* const p_sin, mp_float* const p_cos)
+{
+ if(p_sin != static_cast<mp_float*>(0u)) { *p_sin = boost::multiprecision::sin(x); }
+ if(p_cos != static_cast<mp_float*>(0u)) { *p_cos = boost::multiprecision::cos(x); }
+}
+
+mp_float boost::multiprecision::tan(const mp_float& x)
+{
+ if(x.has_its_own_tan())
+ {
+ return mp_float::my_tan(x);
+ }
+ else
+ {
+ return boost::multiprecision::sin(x) / boost::multiprecision::cos(x);
+ }
+}
+
+mp_float boost::multiprecision::csc(const mp_float& x) { return boost::multiprecision::one() / boost::multiprecision::sin(x); }
+mp_float boost::multiprecision::sec(const mp_float& x) { return boost::multiprecision::one() / boost::multiprecision::cos(x); }
+mp_float boost::multiprecision::cot(const mp_float& x) { return boost::multiprecision::cos(x) / boost::multiprecision::sin(x); }
+
+mp_float boost::multiprecision::asin(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(x.has_its_own_asin())
+ {
+ return mp_float::my_asin(x);
+ }
+
+ const bool b_neg = boost::multiprecision::isneg(x);
+
+ const mp_float xx = !b_neg ? x : -x;
+
+ if(xx > boost::multiprecision::one())
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(boost::multiprecision::iszero(x))
+ {
+ return boost::multiprecision::zero();
+ }
+
+ if(boost::multiprecision::isone(xx))
+ {
+ return ((!b_neg) ? boost::multiprecision::pi_half() : -boost::multiprecision::pi_half());
+ }
+
+ if(boost::multiprecision::small_arg(xx))
+ {
+ // http://functions.wolfram.com/ElementaryFunctions/ArcSin/26/01/01/
+ const mp_float asin_value = x * boost::multiprecision::hyp2F1(boost::multiprecision::half(),
+ boost::multiprecision::half(),
+ boost::multiprecision::three_half(),
+ (x * x));
+
+ return !b_neg ? asin_value : -asin_value;
+ }
+ else if(boost::multiprecision::near_one(xx))
+ {
+ const mp_float dx1 = boost::multiprecision::one() - xx;
+
+ const mp_float asin_value = boost::multiprecision::pi_half()
+ - ( boost::multiprecision::sqrt(dx1 * static_cast<boost::int32_t>(2))
+ * boost::multiprecision::hyp2F1(boost::multiprecision::half(),
+ boost::multiprecision::half(),
+ boost::multiprecision::three_half(),
+ dx1 / static_cast<boost::int32_t>(2)));
+
+ return ((!b_neg) ? asin_value : -asin_value);
+ }
+
+ // Get initial estimate using standard math function asin.
+ double dd;
+ boost::int64_t ne;
+ boost::multiprecision::to_parts(xx, dd, ne);
+
+ static const boost::int64_t p10_min = static_cast<boost::int64_t>(std::numeric_limits<double>::min_exponent10);
+ static const boost::int64_t p10_max = static_cast<boost::int64_t>(std::numeric_limits<double>::max_exponent10);
+
+ const double de = static_cast<double>(ne < static_cast<boost::int64_t>(0) ? static_cast<boost::int32_t>((std::max)(ne, p10_min))
+ : static_cast<boost::int32_t>((std::min)(ne, p10_max)));
+
+ mp_float value = mp_float(::asin(dd * ::pow(10.0, de)));
+
+ // Newton-Raphson iteration
+
+ static const boost::int32_t double_digits10_minus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) - static_cast<boost::int32_t>(1));
+
+ for(boost::int32_t digits = double_digits10_minus_one; digits <= static_cast<boost::int32_t>(boost::multiprecision::tol()); digits *= static_cast<boost::int32_t>(2))
+ {
+ mp_float s, c;
+ boost::multiprecision::sincos(value, &s, &c);
+ value -= (s - xx) / c;
+ }
+
+ return ((!b_neg) ? value : -value);
+}
+
+mp_float boost::multiprecision::acos(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(x.has_its_own_acos())
+ {
+ return mp_float::my_acos(x);
+ }
+
+ if(boost::multiprecision::fabs(x) > boost::multiprecision::one()) { return std::numeric_limits<mp_float>::quiet_NaN(); }
+
+ return boost::multiprecision::iszero(x) ? boost::multiprecision::pi_half() : boost::multiprecision::pi_half() - boost::multiprecision::asin(x);
+}
+
+namespace Atan_Series
+{
+ static mp_float AtZero (const mp_float& x);
+ static mp_float AtInfinity(const mp_float& x);
+}
+
+static mp_float Atan_Series::AtZero(const mp_float& x)
+{
+ // http://functions.wolfram.com/ElementaryFunctions/ArcTan/26/01/01/
+ return x * boost::multiprecision::hyp2F1( boost::multiprecision::one(),
+ boost::multiprecision::half(),
+ boost::multiprecision::three_half(),
+ -(x * x));
+}
+
+static mp_float Atan_Series::AtInfinity(const mp_float& x)
+{
+ // http://functions.wolfram.com/ElementaryFunctions/ArcTan/26/01/01/
+ return boost::multiprecision::pi_half() - boost::multiprecision::hyp2F1( boost::multiprecision::half(),
+ boost::multiprecision::one(),
+ boost::multiprecision::three_half(),
+ -boost::multiprecision::one() / (x * x)) / x;
+}
+
+mp_float boost::multiprecision::atan(const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x))
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+
+ if(x.has_its_own_atan())
+ {
+ return mp_float::my_atan(x);
+ }
+
+ const boost::int64_t order = x.order();
+
+ if(x.isinf() || order > boost::multiprecision::tol())
+ {
+ return boost::multiprecision::ispos(x) ? boost::multiprecision::pi_half() : -boost::multiprecision::pi_half();
+ }
+ else if(boost::multiprecision::iszero(x))
+ {
+ return boost::multiprecision::zero();
+ }
+
+ if(boost::multiprecision::small_arg(x))
+ {
+ return Atan_Series::AtZero(x);
+ }
+
+ if(boost::multiprecision::large_arg(x))
+ {
+ return Atan_Series::AtInfinity(x);
+ }
+
+ const bool b_neg = boost::multiprecision::isneg(x);
+
+ const mp_float xx = ((!b_neg) ? x : -x);
+
+ // Get initial estimate using standard math function atan or a series
+ // expansion for rather large arguments having order 3 or larger.
+ double dd;
+ boost::int64_t ne;
+ boost::multiprecision::to_parts(xx, dd, ne);
+
+ static const boost::int64_t p10_min = static_cast<boost::int64_t>(std::numeric_limits<double>::min_exponent10);
+ static const boost::int64_t p10_max = static_cast<boost::int64_t>(std::numeric_limits<double>::max_exponent10);
+
+ const double de = static_cast<double>(ne < static_cast<boost::int64_t>(0) ? static_cast<boost::int32_t>((std::max)(ne, p10_min))
+ : static_cast<boost::int32_t>((std::min)(ne, p10_max)));
+
+ mp_float value = order < static_cast<boost::int64_t>(2) ? mp_float(::atan(dd * ::pow(10.0, de)))
+ : Atan_Series::AtInfinity(xx);
+
+ // Newton-Raphson iteration
+ static const boost::int32_t double_digits10_minus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(std::numeric_limits<double>::digits10) - static_cast<boost::int32_t>(1));
+
+ for(boost::int32_t digits = double_digits10_minus_one; digits <= static_cast<boost::int32_t>(boost::multiprecision::tol()); digits *= static_cast<boost::int32_t>(2))
+ {
+ mp_float s, c;
+ boost::multiprecision::sincos(value, &s, &c);
+ value += c * ((xx * c) - s);
+ }
+
+ return !b_neg ? value : -value;
+}
+
+mp_float boost::multiprecision::atan2(const mp_float& y, const mp_float& x)
+{
+ if(!boost::multiprecision::isfinite(x) || !boost::multiprecision::isfinite(y))
+ {
+ return x;
+ }
+
+ // y is zero
+ if(boost::multiprecision::iszero(y))
+ {
+ return (boost::multiprecision::isneg(x) ? boost::multiprecision::pi() : boost::multiprecision::zero());
+ }
+
+ // x is zero
+ if(boost::multiprecision::iszero(x))
+ {
+ return boost::multiprecision::sgn(y) * boost::multiprecision::pi_half();
+ }
+
+ // y is infinite
+ if(y.isinf())
+ {
+ const bool b_pos = ((boost::multiprecision::ispos(x) && boost::multiprecision::ispos(y)) || (boost::multiprecision::isneg(x) && boost::multiprecision::isneg(y)));
+
+ return (b_pos ? std::numeric_limits<mp_float>::infinity()
+ : -std::numeric_limits<mp_float>::infinity());
+ }
+
+ // Compute atan(y / x), ignoring sign.
+ mp_float atan_term(boost::multiprecision::atan(y / x));
+
+ // Determine quadrant (sign) based on signs of x, y
+ const bool y_neg = boost::multiprecision::isneg(y);
+ const bool x_neg = boost::multiprecision::isneg(x);
+
+ if(y_neg == x_neg)
+ {
+ // Both negative or both positive
+ return (x_neg ? atan_term - boost::multiprecision::pi() : atan_term);
+ }
+ else
+ {
+ // Different signs of x, y
+ return (x_neg ? atan_term + boost::multiprecision::pi() : atan_term);
+ }
+}

Added: sandbox/multiprecision/src/functions/gamma/factorial.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/gamma/factorial.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,109 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+#include "../tables/tables.h"
+
+using boost::multiprecision::mp_float;
+
+namespace Factorial_Series
+{
+ mp_float AtInfinity(const boost::uint32_t n);
+}
+
+mp_float Factorial_Series::AtInfinity(const boost::uint32_t n)
+{
+ const mp_float x = mp_float(n);
+ mp_float one_over_x_pow_two_n_minus_one = boost::multiprecision::one() / x;
+ const mp_float one_over_x2 = one_over_x_pow_two_n_minus_one * one_over_x_pow_two_n_minus_one;
+
+ static const mp_float B2 = Tables::A000367()[static_cast<std::size_t>(1u)]()
+ / Tables::A002445()[static_cast<std::size_t>(1u)]();
+
+ mp_float sum = (B2 * one_over_x_pow_two_n_minus_one) / static_cast<boost::int32_t>(2);
+
+ static const std::size_t sz_A000367 = Tables::A000367().size();
+ static const std::size_t sz_A002445 = Tables::A002445().size();
+ static const std::size_t sz_max = (std::min)(sz_A000367, sz_A002445);
+
+ // Perform the Bernoulli series expansion without explicitly calling the function
+ // boost::multiprecision::Bernoulli in order to avoid any recursive calls of boost::multiprecision::factorial. This is
+ // because boost::multiprecision::bernoulli_b calls boost::multiprecision::factorial for large integers.
+
+ for(boost::int32_t k = static_cast<boost::int32_t>(2); k < static_cast<boost::int32_t>(sz_max); k++)
+ {
+ one_over_x_pow_two_n_minus_one *= one_over_x2;
+
+ const boost::int32_t two_k = static_cast<boost::int32_t>(k * static_cast<boost::int32_t>(2));
+ const boost::int32_t two_k_minus_one = static_cast<boost::int32_t>(two_k - static_cast<boost::int32_t>(1));
+
+ const mp_float B2k = Tables::A000367()[static_cast<std::size_t>(k)]()
+ / Tables::A002445()[static_cast<std::size_t>(k)]();
+
+ const mp_float term = ((B2k * one_over_x_pow_two_n_minus_one) / two_k) / two_k_minus_one;
+
+ if(term.order() < -boost::multiprecision::tol())
+ {
+ break;
+ }
+
+ sum += term;
+ }
+
+ static const mp_float half_ln_two_pi = boost::multiprecision::log(boost::multiprecision::two_pi()) / static_cast<boost::int32_t>(2);
+
+ return boost::multiprecision::exp(((((x - boost::multiprecision::half()) * boost::multiprecision::log(x)) - x) + half_ln_two_pi) + sum);
+}
+
+mp_float boost::multiprecision::factorial(const boost::uint32_t n)
+{
+ return (static_cast<std::size_t>(n) < Tables::A000142().size()) ? Tables::A000142()[n]()
+ : Factorial_Series::AtInfinity(static_cast<boost::uint32_t>(n + static_cast<boost::uint32_t>(1u)));
+}
+
+mp_float boost::multiprecision::binomial(const boost::uint32_t n, const boost::uint32_t k)
+{
+ if(k > n)
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+ else if(k == n)
+ {
+ return boost::multiprecision::one();
+ }
+ else
+ {
+ if(n < static_cast<boost::uint32_t>(Tables::A007318().size()))
+ {
+ return Tables::A007318()[static_cast<std::size_t>(n)]()[static_cast<std::size_t>(k)];
+ }
+ else
+ {
+ return boost::multiprecision::factorial(n) / (boost::multiprecision::factorial(k) * boost::multiprecision::factorial(n - k));
+ }
+ }
+}
+
+mp_float boost::multiprecision::binomial(const boost::uint32_t n, const mp_float& y)
+{
+ return boost::multiprecision::factorial(n) / (boost::multiprecision::gamma(y + boost::multiprecision::one()) * boost::multiprecision::gamma((mp_float(n) - y) + boost::multiprecision::one()));
+}
+
+mp_float boost::multiprecision::binomial(const mp_float& x, const boost::uint32_t k)
+{
+ return boost::multiprecision::gamma(x + boost::multiprecision::one()) / (boost::multiprecision::factorial(k) * boost::multiprecision::gamma((x - mp_float(k)) + boost::multiprecision::one()));
+}
+
+mp_float boost::multiprecision::binomial(const mp_float& x, const mp_float& y)
+{
+ return boost::multiprecision::gamma(x + boost::multiprecision::one()) / (boost::multiprecision::gamma(y + boost::multiprecision::one()) * boost::multiprecision::gamma((x - y) + boost::multiprecision::one()));
+}

Added: sandbox/multiprecision/src/functions/gamma/factorial2.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/gamma/factorial2.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,73 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+#include "../tables/tables.h"
+
+using boost::multiprecision::mp_float;
+
+namespace Factorial2_Series
+{
+ mp_float AtInfinity(const boost::int32_t n);
+}
+
+mp_float Factorial2_Series::AtInfinity(const boost::int32_t n)
+{
+ const bool n_is_even = static_cast<boost::int32_t>(n % static_cast<boost::int32_t>(2)) == static_cast<boost::int32_t>(0u);
+
+ if(n_is_even)
+ {
+ const boost::uint32_t n_half = static_cast<boost::uint32_t>(static_cast<boost::uint32_t>(n) / static_cast<boost::uint32_t>(2));
+
+ return boost::multiprecision::pow2(static_cast<boost::int64_t>(n_half)) * boost::multiprecision::factorial(n_half);
+ }
+ else
+ {
+ const boost::int32_t n_plus_one = static_cast<boost::int32_t>(static_cast<boost::int32_t>(n) + static_cast<boost::int32_t>(1));
+
+ return boost::multiprecision::factorial(static_cast<boost::uint32_t>(n_plus_one)) / boost::multiprecision::factorial2(n_plus_one);
+ }
+}
+
+mp_float boost::multiprecision::factorial2(const boost::int32_t n)
+{
+ const bool n_is_neg = (n < static_cast<boost::int32_t>(0));
+
+ if(!n_is_neg)
+ {
+ return (static_cast<std::size_t>(n) < Tables::A006882().size()) ? Tables::A006882()[n]()
+ : Factorial2_Series::AtInfinity(n);
+ }
+ else
+ {
+ if(n == static_cast<boost::int32_t>(-1))
+ {
+ return boost::multiprecision::one();
+ }
+
+ const boost::int32_t nn = (!n_is_neg ? n : static_cast<boost::int32_t>(-n));
+ const bool n_is_even = (static_cast<boost::int32_t>(nn % static_cast<boost::int32_t>(2)) == static_cast<boost::int32_t>(0u));
+
+ if(n_is_even)
+ {
+ return std::numeric_limits<mp_float>::quiet_NaN();
+ }
+ else
+ {
+ // Double factorial for negative odd integers.
+ const boost::int32_t n_minus_one_over_two = static_cast<boost::int32_t>(static_cast<boost::int32_t>(nn - static_cast<boost::int32_t>(1)) / static_cast<boost::int32_t>(2));
+ const bool b_negate = static_cast<boost::int32_t>(n_minus_one_over_two % static_cast<boost::int32_t>(2)) != static_cast<boost::int32_t>(0);
+
+ const mp_float f2 = boost::multiprecision::one() / boost::multiprecision::factorial2(static_cast<boost::int32_t>(nn - static_cast<boost::int32_t>(2)));
+
+ return (!b_negate ? f2 : -f2);
+ }
+ }
+}

Added: sandbox/multiprecision/src/functions/gamma/gamma.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/gamma/gamma.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,244 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <numeric>
+
+#include <boost/array.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+#include "../tables/tables.h"
+#include <boost/multiprecision/utility/util_coefficient_expansion.hpp>
+#include <boost/multiprecision/utility/util_digit_scale.hpp>
+#include "gamma_util.h"
+
+using boost::multiprecision::mp_float;
+using boost::multiprecision::mp_complex;
+
+namespace Gamma_Series
+{
+ const std::vector<mp_float>& CoefOneOverGammaAtZero(void)
+ {
+ // Series coefficients of 1/gamma[x] to 400 decimal digits of precision.
+ // Extracted from Mathematica Version 4.1 using:
+ // N[Series[1/Gamma[x], {x, 0, 20}], 400]
+ // Table[SeriesCoefficient[%, n], {n, 20}]
+ // Export["c:\\temp\\coef.txt", %, "list"]
+ // The coefficient of (x^1) is 1 and the coefficient of (x^2) is EulerGamma.
+ static const boost::array<mp_float, 20u> comp_data =
+ {{
+ boost::multiprecision::one(),
+ boost::multiprecision::euler_gamma(),
+ mp_float("-0.6558780715202538810770195151453904812797663804785843472923624456838708383537221020861828159940213640004823766794673960425880273800045120663276349042352029670719647868920256583927459606866272636428716503560447876477020029264993733572853936743624613834732228286244522007087071544720609051364563240296088675489599938359316660318321422152685114387721454550793121583896628767836242712406766501355141085654"),
+ mp_float("-0.04200263503409523552900393487542981871139450040110609352206581297618009687597598854710770129478771323353200022200001805792037621099075181447805816907283782783355156941422840681585671757922536196664416350181665682109004334254906673031085386942302647163933719562136186164185652922234123296618703050633022456154116377616684761434108546150201363905266261778775672100038613880494186238891616981359256812529"),
+ mp_float("+0.1665386113822914895017007951021052357177815022471743405704689031789938660564742483194719146580416266239559340512887953328435534067790239085961674942407332694546242602880866376070387262496367207086080494302533434060985324494851329241260152920664205323542319634585425345992159996851601411139446646838555765301874799329345794442502091118859615974367643203447574836048889488156231419555751071696734321971"),
+ mp_float("-0.04219773455554433674820830128918739130165268418982248637691887327545901118558899606734728429375531504062334826057082510869875342573608881031728336193513216807653051215558592232817158189354800086887093374690761985231094669862796057544336120242135379457098619992409318732513064699294082343694452964488092134178703074119479383139206604543459710454255056686229455745478027704185028721684902564483861681488"),
+ mp_float("-0.009621971527876973562114921672348198975362942252113002105138862627311673514460739536466888015658820015733562800356029803723332017419507197553494169877116743012525221376253108885704616876673111525831349233429832639845702227478746003004271641976963298258697182291199410219284964853091797576513483088948247179443482321981474420510403801562538507188880431476146363008815197790256291597231466854822676154536"),
+ mp_float("+0.007218943246663099542395010340446572709904800880238318001094781173622594974158542714089090120849888863763580197688859795311415307822774690748268422748882778219306457154065720813703287027418373611063189696287389264012126740635036226069672622811192532111244693818497291437270392053464350242231258452208196814361249731802322058940324639712443939052265996811453388534005459217602808725999963971215780208927"),
+ mp_float("-0.001165167591859065112113971084018388666809333795384057443407505275620025848166530722148800109172188515797192888894863669066772517370809868046375622203294817029684730913245113885467980578363470095176347017392442241646234586862652283891629280315418462703268811259855101866764711768855009672612320853542794740964104932696508211319286122820153051919898017312123494771712287419491362072058225406140411120019"),
+ mp_float("-0.0002152416741149509728157299630536478064782419233783387503502674890856394637167847391861851194625624815259563219739244945163417211076747477123391086742668973557906175454607228737337091983400046734865215719165942151250609611490595370582548259601169491801275521476262588189925692003213654485091597871400858799644166761772424150734750207019101578462267487952510338819128595535888433239855683688898584219257"),
+ mp_float("+0.0001280502823881161861531986263281643233948920996936772149005458380412035520434687587389223798955199755551386484801312995164552307622434192355599981862167102840027210758568419015795376653975972537042214781394208013779609060164253049743961101368403030633183813736201875808775924737002119102356796180501539005893241175032007956168654433971365386229244346745439587609848542929397402454550229243419558216667"),
+ mp_float("-0.00002013485478078823865568939142102181838229483329797911526116267090822918618897047762330812383650301882610598611158717931945723532269982416612357113737088330997041202300337442465482349805785560019857678505838147808340261428265467157736711014454674223004617947229087707010849731551472310234902900406148808090505873712222916856506434771262514141240239945017462827997814312257914315173799509409580592227999"),
+ mp_float("-1.250493482142670657345359473833092242322655621153959815349923157491212455610792211796228757892295094621846077970315353463508834829915102416793382769258699176937711876791097906964868348037193273974207229913211507712885193827801031655018418659441463872772541489470618445691009164835001388077418133290491428524980227554901591552867473525328143941529948218328641439202885771220946627449251945182703333714e-6"),
+ mp_float("+1.133027231981695882374129620330744943324004838621075654295505395460408427303676342059099599341571794151723102554723472282247098515047076970814877245054820361527216773963022956952446219594483308210208907304801101488348848062734625098840906296035467239877276901851067511872545950865225464347561051817490348962059288584407364395282537157756108088904191766662293100072409206551732618605079716933286705185e-6"),
+ mp_float("-2.056338416977607103450154130020572836512579026293379453468317253324568037109991871188900376836419475497313953593845935602678421832119064686665246359768127970426304592335249241703427667413130015011643569198543828768405669892358923289301890386377129451006676551195702074350994748934923779785037553155730018542197343217850356691279814564656597210371502101337995794398983674689948759643317988389766813875e-7"),
+ mp_float("+6.116095104481415817862498682855342867275865719712320867324029277235074352503861972826211688750122568389248723593760275052110202607289094841928198408739156977044243956049097412356065163620990532543731396877525356196920079422184202257312549571022890099774170257148393843273692290361740154736183615097192651911573292083206887421491192856772933647750427490115120897580598446855104580940274924647813616162e-9"),
+ mp_float("+5.002007644469222930055665048059991303044612742494481718953378877374721317711613245138149284064041492607495463035818621192634138138674255799031521408077064669154375661227867987031920077145517025614542160750699253046327614481165280828729590903826540895400924922302845714850348986296988595579237764267997702727230547855413274977607953320860481079313147166661821990367245206182829153066329757101435599756e-9"),
+ mp_float("-1.181274570487020144588126565436505577738759504932587590961892631696433914362731439517968288144559739788048758350566671400704726777156064156164018114386575307315494202805215438614394288438629133949868735821855227356344177768519582180435858700409517489758611765199834757506730273652724786075640254440409769591442946310523471108835614728780635461979668551745785999641219440682865730142763528023172889291e-9"),
+ mp_float("+1.043426711691100510491540332312250191400709823125812121087107392734758807124820988847060670016098018403228867991155660260908069802732864181290140345583710171861863717571042850540110559715149698077318582760140410483437385783369743279091227248338835597955083612786539728965176160729156453537619398985580910769450857209100810336623880736523569415690948751514525776483744186241841939479643365941249571376e-10"),
+ mp_float("+7.782263439905071254049937311360777226068086181392938819435507326929869575078978038827379507664107281913393462406889059435100758544819098632173849066677032230561159253228543787258397911069334455291546933865105252140021359958145198606994108363499673176861344191053751641915087563642143554534989078722037333135067999258209158657882450793530257918827738106564148852026754272154918712839939196672793348702e-12")
+ }};
+
+ static const std::vector<mp_float> coef(comp_data.begin(), comp_data.end());
+
+ return coef;
+ }
+}
+
+namespace GammaTemplate
+{
+ template<typename T,
+ typename TR>
+ T gamma(const T& x)
+ {
+ using boost::multiprecision::isfinite;
+ using boost::multiprecision::iszero;
+ using boost::multiprecision::isneg;
+ using boost::multiprecision::isint;
+ using boost::multiprecision::small_arg;
+ using boost::multiprecision::abs;
+ using boost::multiprecision::abs;
+ using boost::multiprecision::tol;
+ using boost::multiprecision::exp;
+ using boost::multiprecision::exp;
+ using boost::multiprecision::log;
+ using boost::multiprecision::log;
+ using boost::multiprecision::real;
+ using boost::multiprecision::real;
+ using boost::multiprecision::sin;
+ using boost::multiprecision::sin;
+ using boost::multiprecision::factorial;
+ using boost::multiprecision::bernoulli;
+ using boost::multiprecision::half;
+ using boost::multiprecision::one;
+ using boost::multiprecision::pi;
+ using boost::multiprecision::pi_half;
+ using boost::multiprecision::two_pi;
+ using boost::multiprecision::max_iteration;
+ using boost::multiprecision::to_int32;
+ using boost::multiprecision::to_int64;
+ using boost::multiprecision::order_of;
+
+ if(!isfinite(x))
+ {
+ return x;
+ }
+
+ const bool b_neg = isneg(real(x));
+
+ if(isint(x))
+ {
+ if(b_neg || iszero(x))
+ {
+ return std::numeric_limits<TR>::quiet_NaN();
+ }
+ else
+ {
+ const boost::int64_t nx = to_int64(x);
+
+ // Possible special handling for (relatively) small, pure integers.
+ if(static_cast<std::size_t>(nx) < Tables::A000142().size())
+ {
+ const boost::int32_t n = static_cast<boost::int32_t>(nx - static_cast<boost::int64_t>(1));
+
+ return factorial(static_cast<boost::uint32_t>(n));
+ }
+ }
+ }
+
+ // Make a local, unsigned copy of the input argument.
+
+ T xx((!b_neg) ? x : -x);
+
+ T G;
+
+ if(small_arg(xx))
+ {
+ static const T tz(0u);
+
+ G = one() / std::accumulate(Gamma_Series::CoefOneOverGammaAtZero().begin(),
+ Gamma_Series::CoefOneOverGammaAtZero().end(),
+ tz,
+ boost::multiprecision::utility::coefficient_expansion<T, T>(xx, xx));
+ }
+ else
+ {
+ // Check if the argument should be scaled up for the Bernoulli series expansion.
+ static const boost::int32_t min_arg_n = static_cast<boost::int32_t>(240.0 * boost::multiprecision::utility::digit_scale());
+ static const TR min_arg_x = TR(min_arg_n);
+
+ const TR rx = real(xx);
+
+ const boost::int32_t n_recur = ((rx < min_arg_x) ? static_cast<boost::int32_t>((min_arg_n - to_int32(rx)) + 1)
+ : static_cast<boost::int32_t>(0));
+
+ // Scale the argument up and use downward recursion later for the final result.
+ xx += n_recur;
+
+ // Perform the Bernoulli series expansion.
+ T one_over_x_pow_two_n_minus_one = one() / xx;
+ const T one_over_x2 = one_over_x_pow_two_n_minus_one * one_over_x_pow_two_n_minus_one;
+ T sum = (bernoulli(static_cast<boost::uint32_t>(2u)) / static_cast<boost::int32_t>(2)) * one_over_x_pow_two_n_minus_one;
+
+ for(boost::int32_t n2 = static_cast<boost::int32_t>(4); n2 < max_iteration(); n2 += static_cast<boost::int32_t>(2))
+ {
+ one_over_x_pow_two_n_minus_one *= one_over_x2;
+
+ const T term = (bernoulli(static_cast<boost::uint32_t>(n2)) * one_over_x_pow_two_n_minus_one) / static_cast<boost::int32_t>(n2 * (n2 - static_cast<boost::int32_t>(1)));
+
+ const boost::int64_t order_check = static_cast<boost::int64_t>(order_of(abs(term)) - order_of(abs(sum)));
+
+ if((n2 > static_cast<boost::int32_t>(20)) && (order_check < -tol()))
+ {
+ break;
+ }
+
+ sum += term;
+ }
+
+ static const TR half_ln_two_pi = log(two_pi()) / static_cast<boost::int32_t>(2);
+
+ G = exp(((((xx - half()) * log(xx)) - xx) + half_ln_two_pi) + sum);
+
+ // Rescale the result using downward recursion if necessary.
+ for(boost::int32_t k = static_cast<boost::int32_t>(0); k < n_recur; k++)
+ {
+ G /= --xx;
+ }
+ }
+
+ // Return the result, accounting for possible negative arguments.
+ return ((!b_neg) ? G : -pi() / ((xx * G) * sin(pi() * xx)));
+ }
+
+ template<typename T,
+ typename TR>
+ T gamma_near_n(const boost::int32_t n, const T& x)
+ {
+ using boost::multiprecision::sin;
+ using boost::multiprecision::sin;
+ using boost::multiprecision::one;
+ using boost::multiprecision::pi;
+
+ if(n >= static_cast<boost::int32_t>(0))
+ {
+ return GammaTemplate::gamma<T, TR>(n + x);
+ }
+ else
+ {
+ const boost::int32_t nn = static_cast<boost::int32_t>(-n);
+
+ const bool b_neg = (static_cast<boost::int32_t>(nn % static_cast<boost::int32_t>(2)) != static_cast<boost::int32_t>(0));
+
+ const T n_minus_x = nn - x;
+ const T Gn = pi() / (GammaTemplate::gamma<T, TR>(n_minus_x + one()) * sin(pi() * x));
+
+ return ((!b_neg) ? Gn : -Gn);
+ }
+ }
+}
+
+mp_float boost::multiprecision::gamma(const mp_float& x)
+{
+ if(x.has_its_own_gamma())
+ {
+ return mp_float::my_gamma(x);
+ }
+ else
+ {
+ return GammaTemplate::gamma<mp_float, mp_float>(x);
+ }
+}
+
+mp_complex boost::multiprecision::gamma(const mp_complex& z)
+{
+ if(boost::multiprecision::iszero(z.imag()))
+ {
+ return mp_complex(GammaTemplate::gamma<mp_float, mp_float>(z.real()));
+ }
+ else
+ {
+ return GammaTemplate::gamma<mp_complex, mp_float>(z);
+ }
+}
+
+mp_float boost::multiprecision::gamma_near_n(const boost::int32_t n, const mp_float& x)
+{
+ return GammaTemplate::gamma_near_n<mp_float, mp_float>(n, x);
+}

Added: sandbox/multiprecision/src/functions/gamma/gamma_util.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/gamma/gamma_util.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,28 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+#include "gamma_util.h"
+
+using boost::multiprecision::mp_float;
+
+void GammaUtil::GammaOfPlusXMinusX(const mp_float& x, mp_float& gamma_plus_x, mp_float& gamma_minus_x)
+{
+ // Calculate gamma(x) and gamma(-x) without regard for the actual sign of x.
+ // In other words, calculate gamma(abs(x)) and set the results appropriately
+ // using the reflection formula.
+ const bool bo_x_isneg = boost::multiprecision::isneg(x);
+ const mp_float abs_x = boost::multiprecision::fabs(x);
+ const mp_float gamma_x_pos = boost::multiprecision::gamma(abs_x);
+ const mp_float gamma_x_neg = -boost::multiprecision::pi() / ((abs_x * gamma_x_pos) * boost::multiprecision::sin(boost::multiprecision::pi() * abs_x));
+
+ gamma_plus_x = bo_x_isneg ? gamma_x_neg : gamma_x_pos;
+ gamma_minus_x = bo_x_isneg ? gamma_x_pos : gamma_x_neg;
+}

Added: sandbox/multiprecision/src/functions/gamma/gamma_util.h
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/gamma/gamma_util.h 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,23 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+#ifndef _GAMMA_UTIL_2008_01_10_H_
+ #define _GAMMA_UTIL_2008_01_10_H_
+
+ #include <boost/multiprecision/mp_float.hpp>
+
+ namespace GammaUtil
+ {
+ void GammaOfPlusXMinusX(const boost::multiprecision::mp_float& x,
+ boost::multiprecision::mp_float& gamma_plus_x,
+ boost::multiprecision::mp_float& gamma_minus_x);
+ }
+
+#endif // _GAMMA_UTIL_2008_01_10_H_

Added: sandbox/multiprecision/src/functions/gamma/pochhammer.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/gamma/pochhammer.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,79 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+
+using boost::multiprecision::mp_float;
+using boost::multiprecision::mp_complex;
+
+namespace Pochhammer_Series
+{
+ template<typename T,
+ typename TR>
+ T Pochhammer_Template(const T& x, const boost::uint32_t n)
+ {
+ using boost::multiprecision::real;
+ using boost::multiprecision::real;
+ using boost::multiprecision::gamma;
+ using boost::multiprecision::gamma;
+ using boost::multiprecision::one;
+
+ if(n == static_cast<boost::uint32_t>(0u))
+ {
+ return one();
+ }
+ else if(n == static_cast<boost::uint32_t>(1u))
+ {
+ return x;
+ }
+ else
+ {
+ if(n < static_cast<boost::uint32_t>(50u))
+ {
+ T val (x);
+ T term(x);
+
+ for(boost::uint32_t i = static_cast<boost::uint32_t>(1u); i < n; i++)
+ {
+ val *= ++term;
+ }
+
+ return val;
+ }
+ else
+ {
+ const TR nr(n);
+
+ return gamma(x + nr) / gamma(x);
+ }
+ }
+ }
+}
+
+mp_float boost::multiprecision::pochhammer(const mp_float& x, const boost::uint32_t n)
+{
+ return Pochhammer_Series::Pochhammer_Template<mp_float, mp_float>(x, n);
+}
+
+mp_complex boost::multiprecision::pochhammer(const mp_complex& x, const boost::uint32_t n)
+{
+ return Pochhammer_Series::Pochhammer_Template<mp_complex, mp_float>(x, n);
+}
+
+mp_float boost::multiprecision::pochhammer(const mp_float& x, const mp_float& a)
+{
+ return boost::multiprecision::gamma(x + a) / boost::multiprecision::gamma(x);
+}
+
+mp_complex boost::multiprecision::pochhammer(const mp_complex& z, const mp_complex& a)
+{
+ return boost::multiprecision::gamma(z + a) / boost::multiprecision::gamma(z);
+}
+

Added: sandbox/multiprecision/src/functions/integer/bernoulli_b.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/integer/bernoulli_b.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,120 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+
+#include "../tables/tables.h"
+
+using boost::multiprecision::mp_float;
+
+mp_float boost::multiprecision::bernoulli(const boost::uint32_t n)
+{
+ if(static_cast<boost::uint32_t>(n % static_cast<boost::uint32_t>(2u)) != static_cast<boost::uint32_t>(0u))
+ {
+ return (n == static_cast<boost::uint32_t>(1u) ? -boost::multiprecision::half() : boost::multiprecision::zero());
+ }
+ else
+ {
+ static const std::size_t sz_A000367 = Tables::A000367().size();
+ static const std::size_t sz_A002445 = Tables::A002445().size();
+ static const std::size_t sz_max = (std::min)(sz_A000367, sz_A002445);
+
+ const std::size_t n_half = static_cast<std::size_t>(n / static_cast<boost::uint32_t>(2u));
+
+ if(n_half < sz_max)
+ {
+ return Tables::A000367()[n_half]() / Tables::A002445()[n_half]();
+ }
+ else
+ {
+ // Do a loop calculation for higher numbered Bernoulli numbers.
+ // See Abramowitz & Stegun 23.1.18, page 805, for x = 0.
+ // See Computation of Special Functions, Zhang & Jin, 1.1.16, page 5.
+
+ mp_float sum = boost::multiprecision::one();
+
+ // TBD: Check the power of two using logs and floating point math to see
+ // if the loop is even necessary.
+
+ for(boost::int32_t k = static_cast<boost::int32_t>(2); k < boost::multiprecision::max_iteration(); k++)
+ {
+ const mp_float one_over_k = boost::multiprecision::one() / k;
+ const mp_float term = boost::multiprecision::pown(one_over_k, static_cast<boost::int64_t>(n));
+
+ if(term.order() < -boost::multiprecision::tol())
+ {
+ break;
+ }
+
+ sum += term;
+ }
+
+ const bool b_neg = static_cast<boost::uint32_t>(static_cast<boost::uint32_t>(n / static_cast<boost::uint32_t>(2u)) & static_cast<boost::uint32_t>(1u)) == static_cast<boost::uint32_t>(0u);
+
+ const mp_float factor = ((boost::multiprecision::factorial(n) / boost::multiprecision::pown(boost::multiprecision::two_pi(), static_cast<boost::int64_t>(n))) * static_cast<boost::int32_t>(2));
+ const mp_float bn = sum * factor;
+
+ return ((!b_neg) ? bn : -bn);
+ }
+ }
+}
+
+void boost::multiprecision::bernoulli_table(std::vector<mp_float>& bn, const boost::uint32_t n)
+{
+ // See reference "Computing Bernoulli and Tangent Numbers", Richard P. Brent.
+ // Also see "Modern Computer Arithmetic", Richard P. Brent and Paul Zimmermann,
+ // Cambridge University Press, 2010, 237 pp.
+
+ const boost::uint32_t nn = (((n % static_cast<boost::uint32_t>(2)) != static_cast<boost::uint32_t>(0u)) ? static_cast<boost::uint32_t>(n + 1u) : n);
+
+ const boost::int32_t m = static_cast<boost::int32_t>(nn / static_cast<boost::uint32_t>(2u));
+
+ std::vector<mp_float> tangent_numbers(static_cast<std::vector<mp_float>::size_type>(m + 1));
+
+ tangent_numbers[0u] = boost::multiprecision::zero();
+ tangent_numbers[1u] = boost::multiprecision::one();
+
+ for(boost::int32_t k = static_cast<boost::int32_t>(2); k <= m; k++)
+ {
+ tangent_numbers[k] = tangent_numbers[k - 1] * static_cast<boost::int32_t>(k - static_cast<boost::int32_t>(1));
+ }
+
+ for(boost::int32_t k = static_cast<boost::int32_t>(2); k <= m; k++)
+ {
+ for(boost::int32_t j = k; j <= m; j++)
+ {
+ const boost::int32_t j_minus_k = static_cast<boost::int32_t>(j - k);
+
+ tangent_numbers[j] = (tangent_numbers[j - 1] * j_minus_k)
+ + (tangent_numbers[j] * static_cast<boost::int32_t>(j_minus_k + static_cast<boost::int32_t>(2)));
+ }
+ }
+
+ mp_float two_pow_two_m(4);
+
+ bn.clear();
+ bn.resize(static_cast<std::vector<mp_float>::size_type>(nn + static_cast<boost::uint32_t>(1u)));
+
+ for(boost::int32_t i = static_cast<boost::int32_t>(1); i < static_cast<boost::int32_t>(tangent_numbers.size()); i++)
+ {
+ const boost::int32_t two_i = static_cast<boost::int32_t>(static_cast<boost::int32_t>(2) * i);
+
+ const mp_float b = (tangent_numbers[i] * two_i) / ((two_pow_two_m * two_pow_two_m) - two_pow_two_m);
+
+ const bool b_neg = (static_cast<boost::int32_t>(two_i % static_cast<boost::int32_t>(4)) == static_cast<boost::int32_t>(0));
+
+ bn[2 * i] = ((!b_neg) ? b : -b);
+
+ two_pow_two_m *= static_cast<boost::int32_t>(4);
+ }
+
+ bn[0u] = boost::multiprecision::one();
+ bn[1u] = -boost::multiprecision::half();
+}

Added: sandbox/multiprecision/src/functions/integer/prime.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/integer/prime.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,120 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/array.hpp>
+#include <boost/multiprecision/mp_float_functions.hpp>
+
+namespace Primes
+{
+ struct Inserter
+ {
+ private:
+ mutable boost::uint32_t count;
+ mutable std::back_insert_iterator<std::deque<boost::uint32_t> > it;
+
+ public:
+
+ static const std::size_t start_index = static_cast<std::size_t>(2u);
+
+ explicit Inserter(std::deque<boost::uint32_t>& sequence) : count(static_cast<boost::uint32_t>(start_index)),
+ it (std::back_inserter(sequence)) { }
+
+ void operator()(const bool& bo_is_not_prime) const
+ {
+ const bool bo_is_prime = (!bo_is_not_prime);
+ if(bo_is_prime) { *it = count; }
+ ++count;
+ }
+ };
+
+ static void Generator(const boost::uint32_t n, std::deque<boost::uint32_t>& primes_data)
+ {
+ // Establish the range of the prime number calculation. Use an approximation
+ // related to the prime number theorem to obtain the value of the maximum prime
+ // number or a minimum of at least 100. Also be sure to limit this range to
+ // within the upper limit of boost::uint32_t.
+
+ static const boost::uint32_t min_hundred = static_cast<boost::uint32_t>(100u);
+ static const double xmax = static_cast<double>((std::numeric_limits<boost::uint32_t>::max)());
+
+ const boost::uint32_t N = (std::max)(min_hundred, n);
+ const double xn = static_cast<double>(N);
+ const double logn = ::log(xn);
+ const double loglogn = ::log(logn);
+ const double top = xn * (((logn + loglogn) - 1.0) + ((static_cast<double>(1.8) * loglogn) / logn));
+ const double xlim = (std::min)(top, xmax);
+ const boost::uint32_t nlim = static_cast<boost::uint32_t>(static_cast<boost::uint64_t>(xlim));
+ const boost::uint32_t limit = (std::max)(n, nlim);
+
+ // Use a sieve algorithm to generate a boolean table representation of the primes.
+
+ std::vector<bool> sieve(static_cast<std::size_t>(limit), false);
+
+ boost::uint32_t i = static_cast<boost::uint32_t>(Primes::Inserter::start_index);
+ boost::uint32_t i2;
+
+ while((i2 = static_cast<boost::uint32_t>(i * i)) < limit)
+ {
+ if(sieve[i] == false)
+ {
+ for(boost::uint32_t j = i2; j < limit; j = static_cast<boost::uint32_t>(j + i))
+ {
+ sieve[j] = true;
+ }
+ }
+
+ ++i;
+ }
+
+ // Extract the prime numbers into the data table by inserting them from the sieve.
+ primes_data.clear();
+
+ std::for_each(sieve.begin() + Primes::Inserter::start_index,
+ sieve.end(),
+ Primes::Inserter(primes_data));
+
+ primes_data.resize(static_cast<std::size_t>(n), static_cast<boost::uint32_t>(0u));
+ }
+
+ std::deque<boost::uint32_t>& Data(void)
+ {
+ // Create a static data table of primes and return a reference to it.
+ static std::deque<boost::uint32_t> primes;
+
+ if(primes.empty())
+ {
+ // Select a maximum count of prime numbers to be stored in the data table.
+ // This number is selected such that the value of the highest prime will slightly
+ // exceed 0x10000 (decimal 65,536). This number is significant because it is
+ // the maximum value which needs to be tested while computing the prime factors
+ // of unsigned 32-bit integers, as done in the subroutine Factors(...).
+ Primes::Generator(static_cast<boost::uint32_t>(6550u), primes);
+ }
+
+ return primes;
+ }
+}
+
+void boost::multiprecision::prime(const boost::uint32_t n, std::deque<boost::uint32_t>& primes)
+{
+ // For small values of n less than the size of the prime data table, the primes
+ // can be copied from the data table. For large values of n, the primes must be
+ // generated.
+ if(n < static_cast<boost::uint32_t>(Primes::Data().size()))
+ {
+ primes.assign(Primes::Data().begin(), Primes::Data().begin() + static_cast<std::size_t>(n));
+ }
+ else
+ {
+ Primes::Generator(n, primes);
+ }
+}

Added: sandbox/multiprecision/src/functions/integer/prime_factor.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/integer/prime_factor.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,125 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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 <boost/multiprecision/mp_float_functions.hpp>
+#include "prime_factors.h"
+
+namespace Primes
+{
+ std::deque<boost::uint32_t>& Data(void);
+
+ static bool IsPrimeFactor(boost::uint32_t& np, const boost::uint32_t p)
+ {
+ const boost::uint32_t q = static_cast<boost::uint32_t>(np / p);
+ const boost::uint32_t r = static_cast<boost::uint32_t>(np - static_cast<boost::uint32_t>(q * p));
+
+ const bool is_prime_factor = (r == static_cast<boost::uint32_t>(0u));
+
+ if(is_prime_factor)
+ {
+ np = q;
+ }
+
+ return is_prime_factor;
+ }
+
+ static void Factors(const boost::uint32_t n, std::deque<boost::multiprecision::utility::point<boost::uint32_t> >& pf)
+ {
+ // Compute the prime factors of the unsigned integer n. Use the divide algorithm of
+ // "The Art of Computer Programming Volume 2 Semi-numerical Algorithms Third Edition",
+ // Donald Knuth (Algorithm A, Chapter 4.5.4, page 380 and pages 378-417).
+ static const std::size_t sz = Data().size();
+
+ pf.clear();
+
+ const boost::uint32_t sqrt_n = static_cast<boost::uint32_t>(static_cast<boost::uint64_t>(::sqrt(static_cast<double>(n)) + 0.5));
+
+ boost::uint32_t np = n;
+
+ for(std::size_t i = static_cast<std::size_t>(0u); i < sz; i++)
+ {
+ const boost::uint32_t p = Data()[i];
+
+ if(IsPrimeFactor(np, p))
+ {
+ boost::multiprecision::utility::point<boost::uint32_t> ip(p, static_cast<boost::uint32_t>(1u));
+
+ while(IsPrimeFactor(np, p))
+ {
+ ++ip.y;
+ }
+
+ pf.push_back(ip);
+ }
+
+ if(static_cast<boost::uint32_t>(np / p) <= p)
+ {
+ pf.push_back(boost::multiprecision::utility::point<boost::uint32_t>(np, static_cast<boost::uint32_t>(1u)));
+
+ break;
+ }
+
+ if((np == static_cast<boost::uint32_t>(1u)) || (p >= sqrt_n))
+ {
+ break;
+ }
+ }
+ }
+}
+
+void boost::multiprecision::prime_factors(const boost::uint32_t n, std::deque<boost::multiprecision::utility::point<boost::uint32_t> >& pf)
+{
+ // Factor the input integer into a list of primes. For small inputs less than 10,000
+ // use the tabulated prime factors list. Calculate the prime factors for larger inputs
+ // above 10,000.
+ static std::vector<std::deque<boost::multiprecision::utility::point<boost::uint32_t> > > prime_factors_list;
+
+ if(prime_factors_list.empty())
+ {
+ // Generate a table of the sets of the first 10,000 integer prime factorizations.
+ prime_factors_list.resize(static_cast<std::size_t>(10000u));
+
+ prime_factors_list[static_cast<std::size_t>(0u)] = std::deque<boost::multiprecision::utility::point<boost::uint32_t> >(static_cast<std::size_t>(1u), boost::multiprecision::utility::point<boost::uint32_t>(static_cast<boost::uint32_t>(0u), static_cast<boost::uint32_t>(1u)));
+ prime_factors_list[static_cast<std::size_t>(1u)] = std::deque<boost::multiprecision::utility::point<boost::uint32_t> >(static_cast<std::size_t>(1u), boost::multiprecision::utility::point<boost::uint32_t>(static_cast<boost::uint32_t>(1u), static_cast<boost::uint32_t>(1u)));
+ prime_factors_list[static_cast<std::size_t>(2u)] = std::deque<boost::multiprecision::utility::point<boost::uint32_t> >(static_cast<std::size_t>(1u), boost::multiprecision::utility::point<boost::uint32_t>(static_cast<boost::uint32_t>(2u), static_cast<boost::uint32_t>(1u)));
+ prime_factors_list[static_cast<std::size_t>(3u)] = std::deque<boost::multiprecision::utility::point<boost::uint32_t> >(static_cast<std::size_t>(1u), boost::multiprecision::utility::point<boost::uint32_t>(static_cast<boost::uint32_t>(3u), static_cast<boost::uint32_t>(1u)));
+
+ static const boost::uint32_t n_five = static_cast<boost::uint32_t>(5u);
+
+ std::deque<boost::uint32_t>::const_iterator it_next_prime = std::find(Primes::Data().begin(), Primes::Data().end(), n_five);
+
+ for(std::size_t i = static_cast<std::size_t>(4u); i < prime_factors_list.size(); i++)
+ {
+ if((it_next_prime != Primes::Data().end()) && (static_cast<boost::uint32_t>(i) == *it_next_prime))
+ {
+ ++it_next_prime;
+
+ prime_factors_list[i] = std::deque<boost::multiprecision::utility::point<boost::uint32_t> >(static_cast<std::size_t>(1u),
+ boost::multiprecision::utility::point<boost::uint32_t>(static_cast<boost::uint32_t>(i),
+ static_cast<boost::uint32_t>(1u)));
+ }
+ else
+ {
+ Primes::Factors(static_cast<boost::uint32_t>(i), prime_factors_list[i]);
+ }
+ }
+ }
+
+ if(static_cast<std::size_t>(n) < prime_factors_list.size())
+ {
+ pf = prime_factors_list[static_cast<std::size_t>(n)];
+ }
+ else
+ {
+ Primes::Factors(n, pf);
+ }
+}

Added: sandbox/multiprecision/src/functions/integer/prime_factors.h
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/integer/prime_factors.h 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,26 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+#ifndef _PRIME_FACTORS_2011_06_23_H_
+ #define _PRIME_FACTORS_2011_06_23_H_
+
+ #include <deque>
+
+ #include <boost/multiprecision/utility/util_point.hpp>
+
+ namespace boost
+ {
+ namespace multiprecision
+ {
+ void prime_factors(const boost::uint32_t n, std::deque<boost::multiprecision::utility::point<boost::uint32_t> >& pf);
+ }
+ }
+
+#endif // _PRIME_FACTORS_2011_06_23_H_

Added: sandbox/multiprecision/src/functions/tables/A000142.cpp
==============================================================================
--- (empty file)
+++ sandbox/multiprecision/src/functions/tables/A000142.cpp 2011-09-21 17:18:17 EDT (Wed, 21 Sep 2011)
@@ -0,0 +1,7041 @@
+
+// Copyright Christopher Kormanyos 2002 - 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)
+
+// 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
+
+// Automatically generated file
+#include <vector>
+#include <boost/array.hpp>
+#include "tables.h"
+
+using boost::multiprecision::mp_float;
+
+namespace A000142_Table
+{
+ static const mp_float& A000142_0(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(1L));
+ return val;
+ }
+
+ static const mp_float& A000142_1(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(1L));
+ return val;
+ }
+
+ static const mp_float& A000142_2(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(2L));
+ return val;
+ }
+
+ static const mp_float& A000142_3(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(6L));
+ return val;
+ }
+
+ static const mp_float& A000142_4(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(24L));
+ return val;
+ }
+
+ static const mp_float& A000142_5(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(120L));
+ return val;
+ }
+
+ static const mp_float& A000142_6(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(720L));
+ return val;
+ }
+
+ static const mp_float& A000142_7(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(5040L));
+ return val;
+ }
+
+ static const mp_float& A000142_8(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(40320L));
+ return val;
+ }
+
+ static const mp_float& A000142_9(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(362880L));
+ return val;
+ }
+
+ static const mp_float& A000142_10(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(3628800L));
+ return val;
+ }
+
+ static const mp_float& A000142_11(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(39916800L));
+ return val;
+ }
+
+ static const mp_float& A000142_12(void)
+ {
+ static const mp_float val(static_cast<boost::int32_t>(479001600L));
+ return val;
+ }
+
+ static const mp_float& A000142_13(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(6227020800LL));
+ return val;
+ }
+
+ static const mp_float& A000142_14(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(87178291200LL));
+ return val;
+ }
+
+ static const mp_float& A000142_15(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(1307674368000LL));
+ return val;
+ }
+
+ static const mp_float& A000142_16(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(20922789888000LL));
+ return val;
+ }
+
+ static const mp_float& A000142_17(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(355687428096000LL));
+ return val;
+ }
+
+ static const mp_float& A000142_18(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(6402373705728000LL));
+ return val;
+ }
+
+ static const mp_float& A000142_19(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(121645100408832000LL));
+ return val;
+ }
+
+ static const mp_float& A000142_20(void)
+ {
+ static const mp_float val(static_cast<boost::int64_t>(2432902008176640000LL));
+ return val;
+ }
+
+ static const mp_float& A000142_21(void)
+ {
+ static const mp_float val("51090942171709440000");
+ return val;
+ }
+
+ static const mp_float& A000142_22(void)
+ {
+ static const mp_float val("1124000727777607680000");
+ return val;
+ }
+
+ static const mp_float& A000142_23(void)
+ {
+ static const mp_float val("25852016738884976640000");
+ return val;
+ }
+
+ static const mp_float& A000142_24(void)
+ {
+ static const mp_float val("620448401733239439360000");
+ return val;
+ }
+
+ static const mp_float& A000142_25(void)
+ {
+ static const mp_float val("15511210043330985984000000");
+ return val;
+ }
+
+ static const mp_float& A000142_26(void)
+ {
+ static const mp_float val("403291461126605635584000000");
+ return val;
+ }
+
+ static const mp_float& A000142_27(void)
+ {
+ static const mp_float val("10888869450418352160768000000");
+ return val;
+ }
+
+ static const mp_float& A000142_28(void)
+ {
+ static const mp_float val("304888344611713860501504000000");
+ return val;
+ }
+
+ static const mp_float& A000142_29(void)
+ {
+ static const mp_float val("8841761993739701954543616000000");
+ return val;
+ }
+
+ static const mp_float& A000142_30(void)
+ {
+ static const mp_float val("265252859812191058636308480000000");
+ return val;
+ }
+
+ static const mp_float& A000142_31(void)
+ {
+ static const mp_float val("8222838654177922817725562880000000");
+ return val;
+ }
+
+ static const mp_float& A000142_32(void)
+ {
+ static const mp_float val("263130836933693530167218012160000000");
+ return val;
+ }
+
+ static const mp_float& A000142_33(void)
+ {
+ static const mp_float val("8683317618811886495518194401280000000");
+ return val;
+ }
+
+ static const mp_float& A000142_34(void)
+ {
+ static const mp_float val("295232799039604140847618609643520000000");
+ return val;
+ }
+
+ static const mp_float& A000142_35(void)
+ {
+ static const mp_float val("10333147966386144929666651337523200000000");
+ return val;
+ }
+
+ static const mp_float& A000142_36(void)
+ {
+ static const mp_float val("371993326789901217467999448150835200000000");
+ return val;
+ }
+
+ static const mp_float& A000142_37(void)
+ {
+ static const mp_float val("13763753091226345046315979581580902400000000");
+ return val;
+ }
+
+ static const mp_float& A000142_38(void)
+ {
+ static const mp_float val("523022617466601111760007224100074291200000000");
+ return val;
+ }
+
+ static const mp_float& A000142_39(void)
+ {
+ static const mp_float val("20397882081197443358640281739902897356800000000");
+ return val;
+ }
+
+ static const mp_float& A000142_40(void)
+ {
+ static const mp_float val("815915283247897734345611269596115894272000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_41(void)
+ {
+ static const mp_float val("33452526613163807108170062053440751665152000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_42(void)
+ {
+ static const mp_float val("1405006117752879898543142606244511569936384000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_43(void)
+ {
+ static const mp_float val("60415263063373835637355132068513997507264512000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_44(void)
+ {
+ static const mp_float val("2658271574788448768043625811014615890319638528000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_45(void)
+ {
+ static const mp_float val("119622220865480194561963161495657715064383733760000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_46(void)
+ {
+ static const mp_float val("5502622159812088949850305428800254892961651752960000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_47(void)
+ {
+ static const mp_float val("258623241511168180642964355153611979969197632389120000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_48(void)
+ {
+ static const mp_float val("12413915592536072670862289047373375038521486354677760000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_49(void)
+ {
+ static const mp_float val("608281864034267560872252163321295376887552831379210240000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_50(void)
+ {
+ static const mp_float val("30414093201713378043612608166064768844377641568960512000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_51(void)
+ {
+ static const mp_float val("1551118753287382280224243016469303211063259720016986112000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_52(void)
+ {
+ static const mp_float val("80658175170943878571660636856403766975289505440883277824000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_53(void)
+ {
+ static const mp_float val("4274883284060025564298013753389399649690343788366813724672000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_54(void)
+ {
+ static const mp_float val("230843697339241380472092742683027581083278564571807941132288000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_55(void)
+ {
+ static const mp_float val("12696403353658275925965100847566516959580321051449436762275840000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_56(void)
+ {
+ static const mp_float val("710998587804863451854045647463724949736497978881168458687447040000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_57(void)
+ {
+ static const mp_float val("40526919504877216755680601905432322134980384796226602145184481280000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_58(void)
+ {
+ static const mp_float val("2350561331282878571829474910515074683828862318181142924420699914240000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_59(void)
+ {
+ static const mp_float val("138683118545689835737939019720389406345902876772687432540821294940160000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_60(void)
+ {
+ static const mp_float val("8320987112741390144276341183223364380754172606361245952449277696409600000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_61(void)
+ {
+ static const mp_float val("507580213877224798800856812176625227226004528988036003099405939480985600000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_62(void)
+ {
+ static const mp_float val("31469973260387937525653122354950764088012280797258232192163168247821107200000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_63(void)
+ {
+ static const mp_float val("1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_64(void)
+ {
+ static const mp_float val("126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_65(void)
+ {
+ static const mp_float val("8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_66(void)
+ {
+ static const mp_float val("544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_67(void)
+ {
+ static const mp_float val("36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_68(void)
+ {
+ static const mp_float val("2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_69(void)
+ {
+ static const mp_float val("171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_70(void)
+ {
+ static const mp_float val("11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_71(void)
+ {
+ static const mp_float val("850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_72(void)
+ {
+ static const mp_float val("61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_73(void)
+ {
+ static const mp_float val("4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_74(void)
+ {
+ static const mp_float val("330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_75(void)
+ {
+ static const mp_float val("24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_76(void)
+ {
+ static const mp_float val("1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_77(void)
+ {
+ static const mp_float val("145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_78(void)
+ {
+ static const mp_float val("11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_79(void)
+ {
+ static const mp_float val("894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_80(void)
+ {
+ static const mp_float val("71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_81(void)
+ {
+ static const mp_float val("5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_82(void)
+ {
+ static const mp_float val("475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_83(void)
+ {
+ static const mp_float val("39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_84(void)
+ {
+ static const mp_float val("3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_85(void)
+ {
+ static const mp_float val("281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_86(void)
+ {
+ static const mp_float val("24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_87(void)
+ {
+ static const mp_float val("2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_88(void)
+ {
+ static const mp_float val("185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_89(void)
+ {
+ static const mp_float val("16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_90(void)
+ {
+ static const mp_float val("1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_91(void)
+ {
+ static const mp_float val("135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_92(void)
+ {
+ static const mp_float val("12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_93(void)
+ {
+ static const mp_float val("1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_94(void)
+ {
+ static const mp_float val("108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_95(void)
+ {
+ static const mp_float val("10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_96(void)
+ {
+ static const mp_float val("991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_97(void)
+ {
+ static const mp_float val("96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_98(void)
+ {
+ static const mp_float val("9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_99(void)
+ {
+ static const mp_float val("933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_100(void)
+ {
+ static const mp_float val("93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_101(void)
+ {
+ static const mp_float val("9425947759838359420851623124482936749562312794702543768327889353416977599316221476503087861591808346911623490003549599583369706302603264000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_102(void)
+ {
+ static const mp_float val("961446671503512660926865558697259548455355905059659464369444714048531715130254590603314961882364451384985595980362059157503710042865532928000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_103(void)
+ {
+ static const mp_float val("99029007164861804075467152545817733490901658221144924830052805546998766658416222832141441073883538492653516385977292093222882134415149891584000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_104(void)
+ {
+ static const mp_float val("10299016745145627623848583864765044283053772454999072182325491776887871732475287174542709871683888003235965704141638377695179741979175588724736000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_105(void)
+ {
+ static const mp_float val("1081396758240290900504101305800329649720646107774902579144176636573226531909905153326984536526808240339776398934872029657993872907813436816097280000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_106(void)
+ {
+ static const mp_float val("114628056373470835453434738414834942870388487424139673389282723476762012382449946252660360871841673476016298287096435143747350528228224302506311680000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_107(void)
+ {
+ static const mp_float val("12265202031961379393517517010387338887131568154382945052653251412013535324922144249034658613287059061933743916719318560380966506520420000368175349760000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_108(void)
+ {
+ static const mp_float val("1324641819451828974499891837121832599810209360673358065686551152497461815091591578895743130235002378688844343005686404521144382704205360039762937774080000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_109(void)
+ {
+ static const mp_float val("144385958320249358220488210246279753379312820313396029159834075622223337844983482099636001195615259277084033387619818092804737714758384244334160217374720000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_110(void)
+ {
+ static const mp_float val("15882455415227429404253703127090772871724410234473563207581748318444567162948183030959960131517678520479243672638179990208521148623422266876757623911219200000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_111(void)
+ {
+ static const mp_float val("1762952551090244663872161047107075788761409536026565516041574063347346955087248316436555574598462315773196047662837978913145847497199871623320096254145331200000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_112(void)
+ {
+ static const mp_float val("197450685722107402353682037275992488341277868034975337796656295094902858969771811440894224355027779366597957338237853638272334919686385621811850780464277094400000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_113(void)
+ {
+ static const mp_float val("22311927486598136465966070212187151182564399087952213171022161345724023063584214692821047352118139068425569179220877461124773845924561575264739138192463311667200000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_114(void)
+ {
+ static const mp_float val("2543559733472187557120132004189335234812341496026552301496526393412538629248600474981599398141467853800514886431180030568224218435400019580180261753940817530060800000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_115(void)
+ {
+ static const mp_float val("292509369349301569068815180481773552003419272043053514672100535242441942363589054622883930786268803187059211939585703515345785120071002251720730101703194015956992000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_116(void)
+ {
+ static const mp_float val("33931086844518982011982560935885732032396635556994207701963662088123265314176330336254535971207181169698868584991941607780111073928236261199604691797570505851011072000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_117(void)
+ {
+ static const mp_float val("3969937160808720895401959629498630647790406360168322301129748464310422041758630649341780708631240196854767624444057168110272995649603642560353748940315749184568295424000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_118(void)
+ {
+ static const mp_float val("468452584975429065657431236280838416439267950499862031533310318788629800927518416622330123618486343228862579684398745837012213486653229822121742374957258403779058860032000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_119(void)
+ {
+ static const mp_float val("55745857612076058813234317117419771556272886109483581752463927935846946310374691578057284710599874844234646982443450754604453404911734348832487342619913750049708004343808000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_120(void)
+ {
+ static const mp_float val("6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_121(void)
+ {
+ static const mp_float val("809429852527344373968162284544935082997082306309701607045776233628497660426640521713391773997910182738287074185078904956856663439318382745047716214841147650721760223072092160000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_122(void)
+ {
+ static const mp_float val("98750442008336013624115798714482080125644041369783596059584700502676714572050143649033796427745042294071023050579626404736512939596842694895821378210620013388054747214795243520000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_123(void)
+ {
+ static const mp_float val("12146304367025329675766243241881295855454217088483382315328918161829235892362167668831156960612640202170735835221294047782591091570411651472186029519906261646730733907419814952960000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_124(void)
+ {
+ static const mp_float val("1506141741511140879795014161993280686076322918971939407100785852066825250652908790935063463115967385069171243567440461925041295354731044782551067660468376444194611004520057054167040000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_125(void)
+ {
+ static const mp_float val("188267717688892609974376770249160085759540364871492425887598231508353156331613598866882932889495923133646405445930057740630161919341380597818883457558547055524326375565007131770880000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_126(void)
+ {
+ static const mp_float val("23721732428800468856771473051394170805702085973808045661837377170052497697783313457227249544076486314839447086187187275319400401837013955325179315652376928996065123321190898603130880000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_127(void)
+ {
+ static const mp_float val("3012660018457659544809977077527059692324164918673621799053346900596667207618480809067860692097713761984609779945772783965563851033300772326297773087851869982500270661791244122597621760000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_128(void)
+ {
+ static const mp_float val("385620482362580421735677065923463640617493109590223590278828403276373402575165543560686168588507361534030051833058916347592172932262498857766114955245039357760034644709279247692495585280000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_129(void)
+ {
+ static const mp_float val("49745042224772874403902341504126809639656611137138843145968864022652168932196355119328515747917449637889876686464600208839390308261862352651828829226610077151044469167497022952331930501120000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_130(void)
+ {
+ static const mp_float val("6466855489220473672507304395536485253155359447828049608975952322944781961185526165512707047229268452925683969240398027149120740074042105844737747799459310029635780991774612983803150965145600000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_131(void)
+ {
+ static const mp_float val("847158069087882051098456875815279568163352087665474498775849754305766436915303927682164623187034167333264599970492141556534816949699515865660644961729169613882287309922474300878212776434073600000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_132(void)
+ {
+ static const mp_float val("111824865119600430744996307607616902997562475571842633838412167568361169672820118454045730260688510087990927196104962685462595837360336094267205134948250389032461924909766607715924086489297715200000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_133(void)
+ {
+ static const mp_float val("14872707060906857289084508911813048098675809251055070300508818286592035566485075754388082124671571841702793317081960037166525246368924700537538282948117301741317436012998958826217903503076596121600000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_134(void)
+ {
+ static const mp_float val("1992942746161518876737324194182948445222558439641379420268181650403332765909000151088003004705990626788174304488982644980314383013435909872030129915047718433336536425741860482713199069412263880294400000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_135(void)
+ {
+ static const mp_float val("269047270731805048359538766214698040105045389351586221736204522804449923397715020396880405635308734616403531106012657072342441706813847832724067538531441988500432417475151165166281874370655623839744000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_136(void)
+ {
+ static const mp_float val("36590428819525486576897272205198933454286172951815726156123815101405189582089242773975735166401987907830880230417721361838572072126683305250473185240276110436058808776620558462614334914409164842205184000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_137(void)
+ {
+ static const mp_float val("5012888748274991661034926292112253883237205694398754483388962668892510972746226260034675717797072343372830591567227826571884373881355612819314826377917827129740056802397016509378163883274055583382110208000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_138(void)
+ {
+ static const mp_float val("691778647261948849222819828311491035886734385827028118707676848307166514238979223884785249055995983385450621636277440066920043595627074569065446040152660143904127838730788278294186615891819670506731208704000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_139(void)
+ {
+ static const mp_float val("96157231969410890041971956135297253988256079629956908500367081914696145479218112119985149618783441690577636407442564169301886059792163365100096999581219760002673769583579570682891939608962934200435638009856000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_140(void)
+ {
+ static const mp_float val("13462012475717524605876073858941615558355851148193967190051391468057460367090535696797920946629681836680869097041958983702264048370902871114013579941370766400374327741701139895604871545254810788060989321379840000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_141(void)
+ {
+ static const mp_float val("1898143759076170969428526414110767793728175011895349373797246196996101911759765533248506853474785138972002542682916216702019230820297304827075914771733278062452780211579860725280286887880928321116599494314557440000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_142(void)
+ {
+ static const mp_float val("269536413788816277658850750803729026709400851689139611079208959973446471469886705721287973193419489734024361060974102771686730776482217285444779897586125484868294790044340222989800738079091821598557128192667156480000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_143(void)
+ {
+ static const mp_float val("38543707171800727705215657364933250819444321791546964384326881276202845420193798918144180166658987031965483631719296696351202501036957071818603525354815944336166154976340651887541505545310130488593669331551403376640000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_144(void)
+ {
+ static const mp_float val("5550293832739304789551054660550388117999982337982762871343070903773209740507907044212761943998894132603029642967578724274573160149321818341878907651093495984407926316593053871805976798524658790357488383743402086236160000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_145(void)
+ {
+ static const mp_float val("804792605747199194484902925779806277109997439007500616344745281047115412373646521410850481879839649227439298230298915019813108221651663659572441609408556917739149315905992811411866635786075524601835815642793302504243200000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_146(void)
+ {
+ static const mp_float val("117499720439091082394795827163851716458059626095095089986332811032878850206552392125984170354456588787206137541623641592892713800361142894297576474973649309989915800122274950466132528824767026591868029083847822165619507200000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_147(void)
+ {
+ static const mp_float val("17272458904546389112034986593086202319334765035978978227990923221833190980363201642519673042105118551719302218618675314155228928653088005461743741821126448568517622617974417718521481737240752909004600275325629858346067558400000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_148(void)
+ {
+ static const mp_float val("2556323917872865588581178015776757943261545225324888777742656636831312265093753843092911610231557545654456728355563946494973881440657024808338073789526714388140608147460213822341179297111631430532680840748193219035217998643200000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_149(void)
+ {
+ static const mp_float val("380892263763056972698595524350736933545970238573408427883655838887865527498969322620843829924502074302514052524979028027751108334657896696442372994639480443832950613971571859528835715269633083149369445271480789636247481797836800000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_150(void)
+ {
+ static const mp_float val("57133839564458545904789328652610540031895535786011264182548375833179829124845398393126574488675311145377107878746854204162666250198684504466355949195922066574942592095735778929325357290444962472405416790722118445437122269675520000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_151(void)
+ {
+ static const mp_float val("8627209774233240431623188626544191544816225903687700891564804750810154197851655157362112747789971982951943289690774984828562603780001360174419748328584232052816331406456102618328128950857189333333217935399039885261005462721003520000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_152(void)
+ {
+ static const mp_float val("1311335885683452545606724671234717114812066337360530535517850322123143438073451583919041137664075741408695380032997797693941515774560206746511801745944803272028082373781327597985875600530292778666649126180654062559672830333592535040000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_153(void)
+ {
+ static const mp_float val("200634390509568239477828874698911718566246149616161171934231099284840946025238092339613294062603588435530393145048663047173051913507711632216305667129554900620296603188543122491838966881134795135997316305640071571629943041039657861120000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_154(void)
+ {
+ static const mp_float val("30897696138473508879585646703632404659201907040888820477871589289865505687886666220300447285640952619071680544337494109264649994680187591361311072737951454695525676891035640863743200899694758450943586711068571022031011228320107310612480000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_155(void)
+ {
+ static const mp_float val("4789142901463393876335775239063022722176295591337767174070096339929153381622433264146569329274347655956110484372311586936020749175429076661003216274382475477806479918110524333880196139452687559896255940215628508414806740389616633144934400000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_156(void)
+ {
+ static const mp_float val("747106292628289444708380937293831544659502112248691679154935029028947927533099589206864815366798234329153235562080607562019236871366935959116501738803666174537810867225241796085310597754619259343815926673638047312709851500780194770609766400000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_157(void)
+ {
+ static const mp_float val("117295687942641442819215807155131552511541831623044593627324799557544824622696635505477776012587322789677057983246655387237020188804608945581290772992175589402436306154362961985393763847475223716979100487761173428095446685622490578985733324800000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_158(void)
+ {
+ static const mp_float val("18532718694937347965436097530510785296823609396441045793117318330092082290386068409865488609988797000768975161352971551183449189831128213401843942132763743125584936372389347993692214687901085347282697877066265401639080576328353511479745865318400000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_159(void)
+ {
+ static const mp_float val("2946702272495038326504339507351214862194953894034126281105653614484641084171384877168612688988218723122267050655122476638168421183149385930893186799109435156968004883209906330997062135376272570217948962453536198860613811636208208325279592585625600000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_160(void)
+ {
+ static const mp_float val("471472363599206132240694321176194377951192623045460204976904578317542573467421580346978030238114995699562728104819596262106947389303901748942909887857509625114880781313585012959529941660203611234871833992565791817698209861793313332044734813700096000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_161(void)
+ {
+ static const mp_float val("75907050539472187290751785709367294850142012310319093001281637109124354328254874435863462868336514307629599224875954998199218529677928181579808491945059049643495805791487187086484320607292781408814365272803092482649411787748723446459202305005715456000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_162(void)
+ {
+ static const mp_float val("12296942187394494341101789284917501765723005994271693066207625211678145401177289658609880984670515317835995074429904709708273401807824365415928975695099566042246320538220924308010459938381430588227927174194100982189204709615293198326390773410925903872000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_163(void)
+ {
+ static const mp_float val("2004401576545302577599591653441552787812849977066285969791842909503537700391898214353410600501293996807267197132074467682448564494675371562796423038301229264886150247730010662205704969956173185881152129393638460096840367667292791327201696065980922331136000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_164(void)
+ {
+ static const mp_float val("328721858553429622726333031164414657201307396238870899045862237158580182864271307153959338482212215476391820329660212699921564577126760936298613378281401599441328640627721748601735615072812402484508949220556707455881820297436017777661078154820871262306304000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_165(void)
+ {
+ static const mp_float val("54239106661315887749844950142128418438215720379413698342567269131165730172604765680403290849565015553604650354393935095487058155225915554489271207416431263907819225703574088519286376487014046409943976621391856730220500349076942933314077895545443758280540160000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_166(void)
+ {
+ static const mp_float val("9003691705778437366474261723593317460743809582982673924866166675773511208652391102946946281027792581898371958829393225850851653767501982045219020431127589808697991466793298694201538496844331704050700119151048217216603057946772526930136930660543663874569666560000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_167(void)
+ {
+ static const mp_float val("1503616514864999040201201707840084015944216200358106545452649834854176371844949314192140028931641361177028117124508668717092226179172831001551576411998307498052564574954480881931656928973003394576466919898225052275172710677111011997332867420310791867053134315520000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_168(void)
+ {
+ static const mp_float val("252607574497319838753801886917134114678628321660161899636045172255501630469951484784279524860515748677740723676917456344471493998101035608260664837215715659672830848592352788164518364067464570288846442542901808782229015393754650015551921726612213033664926565007360000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_169(void)
+ {
+ static const mp_float val("42690680090047052749392518888995665380688186360567361038491634111179775549421800928543239701427161526538182301399050122215682485679075017796052357489455946484708413412107621199803603527401512378815048789750405684196703601544535852628274771797464002689372589486243840000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_170(void)
+ {
+ static const mp_float val("7257415615307998967396728211129263114716991681296451376543577798900561843401706157852350749242617459511490991237838520776666022565442753025328900773207510902400430280058295603966612599658257104398558294257568966313439612262571094946806711205568880457193340212661452800000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_171(void)
+ {
+ static const mp_float val("1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_172(void)
+ {
+ static const mp_float val("213455108077438865629072570145733886730056159330291227886899710221263324938130981514753340236723864719151973034287306573083301055694802251980973629541579310661401455397074590303866009781148657954570396550703618437210885875866741044575478989978191912006970522334798649753600000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_173(void)
+ {
+ static const mp_float val("36927733697396923753829554635211962404299715564140382424433649868278555214296659802052327860953228596413291334931704037143411082635200789592708437910693220744422451783693904122568819692138717826140678603271725989637483256524946200711557865266227200777205900363920166407372800000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_174(void)
+ {
+ static const mp_float val("6425425663347064733166342506526881458348150508160426541851455077080468607287618805557105047805861775775912692278116502462953528378524937389131268196460620409529506610362739317326974626432136901748478076969280322196922086635340638923811068556323532935233826663322108954882867200000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_175(void)
+ {
+ static const mp_float val("1124449491085736328304109938642204255210926338928074644824004638489082006275333290972493383366025810760784721148670387931016867466241864043097971934380608571667663656813479380532220559625623957805983663469624056384461365161184611811666936997356618263665919666081369067104501760000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_176(void)
+ {
+ static const mp_float val("197903110431089593781523349201027948917123035651341137489024816374078433104458659211158835472420542693898110922165988275858968674058568071585243060450987108613508803599172370973670818494109816573853124770653833923665200268368491678853380911534764814405201861230320955810392309760000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_177(void)
+ {
+ static const mp_float val("35028850546302858099329632808581946958330777310287381335557392498211882659489182680375113878618436056819965633223379924827037455308366548670588021699824718224591058237053509662339734873457437533572003084405728604488740447501223027157048421341653372149720729437766809178439438827520000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_178(void)
+ {
+ static const mp_float val("6235135397241908741680674639927586558582878361231153877729215864681715113389074517106770270394081618113953882713761626619212667044889245663364667862568799843977208366195524719896472807475423880975816549024219691598995799655217698833954618998814300242650289839922492033762220111298560000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_179(void)
+ {
+ static const mp_float val("1116089236106301664760840760547037993986335226660376544113529639778027005296644338562111878400540609642397745005763331164839067401035174973742275547399815172071920297548998924861468632538100874694671162275335324796220248138283968091277876800787759743434401881346126074043437399922442240000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_180(void)
+ {
+ static const mp_float val("200896062499134299656951336898466838917540340798867777940435335160044860953395980941180138112097309735631594101037399609671032132186331495273609598531966730972945653558819806475064353856858157445040809209560358463319644664891114256430017824141796753818192338642302693327818731986039603200000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_181(void)
+ {
+ static const mp_float val("36362187312343308237908191978622497844074801684595067807218795663968119832564672550353604998289613062149318532287769329350456815925726000644523337334285978306103163294146384971986648048091326497552386466930424881860855684345291680413833226169665212441092813294256787492335190489473168179200000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_182(void)
+ {
+ static const mp_float val("6617918090846482099299290940109294607621613906596302340913820810842197809526770404164356109688709577311175972876374017941783140498482132117303247394840048051710775719534642064901569944752621422554534336981337328498675734550843085835317647162879068664278892019554735323605004669084116608614400000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_183(void)
+ {
+ static const mp_float val("1211079010624906224171770242040000913194755344907123328387229208384122199143398983962077168073033852647945203036376445283346314711222230177466494273255728793463071956674839497876987299889729720327479783667584731115257659422804284707863129430806869565563037239578516564219715854442393339376435200000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_184(void)
+ {
+ static const mp_float val("222838537954982745247605724535360168027834983462910692423250174342678484642385413049022198925438228887221917358693265932135721906864890352653834946279054097997205240028170467609365663179710268540256280194835590525207409333795988386246815815268464000063598852082447047816427717217400374445264076800000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_185(void)
+ {
+ static const mp_float val("41225129521671807870807059039041631085149471940638478098301282253395519658841301414069106801206072344136054711358254197445108552770004715240959465061625008129482969405211536507732647688246399679947411836044584247163370726752257851455660925824665840011765787635252703846039127685219069272373854208000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_186(void)
+ {
+ static const mp_float val("7667874091030956263970112981261743381837801780958756926284038499131566656544482063016853865024329456009306176312635280724790190815220877034818460501462251512083832309369345790438272470013830340470218601504292669972386955175919960370752932203387846242188436500157002915363277749450746884661536882688000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_187(void)
+ {
+ static const mp_float val("1433892455022788821362411127495946012403668933039287545215115199337602964773818145784151672759549608273740254970462797495535765682446304005511052113773441032759676641852067662811956951892586273667930878481302729284836360617897032589330798322033527247289237625529359545172932939147289667431707397062656000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_188(void)
+ {
+ static const mp_float val("269571781544284298416133291969237850331889759411386058500441657475469357377477811407420514478795326355463167934447005929160723948299905153036077797389406914158819208668188720608647906955806219449571005154484913105549235796164642126794190084542303122490376673599519594492511392559690457477160990647779328000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_189(void)
+ {
+ static const mp_float val("50949066711869732400649192182185953712727164528751965056583473262863708544343306356002477236492316681182538739610484120611376826228682073923818703706597906776016830438287668195034454414647375475968919974197648576948805565475117361964101925978495290150681191310309203359084653193781496463183427232430292992000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_190(void)
+ {
+ static const mp_float val("9680322675255249156123346514615331205418161260462873360750859919944104623425228207640470674933540169424682360525991982916161596983449594045525553704253602287443197783274656957056546338783001340434094795097553229620273057440272298773179365935914105128629426348958748638226084106818484328004851174161755668480000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_191(void)
+ {
+ static const mp_float val("1848941630973752588819559184291528260234868800748408811903414244709323983074218587659329898912306172360114330860464468736986865023838872462695380757512438036901650776605459478797800350707553256022912105863632666857472153971092009065677258893759594079568220432651120989901182064402330506648926574264895332679680000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_192(void)
+ {
+ static const mp_float val("354996793146960497053355363383973425965094809743694491885455534984190204750249968830591340591162785093141951525209177997501478084577063512837513105442388103085116949108248219929177667335850225156399124325817472036634653562449665740610033707601842063277098323069015230061026956365247457276593902258859903874498560000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_193(void)
+ {
+ static const mp_float val("68514381077363375931297585133106871211263298280533036933892918251948709516798243984304128734094417522976396644365371353517785270323373257977640029350380903895427571177891906446331289795819093455185030994882772103070488137552785487937736505567155518212479976352319939401778202578492759254382623135959961447778222080000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_194(void)
+ {
+ static const mp_float val("13291789929008494930671731515822733014985079866423409165175226140878049646258859332955000974414316999457420949006882042582450342442734412047662165693973895355712948808511029850588270220388904130305896013007257787995674698685240384659920882080028170533221115412350068243944971300227595295350228888376232520868975083520000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_195(void)
+ {
+ static const mp_float val("2591899036156656511480987645585432937922090573952564787209169097471219681020477569926225190010791814894197085056341998303577816776333210349294122310324909594364025017659650820864712692975836305409649722536415268659156566243621875008684572005605493253978117505408263307569269403544381082593294633233365341569450141286400000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_196(void)
+ {
+ static const mp_float val("508012211086704676250273578534744855832729752494702698292997143104359057480013603705540137242115195719262628671043031667501252088161309228461647972823682280495348903461291560889483687823263915860291345617137392657194686983749887501702176113098676677779711031060019608283576803094698692188285748113739606947612227692134400000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_197(void)
+ {
+ static const mp_float val("100078405584080821221303894971344736599047761241456431563720437191558734323562679929991407036696693556694737848195477238497746661367777918006944650646265409257583733981874437495228286501182991424477395086576066353467353335798727837835328694280439305522603073118823862831864630209655642361092292378406702568679608855350476800000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_198(void)
+ {
+ static const mp_float val("19815524305648002601818171204326257846611456725808373449616646563928629396065410626138298593265945324225558093942704493222553838950820027765375040827960551033001579328411138624055200727234232302046524227142061137986535960488148111891395081467526982493475408477527124840709196781511817187496273890924527108598562553359394406400000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_199(void)
+ {
+ static const mp_float val("3943289336823952517761816069660925311475679888435866316473712666221797249817016714601521420059923119520886060694598194151288213951213185525309633124764149655567314286353816586186984944719612228107258321201270166459320656137141474266387621212037869516201606287027897843301130159520851620311758504293980894611113948118519486873600000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_200(void)
+ {
+ static const mp_float val("788657867364790503552363213932185062295135977687173263294742533244359449963403342920304284011984623904177212138919638830257642790242637105061926624952829931113462857270763317237396988943922445621451664240254033291864131227428294853277524242407573903240321257405579568660226031904170324062351700858796178922222789623703897374720000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_201(void)
+ {
+ static const mp_float val("158520231340322891214025006000369197521322331515121825922243249182116249442644071926981161086408909404739619639922847404881786200838770058117447251615518816153806034311423426764716794777728411569911784512291060691664690376713087265508782372723922354551304572738521493300705432412738235136532691872618031963366780714364483372318720000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_202(void)
+ {
+ static const mp_float val("32021086730745224025233051212074577899307110966054608836293136334787482387414102529250194539454599699757403167264415175786120812569431551739724344826334800863068818930907532206472792545101139137122180471482794259716267456096043627632774039290232315619363523693181341646742497347373123497579603758268842456600089704301625641208381440000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_203(void)
+ {
+ static const mp_float val("6500280606341280477122309396051139313559343526109085593767506675961858924645062813437789491509283739050752842954676280684582524951594605003164041999745964575202970242974229037913976886655531244835802635711007234722402293587496856409453129975917160070730795309715812354288726961516744070008659562928575018689818209973230005165301432320000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_204(void)
+ {
+ static const mp_float val("1326057243693621217332951116794432419966106079326253461128571361896219220627592813941309056267893882766353579962753961259654835090125299420645464567948176773341405929566742723734451284877728373946503737685045475883370067891849358707528438515087100654429082243182025720274900300149415790281766550837429303812722914834538921053721492193280000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_205(void)
+ {
+ static const mp_float val("271841734957192349553254978942858646093051746261881959531357129188724940228656526857968356534918245967102483892364562058229241193475686381232320236429376238534988215561182258365562513399934316659033266225434322556090863917829118535043329895592855634157961859852315272656354561530630237007762142921673007281608197541080478816012905899622400000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_206(void)
+ {
+ static const mp_float val("55999397401181624007970525662228881095168659729947683663459568612877337687103244532741481446193158669223111681827099783995223685855991394533857968704451505138207572405603545223305877760386469231760852842439470446554717967072798418218925958492128260636540143129576946167209039675309828823599001441864639500011288693462578636098658615322214400000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_207(void)
+ {
+ static const mp_float val("11591875262044596169649898812081378386699912564099170518336130702865608901230371618277486659361983844529184118138209655287011302972190218668508599521821461563608967487959933861224316696399999130974496538384970382436826619184069272571317673407870549951763809627822427856612271212789134566484993298465980376502336759546753777672422333371698380800000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_208(void)
+ {
+ static const mp_float val("2411110054505276003287178952912926704433581813332627467813915186196046651455917296601717225147292639662070296572747608299698351018215565483049788700538864005230665237495666243134657872851199819242695279984073839546859936790286408694834076068837074389966872402587064994175352412260139989828878606080923918312486045985724785755863845341313263206400000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_209(void)
+ {
+ static const mp_float val("503922001391602684687020401158801681226618598986519140773108273914973750154286714989758900055784161689372691983704250134636955362807053185957405838412622577093209034636594244815143495425900762221723313516671432465293726789169859417220321898386948547503076332140696583782648654162369257874235628670913098927309583611016480222975543676334472010137600000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_210(void)
+ {
+ static const mp_float val("105823620292236563784274284243348353057589905787169019562352737522144487532400210147849369011714673954768265316577892528273760626189481169051055226066650741189573897273684791411180134039439160066561895838501000817711682625725670477616267598661259194975646029749546282594356217374097544153589482020891750774735012558313460846824864172030239122128896000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_211(void)
+ {
+ static const mp_float val("22328783881661914958481873975346502495151470121092663127656427617172486869336444341196216861471796204456103981797935323465763492125980526669772652700063306391000092324747490987759008282321662774044560021923711172537165034028116470777032463317525690139861312277154265627409161865934581816407380706408159413469087649804140238680046340298380454769197056000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_212(void)
+ {
+ static const mp_float val("4733702182912325971198157282773458528972111665671644583063162654840567216299326200333597974632020795344694044141162288574741860330707871653991802372413420954892019572846468089404909755852192508097446724647826768577878987213960691804730882223315446309650598202756704313010742315578131345078364709758529795655446581758477730600169824143256656411069775872000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_213(void)
+ {
+ static const mp_float val("1008278564960325431865207501230746666671059784788060296192453645481040817071756480671056368596620429408419831402067567466420016250440776662300253905324058663392000169016297703043245777996517004224756152349987101707088224276573627354407677913566190063955577417187178018671288113218141976501691683178566846474610121914555756617836172542513667815557862260736000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_214(void)
+ {
+ static const mp_float val("215771612901509642419154405263379786667606793944644903385185080132942734853355886863606062879676771893401843920042459437813883477594326205732254335739348553965888036169487708451254596491254638904097816602897239765316879995186756253843243073503164673686493567278056095995655656228682382971362020200213305145566566089714931916216940924097924912529382523797504000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_215(void)
+ {
+ static const mp_float val("46390896773824573120118197131626654133535460698098654227814792228582687993471515675675303519130505957081396442809128779129984947682780134232434682183959939102665927776439857317019738245619747364381030569622906549543129198965152594576297260803180404842596116964782060639065966089166712338842834343045860606296811709288710361986642298681053856193817242616463360000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_216(void)
+ {
+ static const mp_float val("10020433703146107793945530580431357292843659510789309313207995121373860606589847385945865560132189286729581631646771816292076748699480508994205891351735346846175840399711009180476263461053865430706302603038547814701315906976472960428480208333486967446000761264392925098038248675260009865190052218097905890960111329206361438189114736515107632937864524405156085760000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_217(void)
+ {
+ static const mp_float val("2174434113582705391286180135953604532547074113841280120966134941338127751629996882750252826548685075220319214067349484135380654467787270451742678423326570265620157366737288992163349171048688798463267664859364875790185551813894632412980205208366671935782165194373264746274299962531422140746241331327245578338344158437780432087037897823778356347516601795918870609920000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_218(void)
+ {
+ static const mp_float val("474026636761029775300387269637885788095262156817399066370617417211711849855339320439555116187613346398029588666682187541512982673977624958479903896285192317905194305948729000291610119288614158064992350939341542922260450295429029866029684735423934482000512012373371714687797391831850026682680610229339536077759026539436134194974261725583681683758619191510313792962560000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_219(void)
+ {
+ static const mp_float val("103811833450665520790784812050696987592862412343010395535165214369364895118319311176262570445087322861168479918003399071591343205601099865907098953286457117621237553002771651063862616124206500616233324855715797899975038614698957540660500957057841651558112130709768405516627628811175155843507053640225358401029226812136513388699363317902826288743137602940758720658800640000000000000000000000000000000000000000000000000000");
+ return val;
+ }
+
+ static const mp_float& A000142_220(void)
+ {
+ static const mp_float val("+2.28386033591464145739726586511533372704297307154622870177363471612602769260302484587777654979192110294570655819607477957500955052322419704995617697230205658766722616606097632340497755473254301355713314682574755379945084952337706589453102105527251633427846687561490492136580783384585342855715518008495788482264298986700329455138599299386217835234902726469669185449361408000000000000000000000000000000000000000000000000000E+000000000000000421");
+ return val;
+ }
+
+ static const mp_float& A000142_221(void)
+ {
+ static const mp_float val("+5.04733134237135762084795756190488753676497048811716543091973272263852120065268490938988617504014563751001149361332526286077110665632547548040315110878754505874456982699475767472500039595892005996126425448490209389678637744666331562691355653215226109875541179510893987621843531279933607711131294798775692545804100760607728095856304451643541415869135025497968899843088711680000000000000000000000000000000000000000000000000E+000000000000000423");
+ return val;
+ }
+
+ static const mp_float& A000142_222(void)
+ {
+ static const mp_float val("+1.12050755800644139182824657874288503316182344836201072566418066442575170654489604988455473085891233152722255158215820835509118567770425555664949954615083500304129450159283620378895008790288025331140066449564826484508657579315925606917480955013780196392370141851418465252049263944145260911871147445328203745168510368854915637280099588264866194322947975660549095765165693992960000000000000000000000000000000000000000000000E+000000000000000426");
+ return val;
+ }
+
+ static const mp_float& A000142_223(void)
+ {
+ static const mp_float val("+2.49873185435436430377698987059663362395086628984728391823112288166942630559511819124255704981537449930570629002821280463185334406128048989132838398791636205678208673855202473444935869602342296488442348182529563060454306401874514103425982529680729837954985416328663177512069858595443931833472658803081894351725778122546461871134622081830651613340173985723024483556319497604300800000000000000000000000000000000000000000000E+000000000000000428");
+ return val;
+ }
+
+ static const mp_float& A000142_224(void)
+ {
+ static const mp_float val("+5.59715935375377604046045731013645931764994048925791597683771525493951492453306474838332779158643887844478208966319668237535149069726829735657558013293265100719187429435653540516656347909246744134110859928866221255417646340198911591674200866484834837019167332576205517627036483253794407306978755718903443347865742994504074591341553463300659613881989728019574843166155674633633792000000000000000000000000000000000000000000E+000000000000000430");
+ return val;
+ }
+
+ static const mp_float& A000142_225(void)
+ {
+ static const mp_float val("+1.25936085459459960910360289478070334647123661008303109478848593236139085801993956838624875310694874765007597017421925353445408540688536690522950552990984647661817171623022046616247678279580517430174943483994899782468970426544755108126695194959087838329312649829646241466083208732103741644070220036753274753269792173763416783051849529242648413123447688804404339712385026792567603200000000000000000000000000000000000000000E+000000000000000433");
+ return val;
+ }
+
+ static const mp_float& A000142_226(void)
+ {
+ static const mp_float val("+2.84615553138379511657414254220438956302499473878765027422197820713674333912506342455292218202170416968917169259373551298786623301956092920581868249759625303715706807868029825352719752911851969392195372273828473508379873163991146544366331140607538514624246588615000505713348051734554456115598697283062400942389730312705321929697179936088385413658991776697953807749990160551202783232000000000000000000000000000000000000000E+000000000000000435");
+ return val;
+ }
+
+ static const mp_float& A000142_227(void)
+ {
+ static const mp_float val("+6.46077305624121491462330357080396430806673805704796612248389053020040737981389397373513335318926846519441974218777961448245634895440330929720840926954349439434654453860427703550673839109903970520283495061590634864022312082259902655711571689179112428197039756156051147969300077437438615382409042832551650139224687809841080780412598454920634889005911333104355143592477664451230317936640000000000000000000000000000000000000E+000000000000000437");
+ return val;
+ }
+
+ static const mp_float& A000142_228(void)
+ {
+ static const mp_float val("+1.47305625682299700053411321414330386223921627700693627592632704088569288259756782601161040452715321006432770121881375210200004756160395451976351731345591672191101215480177516409553635317058105278624636874042664748997087154755257805502238345132837633628925064403579661737000417655736004307189261765821776231743228820643766417934072447721904754693347783947792972739084907494880512489553920000000000000000000000000000000000E+000000000000000440");
+ return val;
+ }
+
+ static const mp_float& A000142_229(void)
+ {
+ static const mp_float val("+3.37329882812466313122311926038816584452780527434588407187128892362823670114843032156658782636718085104731043579108349231358010891607305585025845464781404929317621783449606512577877824876063061088050418441557702275203329584389540374600125810354198181010238397484197425377730956431635449863463409443731867570691993999274225097069025905283161888247766425240445907572504438163276373601078476800000000000000000000000000000000E+000000000000000442");
+ return val;
+ }
+
+ static const mp_float& A000142_230(void)
+ {
+ static const mp_float val("+7.75858730468672520181317429889278144241395213099553336530396452434494441264138973960315200064451595740881400231949203232123425050696802845559444568997231337430530101934094978929118997214945040502515962415582715232967658044095942861580289363814655816323548314213654078368781199792761534685965841720583295412591586198330717723258759582151272342969862778053025587416760207775535659282480496640000000000000000000000000000000E+000000000000000444");
+ return val;
+ }
+
+ static const mp_float& A000142_231(void)
+ {
+ static const mp_float val("+1.79223366738263352161884326304423251319762294225996820738521580512368215932016102984832811214888318616143603453580265946620511186710961457324231695438360438946452453546775940132626488356652304356081187317999607218815529008186162801025046843041185493570739660583354092103188457152127914512458109437454741240308656411814395794072773463476943911226038301730248910693271607996148737294252994723840000000000000000000000000000E+000000000000000447");
+ return val;
+ }
+
+ static const mp_float& A000142_232(void)
+ {
+ static const mp_float val("+4.15798210832770977015571637026261943061848522604312624113370066788694260962277358924812122018540899189453160012306216996159585953169430580992217533416996218355769692228520181107693452987433346106108354577759088747652027298991897698378108675855550345084116012553381493679397220592936761668902813894894999677516082875409398242248834435266509874044408860014177472808390130551065070522666947759308800000000000000000000000000E+000000000000000449");
+ return val;
+ }
+
+ static const mp_float& A000142_233(void)
+ {
+ static const mp_float val("+9.68809831240356376446281914271190327334107057668048414184152255617657628042106246294812244303200295111425862828673485601051835270884773253711866852861601188768943382892452021980925745460719696427232466166178676782029223606651121637220993214743432304045990309249378880272995523981542654688543556375105349248612473099703897904439784234170968006523472643833033511643549004183981614317813988279189504000000000000000000000000E+000000000000000451");
+ return val;
+ }
+
+ static const mp_float& A000142_234(void)
+ {
+ static const mp_float val("+2.26701500510243392088429967939458536596181051494323328919091627814531884961852861632986065166948869056073651901909595630646129453387036941368576843569614678171932751596833773143536624437808408963972397082885810366994838323956362463109712412249963159146761732364354657983880952611680981197119192191774651724175318705330712109638909510796006513526492598656929841724590466979051697750368473257330343936000000000000000000000E+000000000000000454");
+ return val;
+ }
+
+ static const mp_float& A000142_235(void)
+ {
+ static const mp_float val("+5.32748526199071971407810424657727561001025471011659822959865325364149929660354224837517253142329842281773081969487549732018404215459536812216155582388594493704041966252559366887311067428849761065335133144781654362437870061297451788307824168787413423994890071056233446262120238637450305813230101650670431551811998957527173457651437350370615306787257606843785128052787597400771489713365912154726308249600000000000000000000E+000000000000000456");
+ return val;
+ }
+
+ static const mp_float& A000142_236(void)
+ {
+ static const mp_float val("+1.25728652182980985252243260219223704396242011158751718218528216785939383399843597061654071741589842778498447344799061736756343394848450687683012717443708300514153904035604010585405411913208543611419091422168470429535337334466198622040646503833829568062794056769271093317860376318438272171922303989558221846227631753976412936005739214687465212401792795215133290220457872986582071572354355268515408746905600000000000000000E+000000000000000459");
+ return val;
+ }
+
+ static const mp_float& A000142_237(void)
+ {
+ static const mp_float val("+2.97976905673664935047816526719560179419093566446241572177911873782676338657629325036120150027567927385041320207173776316112533845790828129808740140341588672218544752564381505087410826234304248359063246670539274917998749482684890734236332214086176076308821914543172491163329091874698705047455860455252985775559487256924098658333601938809292553392248924659865897822485158978199509626479821986381518730166272000000000000000E+000000000000000461");
+ return val;
+ }
+
+ static const mp_float& A000142_238(void)
+ {
+ static const mp_float val("+7.09185035503322545413803333592553227017442688142054941783430259602769686005157793585965957065611667176398342093073587632347830552982170948944801534012981039880136511103227982108037766437644111094570527075883474304837023768790039947482470669525099061614996156612750528968723238661782918012944947883502106145831579671479354806833972614366116277073552440690480836817514678368114832911021976327588014577795727360000000000000E+000000000000000463");
+ return val;
+ }
+
+ static const mp_float& A000142_239(void)
+ {
+ static const mp_float val("+1.69495223485294088353898996728620221257168802465951131086239832045061954955232712667045863738681188455159203760244587444131131502162738856797807566629102468531352626153671487723821026178596942551602355971136150358856048680740819547448310490016498675725984081430447376423524854040166117405093842544157003368853747541483565798833319454833501790220579033325024919999386008129979445065734252342293535484093178839040000000000E+000000000000000466");
+ return val;
+ }
+
+ static const mp_float& A000142_240(void)
+ {
+ static const mp_float val("+4.06788536364705812049357592148688531017205125918282714606975596908148691892558510400910072972834852292382089024587009865914715605190573256314738159909845924475246302768811570537170462828632662123845654330726760861254516833777966913875945176039596821742361795433073703416459649696398681772225222105976808085248994099560557917199966691600404296529389679980059807998526419511950668157762205621504485161823629213696000000000E+000000000000000468");
+ return val;
+ }
+
+ static const mp_float& A000142_241(void)
+ {
+ static const mp_float val("+9.80360372638941007038951797078339359751464353463061342202811188548638347461066010066193275864531994024640834549254693776854464608509281547718518965382728677985343589672835884994580815417004715718468026937051493675623385569404900262441027874255428340399091926993707625233667755768320823071062785275404107485450075779940944580451919726756974354635829128751944137276448671023801110260206915547825809239994946405007360000000E+000000000000000470");
+ return val;
+ }
+
+ static const mp_float& A000142_242(void)
+ {
+ static const mp_float val("+2.37247210178623723703426334892958125059854373538060844813080307628770480085577974436018772759216742553963081960919635893998780435259246134547881589622620340072453148700826284168688557330915141203869262518766461469500859307795985863510728745569813658376580246332477245306547596895933639183197194036647794011478918338745708588469364573875187793821870649157970481220900578387759868682970073562573845836078777030011781120000E+000000000000000473");
+ return val;
+ }
+
+ static const mp_float& A000142_243(void)
+ {
+ static const mp_float val("+5.76510720734055648599325993789888243895446127697487852895785147537912266607954477879525617804896684406130289165034715222417036457679968106951352262782967426376061151343007870529913194314123793125402307920602501370887088117944245648331070851734647189855089998587919706094910660457118743215169181509054139447893771563152071869980555914516706338987145677453868269366788405482256480899617278757054445381671428182928628121600E+000000000000000475");
+ return val;
+ }
+
+ static const mp_float& A000142_244(void)
+ {
+ static const mp_float val("+1.40668615859109578258235542484732731510488855158187036106571575999250593052340892602604250744394790995095790556268470514269756895673912218096129952119044052035758920927693920409298819412646205522598163132627010334496449500778395938192781287823253914324641959655452408287158201151536973344501280288209210025286080261409105536275255643142076346712863545298743857725496370937670581339506616016721284673127828476634585261670E+000000000000000478");
+ return val;
+ }
+
+ static const mp_float& A000142_245(void)
+ {
+ static const mp_float val("+3.44638108854818466732677079087595192200697695137558238461100361198163952978235186876380414323767237937984686862857752759960904394401084934335518382691657927487609356272850105002782107560983203530365499674936175319516301276907070048572314155166972090095372801155858400303537592821265584694028136706112564561950896640452308563874376325698087049446515685981922451427466108797292924281791209240967147449163179767754733891092E+000000000000000480");
+ return val;
+ }
+
+ static const mp_float& A000142_246(void)
+ {
+ static const mp_float val("+8.47809747782853428162385614555484172813716330038393266614306888547483324326458559715895819236467405327442329682630071789503824810226668938465375221421478501619519016431211258306843984600018680684699129200342991286010101141191392319487892821710751341634617090843411664746702478340313338347309216297036908822399205735512679067130965761217294141638428587515529230511566627641340593733206374732779182724941422228676645372088E+000000000000000482");
+ return val;
+ }
+
+ static const mp_float& A000142_247(void)
+ {
+ static const mp_float val("+2.09409007702364796756109246795204590684987933519483136853733801471228381108635264249826267351407449115878255431609627732007444728125987227800947679691105189900021197058509180801790464196204614129120684912484718847644494981874273902913509526962555581383750421438322681192435512150057394571785376425368116479132603816671631729581348543020671652984691861116335719936356957027411126652101974558996458133060531290483131406906E+000000000000000485");
+ return val;
+ }
+
+ static const mp_float& A000142_248(void)
+ {
+ static const mp_float val("+5.19334339101864695955150932052107384898770075128318179397259827648646385149415455339569143031490473807378073470391876775378462925752448324946350245633940870952052568705102768388440351206587443040219298582962102742158347555048199279225503626867137841831701045167040249357240070132142338538027733534912928868248857465345646689361744386691265699402035815568512585442165253427979594097212896906311216169990117600398165889126E+000000000000000487");
+ return val;
+ }
+
+ static const mp_float& A000142_249(void)
+ {
+ static const mp_float val("+1.29314250436364309292832582080974738839793748706951226669917697084512949902204448379552716614841127978037140294127577317069237268512359632911641211162851276867061089607570589328721647450440273317014605347157563582797428541207001620527150403089917322616093560246593022089952777462903442295968905650193319288193965508871066025651074352286125159151106918076559633775099148103566918930206011329671492826327539282499143306392E+000000000000000490");
+ return val;
+ }
+
+ static const mp_float& A000142_250(void)
+ {
+ static const mp_float val("+3.23285626090910773232081455202436847099484371767378066674794242711282374755511120948881791537102819945092850735318943292673093171280899082279103027907128192167652724018926473321804118626100683292536513367893908956993571353017504051317876007724793306540233900616482555224881943657258605739922264125483298220484913772177665064127685880715312897877767295191399084437747870258917297325515028324178732065818848206247858265981E+000000000000000492");
+ return val;
+ }
+
+ static const mp_float& A000142_251(void)
+ {
+ static const mp_float val("+8.11446921488186040812524452558116486219705773136118947353733549205318760636332913581693296758128078062183055345650547664609463859915056696520548600046891762340808337287505448037728337751512715064266648553413711482053864096073935168807868779389231199415987090547371213614453678579719100407204882954963078533417133568165939310960491560595435373673195910930411701938747154349882416287042721093688617485205308997682124247612E+000000000000000494");
+ return val;
+ }
+
+ static const mp_float& A000142_252(void)
+ {
+ static const mp_float val("+2.04484624215022882284756162044645354527365854830301974733140854399740327680355894222586710783048275671670129947103938011481584892698594287523178247211816724109883700996451372905507541113381204196195195435460255293477573752210631662539582932406086262252828746817937545830842327002089213302615630504650695790421117659177816706362043873270049714165645369554463748888564282896170368904334765715609531606271737867415895310398E+000000000000000497");
+ return val;
+ }
+
+ static const mp_float& A000142_253(void)
+ {
+ static const mp_float val("+5.17346099264007892180433089972952746954235612720663996074846361631343029031300412383144378281112137449325428766172963169048409778527443547433640965445896311998005763521021973450934079016854446616373844451714445892498261593092898106225144818987398243499656729449381990952031087315285709655617545176766260349765427677719876267095970999373225776839082784972793284688067635727311033327966957260492114963867496804562215135308E+000000000000000499");
+ return val;
+ }
+
+ static const mp_float& A000142_254(void)
+ {
+ static const mp_float val("+1.31405909213058004613830004853129997726375845631048655003010975854361129373950304745318672083402482912128658906607932644938296083745970661048144805223257663247493463934339581256537256070281029440558956490735469256694558444645596118981186784022799153848912809280143025701815896178082570252526856474898630128840418630140848571842376633840799347317127027383089494310769179474737002465303607144164997200822344188358802644368E+000000000000000502");
+ return val;
+ }
+
+ static const mp_float& A000142_255(void)
+ {
+ static const mp_float val("+3.35085068493297911765266512375481494202258406359174070257677988428620879903573277100562613812676331425928080211850228244592655013552225185672769253319307041281108333032565932204170002979216625073425339051375446604571124033846270103402026299258137842314727663664364715539630535254110554143943484010991506828543067506859163858198060416294038335658673919826878210492461407660579356286524198217620742862096977680314946743139E+000000000000000504");
+ return val;
+ }
+
+ static const mp_float& A000142_256(void)
+ {
+ static const mp_float val("+8.57817775342842654119082271681232625157781520279485619859655650377269452553147589377440291360451408450375885342336584306157196834693696475322289288497426025679637332563368786442675207626794560187968867971521143307702077526646451464709187326100832876325702818980773671781454170250523018608495319068138257481070252817559459476987034665712738139286205234756808218860701203611083152093501947437109101726968262861606263662435E+000000000000000506");
+ return val;
+ }
+
+ static const mp_float& A000142_257(void)
+ {
+ static const mp_float val("+2.20459168263110562108604143822076784665549850711827804303931502146958249306158930470002154879636011971746602532980502166682399586516279994157828347143838488599666794468785778115767528360086201968307999068680933830079433924348138026430261142807914049215705624478058833647833721754384415782383297000511532172635054974112781085585667909088173701796554745332499712247200209328048370088030000491337039143830843555432809761246E+000000000000000509");
+ return val;
+ }
+
+ static const mp_float& A000142_258(void)
+ {
+ static const mp_float val("+5.68784654118825250240198691060958104437118614836515735104143275539152283209890040612605559589460910887106234535089695590040590933212002384927197135631103300587140329729467307538680223169022401078234637597196809281604939524818196108190073748444418246976520511153391790811411002126311792718548906261319753005398441833210975200811023205447488150635111242957849257597776540066364794827117401267649560991083576373016649184014E+000000000000000511");
+ return val;
+ }
+
+ static const mp_float& A000142_259(void)
+ {
+ static const mp_float val("+1.47315225416775739812211460984788149049213721242657575391973108364640441351361520518664839933670375919760514744588231157820513051701908617696144058128455754852069345399932032652518177800776801879262771137673973603935679336927912792021229100847104325966918812388728473820155449550714754314104166721681816028398196434801642577010055010210899431014493811926082957717824123877188481860223406928321236296690646280611312138660E+000000000000000514");
+ return val;
+ }
+
+ static const mp_float& A000142_260(void)
+ {
+ static const mp_float val("+3.83019586083616923511749798560449187527955675230909696019130081748065147513539953348528583827542977391377338335929401010333333934424962406009974551133984962615380298039823284896547262282019684886083204957952331370232766276012573259255195662202471247513988912210694031932404168831858361216670833476372721673835310730484270700226143026548338520637683911007815690066342722080690052836580858013635214371395680329589411560515E+000000000000000516");
+ return val;
+ }
+
+ static const mp_float& A000142_261(void)
+ {
+ static const mp_float val("+9.99681119678240170365666974242772379447964312352674306609929513362450035010339278239659603789887170991494853056775736636970001568849151879686033578459700752426142577883938773579988354556071377552677164940255584876307519980392816206656060678348449956011511060869911423343574880651150322775510875373332803568710161006563946527590233299291163538864355007730398951073154504630601037903476039415587909509342725660228364172945E+000000000000000518");
+ return val;
+ }
+
+ static const mp_float& A000142_262(void)
+ {
+ static const mp_float val("+2.61916453355698924635804747251606363415366649836400668331801532500961909172708890898790816192950438799771651500875242998886140411038477792477740797556441597135649355405591958677956948893690700918801417214346963237592570234862917846143887897727293888475015897947916792916016618730601384567183849347813194535002062183719753990228641124414284847182461012025364525181166480213217471930710722326884032291447794122979831413311E+000000000000000521");
+ return val;
+ }
+
+ static const mp_float& A000142_263(void)
+ {
+ static const mp_float val("+6.88840272325488171792166485271724735782414289069733757712638030477529821124224383063819846587459654043399443447301889087070549281031196594216458297573441400466757804716706851323026775590406543416447727273732513314868459717689473935358425171022782926689291811603021165369123707261481641411693523784748701627055423543182952994301326157209569148089872461626708701226467842960761951177769199719705004926507698543436956617009E+000000000000000523");
+ return val;
+ }
+
+ static const mp_float& A000142_264(void)
+ {
+ static const mp_float val("+1.81853831893928877353131952111735330246557372314409712036136440046067872776795237128848439499089348667457453070087698718986625010192235900873144990559388529723224060445210608749279068755867327461942200000265383515125273365470021118934624245150014692645973038263197587657448658717031153332687090279173657229542631815400299590495550105503326255095726329869451097123787510541641155110931068726002121300598032415467356546890E+000000000000000526");
+ return val;
+ }
+
+ static const mp_float& A000142_265(void)
+ {
+ static const mp_float val("+4.81912654518911524985799673096098625153377036633185736895761566122079862858507378391448364672586773968762250635732401605314556277009425137313834224982379603766543760179808113185589532203048417774146830000703266315081974418495555965176754249647538935511828551397473607292238945600132556331620789239810191658287974310810793914813207779583814576003674774154045407378036902935349061043967332123905621446584785900988494849260E+000000000000000528");
+ return val;
+ }
+
+ static const mp_float& A000142_266(void)
+ {
+ static const mp_float val("+1.28188766102030465646222713043562234290798291744427406014272576588473243520362962652125265002908081875690758669104818827013671969684507086525479903845312974601900640207828958107366815566010879127923056780187068839811805195319817886737016630406245356846146394671727979539735559529635259984211129937789510981104601166675671181340313269369294677216977489924976078362557816180802850237695310344958895304791553049662939629903E+000000000000000531");
+ return val;
+ }
+
+ static const mp_float& A000142_267(void)
+ {
+ static const mp_float val("+3.42264005492421343275414643826311165556431438957621174058107779491223560199369110281174457557764578608094325646509866268126504159057633921023031343266985642187074709354903318146669397561249047271554561603099473802297519871503913757587834403184675102779210873773513705371093943944126144157843716933897994319549285115024042054178636429216016788169329898099686129228029369202743610134646478621040250463793446642600048811841E+000000000000000533");
+ return val;
+ }
+
+ static const mp_float& A000142_268(void)
+ {
+ static const mp_float val("+9.17267534719689199978111245454513923691236256406424746475728849036479141334309215553547546254809070669692792732646441598579031146274458908341723999955521521061360221071140892633073985464147446687766225096306589790157353255630488870335396200534929275448285141713016730394531769770258066343021161382846624776392084108264432705198745630298924992293804126907158826331118709463352875160852562704387871242966437002168130815734E+000000000000000535");
+ return val;
+ }
+
+ static const mp_float& A000142_269(void)
+ {
+ static const mp_float val("+2.46744966839596394794111925027264245472942552973328256801971060390812889018929178983904289942543640010147361245081892790017759378347829446343923755988035289165505899468136900118296902089855663159009114550906472653552328025764601506120221577943895975095588703120801500476129046068199419846272692411985742064849470625123132397698462574550410822927033310138025724283070932845641923418269339367480337364357971553583227189433E+000000000000000538");
+ return val;
+ }
+
+ static const mp_float& A000142_270(void)
+ {
+ static const mp_float val("+6.66211410466910265944102197573613462776944893027986293365321863055194800351108783256541582844867828027397875361721110533047950321539139505128594141167695280746865928563969630319401635642610290529324609287447476164591285669564424066524598260448519132758089498426164051285548424384138433584936269512361503575093570687832457473785848951286109221902989937372669455564291518683233193229327216292196910883766523194674713411468E+000000000000000540");
+ return val;
+ }
+
+ static const mp_float& A000142_271(void)
+ {
+ static const mp_float val("+1.80543292236532682070851695542449248412552066010584285502002224887957790895150480262522768950959181395424824223026420954455994537137106805889849012256445421082400666640835769816557843259147388733446969116898266040604238416451958922028166128581548684977442254073490457898383623008101515501517729037849967468850357656402595975395965065798535599135710273027993422457923001563156195365147675615185362849500727785756847334508E+000000000000000543");
+ return val;
+ }
+
+ static const mp_float& A000142_272(void)
+ {
+ static const mp_float val("+4.91077754883368895232716611875461955682141619548789256565446051695245191234809306314061931546608973395555521886631864996120305141012930512020389313337531545344129813263073293901037333664880897354975755997963283630443528492749328267916611869741812423138642931079894045483603454582036122164128222982951911515272972825415061053077024978972016829649131942636142109085550564251784851393201677673304186950641979577258624749861E+000000000000000545");
+ return val;
+ }
+
+ static const mp_float& A000142_273(void)
+ {
+ static const mp_float val("+1.34064227083159708398531635042001113901224662136819467042366772112801937207102940623738907312224249736986657475050499143940843303496530029781566282541146111878947439020819009234983192090512484977908381387443976431111083278520566617141235040439514791516849520184811074417023743100895861350807004874345871843669521581338311667490027819259360594494213020339666795780355304040737264430344058004812043037525260424591604556712E+000000000000000548");
+ return val;
+ }
+
+ static const mp_float& A000142_274(void)
+ {
+ static const mp_float val("+3.67335982207857601011976680015083052089355574254885339696084955589077307947462057309044606035494444279343441481638367654397910651580492281601491614162740346548315982917044085303853946328004208839468965001596495421244368183146352530966984010804270528756167685306382343902645056096454660101211193355707688851654489132866973968922676224770648028914143675730687020438173533071620104539142718933184997922819213563380996485391E+000000000000000550");
+ return val;
+ }
+
+ static const mp_float& A000142_275(void)
+ {
+ static const mp_float val("+1.01017395107160840278293587004147839324572782920093468416423362786996259685552065759987266659760972176819446407450551104959425429184635377440410193894753595300786895302187123458559835240201157430853965375439036240842201250365246946015920602971174395407946113459255144573227390426525031527833078172819614434204984511538417841453735961811928207951389510825938930620497721594695528748264247706625874428775283729929774033483E+000000000000000553");
+ return val;
+ }
+
+ static const mp_float& A000142_276(void)
+ {
+ static const mp_float val("+2.78808010495763919168090300131448036535820880859457972829328481292109676732123701497564855980940283208021672084563521049688014184549593641735532135149519923030171831034036460745625145262955194509156944436211740024724475451008081571003940864200441331325931273147544199022107597577209087016819295756982135838405757251846033242412311254600921853945835049879591448512573711601359659345209323670287413423419783094606176332412E+000000000000000555");
+ return val;
+ }
+
+ static const mp_float& A000142_277(void)
+ {
+ static const mp_float val("+7.72298189073266056095610131364111061204223839980698584737239893179143804547982653148254651067204584486220031674240953307635799291202374387607424014364170186793575971964280996265381652378385888790364736088306519868486796999292385951680916193835222487772829626618697431291238045288869171036589449246840516272383947587613512081482102175244553535429963088166468312379829181135766256386229826566696135182872799172059108440781E+000000000000000557");
+ return val;
+ }
+
+ static const mp_float& A000142_278(void)
+ {
+ static const mp_float val("+2.14698896562367963594579616519222875014774227514634206556952690303801977664339177575214792996682874487169168805438985019522752202954260079754863875993239311928614120206070116961776099361191277083721396632549212523439329565803283294567294701886191851600846636199997885898964176590305629548171866890621663523722737429356556358652024404717985882849529738510278190841592512355743019275371891785541525580838638169832432146537E+000000000000000560");
+ return val;
+ }
+
+ static const mp_float& A000142_279(void)
+ {
+ static const mp_float val("+5.99009921409006618428877130088631821291220094765829436293898005947607517683506305434849272460745219819201980967174768204468478646242385622516070214021137680280833395374935626323355317217723663063582696604812302940395729488591160391842752218262475265966362114997994101658110052686952706439399508624834441231186437427904792240639148089163180613150187970443676152448043109472523023778287578081660856370539800493832485688838E+000000000000000562");
+ return val;
+ }
+
+ static const mp_float& A000142_280(void)
+ {
+ static const mp_float val("+1.67722777994521853160085596424816909961541626534432242162291441665330104951381765521757796289008661549376554670808935097251174020947867974304499659925918550478633350704981975370539488820962625657803155049347444823310804256805524909715970621113493074470581392199438348464270814752346757803031862414953643544732202479813341827378961464965690571682052631724229322685452070652306446657920521862865039783751144138273095992875E+000000000000000565");
+ return val;
+ }
+
+ static const mp_float& A000142_281(void)
+ {
+ static const mp_float val("+4.71301006164606407379840525953735516991931970561754600476038951079577594913382761116139407572114338953748118624973107623275798998863509007795644044391831126844959715480999350791215963586904978098426865688666319953503359961623524996301877445328915539262333712080421759184600989454094389426519533386019738360697488968275490534934881716553590506426567895145084396746120318532981115108756666434650761792340715028547399739978E+000000000000000567");
+ return val;
+ }
+
+ static const mp_float& A000142_282(void)
+ {
+ static const mp_float val("+1.32906883738419006881115028318953415791724815698414797334242984204440881765573938634751312935336243584956969452242416349763775317679509540198371620518496377770278639765641816923122901731507203823756376124203902226887947509177834048957129439582754182071978106806678936090057479026054617818278508414857566217716691889053688330851636644068112522812292146430913799882405929826300674460669379934571514825440081638050366726674E+000000000000000570");
+ return val;
+ }
+
+ static const mp_float& A000142_283(void)
+ {
+ static const mp_float val("+3.76126480979725789473555530142638166690581228426513876455907645298567695396574246336346215607001569345428223549846038269831484149033011998761391686067344749089888550536766341892437811900165386821230544431497043302092891450973270358548676314019194335263698042262901389134862665643734568425728178814046912396138238046021937976310131702712758439558786774399486053667208781408430908723694345214837386955995431035682537836487E+000000000000000572");
+ return val;
+ }
+
+ static const mp_float& A000142_284(void)
+ {
+ static const mp_float val("+1.06819920598242124210489770560509239340125068873129940913477771264793225492627085959522325232388445694101615488156274868632141498325375407648235238843125908741528348352441641097452338579646969857229474618545160297794381172076408781827824073181451191214890244002663994514300997042820617432906802783189323120503259605070230385272077403570423396834695443929454039241487293919994378077529194041013817895502702414133840745562E+000000000000000575");
+ return val;
+ }
+
+ static const mp_float& A000142_285(void)
+ {
+ static const mp_float val("+3.04436773704990053999895846097451332119356446288420331603411648104660692653987194984638626912307070228189604141245383375601603270227319911797470430702908839913355792804458677127739164951993864093104002662853706848713986340417765028209298608567135894962437195407592384365757841572038759683784387932089570893434289874450156598025420600175706680978882015198944011838238787671983977520958203016889381002182701880281446124853E+000000000000000577");
+ return val;
+ }
+
+ static const mp_float& A000142_286(void)
+ {
+ static const mp_float val("+8.70689172796271554439702119838710809861359436384882148385757313579329580990403377656066472969198220852622267843961796454220585352850134947740765431810319282152197567420751816585334011762702451306277447615761601587322000933594807980678594020502008659592570378865714219286067426896030852695623349485776172755222069040927447870352702916502521107599602563468979873857362932741874175709940460628303629666242527377604935917078E+000000000000000579");
+ return val;
+ }
+
+ static const mp_float& A000142_287(void)
+ {
+ static const mp_float val("+2.49887792592529936124194508393710002430210158242461176586712348997267589744245769387291077742159889384702590871217035582361307996267988730001599678929561633977680701849755771359990861375895603524901627465723579655561414267941709890454756483884076485303067698734459980935101351519160854723643901302417761580748733814746177538791225737036223557881085935715597223797063161696917888428752912200323141714211605357372616608201E+000000000000000582");
+ return val;
+ }
+
+ static const mp_float& A000142_288(void)
+ {
+ static const mp_float val("+7.19676842666486216037680184173884806999005255738288188569731565112130658463427815835398303897420481427943461709105062477200567029251807542404607075317137505855720421327296621516773680762579338151716687101283909408016873091672124484509698673586140277672834972355244745093091892375183261604094435750963153352556353386468991311718730122664323846697527494860920004535541905687123518674808387136930648136929423429233135831620E+000000000000000584");
+ return val;
+ }
+
+ static const mp_float& A000142_289(void)
+ {
+ static const mp_float val("+2.07986607530614516434889573226252709222712518908365286496652422317405760295930638776430109826354519132675660433931363055910963871453772379754931444766652739192303201763588723618347593740385428725846122572271049818916876323493243976023302916666394540247449307010665731331903556896427962603583291932028351318888786128689538489086713005449989591695585446014805881310771610743578696897019623882572957311572603371048376255338E+000000000000000587");
+ return val;
+ }
+
+ static const mp_float& A000142_290(void)
+ {
+ static const mp_float val("+6.03161161838782097661179762356132856745866304834259330840292024720476704858198852451647318496428105484759415258400952862141795227215939901289301189823292943657679285114407298493208021847117743304953755459586044474858941338130407530467578458332544166717602990330930620862520314999641091550391546602882218824777479773199661618351467715804969815917197793442937055801237671156378221001356909259461576203560549776040291140481E+000000000000000589");
+ return val;
+ }
+
+ static const mp_float& A000142_291(void)
+ {
+ static const mp_float val("+1.75519898095085590419403310845634661313047094706769465274524979193658721113735866063429369682460578696064989840194677282883262411119838511275186646238578246604384671968292523861523534357511263301741542838739538942183951929395948591366065331374770352514822470186300810670993411664895557641163940061438725678010246614001101530940277105299246216431904557891894683238160162306506062311394860594503318675236119984827724721880E+000000000000000592");
+ return val;
+ }
+
+ static const mp_float& A000142_292(void)
+ {
+ static const mp_float val("+5.12518102437649924024657667669253211034097516543766838601612939245483465652108728905213759472784889792509770333368457666019126240469928452923545007016648480084803242147414169675648720323932888841085305089119453711177139633836169886788910767614329429343281612943998367159300762061495028312198704979401078979789920112883216470345609147473798951981161309044332475055427673934997701949272992935949690531689470355696956187889E+000000000000000594");
+ return val;
+ }
+
+ static const mp_float& A000142_293(void)
+ {
+ static const mp_float val("+1.50167804014231427739224696627091190832990572347323683710272591198926655436067857569227631525525972709205362707676958096143603988457689036706598687055878004664847349949192351714965075054912336430437994391111999937374901912713997776829150854910998522797581512592591521577675123284018043295474220558964516141078446593074782425811263480209823092930480263549989415191240308462954326671136986930233259325785014814219208163052E+000000000000000597");
+ return val;
+ }
+
+ static const mp_float& A000142_294(void)
+ {
+ static const mp_float val("+4.41493343801840397553320608083648101048992282701131630108201418124844366982039501253529236685046359765063766360570256802662195726065605767917400139944281333714651208850625514041997320661442269105487703509869279815882211623379153463877703513438335657024889647022219073438364862455013047288694208443355677454770632983639860331885114631816879893215611974836968880662246506881085720413142741574885782417807943553804471999372E+000000000000000599");
+ return val;
+ }
+
+ static const mp_float& A000142_295(void)
+ {
+ static const mp_float val("+1.30240536421542917278229579384676189809452723396833830881919418346829088259701652869791124822088676130693811076368225756785347739189353701535633041283562993445822106610934526642389209595125469386118872535411437545685252428896850271843922536464309018822342445871554626664317634424228848950164791490789924849157336730173758797906108816385979568498605532576905819795362719529920287521877108764591305813253343348372319239815E+000000000000000602");
+ return val;
+ }
+
+ static const mp_float& A000142_296(void)
+ {
+ static const mp_float val("+3.85511987807767035143559554978641521835980061254628139410481478306614101248716892494581729473382481346853680786049948240084629308000486956545473802199346460599633435568366198861472060401571389382911862704817855135228347189534676804658010707934354695714133639779801694926380197895717392892487782812738177553505716721314326041802082096502499522755872376427641226594273649808564051064756241943190265207229896311182064949851E+000000000000000604");
+ return val;
+ }
+
+ static const mp_float& A000142_297(void)
+ {
+ static const mp_float val("+1.14497060378906809437637187828656531985286078192624557404912999057064388070868917070890773653594596960015543193456834627305134904476144626094005719253205898798091130363804761061857201939266702646724823223330902975162819115291799010983429180256503344627097691014601103393134918775028065689068871495383238733391197866230354834415218382661242358258494095799009444298499273993143523166232603857127508766547279204421073290106E+000000000000000607");
+ return val;
+ }
+
+ static const mp_float& A000142_298(void)
+ {
+ static const mp_float val("+3.41201239929142292124158819729396465316152513014021181066640737190051876451189372871254505487711898940846318716501367189369302015338910985760137043374553578418311568484138187964334461779014773887239973205526090865985200963569561052730618957164379966988751119223511288111542057949583635753425237056242051425505769641366457406557350780330502227610312405481048144009527836499567699035373159494239976124310892029174798404515E+000000000000000609");
+ return val;
+ }
+
+ static const mp_float& A000142_299(void)
+ {
+ static const mp_float val("+1.02019170738813545345123487099089543129529601391192333138925580419825511058905622488505097140825857783313049296233908789621421302586334384742280975968991519947075158976757318201336004071925417392284751988452301168929575088107298754766455068192149610129636584647829875145351075326925507090274145879816373376226225122768570764560647883318820166055483409238833395058848823113370742011576574688777752861168956716723264722950E+000000000000000612");
+ return val;
+ }
+
+ static const mp_float& A000142_300(void)
+ {
+ static const mp_float val("+3.06057512216440636035370461297268629388588804173576999416776741259476533176716867465515291422477573349939147888701726368864263907759003154226842927906974559841225476930271954604008012215776252176854255965356903506788725264321896264299365204576448830388909753943489625436053225980776521270822437639449120128678675368305712293681943649956460498166450227716500185176546469340112226034729724066333258583506870150169794168850E+000000000000000614");
+ return val;
+ }
+
+ static const mp_float& A000142_301(void)
+ {
+ static const mp_float val("+9.21233111771486314466465088504778574459652300562466768244497991191024364861917771071201027181657495783316835144992196370281434362354599494222797212999993425122088685560118583358064116769486519052331310455724279555434063045608907755541089265775110979470618359369903772562520210202137329025175537294741851587322812858600194003982650386368946099481015185426665557381404872713737800364536469439663108336355679152011080448240E+000000000000000616");
+ return val;
+ }
+
+ static const mp_float& A000142_302(void)
+ {
+ static const mp_float val("+2.78212399754988866968872456728443129486814994769864964009838393339689358188299166863502710208860563726561684213787643303824993177431089047255284758325998014386870783039155812174135363264384928753804055757628732425741087039773890142173408958264083515800126744529710939313881103481045473365603012263012039179371489483297258589202760416683421722043266585998852998329184271559548815710090013770778258717579415103907346295368E+000000000000000619");
+ return val;
+ }
+
+ static const mp_float& A000142_303(void)
+ {
+ static const mp_float val("+8.42983571257616266915683543887182682345049434152690840949810331819258755310546475596413211932847508091481903167776559210589729327616199813183512817727773983592218472608642110887630150691086334124026288945615059249995493730514887130785429143540173052874384035925024146121059743547567784297777127156926478713495613134390693525284364062550767817791097755576524584937428342825432911601572741725458123914265627764839259274966E+000000000000000621");
+ return val;
+ }
+
+ static const mp_float& A000142_304(void)
+ {
+ static const mp_float val("+2.56267005662315345142367797341703535432895027982418015648742340873054661614406128581309616427585642459810498563004074000019277715595324743207787896589243291012034415673027201709839565810090245573703991839466978011998630094076525687758770459636212608073812746921207340420802162038460606426524246655705649528902666392854770831686446675015433416608493717695263473820978216218931605126878113484539269669936750840511134819590E+000000000000000624");
+ return val;
+ }
+
+ static const mp_float& A000142_305(void)
+ {
+ static const mp_float val("+7.81614367270061802684221781892195783070329835346374947728664139662816717923938692172994330104136209502422020617162425700058797032565740466783753084597192037586704967802732965215010675720775248999797175110374282936595821786933403347664249901890448454625128878109682388283446594217304849600898952299902231063153132498207051036643662358797071920655905838970553595153983559467741395636978246127844772493307090063558961199749E+000000000000000626");
+ return val;
+ }
+
+ static const mp_float& A000142_306(void)
+ {
+ static const mp_float val("+2.39173996384638911621371865259011909619520929615990734004971226736821915684725239804936265011865680107741138308851702264217991891965116582835828443886740763501531720147636287355793266770557226193937935583774530578598321466801621424385260469978477227115289436701562810814734657830495283977875079403770082705324858544451357617212960681791904007720707186724989400117118969197128867064915343315120500382951969559449042127123E+000000000000000629");
+ return val;
+ }
+
+ static const mp_float& A000142_307(void)
+ {
+ static const mp_float val("+7.34264168900841458677611626345166562531929253921091553395261666082043281152106486201154333586427637930765294608174725951149235108332907909305993322732294143949702380853243402182285328985610684415389462242187808876296846903080977772862749642833925087243938570673797829201235399539620521812076493769574153905347315731465667884843789293101145303702571063245717458359555235435185621889290103977419936175662546547508559330268E+000000000000000631");
+ return val;
+ }
+
+ static const mp_float& A000142_308(void)
+ {
+ static const mp_float val("+2.26153364021459169272704380914311301259834210207696198445740593153269330594848797749955534744619712482675710739317815592953964413366535636066245943401546596336508333302798967872143881327568090799939954370593845133899428846148941154041726889992848926871133079767529731393980503058203120718119560081028839402846973245291425708531887102275152753540391887479680977174743012514037171541901352025045340342104064336632636273722E+000000000000000634");
+ return val;
+ }
+
+ static const mp_float& A000142_309(void)
+ {
+ static const mp_float val("+6.98813894826308833052656537025221920892887709541781253197338432843602231538082785047362602360874911571467946184492050182227750037302595115444699965110778982679810749905648810724924593302185400571814459005134981463749235134600228165988936090077903184031801216481666870007399754449847643018989440650379113754797147327950505439363531146030222008439810932312214219469955908668374860064475177757390101657101558800194846085802E+000000000000000636");
+ return val;
+ }
+
+ static const mp_float& A000142_310(void)
+ {
+ static const mp_float val("+2.16632307396155738246323526477818795476795189957952188491174914181516691776805663364682406731871222587155063317192535556490602511563804485787856989184341484630741332470751131324726623923677474177262482291591844253762262891726070731456570187924149987049858377109316729702293923879452769335886726601617525263987115671664656686202694655269368822616341389016786408035686331687196206619987305104790931513701483228060402286599E+000000000000000639");
+ return val;
+ }
+
+ static const mp_float& A000142_311(void)
+ {
+ static const mp_float val("+6.73726476002044345946066167346016453932833040769231306207553983104516911425865613064162284936119502246052246916468785580685773810963431950800235236363302017201605543984036018419899800402636944691286319926850635629200637593268079974829933284444106459725059552809975029374134103265098112634607719731030503570999929738877082294090380377887737038336821719842205728990984491547180202588160518875899797007611612839267851111322E+000000000000000641");
+ return val;
+ }
+
+ static const mp_float& A000142_312(void)
+ {
+ static const mp_float val("+2.10202660512637835935172644211957133627043908720000167536756842728609276364870071276018632900069284700768301037938261101173961429020590768649673393745350229366900929723019237747008737725622726743681331817177398316310598929099640952146939184746561215434218580476712209164729840218710611141997608556081517114151978078529649675756198677900973955961088376590768187445187161362720223207506081889280736666374823205851569546733E+000000000000000644");
+ return val;
+ }
+
+ static const mp_float& A000142_313(void)
+ {
+ static const mp_float val("+6.57934327404556426477090376383425828252647434293600524390048917740547035022043323093938320977216861113404782248746757246674499272834449105873477722422946217918399910033050214148137349081199134707722568587765256730052174648081876180219919648256736604309104156892109214685604399884564212874452514780535148567295691385797803485116901861830048482158206618729104426703435815065314298639494036313448705765753196634315412681273E+000000000000000646");
+ return val;
+ }
+
+ static const mp_float& A000142_314(void)
+ {
+ static const mp_float val("+2.06591378805030717913806378184395710071331294368190564658475360170531768996921603451496632786846094389609101626106481775455792771670017019244272004840805112426377571750377767242515127611496528298224886536558290613236382839497709120589054769552615293753058705264122293411279781563753162842578089641088036650130847095140510294326707184614635223397676878280938789984878845930508689772801127402422893610446503743175039581920E+000000000000000649");
+ return val;
+ }
+
+ static const mp_float& A000142_315(void)
+ {
+ static const mp_float val("+6.50762843235846761428490091280846486724693577259800278674197384537175072340303050872214393278565197327268670122235417592685747230760553610619456815248536104143089351013689966813922651976214064139408392590158615431694605944417783729855522524090738175322134921581985224245531311925822462954120982369427315447912168349692607427129127631536100953702682166584957188452368364681102372784323551317632114872906486791001374683047E+000000000000000651");
+ return val;
+ }
+
+ static const mp_float& A000142_316(void)
+ {
+ static const mp_float val("+2.05641058462527576611402868844747489805003170414096888061046373513747322859535764075619748276026602355416899758626391959288696124920334940955748353618537408909216234920326029513199558024483644268053052058490122476415495478436019658634345117612673263401794635219907330861587894568559898293502230428739031681540245198502863946972804331565407901370047564640846471550948403239228349799846242216371748299838449825956434399843E+000000000000000654");
+ return val;
+ }
+
+ static const mp_float& A000142_317(void)
+ {
+ static const mp_float val("+6.51882155326212417858147094237849542681860050212687135153517004038579013464728372119714602035004329466671572234845662510945166715997461762829722280970763586242215464697433513556842598937613152329728175025413688250237120666642182317870874022832174244983688993647106238831233625782334877590402070459102730430482577279254078711903789731062343047343050779911483314816506438268353868865512587825898442110487885948281897047502E+000000000000000656");
+ return val;
+ }
+
+ static const mp_float& A000142_318(void)
+ {
+ static const mp_float val("+2.07298525393735548878890775967636154572831495967634508978818407284268126281783622334069243447131376770401559970680920678480563015687192840579851685348702820425024517773783857311075946462160982440853559658081552863575404371992213977082937939260631409904813099979779783948332292998782491073747858405994668276893459574802797030385405134477825089055090148011851694111649047369336530299233002928635704591135147731553643261106E+000000000000000659");
+ return val;
+ }
+
+ static const mp_float& A000142_319(void)
+ {
+ static const mp_float val("+6.61282296006016400923661575336759333087332472136754083642430719236815322838889755245680886596349091897580976306472136964352996020042145161449726876262361997155828211698370504822332269214293533986322855309280153634805539946655162586894572026241414197596353788935497510795180014666116146525255668315122991803290136043620922526929442378984262034085737572157806904216160461108183531654553279342347897645721121263656122002927E+000000000000000661");
+ return val;
+ }
+
+ static const mp_float& A000142_320(void)
+ {
+ static const mp_float val("+2.11610334721925248295571704107762986587946391083761306765577830155780903308444721678617883710831709407225912418071083828592958726413486451663912600403955839089865027743478561543146326148573930875623313698969649163137772782929652027806263048397252543230833212459359203454457604693157166888081813860839357377052843533958695208617421561274963850907436023090498209349171347554618730129457049389551327246630758804369959040937E+000000000000000664");
+ return val;
+ }
+
+ static const mp_float& A000142_321(void)
+ {
+ static const mp_float val("+6.79269174457380047028785170185919186947307915378873794717504834800056699620107556588363406711769787197195178862008179089783397511787291509841159447296698243478466739056566182553499706936922318110750836973692573813672250633204183009258104385355180663770974611994543043088808911065034505710742622493294337180339627744007411619661923211692633961412869634120499252010840025650326123715557128540459760461684735762027568521406E+000000000000000666");
+ return val;
+ }
+
+ static const mp_float& A000142_322(void)
+ {
+ static const mp_float val("+2.18724674175276375143268824799865978197033148751997361899036556805618257277674633221453016961189871477496847593566633666910253998795507866168853342029536834400066289976214310782226905633688986431661769505529008768002464703891746928981109612084368173734253825062242859874596469362941110838859124442840776572069360133570386541531139274165028135574944022186800759147490488259405011836409395390028042868662484915372877063893E+000000000000000669");
+ return val;
+ }
+
+ static const mp_float& A000142_323(void)
+ {
+ static const mp_float val("+7.06480697586142691712758304103567109576417070468951478933888078482146971006889065305293244784643284872314817727220226744120120416109490407725396294755403975112214116623172223826592905196815426174267515502858698320647960993570342580608984047032509201161639854951044437394946596042299788009514971950375708327784033231432348529145579855553040877907069191663366452046394277077878188231602347109790578465779826276654392916374E+000000000000000671");
+ return val;
+ }
+
+ static const mp_float& A000142_324(void)
+ {
+ static const mp_float val("+2.28899746017910232114933690529555743502759130831940279174579737428215618606232057158915011310224424298630000943619353465094919014819474892103028399500750887936357373785907800519816101283768198080462675022926218255889939361916790996117310831238532981176371313004138397715962697117705131315082850911921729498202026766984080923443167873199185244441890418098930730463031745773232532987039160463572147422912663713636023304905E+000000000000000674");
+ return val;
+ }
+
+ static const mp_float& A000142_325(void)
+ {
+ static const mp_float val("+7.43924174558208254373534494221056166383967175203805907317384146641700760470254185766473786758229378970547503066762898761558486798163293399334842298377440385793161464804200351689402329172246643761503693824510209331642302926229570737381260201525232188823206767263449792576878765632541676774019265463745620869156586992698263001190295587897352044436143858821524874004853173763005732207877271506609479124466157069317075740942E+000000000000000676");
+ return val;
+ }
+
+ static const mp_float& A000142_326(void)
+ {
+ static const mp_float val("+2.42519280905975890925772245116064310241173299116440725785467231805194447913302864559870454483182777544398485999764704996268066696201233648183158589271045565768570637526169314650745159310152405866250204186790328242115390753950840060386290825697225693556365406127884632380062477596208586628330280541181072403345047359619633738388036361654536766486182897975817108925582134646739868699767990511154690194575967204597366691547E+000000000000000679");
+ return val;
+ }
+
+ static const mp_float& A000142_327(void)
+ {
+ static const mp_float val("+7.93038048562541163327275241529530294488636688110761173318477848002985844676500367110776386160007682570183049219230585337796578096578034029558928586916319000063225984710573658907936670944198367182638167690804373351717327765419246997463171000029928017929314878038182747882804301739602078274640017369662106758938304865956202324528878902610335226409818076380921946186653580294839370648241328971475836936263412759033389081359E+000000000000000681");
+ return val;
+ }
+
+ static const mp_float& A000142_328(void)
+ {
+ static const mp_float val("+2.60116479928513501571346279221685936592272833700329664848460734144979357053892120412334654660482519883020040143907631990797277615677595161695328576508552632020738122985068160121803228069697064435905319002583834459363283507057513015167920088009816389880815279996523941305559810970589481674081925697249171016931763996033634362445472280056189954262420329052942398349222374336707313572623155902644074515094399384962951618686E+000000000000000684");
+ return val;
+ }
+
+ static const mp_float& A000142_329(void)
+ {
+ static const mp_float val("+8.55783218964809420169729258639346731388577622874084597351435815336982084707305076156581013832987490415135932073456109249723043355579288081977631016713138159348228424620874246800732620349303341994128499518500815371305202738219217819902457089552295922707882271188563766895291778093239394707729535543949772645705503546950657052445603801384864949523362882584180490568941611567767061653930182919699005154660573976528110825476E+000000000000000686");
+ return val;
+ }
+
+ static const mp_float& A000142_330(void)
+ {
+ static const mp_float val("+2.82408462258387108656010655350984421358230615548447917125973819061204087953410675131671734564885871836994857584240516052408604307341165067052618235515335592584915380124888501444241764715270102858062404841105269072530716903612341880567810839552257654493601149492226043075446286770769000253550746729503424973082816170493716827307049254457005433342709751252779561887750731817363130345796960363500671701037989412254276572407E+000000000000000689");
+ return val;
+ }
+
+ static const mp_float& A000142_331(void)
+ {
+ static const mp_float val("+9.34772010075261329651395269211758434695743337465362605686973341092585531125789334685833441409772235780452978603836108133472480257299256371944166359555760811456069908213380939780440241207544040460186560024058440630076672950956851624679453878917972836373819804819268202579727209211245390839252971674656336660904121524334202698386333032252687984364369276646700349848454922315471961444587938803187223330435744954561655454667E+000000000000000691");
+ return val;
+ }
+
+ static const mp_float& A000142_332(void)
+ {
+ static const mp_float val("+3.10344307344986761444263229378303800318986788038500385088075149242738396333762059115696702548044382279110388896473587900312863445423353115485463231372512589403415209526842472007106160080904621432781937927987402289185455419717674739393578687800766981676108175199997043256469433458133469758631986595985903771420168346078955295864262566707892410808970599846704516149687034208736691199603195682658158145704667324914469610949E+000000000000000694");
+ return val;
+ }
+
+ static const mp_float& A000142_333(void)
+ {
+ static const mp_float val("+1.03344654345880591560939655382975165506222600416820628234329024697831885979142765685527001948498779298943759502525704770804183527325976587456659256047046692271337264772438543178366351306941238937116385330019804962298756654765985688218061703037655404898144022341599015404404321341558445429624451536463305955882916059244292113522799434713728172799387209748952603877845782391509318169467864162325166662519654219196518380446E+000000000000000697");
+ return val;
+ }
+
+ static const mp_float& A000142_334(void)
+ {
+ static const mp_float val("+3.45171145515241175813538448979137052790783485392180898302658942490758499170336837389660186507985922858472156738435853934485972981268761802105241915197135952186266464339944734215743613365183738049968727002266148574077847226918392198648326088145769052359801034620940711450710433280805207734945668131787441892648939637875935659166150111943852097149953280561501696952004913187641122686022666302166056652815645092116371390690E+000000000000000699");
+ return val;
+ }
+
+ static const mp_float& A000142_335(void)
+ {
+ static const mp_float val("+1.15632333747605793897535380408010912684912467606380600931390745734404097222062840525536162480175284157588172507376011068052800948725035203705256041591040543982399265553881485962274110477336552246739523545759159772316078821017661386547189239528832632540533346598015138335987995149069744591206798824148793034037394778688438445820660287501190452545234348988103068478921645917859776099817593211225628978693241105858984415881E+000000000000000702");
+ return val;
+ }
+
+ static const mp_float& A000142_336(void)
+ {
+ static const mp_float val("+3.88524641391955467495718878170916666621305891157438819129472905667597766666131144165801505933388954769496259624783397188657411187716118284449660299745896227780861532261041792833241011203850815549044799113750776834982024838619342258798555844816877645336192044569330864808919663700874341826454844049139944594365646456393153177957418566003999920551987412600026310089176730284008847695387113189718113368409290115686187637361E+000000000000000704");
+ return val;
+ }
+
+ static const mp_float& A000142_337(void)
+ {
+ static const mp_float val("+1.30932804149088992546057261943598916651380085320056882046632369209980447366486195583875107499552077757320239493552004852577547570260331861859535521014367028762150336371971084184802220775697724840028097301334011793388942370614718341215113319703287766478296719019864501440605926667194653195515282444560161328301222855804492620971650056743347973226019758046208866500052558105710981673345457144935004205153930768986245233791E+000000000000000707");
+ return val;
+ }
+
+ static const mp_float& A000142_338(void)
+ {
+ static const mp_float val("+4.42552878023920794805673545369364338281664688381792261317617407929733912098723341073497863348486022819742409488205776401712110787479921693085230061028560557216068136937262264544631506221858309959294968878508959861654625212677747993307083020597112650696642910287142014869248032135117927800841654662613345289658133252619185058884177191792516149503946782196185968770177646397303118055907645149880314213420285999173508890212E+000000000000000709");
+ return val;
+ }
+
+ static const mp_float& A000142_339(void)
+ {
+ static const mp_float val("+1.50025425650109149439123331880214510677484329361427576586672301288179796201467212623915775675136761735892676816501758200180405556955693453955892990688682028896247098421731907680630080609209967076200994449814537393100917947097756569731101143982421188586161946587341143040675082893804977524485320930625924053194107172637903734961736068017662974681837959164507043413090222128685757020952691705809426518349476953719819513782E+000000000000000712");
+ return val;
+ }
+
+ static const mp_float& A000142_340(void)
+ {
+ static const mp_float val("+5.10086447210371108093019328392729336303446719828853760394685824379811307084988522921313637295464989902035101176105977880613378893649357743450036168341518898247240134633888486114142274071313888059083381129369427136543121020132372337085743889540232041192950618396959886338295281838936923583250091164128141780859964386968872698869902631260054113918249061159323947604506755237531573871239151799752050162388221642647386346859E+000000000000000714");
+ return val;
+ }
+
+ static const mp_float& A000142_341(void)
+ {
+ static const mp_float val("+1.73939478498736547859719590981920703679475331461639132294587866113515655715981086316167950317753561556593969501052138457289162202734430990516462333404457944302308885910155973764922515458318035828147432965114974653561204267865138966946238666333219126046796160873363321241358691107077490941888281086967696347273247855956385590314636797259678452846122929855329466133136803535998266690092550763715449105374383580142758744279E+000000000000000717");
+ return val;
+ }
+
+ static const mp_float& A000142_342(void)
+ {
+ static const mp_float val("+5.94873016465678993680241001158168806583805633598805832447490502108223542548655315201294390086717180523551375693598313523928934733351753987566301180243246169513896389812733430276035002867447682532264220740693213315179318596098775266956136238859609411080042870186902558645446723586205019021257921317429521507674507667370838718876057846628100308733740420105226774175327868093114072080116523611906835940380391844088234905434E+000000000000000719");
+ return val;
+ }
+
+ static const mp_float& A000142_343(void)
+ {
+ static const mp_float val("+2.04041444647727894832322663397251900658245332324390400529489242223120675094188773114043975799743992919578121862904221538707624613539651617735241304823433436143266461705767566584680005983534555108566627714057772167106506278461879916565954729928846028000454704474107577615388226190068321524291467011878325877132356129908197680574487841393438405895672964096092783542137458755938126723479967598884044727550474402522264572564E+000000000000000722");
+ return val;
+ }
+
+ static const mp_float& A000142_344(void)
+ {
+ static const mp_float val("+7.01902569588183958223189962086546538264363943195902977821442993247535122324009379512311276751119335643348739208390522093154228670576401565009230088592611020332836628267840429051299220583358869573469199336358736254846381597908866912986884270955230336321564183390930066996935498093835026043562646520861441017335305086884200021176238174393428116281114996490559175384952858120427155928771088540161113862773631944676590129619E+000000000000000724");
+ return val;
+ }
+
+ static const mp_float& A000142_345(void)
+ {
+ static const mp_float val("+2.42156386507923465587000536919858555701205560402586527348397832670399617201783235931747390479136170796955315026894730122138208891348858539928184380564450802014828636752404948022698231101258810002846873771043764007922001651278559084980475073479554466030939643269870873113942746842373083985029113049697197150980680254975049007305802170165732700116984673789242915507808736051547368795426025546355584282656903020913423594719E+000000000000000727");
+ return val;
+ }
+
+ static const mp_float& A000142_346(void)
+ {
+ static const mp_float val("+8.37861097317415190931021857742710602726171238992949384625456501039582675518169996323845971057811150957465389993055766222598202764067050548151517956752999774971307083163321120158535879610355482609850183247811423467410125713423814434032443754239258452467051165713753220974241904074610870588200731151952302142393153682213669565278075508773435142404766971310780487657018226738353896032174048390390321617992884452360445637726E+000000000000000729");
+ return val;
+ }
+
+ static const mp_float& A000142_347(void)
+ {
+ static const mp_float val("+2.90737800769143071253064584636720579145981419930553436465033405860735188404804988724374551957060469382240490327590350879241576359131266540208576730993290921915043557857672428695011950224793352465618013586990563943191313622558063608609257982721022683006066754502672367678061940713889972094105653709727448843410424327728143339151492201544381994414454139044840829216985324678208801923164394791465441601443530904969074636291E+000000000000000732");
+ return val;
+ }
+
+ static const mp_float& A000142_348(void)
+ {
+ static const mp_float val("+1.01176754667661788796066475453578761542801534135832595889831625239535845564872136076082344081057043345019690634001442105976068572977680755992584702385665240826435158134470005185864158678228086658035068728272716252230577140650206135796021777986915893686111230566929983951965555368433710288748767490985152197506827666049393882024719286137444934056230040387604608567510892988016663069261209387429973677302348754929237973429E+000000000000000735");
+ return val;
+ }
+
+ static const mp_float& A000142_349(void)
+ {
+ static const mp_float val("+3.53106873790139642898271999332989877784377354134055759655512372085980101021403754905527380842889081274118720312665032949856479319692105838414120611325971690484258701889300318098665913787016022436542389861671779720284714220869219413928116005174336468964528194678585643992359788235833648907733198543538181169298828554512384648266270308619682819856242840952740083900613016528178154111721620762130608133785197154703040527268E+000000000000000737");
+ return val;
+ }
+
+ static const mp_float& A000142_350(void)
+ {
+ static const mp_float val("+1.23587405826548875014395199766546457224532073946919515879429330230093035357491314216934583295011178445941552109432761532449767761892237043444942213964090091669490545661255111334533069825455607852789836451585122902099649977304226794874840601811017764137584868137504975397325925882541777117706619490238363409254589994079334626893194608016888986949684994333459029365214555784862353939102567266745712846824819004146064184544E+000000000000000740");
+ return val;
+ }
+
+ static const mp_float& A000142_351(void)
+ {
+ static const mp_float val("+4.33791794451186551300527151180578064858107579553687500736796949107626554104794512901440387365489236345254847904108992978898684844241752022491747171013956221759911815271005440784211075087349183563292325945063781386369771420337836050010690512356672352122922887162642463644613999847721637683150234410736655566483610879218464540395113074139280344193394330110441193071903090804866862326250011106277452092355114704552685287749E+000000000000000742");
+ return val;
+ }
+
+ static const mp_float& A000142_352(void)
+ {
+ static const mp_float val("+1.52694711646817666057785557215563478830053868002898000259352526085884547044887668541307016352652211193529706462246365528572337065173096711917095004196912590059488958975393915156042298430746912614278898732662451048002159539958918289603763060349548667947268856281250147202904127946398016464468882512579302759402231029484899518219079802097026681156074804198875299961309887963313135538840003909409663136509000376002545221288E+000000000000000745");
+ return val;
+ }
+
+ static const mp_float& A000142_353(void)
+ {
+ static const mp_float val("+5.39012332113266361183983016970939080270090154050229940915514417083172451068453469950813767724862305513159863811729670315860349840061031393067345364815101442909996025183140520500829313460536601528404512526298452199447623176054981562301283603033906797853859062672813019626251571650784998119575155269404938740689875534081695299313351701402504184480944058822029808863423904510495368452105213800216110871876771327288984631145E+000000000000000747");
+ return val;
+ }
+
+ static const mp_float& A000142_354(void)
+ {
+ static const mp_float val("+1.90810365568096291859129988007712434415611914533781399084092103647443047678232528362588073774601256151658591789352303291814563843381605113145840259144545910790138592914831744257293576965029956941055197434309652078604458604323463473054654395474003006440266108186175808947693056364377889334329604965369348314204215939064920135956926502296486481306254196822998552337652062196715360432045245685276503248644377049860300559425E+000000000000000750");
+ return val;
+ }
+
+ static const mp_float& A000142_355(void)
+ {
+ static const mp_float val("+6.77376797766741836099911457427379142175422296594923966748526967948422819257725475687187661899834459338388000852200676685941701644004698151667732919963137983304992004847652692113392198225856347140745950891799264879045828045348295329344023103932710672862944684060924121764310350093541507136870097627061186515424966583680466482647089083152527008637202398721644860798664820798339529533760622182731586532687538527004066985960E+000000000000000752");
+ return val;
+ }
+
+ static const mp_float& A000142_356(void)
+ {
+ static const mp_float val("+2.41146140004960093651568478844146974614450337587792932162475600589638523655750269344638807636341067524466128303383440900195245785265672541993712919506877122056577153725764358392367622568404859582105558517480538296940314784143993137246472225000044999539208307525688987348094484633300776540725754755233782399491288103790246067822363713602299615074844053944905570444324676204208872514018781497052444805636763715613447847002E+000000000000000755");
+ return val;
+ }
+
+ static const mp_float& A000142_357(void)
+ {
+ static const mp_float val("+8.60891719817707534336099469473604699373587705188420767820037894105009529451028461560360543261737611062344078043078884013697027453398450974917555122639551325741980438800978759460752412569205348708116843907405521720076923779394055499969905843250160648354973657866709684832697310140883772250390944476184603166183898530531178462125838457560209625817193272583312886486239094049025674875047049944477227956123246464740008813797E+000000000000000757");
+ return val;
+ }
+
+ static const mp_float& A000142_358(void)
+ {
+ static const mp_float val("+3.08199235694739297292323610071550482375744398457454634879573566089593411543468189238609074487702064760319179939422240476903535828316645449020484733904959374615628997090750395886949363699775514837505830118851176775787538713023071868989226291883557512111080569516282067170105637030436390465639958122474087933493835673930161889441050167806555046042555191584826013362073595669551191605266843880122847608292122234376923155339E+000000000000000760");
+ return val;
+ }
+
+ static const mp_float& A000142_359(void)
+ {
+ static const mp_float val("+1.10643525614411407727944176015686623172892239046226213921766910226164034744105079936660657741085041248954585598252584331208369362365675716198354019471880415487010809955579392123414821568219409826664593012667572462507726397975282800967132238786197146847877924456345262114067923693926664177164744965968197568124287006940928118309337010242553261529277313778952538796984420845368877786290796952964102291376871882141315412767E+000000000000000763");
+ return val;
+ }
+
+ static const mp_float& A000142_360(void)
+ {
+ static const mp_float val("+3.98316692211881067820599033656471843422412060566414370118360876814190525078778287771978367867906148496236508153709303592350129704516432578314074470098769495753238915840085811644293357645589875375992534845603260865027815032711018083481676059630309728652360528042842943610644525298135991037793081877485511245247433224987341225913613236873191741505398329604229139669143915043327960030646869030670768248956738775708735485961E+000000000000000765");
+ return val;
+ }
+
+ static const mp_float& A000142_361(void)
+ {
+ static const mp_float val("+1.43792325888489065483236251149986335475490753864475587612728276529922779553438961885684190800314119607141379443489058596838396823330432160771380883705655787966919248618270978003589902110057945010733305079262777172275041226808677528136885057526541812043502150623466302643442673632627092764643302557772269559534323394220430182554814378511222218683448796987126719420560953330641393571063519720072147337873382698030853510432E+000000000000000768");
+ return val;
+ }
+
+ static const mp_float& A000142_362(void)
+ {
+ static const mp_float val("+5.20528219716330417049315229162950534421276528989401627158076361038320461983449042026176770697137112977851793585430392120554996500456164421992398799014473952440247679998140940372995445638409760938854564386931253363635649241047412651855523908246081359597477785256948015569262478550110075808008755259135615805514250687077957260848428050210624431634084645093398724302430651056921844727249941386661173363101645366871689707763E+000000000000000770");
+ return val;
+ }
+
+ static const mp_float& A000142_363(void)
+ {
+ static const mp_float val("+1.88951743757027941388901428186151043994923380023152790658381719056910327699992002255502167763060772010960201071511232339761463729665587685183240764042254044735809907839325161355397346766742743220804206872456044970999740674500210792623555178693327533533884436048272129651642279713689957518307178159066228537401672999409298485687979382226456668683172726168903736921782326333662629635991728723358005930805897268174423363918E+000000000000000773");
+ return val;
+ }
+
+ static const mp_float& A000142_364(void)
+ {
+ static const mp_float val("+6.87784347275581706655601198597589800141521103284276157996509457367153592827970888210027890657541210119895131900300885716731727975982739174066996381113804722838348064535143587333646342230943585323727313015740003694439056055180767285149740850443712222063339347215710551931977898157831445366638128499001071876142089717849846487904244951304302274006748723254809602395287667854531971875009892553023141588133466056154901044661E+000000000000000775");
+ return val;
+ }
+
+ static const mp_float& A000142_365(void)
+ {
+ static const mp_float val("+2.51041286755587322929294437488120277051655202698760797668725951939011061382209374196660180090002541693761723143609823286607080711233699798534453679106538723835997043555327409376780914914294408643160469250745101348470255460140980059079655410411954961053118861733734351455171932827608477558822916902135391234791862747015193968085049407226070330012463283988005504874279998766904169734378610781853446679668715110496538881301E+000000000000000778");
+ return val;
+ }
+
+ static const mp_float& A000142_366(void)
+ {
+ static const mp_float val("+9.18811109525449601921217641206520214009058041877464519467536984096780484658886309559776259129409302599167906705611953228981915403115341262636100465529931729239749179412498318319018148586317535633967317457727070935401134984115987016231538802107755157454415033945467726325929274149047027865291875861815531919338217654075609923191280830447417407845615619396100147839864795486869261227825715461583614847587497304417332305563E+000000000000000780");
+ return val;
+ }
+
+ static const mp_float& A000142_367(void)
+ {
+ static const mp_float val("+3.37203677195840003905086874322792918541324301369029478644586073163518437869811275608437887100493214053894621760959586835036362952943330243387448870849484944630987948844386882823079660531178535577666005506985835033292216539170567234956974740373546142785770317457986655561616043612700259226562118441286300214397125879045748841811200064774202188679340932318368754257230379943681018870612037574401186649064611510721160956142E+000000000000000783");
+ return val;
+ }
+
+ static const mp_float& A000142_368(void)
+ {
+ static const mp_float val("+1.24090953208069121437071969750787794023207342903802848141207674924174785136090549423905142452981502771833220808033127955293381566683145529566581184472610459624203565174734372878893315075473701092581090026570787292251535686414768742464166704457464980545163476824539089246674704049473695395374859586393358478898142323488835573786521623836906405433997463093159701566660779819274614944385229827379636686855777035945387231860E+000000000000000786");
+ return val;
+ }
+
+ static const mp_float& A000142_369(void)
+ {
+ static const mp_float val("+4.57895617337775058102795568380406959945635095315032509641056320470204957152174127374209975651501745228064584781642242155032577981060807004100684570703932596013311155494769835923116332628497957031624222198046205108408166682870496659692775139448045778211653229482549239320229657942557936008933231873791492787134145173673803267272264791958184636051450638813759298780978277533123329144781498063030859374497817262638478885564E+000000000000000788");
+ return val;
+ }
+
+ static const mp_float& A000142_370(void)
+ {
+ static const mp_float val("+1.69421378414976771498034360300750575179884985266562028567190838573975834146304427128457690991055645734383896369207629597362053852992498591517253291160455060524925127533064839291553043072544244101700962213277095890111021672662083764086326801595776937938311694908543218548484973438746436323305295793302852331239633714259307208890737973024528315339036736361090940548961962687255631783569154283321417968564192387176237187659E+000000000000000791");
+ return val;
+ }
+
+ static const mp_float& A000142_371(void)
+ {
+ static const mp_float val("+6.28553313919563822257707476715784633917373295338945125984278011109450344682789424646578033576816445674564255529760305806213219794602169774529009710205288274547472223147670553771661789799139145617310569811258025752311890405576330764760272433920332439751136388110695340814879251457749278759462647393153582148899041079902029744984637879921000049907826291899647389436648881569718393917041562391122460663373153756423839966213E+000000000000000793");
+ return val;
+ }
+
+ static const mp_float& A000142_372(void)
+ {
+ static const mp_float val("+2.33821832778077741879867181338271883817262865866087586866151420132715528221997665968527028490575717790937903057070833759911317763592007156124791612196367238131659667010933446003058185805279762169639531969787985579860023230874395044490821345418363667587422736377178666783135081542282731698520104830253132559390443281723555065134285291330612018565711380586668828870433383943935242537139461209497555366774813197389668467431E+000000000000000796");
+ return val;
+ }
+
+ static const mp_float& A000142_373(void)
+ {
+ static const mp_float val("+8.72155436262229977211904586391754126638390489680506699010744797095028920268051294062605816269847427360198378402874209924469215258198186692345472713492449798231090557950781753591407033053693512892755454247309186212877886651161493515950763618410496480101086806686876427101093854152714589235479991016844184446526353440828860392950884136663182829250103449588274731686716522110878454663530190311425881518070053226263463383519E+000000000000000798");
+ return val;
+ }
+
+ static const mp_float& A000142_374(void)
+ {
+ static const mp_float val("+3.26186133162074011477252315310516043362758043140509505430018554113540816180251183979414575284922937832714193522674954511751486506566121822937206794846176224538427868673592375843186230362081373821890539888493635643616329607534398574965585593285525683557806465700891783735809101453115256374069516640299724983000856186869993786963630667112030378139538690146014749650831979269468542044160291176473279687758199906622535305436E+000000000000000801");
+ return val;
+ }
+
+ static const mp_float& A000142_375(void)
+ {
+ static const mp_float val("+1.22319799935777754303969618241443516261034266177691064536256957792577806067594193992280465731846101687267822571003107941906807439962295683601452548067316084201910450752597140941194836385780515183208952458185113366356123602825399465612094597482072131334177424637834418900928413044918221140276068740112396868625321070076247670111361500167011391802327008804755531119061992226050703266560109191177479882909324964983450739539E+000000000000000804");
+ return val;
+ }
+
+ static const mp_float& A000142_376(void)
+ {
+ static const mp_float val("+4.59922447758524356182925764587827621141488840828118402656326161300092550814154169410974551151741342344127012866971685861569595974258231770341461580733108476599183294829765249938892584810534737088865661242776026257499024746623501990701475686532591213816507116638257415067490833048892511487438018462822612226031207223486691239618719240627962833176749553105880797007673090769950644282266010558827324359739061868337774780665E+000000000000000806");
+ return val;
+ }
+
+ static const mp_float& A000142_377(void)
+ {
+ static const mp_float val("+1.73390762804963682280963013249611013170341292992200637801434962810134891656936121867937405784206486063735883850848325569811737682295353377418731015936381895677892102150821499226962504473571595882502354288526561899077132329477060250494456333822786887608823182972623045480444044059432476830764132960484124809213765123254482597336257153716741988107634581520917060471892755220271392894414285980677901283621626324363341092311E+000000000000000809");
+ return val;
+ }
+
+ static const mp_float& A000142_378(void)
+ {
+ static const mp_float val("+6.55417083402762719022040190083529629783890087510518410889424159422309890463218540660803393864300517320921640956206670653888368439076435766642803240239523565662432146130105267077918266910100632435858899210630403978511560205423287746869044941850134435161351631636515111916078486544654762420288422590629991778828032165901944217931052041049284715046858718149066488583754614732625865140886001006962466852089747506093429328934E+000000000000000811");
+ return val;
+ }
+
+ static const mp_float& A000142_379(void)
+ {
+ static const mp_float val("+2.48403074609647070509353232041657729688094343166486477727091756421055448485559826910444486274569896064629301922402328177823691638409969155557622428050779431386061783383309896222531023158928139693190522800828923107855881317855426056063368032961200950926152268390239227416193746400424154957289312161848766884175824190876836858595868723557678907002759454178496199173242998983665202888395794381638774936942014304809409715666E+000000000000000814");
+ return val;
+ }
+
+ static const mp_float& A000142_380(void)
+ {
+ static const mp_float val("+9.43931683516658867935542281758299372814758504032648615362948674400010704245127342259689047843365605045591347305128847075730028225957882791118965226592961839267034776856577605645617888003926930834123986643149907809852349007850619013040798525252563613519378619882909064181536236321611788837699386215025314159868131925331980062664301149519179846610485925878285556858323396137927770975904018650227344760379654358275756919531E+000000000000000816");
+ return val;
+ }
+
+ static const mp_float& A000142_381(void)
+ {
+ static const mp_float val("+3.59637971419847028683441609349912061042422990036439122453283444946404078317393517400941527228322295522370303323254090735853140754089953343416325751331918460760740249982356067750980415329496160647801238911040114875553744971991085843968544238121226736750883254175388353453165306038534091547163466147924644694909758263551484403875098737966807521558595137759626797163021213928550480741819431105736618353704648310503063386341E+000000000000000819");
+ return val;
+ }
+
+ static const mp_float& A000142_382(void)
+ {
+ static const mp_float val("+1.37381705082381564957074694771666407318205582193919744777154275969526357917244323647159663401219116889545455869483062661095899768062362177185036437008792852010602775493260017880874518655867533367460073264017323882461530579300594792395983898962308613438837403094998351019109146906720022971016444068507214273455527656676667042280287717903320473235383342624177436516274103720706283643375022682391388211115175654612170213582E+000000000000000822");
+ return val;
+ }
+
+ static const mp_float& A000142_383(void)
+ {
+ static const mp_float val("+5.26171930465521393785596080975482340028727379802712622496500876963285950823045759568621510826669217686959095980120129991997296111678847138618689553743676623200608630139185868483749406451972652797372080601186350469827662118721278054876618333025641989470747253853843684403188032652737687978992980782382630667334670925071634771933501959569717412491518202250599581857329817250305066354126336873559016848571122757164611918021E+000000000000000824");
+ return val;
+ }
+
+ static const mp_float& A000142_384(void)
+ {
+ static const mp_float val("+2.02050021298760215213668895094585218571031313844241647038656336753901805116049571674350660157440979591792292856366129916926961706884677301229576788637571823309033713973447373497759772077557498674190878950855558580413822253588970773072621439881846523956766945479875974810824204538651272183933304620434930176256513635227507752422464752474771486396742989664230239433214649824117145479984513359446662469851311138751210976520E+000000000000000827");
+ return val;
+ }
+
+ static const mp_float& A000142_385(void)
+ {
+ static const mp_float val("+7.77892582000226828572625246114153091498470558300330341098826896502521949696790850946250041606147771428400327497009600180168802571506007609733870636254651519739779798797772387966375122498596369895634883960793900534593215676317537476329592543545109117233552740097522503021673187473807397908143222788674481178587577495625904846826489297027870222627460510207286421817876401822851010097940376433869650508927547884192162259602E+000000000000000829");
+ return val;
+ }
+
+ static const mp_float& A000142_386(void)
+ {
+ static const mp_float val("+3.00266536652087555829033345000063093318409635503927511664147182049973472582961268465252516059973039771362526413845705669545157792601318937357274065594295486619555002335940141755020797284458198779715065208866445606352981251058569465863222721808412119252151357677643686166365850364889655592543283996428349734934804913311599270875024868652757905934199756940012558821700291103620489897804985303473685096446033483298174632206E+000000000000000832");
+ return val;
+ }
+
+ static const mp_float& A000142_387(void)
+ {
+ static const mp_float val("+1.16203149684357884105835904515024417114224528940019947014024959453339733889606010896052723715209566391517297722158288094113976065736710428757265063384992353321767785904008834859193048549085322927749730235831314449658603744159666383289067193339855490150582575421248106546383584091212296714314250906617771347419769501451588917828634624168617309596535305935784860263998012657101129590450529312444316132324614958036393582664E+000000000000000835");
+ return val;
+ }
+
+ static const mp_float& A000142_388(void)
+ {
+ static const mp_float val("+4.50868220775308590330643309518294738403191172287277394414416842678958167491671322276684568015013117599087115161974157805162227135058436463578188445933770330888459009307554279253669028370451052959668953315025500064675382527339505567161580710158639301784260392634442653399968306273903711251539293517676952827988705665632165001175102341774235161234556987030845257824312289109552382810948053732283946593419506037181207100736E+000000000000000837");
+ return val;
+ }
+
+ static const mp_float& A000142_389(void)
+ {
+ static const mp_float val("+1.75387737881595041638620247402616653238841366019750906427208151802114727154260144365630296957840102746044887798007947386208106355537731784331915305468236658715610554620638614629677252036105459601311222839544919525158723803135067665625854896251710688394077292734798192172587671140548543676848785178376334650087606503930912185457114810950177477720242667954998805293657480463615876913458792901858455224840187848463489562186E+000000000000000840");
+ return val;
+ }
+
+ static const mp_float& A000142_390(void)
+ {
+ static const mp_float val("+6.84012177738220662390618964870204947631481327477028535066111792028247435901614563025958158135576400709575062412230994806211614786597153958894469691326122968990881163020490597055741282940811292445113769074225186148119022832226763895940834095381671684736901441665712949473091917448139320339710262195667705135341665365330557523282747762705692163108946405024495340645264173808101919962489292317247975376876732609007609292526E+000000000000000842");
+ return val;
+ }
+
+ static const mp_float& A000142_391(void)
+ {
+ static const mp_float val("+2.67448761495644278994732015264250134523909199043518157210849710683044747437531294143149639831010372677443849403182318969228741381559487197927737649308514080875434534741011823448794841629857215346039483708022047783914537927400664683312866131294233628732128463691293763243978939722222474252826712518506072707918591157844247991603554375217925635775598044364577678192298291958967850705333313296043958372358802450121975233378E+000000000000000845");
+ return val;
+ }
+
+ static const mp_float& A000142_392(void)
+ {
+ static const mp_float val("+1.04839914506292557365934949983586052733372406025059117626653086587753540995512267304114658813756066089557988966047469035937666621571318981587673158528937519703170337618476634791927577918904028415647477613544642731294498867541060555858643523467339582462994357766987155191639744371111209907108071307254380501504087733874945212708593315085426849224034433390914449851380930447915397476490658812049231681964650560447814291484E+000000000000000848");
+ return val;
+ }
+
+ static const mp_float& A000142_393(void)
+ {
+ static const mp_float val("+4.12020864009729750448124353435493187242153555678482332272746630289871416112363210505170609138061339731962896636566553311235029822775283597639555513018724452433459426840613174732275381221292831673494587021230445933987380549436367984524469047226644559079567826024259519903144195378467054934934720237509715370911064794128534685944771728285727517450455323226293787915927056660307512082608289131353480510121076702559910165532E+000000000000000850");
+ return val;
+ }
+
+ static const mp_float& A000142_394(void)
+ {
+ static const mp_float val("+1.62336220419833521676560995253584315773408500937322038915462172334209337948271104939037220000396167854393381274807222004626601750173461737469984872129377434258783014175201590844516500201189375679356867286364795697991027936477928985902640804607297956277349723453558250841838812979116019644364279773578827856138959528886642666262240060944576641875479397351159752438875260324161159760547665917753271320987704220808604605220E+000000000000000853");
+ return val;
+ }
+
+ static const mp_float& A000142_395(void)
+ {
+ static const mp_float val("+6.41228070658342410622415931251658047304963578702422053716075580720126884895670864509197019001564863024853856035488526918275076913185173863006440244911040865322192905992046283835840175794698033933459625781140943007064560349087819494315431178198826927295531407641555090825263311267508277595238905105636370031748890139102238531735848240731077735408143619537081022133557278280436581054163280375125421717901431672193988190618E+000000000000000855");
+ return val;
+ }
+
+ static const mp_float& A000142_396(void)
+ {
+ static const mp_float val("+2.53926315980703594606476708775656586732765577166159133271565929965170246418685662345642019524619685757842126990053456659636930457621328849750550336984772182667588390772850328398992709614700421437650011809331813430797565898238776519748910746566735463209030437426055815966804271261933277927714606421832002532572560495084486458567395903329506783221624873336684084764888682199052886097448659028549667000288966942188819323485E+000000000000000858");
+ return val;
+ }
+
+ static const mp_float& A000142_397(void)
+ {
+ static const mp_float val("+1.00808747444339327058771253383935664932907934134965175908811674196172587828218207951219881751274015245863324415051222293875861391675667553350968483782954556519032591136821580374400105717036067310747054688304729932026633661600794278340317566386993978893985083658144158938821295690987511337302698749467305005431306516548541124051256173621814192938985074714663581651660806833023995780687117634334217799114719876048961271423E+000000000000000861");
+ return val;
+ }
+
+ static const mp_float& A000142_398(void)
+ {
+ static const mp_float val("+4.01218814828470521693909588468063946432973577857161400117070463300766899556308467645855129370070580678536031171903864729625928338869156862336854565456159134945749712724549889890112420753803547896773277659452825129466001973171161227794463914220236035998060632959413752576508756850130295122464741022879873921616599935863193673723999571014820487897160597364361054973610011195435503207134728184650186840476585106674865860265E+000000000000000863");
+ return val;
+ }
+
+ static const mp_float& A000142_399(void)
+ {
+ static const mp_float val("+1.60086307116559738155869925798757514626756457565007398646711114857005992922967078590696196618658161690735876437589642027120745407208793588072404971617007494843354135377095406066154855880767615610812537786121677226656934787295293329889991101773874178363226192550806087278026993983201987753863431668129069694725023374409414275815875828834913374670967078348380060934470394466978765779646756545675424549350157457563271478246E+000000000000000866");
+ return val;
+ }
+
+ static const mp_float& A000142_400(void)
+ {
+ static const mp_float val("+6.40345228466238952623479703195030058507025830260029594586844459428023971691868314362784786474632646762943505750358568108482981628835174352289619886468029979373416541508381624264619423523070462443250151144486708906627739149181173319559964407095496713452904770203224349112107975932807951015453726672516278778900093497637657103263503315339653498683868313393520243737881577867915063118587026182701698197400629830253085912983E+000000000000000868");
+ return val;
+ }
+
+ static const mp_float& A000142_401(void)
+ {
+ static const mp_float val("+2.56778436614961820002015360981207053461317357934271867429324628230637612648439194059476699376327691351940345805893785811501675633162904915268137574473680021728740033144861031330112388832751255439743310608939170271557723398821650501143545727245294182094614812851492963993955298349055988357196944395679027790338937492552700498408664829451201052972231193670801617738890512725033940310553397499263380977157652561931487451106E+000000000000000871");
+ return val;
+ }
+
+ static const mp_float& A000142_402(void)
+ {
+ static const mp_float val("+1.03224931519214651640810175114445235491449577889577290706588500548716320284672556011909633149283731923480019013969301896223673604531487775937791304938419368734953493324234134594705180310766004686776810864793546449166204806326303501459705382352608261202035154766300171525570029936320507319593171647062969171716252872006185600360283261439382823294836939855662250331033986115463644004842465794703879152817376329896457955345E+000000000000000874");
+ return val;
+ }
+
+ static const mp_float& A000142_403(void)
+ {
+ static const mp_float val("+4.15996474022435046112465005711214299030541798894996481547551657211326770747230400727995821591613439651624476626296286641781404626261895737029298958901830056001862578096663562416661876652386998887710547785117992190139805369495003110882612690881011292644201673708189691248047220643371644497960481737663765762016499074184927969451941543600712777878192867618318868834066964045318485339515137152656632985854026609482725560039E+000000000000000876");
+ return val;
+ }
+
+ static const mp_float& A000142_404(void)
+ {
+ static const mp_float val("+1.68062575505063758629435862307330576808338886753578578545210869513376015381881081894110311923011829619256288557023699803279687469009805877759836779396339342624752481551052079216331398167564347550635061305187668844816481369275981256796575527115928562228257476178108635264211077139922144377176034622016161367854665625970710899658584383614687962262789918517800823008963053474308668077164115409673279726285026750231021126256E+000000000000000879");
+ return val;
+ }
+
+ static const mp_float& A000142_405(void)
+ {
+ static const mp_float val("+6.80653430795508222449215242344688836073772491351993243108104021529172862296618381671146763288197909957987968655945984203282734249489713804927338956555174337630247550281760920826142162578635607580071998286010058821506749545567724090026130884819510677024442778521339972820054862416684684727562940219165453539811395785181379143617266753639486247164299169997093333186300366570950105712514667409176782891454358338435635561336E+000000000000000881");
+ return val;
+ }
+
+ static const mp_float& A000142_406(void)
+ {
+ static const mp_float val("+2.76345292902976338314381388391943667445951631488909256701890232740844182092427062958485585895008351442943115274314069586532790105292823804800499616361400781077880505414394933855413718006926056677509231304120083881531740315500495980550609139236721334871923768079664028964942274141173981999390553728981174137163426688783639932308610301977631416348705463018819893273637948827805742919280954968125773853930469485404868037903E+000000000000000884");
+ return val;
+ }
+
+ static const mp_float& A000142_407(void)
+ {
+ static const mp_float val("+1.12472534211511369693953225075521072650502314015986067477669324725523582111617814624103633459268399037277847916645826321718845572854179288553803343859090117898697365703658738079153383228818905067746257140776874139783418308408701864084097919669345583292872973608423259788731505575457810673751955367695337873825514662334941452449604392904895986453923123448659696562370645172916937368147348672027189958549701080559781291426E+000000000000000887");
+ return val;
+ }
+
+ static const mp_float& A000142_408(void)
+ {
+ static const mp_float val("+4.58887939582966388351329158308125976414049441185223155308890844880136215015400683666342824513815068072093619499914971392612889937245051497299517642945087681026685252070927651362945803573581132676404729134369646490316346698307503605463119512250929979834921732322366899938024542747867867548907977900196978525208099822326561125994385923051975624732006343670531561974472232305501104462041182581870935030882780408683907669020E+000000000000000889");
+ return val;
+ }
+
+ static const mp_float& A000142_409(void)
+ {
+ static const mp_float val("+1.87685167289433252835693625748023524353346221444756270521336355555975711941298879619534215226150362841486290375465223299578671984333226062395502715964540861539914268097009409407444833661594683264649534215957185414539385799607768974634415880510630361752482988519848062074652037983877957827503362961180564216810112827331563500531703842528258030515390594561247408847559143012949951724974843675985212427631057187151718236629E+000000000000000892");
+ return val;
+ }
+
+ static const mp_float& A000142_410(void)
+ {
+ static const mp_float val("+7.69509185886676336626343865566896449848719507923500709137479057779500418959325406440090282427216487650093790539407415528272555135766226855821561135454617532313648499197738578570523818012538201385063090285424460199611481778391852796001105110093584483185180252931377054506073355733899627092763788140840313288921462592059410352179985754365857925113101437701114376274992486353094802072396859071539370953287334467322044770179E+000000000000000894");
+ return val;
+ }
+
+ static const mp_float& A000142_411(void)
+ {
+ static const mp_float val("+3.16268275399423974353427328747994440887823717756558791455503892747374672192282742046877106077585976424188547911696447782120020160799919237742661626671847805780909533170270555792485289203153200769260930107309453142040319010919051499156454200248463222589109083954795969401996149206632746735125916925885368761746721125336417654745974145044367607221484690895158008649021911891121963651755109078402681461801094466069360400544E+000000000000000897");
+ return val;
+ }
+
+ static const mp_float& A000142_412(void)
+ {
+ static const mp_float val("+1.30302529464562677433612059444173709645783371715702222079667603811918364943220489723313367703965422286765681739618936486233448306249566725949976590188801295981734727666151468986503939151699118716935503204211494694520611432498649217652459130502366847706712942589375939393622413473132691654871877773464771929839649103638604073755341347758279454175251692648805099563397027699142249024523104940301904762262050920020576485024E+000000000000000900");
+ return val;
+ }
+
+ static const mp_float& A000142_413(void)
+ {
+ static const mp_float val("+5.38149446688643857800817805504437420837085325185850177189027203743222847215500622557284208617377194044342265584626207688144141504810710578173403317479749352404564425261205566914261268696517360300943628233393473088370125216219421268904656208974775081028724452894122629695660567644038016534620855204409508070237750798027434824609559766241694145743789490639565061196829724397457488471280423403446866668142270299684980883149E+000000000000000902");
+ return val;
+ }
+
+ static const mp_float& A000142_414(void)
+ {
+ static const mp_float val("+2.22793870929098557129538571478837092226553324626941973356257262349694258747217257738715662367594158334357697952035249982891674582991634179363788973436616231895489672058139104702504165240358187164590662088624897858585231839514840405326527670515556883545891923498166768694003475004631738845333034054625536341078428830383358017388357743224061376337928849124779935335487505900547400227110095289027002800610899904069582085624E+000000000000000905");
+ return val;
+ }
+
+ static const mp_float& A000142_415(void)
+ {
+ static const mp_float val("+9.24594564355759012087585071637173932740196297201809189428467638751231173800951619615669998825515757087584446500946287429000449519415281844359724239761957362366282139041277284515392285747486476733051247667793326113128712133986587682105089832639561066715451482517392090080114421269221716208132091326695975815475479646090935772161684634379854711802404723867836731642273149487271710942506895449462061622535234601888765655338E+000000000000000907");
+ return val;
+ }
+
+ static const mp_float& A000142_416(void)
+ {
+ static const mp_float val("+3.84631338771995749028435389801064356019921659635952622802242537720512168301195873760118719511414554948435129744393655570464187000076757247253645283740974262744373369841171350358403190870954374320949319029802023663061544247738420475755717370378057403753627816727235109473327599247996233942582949991905525939237799532773829281219260807902019560109800365129020080363185630186705031752082868506976217634974657594385726512621E+000000000000000910");
+ return val;
+ }
+
+ static const mp_float& A000142_417(void)
+ {
+ static const mp_float val("+1.60391268267922227344857557547043836460307332068192243708535138229453574181598679357969506036259869413497449103412154372883565979032007772104770083319986267564403695223768453099454130593187974091835866035427443867496663951306921338390134143447649937365262799575257040650377608886414429554057090146624604316662162405166686810268431756895142156565786752258801373511448407787855998240618556167409082753784432216858847955763E+000000000000000913");
+ return val;
+ }
+
+ static const mp_float& A000142_418(void)
+ {
+ static const mp_float val("+6.70435501359914910301504590546643236404084648045043578701676877799115940079082479716312535231566254148419337252262805278653305792353792487397938948277542598419207446035352133955718265879525731703873920028086715366136055316462931194470760719611176738186798502224574429918578405145212315535958636812890846043647838853596750866922044743821694214444988624441789741277854344553238072645785564779769965910818926666469984455088E+000000000000000915");
+ return val;
+ }
+
+ static const mp_float& A000142_419(void)
+ {
+ static const mp_float val("+2.80912475069804347416330423439043516053311467530873259476002611797829578893135559001134952262026260488187702308698115411755735126996239052219736419328290348737647919888812544127445953403521281583923172491768333738411007177597968170483248741517083053300268572432096686135884351755843960209566668824601264492288444479657038613240336747661289875852450233641109901595420970367806752438584151642723615716633130273250923486682E+000000000000000918");
+ return val;
+ }
+
+ static const mp_float& A000142_420(void)
+ {
+ static const mp_float val("+1.17983239529317825914858777844398276742390816362966768979921096955088423135116934780476679950051029405038834969653208472937408753338420401932289296117881946469812126353301268533527300429478938265247732446542700170132623014591146631602964471437174882386112800421480608177071427737454463288018000906332531086761146681455956217560941434017741747858029098129266158670076807554478836024205343689943918600985914714765387864406E+000000000000000921");
+ return val;
+ }
+
+ static const mp_float& A000142_421(void)
+ {
+ static const mp_float val("+4.96709438418428047101555454724916745085465336888090097405467818180922261398842295425806822589714833795213495222240007671066490851554749892134937936656282994637909051947398340526149934808106330096692953599944767716258342891428727319048480424750506254845534889774433360425470710774683290442555783815659955875264427528929575675931563437214692758482302503124210528001023359804355899661904496934663897310150700949162282909151E+000000000000000923");
+ return val;
+ }
+
+ static const mp_float& A000142_422(void)
+ {
+ static const mp_float val("+2.09611383012576635876856401893914866426066372166774021105107419272349194310311448669690479132859659861580094983785283237190059139356104454480943809268951423737197619921802099702035272489020871300804426419176691976261020700182922928638458739244713639544815723484810878099548639946916348566758540770208501379361588417208280935243119770504600344079531656318416842816431857837438189657323697706428164664883595800546483387662E+000000000000000926");
+ return val;
+ }
+
+ static const mp_float& A000142_423(void)
+ {
+ static const mp_float val("+8.86656150143199169759102580011259884982260754265454109274604383522037091932617427872790726731996361214483801781411748093313950159476321842454392313207664522408345932269222881739609202628558285602402723753117407059584117561773763988140680467005138695274570510340750014361090746975456154437388627457981960834699519004791028356078396629234459455456418906226903245113506758652363542250479241298191136532457610236311624729809E+000000000000000928");
+ return val;
+ }
+
+ static const mp_float& A000142_424(void)
+ {
+ static const mp_float val("+3.75942207660716447977859493924774191232478559808552542332432258613343726979429789418063268134366457154941131955318581191565114867617960461200662340800049757501138675282150501857594301914508713095418754871321780593263665846192075930971648518010178806796417896384478006089102476717593409481452778042184351393912596058031396022977240170795410809113521616240206975928126865668602141914203198310433041889762026740196128885439E+000000000000000931");
+ return val;
+ }
+
+ static const mp_float& A000142_425(void)
+ {
+ static const mp_float val("+1.59775438255804490390590284918029031273803387918634830491283709910671083966257660502676888957105744290849981081010397006415173818737633196010281494840021146937983936994913963289477578313666203065552970820311756752137057984631632270662950620154325992888477605963403152587868552604977199029617430667928349342412853324663343309765327072588049593873246686902087964769453917909155910313536359281934042803148861364583354776312E+000000000000000934");
+ return val;
+ }
+
+ static const mp_float& A000142_426(void)
+ {
+ static const mp_float val("+6.80643366969727129063914613750803673226402432533384377892868604219458817696257633741403546957270470679020919405104291247328640467822317415003799168018490085955811571598333483613174483616218025059255655694528083764103867014530753473024169641857428729704914601404097430024320034097202867866170254645374768198678755163065842499600293329225091269900030886202894729917873690293004177935664890541039022341414149413125091347088E+000000000000000936");
+ return val;
+ }
+
+ static const mp_float& A000142_427(void)
+ {
+ static const mp_float val("+2.90634717696073484110291540071593168467673838691755129360254894001708915156302009607579314550754490979941932585979532362609329479760129536206622244743895266703131541072488397502825504504125096700302164981563491767272351215204631732981320437073122067583998534799549602620384654559505624578854698733575026020835828454629114747329325251579113972247313188408636049674932065755112783978528908261023662539783841799404414005206E+000000000000000939");
+ return val;
+ }
+
+ static const mp_float& A000142_428(void)
+ {
+ static const mp_float val("+1.24391659173919451199204779150641876104164402960071195366189094632731415686897260112043946627722922139415147146799239851196793017337335441496434320750387174148940299579025034131209315927765541387729326612109174476392566320107582381716005147067296244925951372894207229921524632151468407319749811057970111136917734578581261111856951207675860780121850044638896229260870924143188271542810372735718127567027484290145089194228E+000000000000000942");
+ return val;
+ }
+
+ static const mp_float& A000142_429(void)
+ {
+ static const mp_float val("+5.33640217856114445644588502556253648486865288698705428120951215974417773296789245880668531032931335978090981259768738961634242044377169044019703236019160977098953885194017396422887965330114172553358811165948358503724109513261528417561662080918700890732331389716149016363340671929799467401726689438691776777377081342113610169866320680929442746722736691500864823529136264574277684918656499036230767262547907604722432643240E+000000000000000944");
+ return val;
+ }
+
+ static const mp_float& A000142_430(void)
+ {
+ static const mp_float val("+2.29465293678129211627173056099189068849352074140443334092009022868999642517619375728687468344160474470579121941700557753502724079082182688928472391488239220152550170633427480461841825091949094197944288801357794156601367090702457219551514694795041383014902497577944077036236488929813770982742476458637464014272144977108852373042517892799660381090776777345371874117528593766939404515022294585579229922895600270030646036593E+000000000000000947");
+ return val;
+ }
+
+ static const mp_float& A000142_431(void)
+ {
+ static const mp_float val("+9.88995415752736902113115871787504886740707439545310769936558888565388459250939509390642988563331644968196015568729403917596740780844207389281716007314311038857491235430072440790538266146300595993139884733852092814951892160927590616267028334566628360794229764560938972026179267287497352935620073536727469901512944851339153727813252117966536242501247910358552777446548239135508833459746089663846480967680037163832084417716E+000000000000000949");
+ return val;
+ }
+
+ static const mp_float& A000142_432(void)
+ {
+ static const mp_float val("+4.27246019605182341712866056612202111071985613883574252612593439860247814396405868056757771059359270626260678725691102492401792017324697592169701315159782368786436213705791294421512530975201857469036430205024104096059217413520719146227356240532783451863107258290325635915309443468198856468187871767866266997453592175778514410415324914961543656760539097274894799856908839306539816054610310734781679778037776054775460468453E+000000000000000952");
+ return val;
+ }
+
+ static const mp_float& A000142_433(void)
+ {
+ static const mp_float val("+1.84997526489043953961671002513083514094169770811587651381252959459487303633643740868576114868702564181170873888224247379209975943501594057409480669464185765684526880534607630484514925912262404284092774278775437073593641140054471390316445252150695234656725442839711000351328989021730104850725348475486093609897405412112096739709835688178348403377313429120029448338041527419731740351646264548160467343890357031717774382840E+000000000000000955");
+ return val;
+ }
+
+ static const mp_float& A000142_434(void)
+ {
+ static const mp_float val("+8.02889264962450760193652150906782451168696805322290406994637844054174897770013835369620338530169128546281592674893233625771295594796918209157146105474566223070846661520197116302794778459218834592962640369885396899396402547836405833973372394334017318410188421924345741524767812354308655052148012383609646266954739488566499850340686886694032070657540282380927805787100229001635753126144788139016428272484149517655140821527E+000000000000000957");
+ return val;
+ }
+
+ static const mp_float& A000142_435(void)
+ {
+ static const mp_float val("+3.49256830258666080684238685644450366258383110315196327042667462163566080529956018385784847260623570917632492813578556627210513583736659420983358555881436307035818297761285745591715728629760193047938748560900147651237435108308836537778416991535297533508431963537090397563273998374124264947684385386870196126125311677526427434898198795711903950736030022835703595517388599615711552609872982840472146298530605040179986257364E+000000000000000960");
+ return val;
+ }
+
+ static const mp_float& A000142_436(void)
+ {
+ static const mp_float val("+1.52275977992778411178328066940980359688655036097425598590603013503314811111060824016202193405631876920087766866720250689463783922509183507548744330364306229867616777823920585077988057682575444168901294372552464375939521707222652730471389808309389724609676336102171413337587463291118179517190392028675405510990635891401522361615614674930390122520909089956366767645581429432450236937904620518445855786159343797518474008211E+000000000000000963");
+ return val;
+ }
+
+ static const mp_float& A000142_437(void)
+ {
+ static const mp_float val("+6.65446023828441656849293652532084171839422507745749865840935169009485724555335800950803585182611302140783541207567495512956735741365131927988012723692018224521485319090532956790807812072854691018098656408054269322855709860562992432159973462312033096544285588766489076285257214582186444490122013165311522083029078845424652720260236129445804835416372723109322774611190846619807535418643191665608389785516332395155731415881E+000000000000000965");
+ return val;
+ }
+
+ static const mp_float& A000142_438(void)
+ {
+ static const mp_float val("+2.91465358436857445699990619809052867265667058392638441238329604026154747355237080816451970309983750337663191048914563034675050254717927784458749572977103982340410569761653435074373821687910354665927211506727769963410800918926590685286068376492670496286397087879722215412942659986997662686673441766406446672366736534295997891473983424697262517912371252721883375279701590819475700513365717949536474726056153589078210360156E+000000000000000968");
+ return val;
+ }
+
+ static const mp_float& A000142_439(void)
+ {
+ static const mp_float val("+1.27953292353780418662295882096174208729627838634368275703626696167481934088949078478422414966082866398234140870473493172222347061821170297377391062536948648247440240125365857997650107720992645698342045851453491013937341603408773310840584017280282347869728321579198052566281827734291973919449640935452430089168997338555943074357078723442098245363530979944906801747788998369749832525367550179846512404738651425605334348108E+000000000000000971");
+ return val;
+ }
+
+ static const mp_float& A000142_440(void)
+ {
+ static const mp_float val("+5.62994486356633842114101881223166518410362489991220413095957463136920509991375945305058625850764612152230219830083369957778327072013149308460520675162574052288737056551609775189660473972367641072705001746395360461324303054998602567698569676033242330626804614948471431291640042030884685245578420115990692392343588289646149527171146383145232279599536311757589927690271592826899263111617220791324654580850066272663471131677E+000000000000000973");
+ return val;
+ }
+
+ static const mp_float& A000142_441(void)
+ {
+ static const mp_float val("+2.48280568483275524372318929619416434618969858086128202175317241243381944906196791879530854000187193959133526945066766151380242238757798845031089617746695157059333041939259910858640269021814129713062905770160353963444017647254383732355069227130659867806420835192275901199613258535620146193300083271151895345023522435733951941482475554967047435303395513485097158111409772436662575032223194368974172670154879226244590769070E+000000000000000976");
+ return val;
+ }
+
+ static const mp_float& A000142_442(void)
+ {
+ static const mp_float val("+1.09740011269607781772564966891782064101584677274068665361490220629574819648538982010752637468082739729937018909719510638910067069530947089503741611044039259420225204537152880599518998907641845333173804350410876451842255800086437609700940598391751661570438009154985948330229060272744104617438636805849137742500396916594406758135254195295434966404100816960412943885243119417004858164242651911086584320208456618000109119929E+000000000000000979");
+ return val;
+ }
+
+ static const mp_float& A000142_443(void)
+ {
+ static const mp_float val("+4.86148249924362473252462803330594543970020120324124187551401677389016451043027690307634183983606537003620993770057432130371597118022095606501575336925093919231597656099587261055869165160853374825959953272320182681661193194382918610975166850875459860757040380556587751102914737008256383455253161049911680199276758340513221938539176085158776901170166619134629341411627019017331521667594947966113568538523462817740483401285E+000000000000000981");
+ return val;
+ }
+
+ static const mp_float& A000142_444(void)
+ {
+ static const mp_float val("+2.15849822966416938124093484678783977522688933423911139272822344760723304263104294496589577688721302429607721233905499865884989120401810449286699449594741700138829359308216743908805909331418898422726219252910161110657569778306015863272974081788704178176125928967124961489694143231665834254132403506160786008478880703187870540711394181810496944119553978895775427586762396443695195620412156896954424431104417491076774630170E+000000000000000984");
+ return val;
+ }
+
+ static const mp_float& A000142_445(void)
+ {
+ static const mp_float val("+9.60531712200555374652216006820588699975965753736404569764059434185218703970814110509823620714809795811754359490879474403188201585788056499325812550696600565617790648921564510394186296524814097981131675675450216942426185513461770591564734663959733592883760383903706078629138937380912962430889195602415497737731019129186023906165704109056711401332015206086200652761092664174443620510834098191447188718414657835291647104258E+000000000000000986");
+ return val;
+ }
+
+ static const mp_float& A000142_446(void)
+ {
+ static const mp_float val("+4.28397143641447697094888339041982560189280726166436438114770507646607541970983093287381334838805168932042444332932245583821937907261473198699312397610683852265534629419017771635807088250067087699584727351250796756322078739003949683837871660126041182426157131221052911068595966071887181244176581238677311991028034531616966662149904032639293284994078781914445491131447328221801854747832007793385446168412937394540074608499E+000000000000000989");
+ return val;
+ }
+
+ static const mp_float& A000142_447(void)
+ {
+ static const mp_float val("+1.91493523207727120601415087551766204404608484596397087837302416918033571261029442699459456672945910512622972616820713775968406244545878519818592641731975681962693979350300943921205768447779988201714373126009106150075969196334765508675528632076340408544492237655810651247662396834133570016146931813688758459989531435632784097981007102589764098392353215515757134535756955715145429072280907483643294437280583015359413349999E+000000000000000992");
+ return val;
+ }
+
+ static const mp_float& A000142_448(void)
+ {
+ static const mp_float val("+8.57890983970617500294339592231912595732646010991858953511114827792790399249411903293578365894797679096550917323356797716338459975565535768787295034959251055192869027489348228767001842646054347143680391604520795552340341999579749478866368271702005030279325224698031717589527537816918393672338254525325637900753100831634872758954911819602143160797742405510591962720191161603851522243818465526721959079017011908810171807996E+000000000000000994");
+ return val;
+ }
+
+ static const mp_float& A000142_449(void)
+ {
+ static const mp_float val("+3.85193051802807257632158476912128755483958058935344670126490557678962889262985944578816686286764157914351361878187202174635968529028925560185495470696703723781598193342717354716383827348078401867512495830429837203000813557811307516010999353994200258595417025889416241197697864479796358758879876281871211417438142273404057868770755407001362279198186340074255791261365831560129333487474491021498159626478638347055767141790E+000000000000000997");
+ return val;
+ }
+
+ static const mp_float& A000142_450(void)
+ {
+ static const mp_float val("+1.73336873311263265934471314610457939967781126520905101556920750955533300168343675060467508829043871061458112845184240978586185838063016502083472961813516675701719187004222809622372722306635280840380623123693426741350366101015088382204949709297390116367937661650237308538964039015908361441495944326842045137847164023031826040946839933150613025639183853033415106067614624202058200069363520959674171831915387256175095213806E+000000000000001000");
+ return val;
+ }
+
+ static const mp_float& A000142_451(void)
+ {
+ static const mp_float val("+7.81749298633797329364465628893165309254692880609282008021712586809455183759229974522708464818987858487176088931780926813423698129664204424396463057778960207414753533389044871396900977602925116590116610287857354603490151115578048603744323188931229424819398854042570261510727815961746710101146708914057623571690709743873535444670248098509264745632719177180702128364941955151282482312829479528130514961938396525349679414263E+000000000000001002");
+ return val;
+ }
+
+ static const mp_float& A000142_452(void)
+ {
+ static const mp_float val("+3.53350682982476392872738464259710719783121182035395467625814089237873743059171948484264226098182512036203592197164978919667511554608220399827201302116090013751468597091848281871399241876522152698732707850111524280777548304241277968892434081396915700018368282027241758202848972814709512965718312429154045854404200804230838020990952140526187665025989068085677362020953763728379682005398924746714992762796155229458055095247E+000000000000001005");
+ return val;
+ }
+
+ static const mp_float& A000142_453(void)
+ {
+ static const mp_float val("+1.60067859391061805971350524309648956061753895462034146834493782424756805605804892663371694422476677952400227265315735450609382734237523841121722189858588776229415274482607271687743856570064535172525916656100520499192229381821298919908272638872802812108320831758340516465890584685063409373470395530406782772045102964316569623508901319658363012256773047842811844995492054968955995948445712910261891721546658318944498958147E+000000000000001008");
+ return val;
+ }
+
+ static const mp_float& A000142_454(void)
+ {
+ static const mp_float val("+7.26708081635420599109931380365806260520362685397635026628601772208395897450354212691707492678044117903897031784533438945766597613438358238692618741957993044081545346151037013462357108828092989683267661618696363066332721393468697096383557780482524766971776576182865944755143254470187878555555595708046793785084767457997226090730411991248968075645749637206365776279533929559060221605943536612588988415821828768008025269987E+000000000000001010");
+ return val;
+ }
+
+ static const mp_float& A000142_455(void)
+ {
+ static const mp_float val("+3.30652177144116372595018778066441848536765021855923937116013806354820133339911166774726909168510073646273149461962714720323801914114452998605141527590886835057103132498721841125372484516782310305886786036506845195181388234028257178854518790119548768972158342163204004863590180783935484742777796047161291172213569193388737871282337456018280474418816084928896428207187937949372400830704309158727989729198932089443651497844E+000000000000001013");
+ return val;
+ }
+
+ static const mp_float& A000142_456(void)
+ {
+ static const mp_float val("+1.50777392777717065903328562798297482932764849966301315324902295697797980802999492049275470580840593582700556154654997912467653672836190567363944536581444396786039028419417159553169852939652733499484374432647121409002713034716885273557660568294514238651304204026421026217797122437474581042706674997505548774529387552185264469304745879944335896334980134727576771262477699704913814778801164976379963316514713032786305083017E+000000000000001016");
+ return val;
+ }
+
+ static const mp_float& A000142_457(void)
+ {
+ static const mp_float val("+6.89052684994166991178211531988219497002735364345997011034803491338936772269707678665188900554441512672941541626773340459977177284861390892853226532177200893312198359876736419157986227934212992092643591157197344839142398568656165700158508797105930070636460212400744089815332849539258835365169504738600357899599301113486658624722688671345615046250859215705025844669523087651456133539121323942056432356472238559833414229387E+000000000000001018");
+ return val;
+ }
+
+ static const mp_float& A000142_458(void)
+ {
+ static const mp_float val("+3.15586129727328481959620881650604529627252796870466631053939999033233041699526116828656516453934212804207226065062189930669547196466517028926777751737158009136986848823545279974357692393869550378430764749996383936327218544444523890672597029074515972351498777279540793135422445088980546597247633170278963918016479909976889650122991411476291691182893520792901836858641574144366909160917566365461846019264285260403703717059E+000000000000001021");
+ return val;
+ }
+
+ static const mp_float& A000142_459(void)
+ {
+ static const mp_float val("+1.44854033544843773219465984677627479098909033763544183653758459556253966140082487624353341052355803677131116763863545178177322163178131316277390988047355526193876963610007283508230180808786123623699721020248340226774193311900036465818722036345202831309337938771309224049158902295842070888136663625158044438369564278679392349406453057867617886252948126043941943118116482532264411304861162961746987322842306934525300006130E+000000000000001024");
+ return val;
+ }
+
+ static const mp_float& A000142_460(void)
+ {
+ static const mp_float val("+6.66328554306281356809543529517086403854981555312303244807288913958768244244379443072025368840836696914803137113772307819615681950619404054875998545017835420491834032606033504137858831720416168669018716693142365043161289234740167742766121367187933024022954518348022430626130950560873526085428652675727004416499995681925204807269684066191042276763561379802132938343335819648416292002361349624036141685074611898816380028199E+000000000000001026");
+ return val;
+ }
+
+ static const mp_float& A000142_461(void)
+ {
+ static const mp_float val("+3.07177463535195705489199567107376832177146496998971795856160189334992160596658923256203695035625717277724246209449033904842829379235545269297835329253222128846735489031381445407552921423111853756417628395538630284897354337215217329415181950273637124074582032958438340518646368208562695525382608883510149036006498009367519416151324354514070489588001796088783284576277812857919910613088582176680661316819396085354351193000E+000000000000001029");
+ return val;
+ }
+
+ static const mp_float& A000142_462(void)
+ {
+ static const mp_float val("+1.41915988153260415936010200003608096465841681613524969685546007472766378195656422544366107106459081382308601748765453664037387173206821914415599922114988623527191795932498227778289449697477676435464944318738847191622577703793430406189814061026420351322456899226798513319614622112355965332726765304181688854635002080327793970261911851785500566189656829793017877474240349540358998703246924965626465528370560991433710251166E+000000000000001032");
+ return val;
+ }
+
+ static const mp_float& A000142_463(void)
+ {
+ static const mp_float val("+6.57071025149595725783727226016705486636846985870620609644078014598908331045889236380415075902905546800088826096784050464493102611947585463744227639392397326930898015167466794613480152099321641896202692195760862497212534768563582780658839102552326226622975443420077116669815700380208119490524923358361219396960059631917686082312651873766867621458111121941672772705732818371862163996033262590850535396355697390338078462898E+000000000000001034");
+ return val;
+ }
+
+ static const mp_float& A000142_464(void)
+ {
+ static const mp_float val("+3.04880955669412416763649432871751345799497001443967962874852198773893465605292605680512595218948173715241215308907799415524799611943679655177321624678072359695936679037704592700654790574085241839838049178833040198706616132613502410225701343584279369153060605746915782134794484976416567443603564438279605800189467669209806342193070469427826576356563560580936166535460027724544044094159433842154648423909043589116868406785E+000000000000001037");
+ return val;
+ }
+
+ static const mp_float& A000142_465(void)
+ {
+ static const mp_float val("+1.41769644386276773795096986285364375796766105671445102736806272429860461506461061641438356776810900777587165118642126728219031819553811039657454555475303647258610555752532635605804477616949637455524692868157363692398576501665278620754951124766689906656173181672315838692679435514033703861275657463800016697088102466182559949119777768283939358005802055670135317438988912891912980503784136736601911517117705268939343809155E+000000000000001040");
+ return val;
+ }
+
+ static const mp_float& A000142_466(void)
+ {
+ static const mp_float val("+6.60646542840049765885151956089797991212930052428934178753517229523149750620108547249102742579938797623556189452872310553500688279120759444803738228514914996225125189806802081923048865694985310542745068765613314806577366497760198372718072241412774965017767026592991808307886169495397059993544563781308077808430557492410729362898164400203157408307037579422830579265688334076314489147634077192564907669768506553257342150662E+000000000000001042");
+ return val;
+ }
+
+ static const mp_float& A000142_467(void)
+ {
+ static const mp_float val("+3.08521935506303240668365963493935661896438334484312261477892546187310933539590691565330980784831418490200740474491369028484821426349394660723345752716465303237133463639776572258063820279558140023461947113541418014671630154454012640059339736739765908663297201418927174479782841154350427016985311285870872336537070348955810612473442774894874509679386549590461880517076452013638866431945114048927811881781892560371178784359E+000000000000001045");
+ return val;
+ }
+
+ static const mp_float& A000142_468(void)
+ {
+ static const mp_float val("+1.44388265816949916632795270915161889767533140538658138371653711615661516896528443652574899007301103853413946542061960705330896427531516701218525812271305761914978460983415435816773867890833209530980191249137383630866322912284477915547770996794210445254423090264057917656538369660235999843949125681787568253499348923311319366637571218650801270529952905208336160081991779542382989490150313374898215960673925718253711671080E+000000000000001048");
+ return val;
+ }
+
+ static const mp_float& A000142_469(void)
+ {
+ static const mp_float val("+6.77180966681495109007809820592109263009730429126306668963055907477452514244718400730576276344242177072511409282270595708001904245122813328714886059552424023381248982012218393980669440408007752700297096958454329228763054458614201423919045974964846988243244293338431633809164953706506839268121399447583695108911946450330087829530209015472257958785479125427096590784541446053776220708804969728272632855560711618609907737365E+000000000000001050");
+ return val;
+ }
+
+ static const mp_float& A000142_470(void)
+ {
+ static const mp_float val("+3.18275054340302701233670615678291353614573301689364134412636276514402681695017648343370849881793823224080362362667179982760894995207722264495996447989639290989187021545742645170914636991763643769139635570473534737518635595548674669241951608233478084474324817869062867890307528242058214456017057740364336701188614831655141279879198237271961240629175188950735397668734479645274823733138335772288137442113534460746656636562E+000000000000001053");
+ return val;
+ }
+
+ static const mp_float& A000142_471(void)
+ {
+ static const mp_float val("+1.49907550594282572281058859984475227552464025095690507308351686238283663078353312369727670294324890738541850672816241771880381542742837186577614327003120106055907087148044785875500794023120676215264768353693034861371277365503425769212959207477968177787406989216328610776334845802009419008784034195711602586259837585709571542823102369755093744336341513995796372301973939912924441978308156148747712735235474731011675275821E+000000000000001056");
+ return val;
+ }
+
+ static const mp_float& A000142_472(void)
+ {
+ static const mp_float val("+7.07563638805013741166597819126723074047630198451659194495419959044698889729827634385114603789213484285917535175692661163275400881746191520646339623454726900583881451338771389332363747789129591736049706629431124545672429165176169630685167459296009799156560989101071042864300472185484457721460641403758764207146433404549177682125043185244042473267531946060158877265316996389003366137614497022089204110311440730375107301873E+000000000000001058");
+ return val;
+ }
+
+ static const mp_float& A000142_473(void)
+ {
+ static const mp_float val("+3.34677601154771499571800768446940014024529083867634798996333640628142574842208471064159207592297978067238994138102628730229264617065948589265718641894085823976175926483238867154208052704258296891151511235720921910103058995128328235314084208247012635001053347844806603274814123343734148502250883383977895469980263000351761043645145426620432089855542610486455148946494939291998592183091657091448193544177311465467425753786E+000000000000001061");
+ return val;
+ }
+
+ static const mp_float& A000142_474(void)
+ {
+ static const mp_float val("+1.58637182947361690797033564243849566647626785753258894724262145657739580475206815284411464398749241603871283221460646018128671428489259631311950636257796680564707389153055223031094616981818432726405816325731716985388849963690827583538875914709083988990499286878438329952261894464929986390066918724005522452770644662166734734687798932218084810591527197370579740600638601224407332694785445461346443739940045634631559807295E+000000000000001064");
+ return val;
+ }
+
+ static const mp_float& A000142_475(void)
+ {
+ static const mp_float val("+7.53526618999968031285909430158285441576227232327979749940245191874263007257232372600954455894058897618388595301938068586111189285323983248731765522224534232682360098477012309397699430663637555450427627547225655680597037327531431021809660594868148947704871612672582067273243998708417435352817863939026231650660562145291989989767044928035902850309754187510253767853033355815934830300230865941395607764715216764499909084649E+000000000000001066");
+ return val;
+ }
+
+ static const mp_float& A000142_476(void)
+ {
+ static const mp_float val("+3.58678670643984782892092888755343870190284162588118360971556711332149191454442609358054321005572035266352971363722520646988926099814216026396320388578878294756803406875057859273304928995891476394403550712479412103964189767904961166381398443157238899107518887632149064022064143385206699227941303234976486265714427581158987235129113385745089756747442993254880793498043877368384979222909892188104309296004443179901956724293E+000000000000001069");
+ return val;
+ }
+
+ static const mp_float& A000142_477(void)
+ {
+ static const mp_float val("+1.71089725897180741439528307936299026080765545554532458183432551305435164323769124663791911119657860822050367340495642348613717749611381044591044825352124946598995225079402598873366451131040234240130493689852679573590918519290666476363927057386002954874286509400535103538524596394743595531728001643083783948745781956212836911156587085000407813968530307782578138498566929504719635089328018573725755534194119396813233357488E+000000000000001072");
+ return val;
+ }
+
+ static const mp_float& A000142_478(void)
+ {
+ static const mp_float val("+8.17808889788523944080945311935509344666059307750665150116807595239980085467616415892925335151964574729400755887569170426373570843142401393145194265183157244743197175879544422614691636406372319667823759837495808361764590522209385757019571334305094124299089514934557794914147570766874386641659847853940487275004837750697360435328486266301949350769574871200723502023149923032559855726987928782409111453447890716767255448791E+000000000000001074");
+ return val;
+ }
+
+ static const mp_float& A000142_479(void)
+ {
+ static const mp_float val("+3.91730458208702969214772804417108976095042408412568606905950838119950460938988263212711235537791031295382962070145632634232940433865210267316548053022732320231991447246301778432437293838652341120887580962160492205285238860138295777612374669132140085539263877653653183763876686397332831201355067122037493404727317282584035648522344921558633739018626363305146557469088813132596170893227217886773964386201539653331515359971E+000000000000001077");
+ return val;
+ }
+
+ static const mp_float& A000142_480(void)
+ {
+ static const mp_float val("+1.88030619940177425223090946120212308525620356038032931314856402297576221250714366342101393058139695021783821793669903664431811408255300928311943065450911513711355894678224853647569901042553123738026038861837036258536914652866381973253939841183427241058846661273753528206660809470719758976650432218577996834269112295640337111290725562348144194728940654386470347585162630303646162028749064585651502905376739033599127372786E+000000000000001080");
+ return val;
+ }
+
+ static const mp_float& A000142_481(void)
+ {
+ static const mp_float val("+9.04427281912253415323067450838221204008233912542938399624459295051341624215936102105507700609651933054780182827552236625917012873707997465180446144818884380951621853402261546044811224014680525179905246925436144403562559480287297291351450636092285029493052440726754470674038493554162040677688578971360164772834430142030021505308389954894573576646204547598922371884632251760538039358283000656983728974862114751611802663101E+000000000000001082");
+ return val;
+ }
+
+ static const mp_float& A000142_482(void)
+ {
+ static const mp_float val("+4.35933949881706146185718511304022620331968745845696308618989380214746662872081201214854711693852231732404048122880178053692000205127254778216975041802702271618681733339890065193599009975076013136714329018060221602517153669498477294431399206596481384215651276430295654864886553893106103606645895064195599420506195328458470365558643958259184463943470591942680583248392745348579334970692406316666157365883539310276888883615E+000000000000001085");
+ return val;
+ }
+
+ static const mp_float& A000142_483(void)
+ {
+ static const mp_float val("+2.10556097792864068607702040959842925620340904243471317062971870643722638167215220186774825748130627926751155243351125999933236099076464057878798945190705197191823277203166901488508321817961714345033020915723087034015785222367764533210365816786100508576159566515832801299740205530370248042009967316006474520104492343645441186564825031839186096084696295908314721708973696003363818790844432250949754007721749486863737330786E+000000000000001088");
+ return val;
+ }
+
+ static const mp_float& A000142_484(void)
+ {
+ static const mp_float val("+1.01909151331746209206127787824563976000244997653840117458478385391561756872932166570399015662095223916547559137781944983967686271953008604013338689472301315440842466166332780320438027759893469742995982123209974124463640047625998034073817055324472646150861230193663075829074259476699200052332824180947133667730574294324393534297375315410166070504993007219624325307143268865628088294768705209459680939737326751642048868100E+000000000000001091");
+ return val;
+ }
+
+ static const mp_float& A000142_485(void)
+ {
+ static const mp_float val("+4.94259383958969114649719770949135283601188238621124569673620169149074520833721007866435225961161835995255661818242433172243278418972091729464692643940661379888085960906713984554124434635483328253530513297568374503648654230986090465258012718323692333831676966439265917771010158461991120253814197277593598288493285327473308641342270279739305441949216085015177977739644853998296228229628220265879452557726034745463937010287E+000000000000001093");
+ return val;
+ }
+
+ static const mp_float& A000142_486(void)
+ {
+ static const mp_float val("+2.40210060604058989719763808681279747830177483969866540861379402206450217125188409823087519817124652293694251643665822521710233311620436580519840624955161430625609777000662996493304475232844897531215829462618230008773245956259239966115394181105314474242195005689483236036710937012527684443353699876910488768207736669152027999692343355953302444787319017317376497181467399043171966919599315049217413943054852886295473386999E+000000000000001096");
+ return val;
+ }
+
+ static const mp_float& A000142_487(void)
+ {
+ static const mp_float val("+1.16982299514176727993524974827783237193296434693325005399491768874541255739966755583843622150939705667029100550465255568072883622759152614713162384353163616714671961399322879292239279438395465097702108948295078014272570780698249863498196966198288148955948967770778335949878226325100982323913251840055408030117167757877037635850171214349258290611424361433562354127374623334024747889844866428968880590267713355625895539469E+000000000000001099");
+ return val;
+ }
+
+ static const mp_float& A000142_488(void)
+ {
+ static const mp_float val("+5.70873621629182432608401877159582197503286601303426026349519832107761328011037767249156876096585763655102010686270447172195672079064664759800232435643438449567599171628695650946127683659369869676786291667679980709650145409807459333871201195047646166905030962721398279435405744466492793740696668979470391186971778658439943662948835526024380458183750883795784288141588161870040769702442948173368137280506441175454370232607E+000000000000001101");
+ return val;
+ }
+
+ static const mp_float& A000142_489(void)
+ {
+ static const mp_float val("+2.79157200976670209545508517931035694579107148037375326884915197900695289397397468184837712411230438427344883225586248667203683646662621067542313661029641401838555994926432173312656437309431866271948496625495510567018921105395847614263017384378298975616560140770763758643913409044114976139200671130961021290429199763977132451181980572225922044051854182176138516901236611154449936384494601656777019130167649734797187043745E+000000000000001104");
+ return val;
+ }
+
+ static const mp_float& A000142_490(void)
+ {
+ static const mp_float val("+1.36787028478568402677299173786207490343762502538313910173608446971340691804724759410570479081502914829398992780537261846929804986864684323095733693904524286900892437513951764923201654281621614473254763346492800177839271341643965330988878518345366498052114468977674241735517570431616338308208328854170900432310307884348794901079170480390701801585408549266307873281605939465680468828402354811820739373782148370050621651435E+000000000000001107");
+ return val;
+ }
+
+ static const mp_float& A000142_491(void)
+ {
+ static const mp_float val("+6.71624309829770857145538943290278777587873887463121298952417474629282796761198568705901052290179311812349054552437955668425342485505600026400052437071214248683381868193503165772920122522762127063680888031279648873190822287471869775155393525075749505435882042680380526921391270819236221093302894673979121122643611712152582964298727058718345845784355976897571657812685162776491101947455562126039830325270348496948552308546E+000000000000001109");
+ return val;
+ }
+
+ static const mp_float& A000142_492(void)
+ {
+ static const mp_float val("+3.30439160436247261715605160098817158573233952631855679084589397517607136006509695803303317726768221411675734839799474188865268502868755212988825799039037410352223879151203557560276700281198966515330996911389587245609884565436159929376453614337268756674453964998747219245324505243064220777905024179597727592340656962379070818434973712889426156125903140633605255643841100086033622158148136566011596520033011460498687735805E+000000000000001112");
+ return val;
+ }
+
+ static const mp_float& A000142_493(void)
+ {
+ static const mp_float val("+1.62906506095069900025793343928716859176604338647504849788702572976180318051209280031028535639296733155956137276021140775110577371914296320003491118926245443303646372421543353877216413238631090492058181477315066512085673090760026845182591631868273497040505804744382379087944981084830660843507176920541679703023943882452881913488442040454487094970070248332367391032413662342414575723967031327043717084376274650025853053752E+000000000000001115");
+ return val;
+ }
+
+ static const mp_float& A000142_494(void)
+ {
+ static const mp_float val("+8.04758140109645306127419119007861284332425432918673957956190710502330771172973843353280966058125861790423318143544435429046252217256623820817246127495652489920013079762424168153449081398837587030767416497936428569703225068354532615202002661429271075380098675437248952694448206559063464566925453987475897732938282779317236652632903679845166249152147026761894911700123491971528004076397134755595962396818796771127714085533E+000000000000001117");
+ return val;
+ }
+
+ static const mp_float& A000142_495(void)
+ {
+ static const mp_float val("+3.98355279354274426533072463908891335744550589294743609188314401698653731730622052459874078198772301586259542481054495537377894847542028791304536833110347982510406474482399963235957295292424605580229871166478532142003096408835493644524991317407489182313148844341438231583751862246736414960628099723800569377804449975762032143053287321523357293330312778247137981291561128525906362017816581704020001386425304401708218472339E+000000000000001120");
+ return val;
+ }
+
+ static const mp_float& A000142_496(void)
+ {
+ static const mp_float val("+1.97584218559720115560403942098810102529297092290192830157403943242532250938388538020097542786591061586784733070603029786539435844380846280487050269222732599325161611343270381765034818465042604367794016098573351942433535818782404847684395693434114634427321826793353362865540923674381261820471537463005082411391007187977967942954430511475585217491835138010580438720614319748849555560837024525193920687666950983247276362280E+000000000000001123");
+ return val;
+ }
+
+ static const mp_float& A000142_497(void)
+ {
+ static const mp_float val("+9.81993566241808974335207592231086209570606548682258365882297597915385287163791033959884787649357576086320123360897058039100996146572806014020639838036981018646053208376053797372223047771261743707936260009909559153894673019348552092991446596367549733103789479162966213441738390661674871247743541191135259584613305724250500676483519642033658530934420635912584780441453169151782291137360011890213785817704746386738963520532E+000000000000001125");
+ return val;
+ }
+
+ static const mp_float& A000142_498(void)
+ {
+ static const mp_float val("+4.89032795988420869218933380931080932366162061243764666209384203761861873007567934912022624249380072890987421433726734903472296080993257394982278639342416547285734497771274791091367077790088348366552257484934960458639547163635578942309740404991039767085687160623157174293985718549514085881376283513185359273137426250676749336888792781732761948405341476684467220659843678237587580986405285921326465337216963700596003833225E+000000000000001128");
+ return val;
+ }
+
+ static const mp_float& A000142_499(void)
+ {
+ static const mp_float val("+2.44027365198222013740247757084609385250714868560638568438482717677169074630776399521099289500440656372602723295429640716832675744415635440096157041031865857095581514387866120754592171817254085834909576484982545268861134034654153892212560462090528843775757893150955429972698873556207528854806765473079494277295575699087697919107507598084648212254265396865549143109261995440556202912216237674741906203271264886597405912779E+000000000000001131");
+ return val;
+ }
+
+ static const mp_float& A000142_500(void)
+ {
+ static const mp_float val("+1.22013682599111006870123878542304692625357434280319284219241358838584537315388199760549644750220328186301361647714820358416337872207817720048078520515932928547790757193933060377296085908627042917454788242491272634430567017327076946106280231045264421887878946575477714986349436778103764427403382736539747138647787849543848959553753799042324106127132698432774571554630997720278101456108118837370953101635632443298702956390E+000000000000001134");
+ return val;
+ }
+
+ static const mp_float& A000142_501(void)
+ {
+ static const mp_float val("+6.11288549821546144419320631496946510053040745744399613938399207781308531950094880800353720198603844213369821855051249995665852739761166777440873387784823972024431693541604632490253390402221485016448489094881275898497140756808655499992463957536774753658273522343143352081610678258299859781290947510064133164625417126214683287364306533202043771696934819148200603488701298578593288295101675375228475039194518540926501811512E+000000000000001136");
+ return val;
+ }
+
+ static const mp_float& A000142_502(void)
+ {
+ static const mp_float val("+3.06866852010416164498498957011467148046626454363688606197076402306216883038947630161777567539699129795111650571235727497824258075360105722275318440667981633956264710157885525510107201981915185478257141525630400501045564659917945060996216906683460926336453308216257962744968560485666529610208055650052194848641959397359771010256881879667425973391861279212396702951328051886453830724141041038364694469675648307545103909379E+000000000000001139");
+ return val;
+ }
+
+ static const mp_float& A000142_503(void)
+ {
+ static const mp_float val("+1.54354026561239330742744975376767975467453106544935368917129430360027092168590657971374116472468662286941160237331570931405601811906133178304485175655994761880001149209416419331583922596903338295563342187392091452025919023938726365681097104061780845947236014032777755260719185924290264393934651991976254008866905576871964818159211585472715264616106223443835541584518010098886276854242943642297441318246851098695187266418E+000000000000001142");
+ return val;
+ }
+
+ static const mp_float& A000142_504(void)
+ {
+ static const mp_float val("+7.77944293868646226943434675898910596355963656986474259342332329014536544529696916175725547021242057926183447596151117494284233132006911218654605285306213599875205792015458753431182969888392825009639244624456140918210631880651180883032729404471375463574069510725199886514024697058422932545430646039560320204689204107434702683522426390782484933665175366156931129585970770898386835345384435957179104243964129537423743822745E+000000000000001144");
+ return val;
+ }
+
+ static const mp_float& A000142_505(void)
+ {
+ static const mp_float val("+3.92861868403666344606434511328949851159761646778169500967877826152340954987496942668741401245727239252722641036056314334613537731663490165420575669079637867936978924967806670482747399793638376629867818535350351163696369099728846345931528349258044609104905102916225942689582472014503580935442476249977961703368048074254524855178825327345154891500913559909250220440915239303685351849419140158375447643201885416398990630486E+000000000000001147");
+ return val;
+ }
+
+ static const mp_float& A000142_506(void)
+ {
+ static const mp_float val("+1.98788105412255170370855862732448624686839393269753767489746180033084523223673452990383149030337983061877656364244495053314450092221726023702811288554296761176111336033710175264270184295581018574713116178887277688830362764462796251041353344724570572207081982075610327000928730839338811953333892982488848621904232325572789576720485615636648375099462261314080611543103111087664788035806084920137976507460154020697889259026E+000000000000001150");
+ return val;
+ }
+
+ static const mp_float& A000142_507(void)
+ {
+ static const mp_float val("+1.00785569444013371378023922405351452716227572387765160117301313276773853274402440666124256558381357412371971776671958992030426196756415094017325323297028457916288447369091058858984983437859576417379549902695849788236993921582637699277966145775357280108990564912334435789470866535544777660340283742121846251305445789065404315397286207127780726175427366486238870052353277321446047534153685054509954089282298088493829854326E+000000000000001153");
+ return val;
+ }
+
+ static const mp_float& A000142_508(void)
+ {
+ static const mp_float val("+5.11990692775587926600361525819185379798436067729847013395890671446011174633964398583911223316577295654849616625493551679514565079522588677608012642348904566214745312634982579003643715864326648200288113505694916924243929121639799512332068020538814982953672069754658933810512002000567470514528641409978978956631664608452253922218213932209126088971171021750093459865954648792945921473500720076910566773554074289548655659977E+000000000000001155");
+ return val;
+ }
+
+ static const mp_float& A000142_509(void)
+ {
+ static const mp_float val("+2.60603262622774254639584016641965358317403958474492129818508351766019687888687878879210812668137843488318454862376217804872913625476997636902478434955592424203305364131206132712854651374942263933946649774398712714440159922914657951777022622454256826323419083505121397309550609018288842491895078477679300288925517285702197246409070891494445179286326050070797571071770916235609474030011866519147478487739023813380265730928E+000000000000001158");
+ return val;
+ }
+
+ static const mp_float& A000142_510(void)
+ {
+ static const mp_float val("+1.32907663937614869866187848487402332741876018821990986207439259400670040823230818228397514460750300179042411979811871080485185948993268794820264001827352136343685735706915127683555872201220554606312791384943343484364481560686475555406281537451670981424943732587611912627870810599327309670866490023616443147352013815708120595668626154662167041436026285536106761246603167280160831755306051924765214028746902144823935522773E+000000000000001161");
+ return val;
+ }
+
+ static const mp_float& A000142_511(void)
+ {
+ static const mp_float val("+6.79158162721211985016219905770625920310986456180373939520014615537423908606709481147111298894434033914906725216838661221279300199355603541531549049337769416716234109462336302462970506948237034038258363977060485205102500775107890088126098656378038715081462473522696873528419842162562552418127764020680024482968790598268496243866679650323673581738094319089505549970142184801621850269613925335550243686896669960050310521373E+000000000000001163");
+ return val;
+ }
+
+ static const mp_float& A000142_512(void)
+ {
+ static const mp_float val("+3.47728979313260536328304591754560471199225065564351457034247483155161041206635254347320985033950225364432243311021394545295001702070069013264153113260937941358711864044716186861040899557497361427588282356254968425012480396855239725120562512065555822121708786443620799246550959187232026838081415178588172535280020786313470076859739980965720873849904291373826841584712798618430387338042329771801724767691095019545758986943E+000000000000001166");
+ return val;
+ }
+
+ static const mp_float& A000142_513(void)
+ {
+ static const mp_float val("+1.78384966387702655136420255570089521725202458634512297458568958858597614139003885480175665322416465611953740818553975401736335873161945403804510547102861163917019186254939403859713981472996146412352788848758798802031402443586737978986848568689630136748436607445577470013480642063050029767935765986615732510598650663378810149429046610235414808285000901474773169732957665691254788704415715172934284805825531745026974360302E+000000000000001169");
+ return val;
+ }
+
+ static const mp_float& A000142_514(void)
+ {
+ static const mp_float val("+9.16898727232791647401200113630260141667540637381393208937044448533191736674479971368102919757220633245442227807367433564924766388052399375555184212108706382533478617350388535838929864771200192559493334682620225842441408560035833211992401643064698902886964162270268195869290500204077153007189837171204865104477064409767084168065299576610032114584904633580334092427402401653049613940696775988882223901943233169438648211950E+000000000000001171");
+ return val;
+ }
+
+ static const mp_float& A000142_515(void)
+ {
+ static const mp_float val("+4.72202844524887698411618058519583972958783428251417502602577890994593744387357185254573003674968626121402747320794228285936254689846985678410919869235983787004741487935450095957048880357168099168139067361549416308857325408418454104176086846178319934986786543569188120872684607605099733798702766143170505528805688171030048346553629281954166539011225886293872057600112236851320551179458839634274345309500765082260903829154E+000000000000001174");
+ return val;
+ }
+
+ static const mp_float& A000142_516(void)
+ {
+ static const mp_float val("+2.43656667774842052380394918196105330046732248977731431342930191753210372103876307591359669896283811078643817617529821795543107419961044610060034652525767634094446607774692249513837222264298739170759758758559498815370379910743922317754860812628013086453181856481701070370305257524231462640130627329875980852863735096251504946821672709488349934129792557327637981721657914215281404408600761251285562179702394782446626375844E+000000000000001177");
+ return val;
+ }
+
+ static const mp_float& A000142_517(void)
+ {
+ static const mp_float val("+1.25970497239593341080664172707386455634160572721487150004294909136409762377704051024732949336378730327658853708262917868295786536119860063401037915355821866826828896219515892998653843910642448151282795278175260887546486413854607838279263040128682765696295019801039453381447818140027666184947534329545882100930551044762028057506804790805476915945102752138388836550097141649300486079246593566914635646906138102524905836311E+000000000000001180");
+ return val;
+ }
+
+ static const mp_float& A000142_518(void)
+ {
+ static const mp_float val("+6.52527175701093506797840414624261840184951766697303437022247629326602569116506984308116677562441823097272862208801914557772174257100875128417376401543157270162973682417092325733026911457127881423644879540947851397490799623766868602286582547866576726306808202569384368515899697965343310838028227827047669282820254411867305337885248816372370424595632256076854173329503193743376517890497354676617812650973795371079012232092E+000000000000001182");
+ return val;
+ }
+
+ static const mp_float& A000142_519(void)
+ {
+ static const mp_float val("+3.38661604188867530028079175189991895055989966915900483814546519620506733371467124855912555654907306187484615486368193655483758439435354191648618352400898623214583341174470917055440967046249370458871692481751934875297725004735004804586736342342753320953233457133510487259751943244013178324936650242237740357783712039759131470362444135697260250365133140903887315958012157552812412785168127077164644765855399797590007348456E+000000000000001185");
+ return val;
+ }
+
+ static const mp_float& A000142_520(void)
+ {
+ static const mp_float val("+1.76104034178211115614601171098795785429114782796268251583564190202663501353162904925074528940551799217492000052911460700851554388506384179657281543248467284071583337410724876868829302864049672638613280090511006135154817002462202498385102898018231726895681397709425453375071010486886852728967058125963624986047530260674748364588470950562575330189869233270021404298166321927462454648287426080125615278244807894746803821197E+000000000000001188");
+ return val;
+ }
+
+ static const mp_float& A000142_521(void)
+ {
+ static const mp_float val("+9.17502018068479912352072101424726042085688018368557590750369430955876842049978734659638295780274873923133320275668710251436598364118261576014436840324514550012949187909876608486600667921698794447175189271562341964156596582828075016586386098674987297126500082066106612084119964636680502717918372836270486177307632658115438979505933652431017470289218705336811516393446537242079388717577489877454455599655449131630847908436E+000000000000001190");
+ return val;
+ }
+
+ static const mp_float& A000142_522(void)
+ {
+ static const mp_float val("+4.78936053431746514247781636943706993968729145588387062371692842958967711550088899492331190397303484187875593183899066751249904346069732542679536030649396595106759476088955589630005548655126770701425448799755542505289743416236255158658093543508343369100033042838507651507910621540347222418753390620533193784554584247536259147302097366568991119490972164185815611557379092440365440910575449716031225823020144446711302608204E+000000000000001193");
+ return val;
+ }
+
+ static const mp_float& A000142_523(void)
+ {
+ static const mp_float val("+2.50483555944803426951589796121558757845645343142726433620395356867540113140696494434489212577789722230258935235179211910903699972994470119821397344029634419240835205994523773376492901946631301076845509722272148730266535806691561447978182923254863582039317281404539501738637255065601597325008023294538860349322047561461463534038996922715582355493778441869181564844509265346311125596230960201484331105439535545630011264091E+000000000000001196");
+ return val;
+ }
+
+ static const mp_float& A000142_524(void)
+ {
+ static const mp_float val("+1.31253383315076995722633053167696789111118159806788651217087166998591019285724963083672347390761814448655682063233907041313538785849102342786412208271528435682197647941130457249282280620034801764267047094470605934659664762706378198740567851785548516988602255455978698911045921654375236998304204206338362823044752922205806891836434387502965154278739903539451139978522855041467029812425023145577789499250316625910125902383E+000000000000001199");
+ return val;
+ }
+
+ static const mp_float& A000142_525(void)
+ {
+ static const mp_float val("+6.89080262404154227543823529130408142833370338985640418889707626742602851250056056189279823801499525855442330831978011966896078625707787299628664093425524287331537651690934900558731973255182709262401997245970681156963240004208485543387981221874129714190161841143888169282991088685469994241097072083276404820984952841580486182141280534390567059963384493582118484887244988967701906515231371514283394871064162286028160987513E+000000000000001201");
+ return val;
+ }
+
+ static const mp_float& A000142_526(void)
+ {
+ static const mp_float val("+3.62456218024585123688051176322594683130352798306446860335986211666609099757529485555561187319588750599962666017620434294587337357122296119604677313141825775136388804789431757693893017932226105072023450551380578288562664242213663395822078122705792229664025128441685177042853312648557216970817059915803388935838085194671335731806313561089438273540740243624194323050690864197011202827011701416513065702179749362450812679432E+000000000000001204");
+ return val;
+ }
+
+ static const mp_float& A000142_527(void)
+ {
+ static const mp_float val("+1.91014426898956360183602969922007398009695924707497495397064733548302995572218038887780745717423271566180324991285968873247526787203450055031664944025742183496876900124030536304681620450283157372956358440577564758072524055646600609598235170665952505032941242688768088301583695765789653343620590575628385969186670897591793930661927246694133970155970108389950408247714085431824903889835166646502385625048727914011578282061E+000000000000001207");
+ return val;
+ }
+
+ static const mp_float& A000142_528(void)
+ {
+ static const mp_float val("+1.00855617402648958176942368118819906149119448245558677569650179313503981662131124532748233738799487386943211595398991565074694143643421629056719090445591872886351003265488123168871895597749507092920957256624954192262292701381405121867868170111622922657392976139669550623236191364336936965431671823931787791730562233928467195389497586254502736242352217229893815554793037108003549253832967989353259610025728338598113332928E+000000000000001210");
+ return val;
+ }
+
+ static const mp_float& A000142_529(void)
+ {
+ static const mp_float val("+5.33526216060012988756025127348557303528841881219005404343449448568436062992673648778238156478249288276929589339660665379245132019873700417710043988457181007568796807274432171563332327712094892521551863887546007677067528390307633094681022619890485260857608843778851922796919452317342396547133543948599157418254674217481591463610442231286319474722043229146138284284855166301338775552776400663678743337036102911184019531189E+000000000000001212");
+ return val;
+ }
+
+ static const mp_float& A000142_530(void)
+ {
+ static const mp_float val("+2.82768894511806884040693317494735370870286197046072864302028207741271113386117033852466222933472122786772682350020152650999919970533061221386323313882305934011462307855449050928566133687410293036422487860399384068845790046863045540180941988541957188254532687202791519082367309728191470169980778292757553431674977335265243475713534382581749321602682911447453290670973238139709551042971492351749733968629134542927530351530E+000000000000001215");
+ return val;
+ }
+
+ static const mp_float& A000142_531(void)
+ {
+ static const mp_float val("+1.50150282985769455425608151589704481932121970631464690944376978310614961208028144975659564377673697199776294327860701057680957504353055508556137679671504450960086485471243446043068616988014865602340341053872072940557114514884277181836080195915779266963156856904682296632737041465669670660259793273454260872219412965025844285603886757150908889771024625978597697346286789452185771603817862438779108737342070442294518616663E+000000000000001218");
+ return val;
+ }
+
+ static const mp_float& A000142_532(void)
+ {
+ static const mp_float val("+7.98799505484293502864235366457227843878888883759392155824085524612471593626709731270508882489224069102809885824218929626862693923158255305518652455852403679107660102707015132949125042376239085004450614406599428043763849219184354607367946642271945700243994478732909818086161060597362647912582100214776667840207276973937491599412677548042835293581851010206139749882245719885628304932311028174304858482659814753006839040645E+000000000000001220");
+ return val;
+ }
+
+ static const mp_float& A000142_533(void)
+ {
+ static const mp_float val("+4.25760136423128437026637450321702440787447775043756019054237584618447359403036286767181234366756428831797669144308689491117815861043350077841441758969331160964382834742839065861883647586535432307372177478717495147326131633825261005727115560330947058230049057164640933039923845298394291337406259414475963958830478627108683022486957133106831211479126588439872486687236968699039886528921778016904489571257681263352645208664E+000000000000001223");
+ return val;
+ }
+
+ static const mp_float& A000142_534(void)
+ {
+ static const mp_float val("+2.27355912849950585372224398471789103380497111873365714174962870186250889921221377133674779151847932996179955323060840188256913669797148941567329899289622839954980433752676061170245867811209920852136742773635142408672154292462689377058279709216725729094846196525918258243319333389342551574174942527330164754015475586876036734008035109079047866929853598226891907890984541285287299406444229461026997431051601794630312541426E+000000000000001226");
+ return val;
+ }
+
+ static const mp_float& A000142_535(void)
+ {
+ static const mp_float val("+1.21635413374723563174140053182407170308565954852250657083605135549644226107853436766516006846238644152956276097837549500717448813341474683738521496119948219375914532057681692726081539278997307655893157383894801188639602546467538816726179644430948265065742715141366268160175843363298265092183594252121638143398279438978679652694298783357290608807471675051387170721676729587628705182447662761649443625612606960127217209663E+000000000000001229");
+ return val;
+ }
+
+ static const mp_float& A000142_536(void)
+ {
+ static const mp_float val("+6.51965815688518298613390685057702432853913518008063521968123526546093051938094421068525796695839132659845639884409265323845525639510304304838475219202922455854901891829173873011797050535425569035587323577676134371108269649066008057652322894149882700752380953157723197338542520427278700894104065191371980448614777792925722938441441478795077663208048178275435235068187270589689859777919472402441017833283573306281884243794E+000000000000001231");
+ return val;
+ }
+
+ static const mp_float& A000142_537(void)
+ {
+ static const mp_float val("+3.50105643024734326355390797875986206442551559170330111296882333755251968890756704113798352825665614238337108617927775478905047268417033411698261192711969358794082315912266369807335016137523530572110392761212084157285140801548446326959297394158487010304028571845697356970797333469448662380133883007766753500906135674801113217943054074112956705142721871733908721231616564306663454700742756680110826576473278865473371838918E+000000000000001234");
+ return val;
+ }
+
+ static const mp_float& A000142_538(void)
+ {
+ static const mp_float val("+1.88356835947307067579200249257280579066092738833637599877722695560325559263227106813223513820208100460225364436445143207650915430408363975493664521679039515031216285960799306956346238681987659447795391305532101276619405751233064123904101998057266011543567371652985178050288965406563380360512029058178513383487500993042998911253363091872770707366784366992842892022609711596984938628999603093899624698142624029624674049338E+000000000000001237");
+ return val;
+ }
+
+ static const mp_float& A000142_539(void)
+ {
+ static const mp_float val("+1.01524334575598509425188934349674232116623986231330666334092532907015476442879410572327473949092166148061471431243932188923843416990108182791085177185002298601825578132870826449470622649591348442361715913681802588097859699914621562784310976952866380221982813320959010969105752354137662014315983662358218713699763035250176413165562706519423411270696773809142318800186634550774881921030786067611897712298874351967699312593E+000000000000001240");
+ return val;
+ }
+
+ static const mp_float& A000142_540(void)
+ {
+ static const mp_float val("+5.48231406708231950896020245488240853429769525649185598204099677697883572791548817090568359325097697199531945728717233820188754451746584187071859956799012412449858121917502462827141362307793281588753265933881733975728442379538956439035279275545478453198707191933178659233171062712343374877306311776734381053978720390350952631094038615204886420861762578569368521521007826574184362373566244765104247646413921500625576288002E+000000000000001242");
+ return val;
+ }
+
+ static const mp_float& A000142_541(void)
+ {
+ static const mp_float val("+2.96593191029153485434746952809138301705505313376209408628417925634555012880227910045997482394877854184946782639236023496722116158394902045205876236628265715135373243957368832389483477008516165339515516870230018080869087327330575433518086088070103843180500590835849654645145544927377765808622714671213300150202487731179865373421874890825843553686213555006028370142865234176633740044099338417921397976709931531838436771809E+000000000000001245");
+ return val;
+ }
+
+ static const mp_float& A000142_542(void)
+ {
+ static const mp_float val("+1.60753509537801189105632848422552959524383879849905499476602515693928816981083527244930635458023796968241156190465924735223386957850036908501584920252520017603372298224893907155100044538615761614017410143664669799831045331413171884966802659733996283003831320233030512817668885350638749068273511351797608681409748350299487032394656190827607206097927746813267376617432956923735487103901841422513397703376782890256432730321E+000000000000001248");
+ return val;
+ }
+
+ static const mp_float& A000142_543(void)
+ {
+ static const mp_float val("+8.72891556790260456843586366934462570217404467584986862157951660218033476207283552939973350537069217537549478114229971312262991181125700413163606116971183695586311579361173915852193241844683585564114537080099157013082576149573523335369738442355599816710804068865355684599942047453968407440725166640261015140054933542126214585902983116193907129111747665196041855032660956095883694974186998924247749529335931094092429725641E+000000000000001250");
+ return val;
+ }
+
+ static const mp_float& A000142_544(void)
+ {
+ static const mp_float val("+4.74853006893901688522910983612347638198268030366232853013925703158610211056762252799345502692165654340426916094141104393871067202532381024761001727632323930398953499172478610223593123563507870546878308171573941415116921425367996694441137712641446300290677413462753492422368473814958813647754490652301992236189883846916660734731222815209485478236790729866646769137767560116160730065957727414790775743958746515186281770749E+000000000000001253");
+ return val;
+ }
+
+ static const mp_float& A000142_545(void)
+ {
+ static const mp_float val("+2.58794888757176420244986486068729462818056076549596904892589508221442565025935427775643298967230281615532669271306901894659731625380147658494745941559616542067429657049000842571858252342111789448048677953507798071238722176825558198470420053389588233658419190337200653370190818229152553438026197405504585768723486696569580100428516434289169585639050947777322489180083320263307597885946961441060972780457516850776523565058E+000000000000001256");
+ return val;
+ }
+
+ static const mp_float& A000142_546(void)
+ {
+ static const mp_float val("+1.41302009261418325453762621393526286698658617796079910071353871488907640504160743565501241236107733762080837422133568434484213467457560621538131284091550631968816592748754460044234605778793037038634578162615257746896342308546754776364849349150715175577496877924111556740124186753117294177162303783405503829723023736326990734833969973121886593758921817486418079092325492863765948445727040946819291138129804200523981866522E+000000000000001259");
+ return val;
+ }
+
+ static const mp_float& A000142_547(void)
+ {
+ static const mp_float val("+7.72921990659958240232081539022588788241662639344557108090305677044324793557759267303291789561509303678582180699070619336628647666992856599813578123980781956869426762335686896441963293609997912601331142549505459875522992427750748626715725939854412010408907922244890215368479301539551599149077801695228105948584939837708639319541815752976719667861302341650706892635020445964799737998126913979101522525570028976866180809873E+000000000000001261");
+ return val;
+ }
+
+ static const mp_float& A000142_548(void)
+ {
+ static const mp_float val("+4.23561250881657115647180683384378655956431126360817295233487511020289986869652078482203900679707098415863035023090699396472498921512085416697840811941468512364445865759956419250195884898278856105529466117128992011786599850407410247440217815040217781704081541390199838021926657243674276333694635328985002059824547031064334347108915032631242377987993683224587377163991204388710256422973548860547634344012375879322667083811E+000000000000001264");
+ return val;
+ }
+
+ static const mp_float& A000142_549(void)
+ {
+ static const mp_float val("+2.32535126734029756490302195178023882120080688372088695083184643550139202791438991086729941473159197030308806227676793968663401907910134893767114605755866213288080780302216074168357540809155092001935676898303816614470843317873668225844679580457079562155540766223219711074037734826777177707198354795612766130843676320054319556562794352914552065515408532090298470063031171209401930776212478324440651254862794357748144229012E+000000000000001267");
+ return val;
+ }
+
+ static const mp_float& A000142_550(void)
+ {
+ static const mp_float val("+1.27894319703716366069666207347913135166044378604648782295751553952576561535291445097701467810237558366669843425222236682764871049350574191571913033165726417308444429166218840792596647445035300601064622294067099137958963824830517524214573769251393759185547421422770841090720754154727447738959095137587021371964021976029875756109536894103003636033474692649664158534667144165171061926916863078442358190174536896761479325957E+000000000000001270");
+ return val;
+ }
+
+ static const mp_float& A000142_551(void)
+ {
+ static const mp_float val("+7.04697701567477177043860802487001374764904526111614790449591062278696854059455862488335087634408946600350837272974524122034439481921663795561240812743152559369528804705865812767207527422144506311866068840309716250153890674816151558422301468575179613112366292039467334409871355392548237041664614208104487759521761087924615416163548286507550034544445556499649513526015964350092551217311915562217393627861698301155751086021E+000000000000001272");
+ return val;
+ }
+
+ static const mp_float& A000142_552(void)
+ {
+ static const mp_float val("+3.88993131265247401728211162972824758870227298413611364328174266377840663440819636093560968374193738523393662174681937315363010594020758415149804928634220212771979900197637928647498555137023767484150069999850963370084947652498515660249110410653499146438026193205785968594248988176686626846998867042873677243256012120534387709722278654152167619068533947187806531466360812321251088271956177390344001282579657462237974599484E+000000000000001275");
+ return val;
+ }
+
+ static const mp_float& A000142_553(void)
+ {
+ static const mp_float val("+2.15113201589681813155700773123972091655235696022727084473480369306945886882773258759739215510929137403436695182599111335395744858493479403577842125534723777662904884809293774542066700990774143418734988709917582743656976051831679160117758057091385027980228484842799640632619690461707704646390373474709143515520574702655516403476420095746148693344899272794857011900897529213651851814391766096860232709266550576617599953514E+000000000000001278");
+ return val;
+ }
+
+ static const mp_float& A000142_554(void)
+ {
+ static const mp_float val("+1.19172713680683724488258228310680538777000575596590804798308124596048021333056385352895525393054742121503929131159907679809242651605387589582124537546236972825249306184348751096304952348888875453979183745294340839985964732714750254705237963628627305501046580602911000910471308515786068374100266904988865507598398385271156087525936733043366376113074197128350784593097231184363125905173038417660568920933669019446150374247E+000000000000001281");
+ return val;
+ }
+
+ static const mp_float& A000142_555(void)
+ {
+ static const mp_float val("+6.61408560927794670909833167124276990212353194561078966630610091508066518398462938708570165931453818774346806677937487622941296716409901122180791183381615199180133649323135568584492485536333258769584469786383591661922104266566863913614070698138881545530808522346156055053115762262612679476256481322688203567171111038254916285768948868390683387427561794062346854491689633073215348773710363218016157511181863057926134577071E+000000000000001283");
+ return val;
+ }
+
+ static const mp_float& A000142_556(void)
+ {
+ static const mp_float val("+3.67743159875853837025867240921098006558068376175959905446619210878484984229545393921965012257888323238536824512933243118355360974323905023932519897960178050744154309023663376132977821958201291875888965201229276964028689972211176335969423308165218139315129538424462766609532363818012649788798603615414641183347137737269733454887535570825219963409724357498664851097379435988707733918182961949216983576217115860206930824851E+000000000000001286");
+ return val;
+ }
+
+ static const mp_float& A000142_557(void)
+ {
+ static const mp_float val("+2.04832940050850587223408053193051589652844085530009667333766900459316136215856784414534511827643796043865011253703816416923936062698415098330413583163819174264493950126180500506068646830718119574870153617084707268963980314521625219134968782648026503598527152902425761001509526646633045932360822213785955139124355719659241534372357312949647519619216467126756322061240345845710207792427909805713859851952933534135260469442E+000000000000001289");
+ return val;
+ }
+
+ static const mp_float& A000142_558(void)
+ {
+ static const mp_float val("+1.14296780548374627670661693681722787026286999725745394372241930456298404008448085703310257599825238192476676279566729560643556322985715624868370779405411099239587624170408719282386304931540710722777545718333266656081901015503066872277312580717598789007978151319553574638842315868821239630257338795292562967631390491569856776179775380625903315947522788656730027710172112981906295948174773671588333797389736912047475341949E+000000000000001292");
+ return val;
+ }
+
+ static const mp_float& A000142_559(void)
+ {
+ static const mp_float val("+6.38919003265414168678998867680830379476944328466916754540832391250708078407224799081504339983023081495944620402778018243997479845490150343014192656876248044749294819112584740788539444567312572940326480565482960607497826676662143816030177326211377230554597865876304482231128545706710729533138523865685426989059472847875499378844944377698799536146652388591120854899862111568856194350296984824178785927408629338345387161493E+000000000000001294");
+ return val;
+ }
+
+ static const mp_float& A000142_560(void)
+ {
+ static const mp_float val("+3.57794641828631934460239365901265012507088823941473382542866139100396523908045887485642430390492925637728987425555690216638588713474484192087947887850698905059605098703047454841582088957695040846582829116670457940198782938930800536976899302678371249110574804890730510049431985595758008538557573364783839113873304794810279652153168851511327740242125337611027678743922782478559468836166311501540120119348832429473416810436E+000000000000001297");
+ return val;
+ }
+
+ static const mp_float& A000142_561(void)
+ {
+ static const mp_float val("+2.00722794065862515232194284270609672016476830231166567606547904035322449912413742879445403449066531282765961945736742211534248268259185631761338765084242085738438460372409622166127551905266917914932967134452126904451517228740179101244040508802566270751032465543699816137731343919220242790130798657643733742882923989888566884857927725697854862275832314399786527775340680970471862017089300752364007386954694992934586830655E+000000000000001300");
+ return val;
+ }
+
+ static const mp_float& A000142_562(void)
+ {
+ static const mp_float val("+1.12806210265014733560493187760082635673259978589915610994879922067851216850776523498248316738375390580914470613504049122882247526761662325049872385977344052185002414729294207657363684170760007868192327529562095320301752682551980654899150765947042244162080245635559296669405015282601776448053508845595778363500203282317374589290155381842194432599017760692680028609741462705405186453604187022828572151468538586029237798828E+000000000000001303");
+ return val;
+ }
+
+ static const mp_float& A000142_563(void)
+ {
+ static const mp_float val("+6.35098963792032949945576647089265238840453679461224889901173961242002350869871827295138023237053448970548469554027796561827053575668158890030781533052447013801563594925926389110957541881378844297922803991434596653298867602767651087082218812281847834632511782928198840248750236041048001402541254800704232186506144479446818937703574799771554655532469992699788561072844435031431199733791572938524861212767872239344608807402E+000000000000001305");
+ return val;
+ }
+
+ static const mp_float& A000142_564(void)
+ {
+ static const mp_float val("+3.58195815578706583769305228958345594706015875216130837904262114140489325890607710594457845105698145219389336828471677260870458216676841613977360784641580115784081867538222483458580053621097668184028461451169112512460561327960955213114371410126962178732736645571504145900295133127151072791033267707597186953189465486408005880864816187071156825720313075882680748445084261357727196649858447137328021724001079942990359367374E+000000000000001308");
+ return val;
+ }
+
+ static const mp_float& A000142_565(void)
+ {
+ static const mp_float val("+2.02380635801969219829657454361465261008898969497113923415908094489376469128193356485868682484719452048954975308086497652391808892422415511897208843322492765418006255159095703154097730295920182523976080719910548569540217150297939695409619846721733630983996204747899842433666750216840356126933796254792410628552047999820523322688621145695203606531976887873714622871472607667115866107170022632590332274060610167789553042567E+000000000000001311");
+ return val;
+ }
+
+ static const mp_float& A000142_566(void)
+ {
+ static const mp_float val("+1.14547439863914578423586119168589337731036816735366480653403981480987081526557439771001674286351209859708516024376957671253763833111087179733820205320530905226591540420048167985219315347490823308570461687469370490359762907068633867601844833244501235136941851887311310817455380622731641567844528680212504415760459167898416200641759568463485241297098918536522476545253495939587580216658232810046128067118305354968887022093E+000000000000001314");
+ return val;
+ }
+
+ static const mp_float& A000142_567(void)
+ {
+ static const mp_float val("+6.49483984028395659661733295685901544934978750889527945304800574997196752255580683501579493203611359904547285858217349996008840933739864309090760564167410232634774034181673112476193518020272968159594517767951330680339855683079154029302460204496322003226460300201055132334972008130888407689678477616804900037361803481984019857638776753187961318154550868102082442011587321977461579828452180032961546140560791362673589415266E+000000000000001316");
+ return val;
+ }
+
+ static const mp_float& A000142_568(void)
+ {
+ static const mp_float val("+3.68906902928128734687864511949592077523067930505251872933126726598407755281169828228897152139651252425782858367467454797733021650364242927563552000447089012136551651415190327886477918235515045914649686092196355826433038027988959488643797396153910897832629450514199315166264100618344615567737375286345183221221504377766923279138825195810762028711784893081982827062581598883198177342560838258722158207838529493998598787871E+000000000000001319");
+ return val;
+ }
+
+ static const mp_float& A000142_569(void)
+ {
+ static const mp_float val("+2.09908027766105250037394907299317892110625652457488315698949107434494012754985632262242479567461562630270446411088981779910089319057254225783661088254393647905697889655243296567405935476008061125435671386459726465240398637925717949038320718411575300866766157342579410329604273251838086258042566537930409252875035990949379345829991536416323594337005604163648228598608929764539762907917116969212908020260123282085202710299E+000000000000001322");
+ return val;
+ }
+
+ static const mp_float& A000142_570(void)
+ {
+ static const mp_float val("+1.19647575826679992521315097160611198503056621900768339948400991237661587270341810389478213353453090699254154454320719614548750911862634908696686820305004379306247797103488679043421383221324594841498332690282044085187027223617659230951842809494597921494056709685270263887874435753547709167084262926620333274138770514841146227123095175757304448772093194373279490301207089965787664857512756672451357571548270270788565544870E+000000000000001325");
+ return val;
+ }
+
+ static const mp_float& A000142_571(void)
+ {
+ static const mp_float val("+6.83187657970342757296709204787089943452453311053387221105369659967047663313651737323920598248217147892741221934171308999073367706735645328658081743941575005838674921460920357337936098193763436544955479661510471726417925446856834208735022442214154131731063812302893206799763028152757419344051141311002102995332379639742944956872873453574208402488652139871425889619892483704647566336397840599697251733540623246202709261209E+000000000000001327");
+ return val;
+ }
+
+ static const mp_float& A000142_572(void)
+ {
+ static const mp_float val("+3.90783340359036057173717665138215447654803293922537490472271445501151263415408793749282582197980208594647978946345988747469966328252789127992422757534580903339722055075646444397299448166832685703714534366383989827511053355602109167396432836946496163350168500637254914289464452103377243864797252829893202913330121153932964515331283615444447206223509024006455608862578500679058407944419564823026827991585236496827949697411E+000000000000001330");
+ return val;
+ }
+
+ static const mp_float& A000142_573(void)
+ {
+ static const mp_float val("+2.23918854025727660760540222124197451506202287417613982040611538272159673937029238818338919599442659524733291936256251552300290706088848170339658240067314857613660737558345412639652583799595128908228428191938026171163833572760008552918156015570342301599646550865147065887863131055235160734528825871528805269338159421203588667284825511649668249166070670755699063878257480889100467752152410643594372439178340512682415176617E+000000000000001333");
+ return val;
+ }
+
+ static const mp_float& A000142_574(void)
+ {
+ static const mp_float val("+1.28529422210767677276550087499289337164560112977710425691311022968219652839854783081726539850080086567196909571411088391020366865294998849774963829798638728270241263358490266855160583100967603993323117782172427022248040470764244909375021552937376481118197120196594415819633437225704982261619546050257534224600103507770859895021489843686909575021324565013771262666119794030343668489735483709423169780088367454279706311378E+000000000000001336");
+ return val;
+ }
+
+ static const mp_float& A000142_575(void)
+ {
+ static const mp_float val("+7.39044177711914144340163003120913688696220649621834947725038382067263003829165002719927604137960497761382230035613758248367109475446243386206042021342172687553887264311319034417173352830563722961607927247491455377926232706894408228906373929389914766429633441130417890962892264047803648004312389788980821791450595169682444396373566601199730056372616248829184760330188815674476093815979031329183226235508112862108311290423E+000000000000001338");
+ return val;
+ }
+
+ static const mp_float& A000142_576(void)
+ {
+ static const mp_float val("+4.25689446362062547139933889797646284689023094182176929889622108070743490205599041566678299983465246710556164500513524751059455057857036190454680204293091468031039064243319763824291851230404704425886166094555078297685510039171179139850071383328590905463468862091120705194625944091534901250483936518452953351875542817737087972311174362291044512470626959325610421950188757828498230038003922045609538311652673008574387303284E+000000000000001341");
+ return val;
+ }
+
+ static const mp_float& A000142_577(void)
+ {
+ static const mp_float val("+2.45622810550910089699741854413241906265566325343116088546311956356818993848630646983973379090459447351990906916796303781361305568383509881892350477877113777053909540068395503726616398159943514453736317836558280177764539292601770363693491188180596952452421533426576646897299169740815638021529231371147354084032188205834299760023547607041932683695551755530877213465258913267043478731928263020316703605823592325947421473995E+000000000000001344");
+ return val;
+ }
+
+ static const mp_float& A000142_578(void)
+ {
+ static const mp_float val("+1.41969984498426031846450791850853821821497336048321099179768310774241378444508513956736613114285560569450744197908263585626834618525668711733778576212971763137159714159532601153984278136447351354259591709530685942747903711123823270214837906768385038517499646320561301906638920110191438776443895732523170660570604782972225261293610516870237091176028914696847029382919651868351130707054536025743054684166036364397609611969E+000000000000001347");
+ return val;
+ }
+
+ static const mp_float& A000142_579(void)
+ {
+ static const mp_float val("+8.22006210245886724390950084816443628346469575719779164250858519382857581193704295809504989931713395697119808905888846160779372441263621840938577956273106508564154744983693760681568970410030164341163035998182671608510362487406936734543911480188949373016322952196049938039439347438008430515610156291309158124703801693409184262890004892678672757909207416094744300127104784317753046793845763589052286621321350549862159653300E+000000000000001349");
+ return val;
+ }
+
+ static const mp_float& A000142_580(void)
+ {
+ static const mp_float val("+4.76763601942614300146751049193537304440952353917471915265497941242057397092348491569512894160393769504329489165415530773252036015932900667744375214638401774967209752090542381195310002837817495317874560878945949532936010242696023306035468658509590636349467312273708964062874821514044889699053890648959311712328204982177326872476202837753630199587340301334951694073720774904296767140430542881650326240366383318920052598914E+000000000000001352");
+ return val;
+ }
+
+ static const mp_float& A000142_581(void)
+ {
+ static const mp_float val("+2.76999652728658908385262359581445173880193317626051182769254303861635347710654473601886991507188780082015433205106423379259432925257015287959481999704911431255948865964605123474475111648771964779685119870667596678635821951006389540806607290594072159719040508431024908120530271299660080915150310467045360104862687094645026912908673848734859145960244715075606934256831770219396421708590145414238839545652868708292550559969E+000000000000001355");
+ return val;
+ }
+
+ static const mp_float& A000142_582(void)
+ {
+ static const mp_float val("+1.61213797888079484680222693276401091198272510858361788371706004847471772367600903636298229057183870007732982125371938406728989962499582897592418523828258452990962239991400181862144514979585283501776739764728541266966048375485718712749445443125749996956481575906856496526148617896402167092617480691820399581030083889083405663312848179963688022948862424174003235737476090267688717434399464631087004615569969588226264425902E+000000000000001358");
+ return val;
+ }
+
+ static const mp_float& A000142_583(void)
+ {
+ static const mp_float val("+9.39876441687503395685698301801418361685928738304249226207046008260760432903113268199618675403381962145083285790918400911230011481372568292963799993918746780937309859149863060256302522330982202815358392828367395586412062029081740095329266933423122482256287587536973374747446442336024634149959912433312929557405389073356255017113904889188301173791867932934438864349485606260625222642548878799237236908772922699359121603009E+000000000000001360");
+ return val;
+ }
+
+ static const mp_float& A000142_584(void)
+ {
+ static const mp_float val("+5.48887841945501983080447808252028323224582383169681548104914868824284092815418148628577306435575065892728638901896346132158326705121579883090859196448548120067388957743520027189680673041293606444169301411766559022464644224983736215672291889119103529637671951121592450852508722324238386343576588861054750861524747218840052929994520455285967885494450872833712296780099594056205130023248545218754546354723386856425727016157E+000000000000001363");
+ return val;
+ }
+
+ static const mp_float& A000142_585(void)
+ {
+ static const mp_float val("+3.21099387538118660102061967827436569086380694154263705641375198262206194297019616947717724264811413547246253757609362487312621122496124231608152629922400650239422540279959215905963193729156759769839041325883437028141816871615485686168290755134675564838038091406131583748717602559679456010992304483717029253991977123021430964046794466342291213014253760607721693616358262522880001063600398952971409617513181311009050304452E+000000000000001366");
+ return val;
+ }
+
+ static const mp_float& A000142_586(void)
+ {
+ static const mp_float val("+1.88164241097337534819808313146877829484619086774398531505845866181652829858053495531362586419179488338686304701959086417565195977782728799722377441134526781040301608604056100520894431525285861225125678216967694098491104686766674612094618382508919880995090321563993108076748515099972161222441490427458179142839298594090558544931421557276582650826352703716124912459185941838407680623269833786441246035862724248251303478409E+000000000000001369");
+ return val;
+ }
+
+ static const mp_float& A000142_587(void)
+ {
+ static const mp_float val("+1.10452409524137132939227479817217285907471403936571937993931523448630211126677401876909838228058359654808860860049983727110770038958461805437035557945967220470657044250580931005765031305342800539148773113360036435814278451132037997299540990532735970144118018758063954441051378363683658637573154880917951156846668274731157865874744454121354016035069037081365323613542147859145308525859392432641011423051419133723515141826E+000000000000001372");
+ return val;
+ }
+
+ static const mp_float& A000142_588(void)
+ {
+ static const mp_float val("+6.49460168001926341682657581325237641135931855147042995404317357877945641424863123036229848780983154770276101857093904315411327829075755415969769080722287256367463420193415874313898384075415667170194785906557014242587957292656383424121301024332487504447413950297416052113382104778459912788930150699797552802258409455419208251343497390233561614286205938038428102847627829411774414132053227503929147167542344506294269033937E+000000000000001374");
+ return val;
+ }
+
+ static const mp_float& A000142_589(void)
+ {
+ static const mp_float val("+3.82532038953134615251085315400564970629063862681608324293142923790109982799244379468339380931999078159692623993828309641777272091325619940006193988545427194000435954493921949970886148220419827963244728898962081388884306845374609836807446303331835140119526816725178054694782059714512888632679858762180758600530203169241913660041319962847567790814575297504634152577252791523535129923779350999814267681682440914207324460989E+000000000000001377");
+ return val;
+ }
+
+ static const mp_float& A000142_590(void)
+ {
+ static const mp_float val("+2.25693902982349422998140336086333332671147678982148911332954325036164889851554183886320234749879456114218648156358702688648590533882115764603654453241802044460257213151413950482822827450047698498314390050387628019441741038771019803716393318965782732670520821867855052269921415231562604293281116669686647574312819869852729059424378778080064996580599425527734150020579146998885726655029817089890417932192640139382321431983E+000000000000001380");
+ return val;
+ }
+
+ static const mp_float& A000142_591(void)
+ {
+ static const mp_float val("+1.33385096662568508991900938627022999608648278278450006597776006096373449902268522676815258737178758563503221060407993288991317005524330416880759781865905008276012012972485644735348291022978189812503804519779088159490068953913672703996388451508777595008277805723902335891523556401853499137329139951784808716418876543082962874119807857845318412979134260486890882662162275876341464453122621900125236997925850322374951966302E+000000000000001383");
+ return val;
+ }
+
+ static const mp_float& A000142_592(void)
+ {
+ static const mp_float val("+7.89639772242405573232053556671976157683197807408424039058833956090530823421429654246746331724098250695939068677615320270828596672704036067934097908646157648993991116797115016833261882856030883690022522757092201904181208207168942407658619632931963362449004609885501828477819453898972714892988508514566067601199749135051140214789262518444285004836474822082394025360000673187941469562485921648741403027721033908459715640509E+000000000000001385");
+ return val;
+ }
+
+ static const mp_float& A000142_593(void)
+ {
+ static const mp_float val("+4.68256384939746504926607759106481861506136299793195455161888535961684778288907784968320574712390262662691867725825884920601357826913493388284920059827171485853436732260689204982124296533626314028183355994955675729179456466851182847741561442328654273932259733662102584287346936162090819931542185549137678087511451237085326147370032673437461007868029569494859657038480399200449291450554151537703651995438573107716611374822E+000000000000001388");
+ return val;
+ }
+
+ static const mp_float& A000142_594(void)
+ {
+ static const mp_float val("+2.78144292654209423926405008909250225734644962077158100366161790361240758303611224271182421379159816021638969429140575642837206549186615072641242515537339862596941418962849387759381832140974030532740913461003671383132597141309602611558487496743220638715762281795288935066684080080281947039336058216187780783981802034828683731537799408021851838673609564279946636280857357125066879121629166013395969285290512425983667156644E+000000000000001391");
+ return val;
+ }
+
+ static const mp_float& A000142_595(void)
+ {
+ static const mp_float val("+1.65495854129254607236210980301003884312113752435909069717866265264938251190648678441353540720600090532875186810338642507488137896766035968221539296744717218245180144282895385716832190123879548166980843509297184472963895299079213553877300060562216280035878557668196916364677027647767758488404954638631729566469172210723066820264990647773001844010797690746568248587110127489414793077369353777970601724747854893460281958203E+000000000000001394");
+ return val;
+ }
+
+ static const mp_float& A000142_596(void)
+ {
+ static const mp_float val("+9.86355290610357459127817442593983150500197964518018055518482940979031977096266123510467102694776539575936113389618309344629301864725574370600374208598514620741273659926056498872319853138322107075205827315411219458864815982512112781108708360950809029013836203702453621533475084780695840590893529646245108216156266375909478248779344260727090990304354236849546761579176359836912166741121348516704786279497215165023280470892E+000000000000001396");
+ return val;
+ }
+
+ static const mp_float& A000142_597(void)
+ {
+ static const mp_float val("+5.88854108494383403099307013228607940848618184817256779144534315764482090326470875735748860308781594126833859693602130678743693213241167899248423402533313228582540374975855729826774952323578297923897878907300498016942295141559731330321898891487632990321260213610364812055484625614075416832763437198808329605045291026417958514521268523654073321211699479399179416662768286822636563544449445064472757408859837453518898441122E+000000000000001399");
+ return val;
+ }
+
+ static const mp_float& A000142_598(void)
+ {
+ static const mp_float val("+3.52134756879641275053385593910707548627473674520719553928431520827160290015229583689977818464651393287846648096774074145888728541518218403750557194714921310692359144235561726436411421489499822158490931586565697814131492494652719335532495537109604528212113607738998157609179806117217099265992535444887381103817084033797939191683718577145135846084596288680709291164335435519936664999580768148554708930498182797204301267791E+000000000000001402");
+ return val;
+ }
+
+ static const mp_float& A000142_599(void)
+ {
+ static const mp_float val("+2.10928719370905123756977970752513821627856731037911012803130480975469013719122520630296713260326184579420142209967670413387348396369412823846583759634237865104723127397101474135410441472210393472936068020352852990664764004296978881983964826728653112399056051035659896407898703864213042460329528731487541281186433336244965575818547427709936371804673176919744865407436925876442062334748880120984270649368411495525376459407E+000000000000001405");
+ return val;
+ }
+
+ static const mp_float& A000142_600(void)
+ {
+ static const mp_float val("+1.26557231622543074254186782451508292976714038622746607681878288585281408231473512378178027956195710747652085325980602248032409037821647694307950255780542719062833876438260884481246264883326236083761640812211711794398858402578187329190378896037191867439433630621395937844739222318527825476197717238892524768711860001746979345491128456625961823082803906151846919244462155525865237400849328072590562389621046897315225875644E+000000000000001408");
+ return val;
+ }
+
+ static const mp_float& A000142_601(void)
+ {
+ static const mp_float val("+7.60608962051483876267662562533564840790051372122707112168088514397541263471155809392849948016736221593389032809143419510674778317308102642790781037241061741567631597393947915732290051948790678863407461281392387884337138999494905848434177165183523123310996120034589586446882726134352231111948280605744073859958278610499345866401682024322030556727651475972599984659217554710450076779104461716269279961622491852864507512621E+000000000000001410");
+ return val;
+ }
+
+ static const mp_float& A000142_602(void)
+ {
+ static const mp_float val("+4.57886595154993293513132862645206034155610926017869681525189285667319840609635797254495668706075205399220197751104338545426216547019477790960050184419119168423714221631156645270838611273171988675771291691398217506370957677695933320757374653440480920233219664260822931041023401132880043129392864924657932463694883723520606211573812578641862395150046188535505190764848967935690946221020885953194106536896740095424433522598E+000000000000001413");
+ return val;
+ }
+
+ static const mp_float& A000142_603(void)
+ {
+ static const mp_float val("+2.76105616878460955988419116175059238595833388388775417959689139257393863887610385744460888229763348855729779243915916142892008577852745107948910261204728858559499675643587457098315682597722709171490088889913125156341687479650647792416696916024609994900631457549276227417737110883126666007023897549568733275608014885282925545579008984921043024275477851686909630031203927665221640571275594229776046241748734277540933414127E+000000000000001416");
+ return val;
+ }
+
+ static const mp_float& A000142_604(void)
+ {
+ static const mp_float val("+1.66767792594590417417005146169735780111883366586820352447652240111465893788116672989654376490777062708860786663325213350306773181023058045201141797767656230569937804088726824087382672289024516339580013689507527594430379237708991266619684937278864436919981400359762841360313214973408506268242434119939514898467240990710887029529721426892309986662388622418893416538847172309793870905050458914784731930016235503634723782132E+000000000000001419");
+ return val;
+ }
+
+ static const mp_float& A000142_605(void)
+ {
+ static const mp_float val("+1.00894514519727202537288113432690146967689436785026313230829605267436865741810587158740897776920122938860775931311754076935597774518950117346690787649432019494812371473679728572866516734859832385445908282152054194630379438813939716304909387053712984336588747217656519022989495058912146292286672642563406513572680799380086652865481463269847541930745116563430517006002539247425291897555527643444762817659822479699007888190E+000000000000001422");
+ return val;
+ }
+
+ static const mp_float& A000142_606(void)
+ {
+ static const mp_float val("+6.11420757989546847375965967402102290624197986917259458178827407920667406395372158181969840528135945009496302143749229706229722513584837711120946173155558038138562971130499155151571091413250584255802204189841448419460099399212474680807750885545500685079727808138998505279316340057007606531257236213934243472250445644243325116364817667415276104100315406374388933056375387839397268899186497519275262675018524226975987802432E+000000000000001424");
+ return val;
+ }
+
+ static const mp_float& A000142_607(void)
+ {
+ static const mp_float val("+3.71132400099654936357211342213076090408888178058776491114548236607845115681990900016455693200578518620764255401255782431681441565745996490650414327105423729150107723476212987177003652487843104643271937943233759190612280335321972131250304787526118915843394779540372092704545018414603617164473142381858085787656020506055698345633444324121072595188891451669254082365219860418514142221806203994200084443736244205774424596076E+000000000000001427");
+ return val;
+ }
+
+ static const mp_float& A000142_608(void)
+ {
+ static const mp_float val("+2.25648499260590201305184496065550262968604012259736106597645327857569830334650467210005061465951739321424667283963515718462316471973565866315451910880097627323265495873537496203618220712608607623109338269486125587892266443875759055800185310815880300832784025960546232364363371196078999235999670568169716158894860467681864594145134149065612137874846002614906482078053675134456598470858172028473651341791636477110850154414E+000000000000001430");
+ return val;
+ }
+
+ static const mp_float& A000142_609(void)
+ {
+ static const mp_float val("+1.37419936049699432594857358103920110147879843466179288917966004665260026673802134530893082432764609246747622375933781072543550731431901612586110213725979455039868686986984335188003496413978642042473587006117050483026390264320337264982312854286871103207165471809972655509897293058412110534723799376015357140766970024818255537834386696780957791965781215592478047585534688156884068468752626765340453667151106614560507744038E+000000000000001433");
+ return val;
+ }
+
+ static const mp_float& A000142_610(void)
+ {
+ static const mp_float val("+8.38261609903166538828629884433912671902067045143693662399592628458086162710193020638447802839864116405160496493196064542515659461734599836775272303728474675743198990620604444646821328125269716459088880737314007946460980612354057316392108411149913729563709378040833198610373487656313874261815176193693678558678517151391358780789758850363842530991265415114116090271761597756992817659391023268576767369621750348819097238634E+000000000000001435");
+ return val;
+ }
+
+ static const mp_float& A000142_611(void)
+ {
+ static const mp_float val("+5.12177843650834755224292859389120642532162964582796827726151095987890645415927935610091607535156975123553063357342795435477067931119840500269691377578098026879094583269189315679207831484539796756503306130498858855287659154148329020315578239212597288763426429982949084350938200958007777173969072654346837599352573979500120215062542657572307786435663168634724931156046336229522611589887915217100404862838889463128468412805E+000000000000001438");
+ return val;
+ }
+
+ static const mp_float& A000142_612(void)
+ {
+ static const mp_float val("+3.13452840314310870197267229946141833229683734324671658568404470744589074994547896593376063811516068775614474774693790806511965573845342386165051123077795992450005884960743861195675192868538355614980023351865301619436047402338777360433133882398109540723216975149564839622774178986300759630469072464460264610803775275454073571618276106434252365298625859204451657867500357772467838293011404112865447776057400351434622668637E+000000000000001441");
+ return val;
+ }
+
+ static const mp_float& A000142_613(void)
+ {
+ static const mp_float val("+1.92146591112672563430924811956984943769796129141023726702431940566433102971657860611739527116459350159451673036887293764391834896767194882719176338446688943371853607480935986912948893228414011991982754314693429892714297057633670521945511069910041148463332005766683246688760571718602365653477541420714142206422714243853347099402003253244196699928057651692328866272777719314522784873615990721186519486723186415429423695874E+000000000000001444");
+ return val;
+ }
+
+ static const mp_float& A000142_614(void)
+ {
+ static const mp_float val("+1.17978006943180953946587834541588755474654823292588568195293211507789925224597926415608069649506040997903327244648798371336586626615057657989574271806267011230318114993294695964550620442246203363077411149221765954126578393387073700474543796924765265156485851540743513466898991035221852511235210432318483314743546545725955119032829997491936773755827398139089923891485519659116989912400218302808522964848036459073666149267E+000000000000001447");
+ return val;
+ }
+
+ static const mp_float& A000142_615(void)
+ {
+ static const mp_float val("+7.25564742700562866771515182430770846169127163249419694401053250772908040131277247455989628344462152137105462554590109983720007753682604596635881771608542119066456407208762380181986315719814150682926078567713860617878457119330503257918444351087306380712387986975572607821428794866614392944096544158758672385672811256214623982051904484575411158598338498555403031932635945903569487961261342562272416233815424223303046817991E+000000000000001449");
+ return val;
+ }
+
+ static const mp_float& A000142_616(void)
+ {
+ static const mp_float val("+4.46947881503546725931253352377354841240182332561642531751048802476111352720866784432889611060188685716456964933627507749971524776268484431527703171310861945344937146840597626192103570483405516820682464397711738140613129585507590006877761720269780730518830999976952726418000137637834466053563471201795342189574451733828208372943973162498453273696576515110128267670503742676598804584136987018359808400030301321554676839883E+000000000000001452");
+ return val;
+ }
+
+ static const mp_float& A000142_617(void)
+ {
+ static const mp_float val("+2.75766842887688329899583318416827937045192499190533442090397111127760704628774805995092890024136419087053947364048172281732430786957654894252592856698801820277826219600648735360527902988261203878361080533388142432758300954258183034243578981406454710730118726985779832199906084922543865555048661731507726130967436719772004566106431441261545669870787709822949141152700809231461462428412520990328001782818695915399235610208E+000000000000001455");
+ return val;
+ }
+
+ static const mp_float& A000142_618(void)
+ {
+ static const mp_float val("+1.70423908904591387877942490781599665093928964499749667211865414676956115460582830104967406034916306995799339470981770470110642226339830724648102385439859524931696603713200918452806244046745423996827147769633872023444629989731557115162531810509189011231213373277211936299541960482132108913020072950071774748937875892819098821853774630699635223980146804670582569232369100105043183780758937972022705101781954075716727607108E+000000000000001458");
+ return val;
+ }
+
+ static const mp_float& A000142_619(void)
+ {
+ static const mp_float val("+1.05492399611942069096446401793810192693142029025345044004144691685035835470100771834974824335613194030399791132537715920998487538104355218557175376587273045932720197698471368522287065064935417454036004469403366782512225963643833854285607190705187997952121078058594188569416473538439775417159425156094428569592545177655022170727486496403074203643710872091090610354836472965021730760289782604682054458003029572868654388800E+000000000000001461");
+ return val;
+ }
+
+ static const mp_float& A000142_620(void)
+ {
+ static const mp_float val("+6.54052877594040828397967691121623194697480579957139272825697088447222179914624785376843910880801802988478705021733838710190622736247002355054487334841092884782865225730522484838179803402599588215023227710300874051575800974591769896570764582372165587303150683963283969130382135938326607586388435967785457131473780101461137458510416277699060062591007406964761784199986132383134730713796652149028737639618783351785657210560E+000000000000001463");
+ return val;
+ }
+
+ static const mp_float& A000142_621(void)
+ {
+ static const mp_float val("+4.06166836985899354435137936186528003907135440153383488424757891925724973726981991719020068656977919655845275818496713839028376719209388462488836634936318681450159305178654463084509657913014344281529424408096842786028572405221489105770444805653114829715256574741199344829967306417700823311147218735994768878645217443007366361734968508451116298869015599725117067988191388209926667773267720984546846074203264461458893127758E+000000000000001466");
+ return val;
+ }
+
+ static const mp_float& A000142_622(void)
+ {
+ static const mp_float val("+2.52635772605229398458655796308020418430238243775404529800199408777800933658182798849230482704640266025935761559104956007875650319348239623668056386930390219861999087821123076038565007221894922143111301981836236212909772036047766223789216669116237424082889589489025992484239664591809912099533570053788746242517325249550581876999150412256594337896527703029022816288655043466574387354972522452388138258154430495027431525465E+000000000000001469");
+ return val;
+ }
+
+ static const mp_float& A000142_623(void)
+ {
+ static const mp_float val("+1.57392086333057915239742561099896720682038425872077022065524231668569981669047883683070590724990885734157979451322387592906530148953953285545199129057633106974025431712559676372025999499240536495158341134683975160642787978457758357420681984859415915203640214251663193317681311040697575238009414143510388909088293630470012509370470706835858272509536758987081214547832092079675843322147881487837810134830210198402089840365E+000000000000001472");
+ return val;
+ }
+
+ static const mp_float& A000142_624(void)
+ {
+ static const mp_float val("+9.82126618718281391095993581263355537055919777441760617688871205611876685614858794182360486123943126981145791776251698579736748129472668501802042565319630587517918693886372380561442236875260947729788048680428005002410996985576412150305055585522755310870714936930378326302331380893952869485178744255504826792710952254132878058471737210655755620459509376079386778778472254577177262330202780484107935241340511638029040603877E+000000000000001474");
+ return val;
+ }
+
+ static const mp_float& A000142_625(void)
+ {
+ static const mp_float val("+6.13829136698925869434995988289597210659949860901100386055544503507422928509286746363975303827464454363216119860157311612335467580920417813626276603324769117198699183678982737850901398047038092331117530425267503126506873115985257593940659740951722069294196835581486453938957113058720543428236715159690516745444345158833048786544835756659847262787193360049616736736545159110735788956376737802567459525837819773768150377423E+000000000000001477");
+ return val;
+ }
+
+ static const mp_float& A000142_626(void)
+ {
+ static const mp_float val("+3.84257039573527594266307488669287853873128612924088841670770859195646753246813503223848540195992748431373291032458477069322002705656181551330049153681305467366385688983043193894664275177445845799279574046217456957193302570606771253806852997835778015378167219074010520165787152774759060186076183689966263482648160069429488540377067183669064386504783043391060077197077269603320603886691837864407229663174475178378862136267E+000000000000001480");
+ return val;
+ }
+
+ static const mp_float& A000142_627(void)
+ {
+ static const mp_float val("+2.40929163812601801604974795395643484378451640303403703727573328715670514285752066521353034702887453266471053477351465122464895696446425832683940819358178528038723826992368082571954500536258545316148292926978345512160200711770445576136896829643032815642110846359404596143948544789773930736669767173608847203620396363532289314816421124160503370338498968206194668402567448041282018636955782340983332998810395936843546559439E+000000000000001483");
+ return val;
+ }
+
+ static const mp_float& A000142_628(void)
+ {
+ static const mp_float val("+1.51303514874313931407924171508464108189667630110537525940916050433441082971452297775409705793413320651343821583776720096907954497368355422925514834556936115608318563351207155855187426336770366458541127958142400981636606046991839821813971209015824608223245611513706086378399686127978028502628613785026356043873608916298277689704712465972796116572577352033490251756812357369925107704008231310137533123252928648337747239328E+000000000000001486");
+ return val;
+ }
+
+ static const mp_float& A000142_629(void)
+ {
+ static const mp_float val("+9.51699108559434628555843038788239240513009393395281038168361957226344411890434953007327049440569786896952637761955569409551033788446955610201488309363128167176323763479093010329128911658285605024223694856715702174494252035578672479209878904709536785724214896421211283320134025744981799281533980707815779515965000083516166668242641410968887573241511544290653683550349727856828927458211774940765083345260921198044430135373E+000000000000001488");
+ return val;
+ }
+
+ static const mp_float& A000142_630(void)
+ {
+ static const mp_float val("+5.99570438392443815990181114436590721523195917839027054046068033052596979490974020394616041147558965745080161790032008728017151286721582034426937634898770745321083970991828596507351214344719931165260927759730892369931378782414563661902223709967008175006255384745363108491684436219338533547366407845923941095057950052615185000992864088910399171142152272903111820636720328549802224298673418212682002507514380354767990985285E+000000000000001491");
+ return val;
+ }
+
+ static const mp_float& A000142_631(void)
+ {
+ static const mp_float val("+3.78328946625632047889804283209488745281136624156426071103068928856188694058804606869002721964109707385145582089510197507378822461921318263723397647621124340297603985695843844396138616251518276565279645416390193085426700011703589670660303160989182158428947147774324121458252879254402614668388203350778006830981566483200181735626497240102461876990698084201863558821770527314925203532462926892202343582241574003858602311715E+000000000000001494");
+ return val;
+ }
+
+ static const mp_float& A000142_632(void)
+ {
+ static const mp_float val("+2.39103894267399454266356306988396887017678346466861276937139563037111254645164511541209720281317335067412007880570444824663415795934273142673187313296550583068085718959773309658359605470959550789256735903158602029989674407396668671857311597745163124127094597393372844761615819688782452470421344517691700317180350017382514856915946255744755906258121189215577769175358973263032728632516569795871881143976674770438636661004E+000000000000001497");
+ return val;
+ }
+
+ static const mp_float& A000142_633(void)
+ {
+ static const mp_float val("+1.51352765071263854550603542323655229482190393313523188301209343402491424190389135805585752938073873097671800988401091574011942198826394899312127569316716519082098260101536505013741630263117395649599513826699395084983463899882091269285678241372688257572450880150005010734102813862999292413776711079698846300775161561003131904427793979886430488661390712773460727888002230075499717224382988680786900764137235129687657006415E+000000000000001500");
+ return val;
+ }
+
+ static const mp_float& A000142_634(void)
+ {
+ static const mp_float val("+9.59576530551812837850826458331974154917087093607737013829667237171795629367067121007413673627388355439239218266462920579235713540559343661638888789467982730980502969043741441787121935868164288418460917661274164838795161125252458647271200050302843553009338580151031768054211839891415513903344348245290685546914524296759856274072213832479969298113217118983741014809934138678668207202588148236188950844630070722219745420673E+000000000000001502");
+ return val;
+ }
+
+ static const mp_float& A000142_635(void)
+ {
+ static const mp_float val("+6.09331096900401152035274801040803588372350304440913003781838695604090224648087621839707682753391605703916903599203954567814678098255183225140694381312169034172619385342775815534822429276284323145722682714909094672634927314535311241017212031942305656160929998395905172714424518331048851328623661135759585322290722928442508734035855783624780504301892870554675544404308178060954311573643474129979983786340094908609538342128E+000000000000001505");
+ return val;
+ }
+
+ static const mp_float& A000142_636(void)
+ {
+ static const mp_float val("+3.87534577628655132694434773461951082204814793624420670405249410404201382876183727490054086231157061227691150689093715105130135270490296531189481626514539505733785929078005418680147065019716829520679626206682184211795813772044457949286946852315306397318351478979795689846373993658547069445004648482343096264976899782489435554846804278385360400736003865672773646241140001246766942160837249546667269688112300361875666385593E+000000000000001508");
+ return val;
+ }
+
+ static const mp_float& A000142_637(void)
+ {
+ static const mp_float val("+2.46859525949453319526354950695262839364467023538755967048143874427476280892129034411164452929247048002039262988952696521967896167302318890367699796089761665152421636822689451699253680417559620404672921893656551342913933372792319713695785144924850175091789892110129854432140233960494483236467961083252552320790285161445770448437414325331474575268834462433556812655606180794190542156453327961227050791327535330514799487623E+000000000000001511");
+ return val;
+ }
+
+ static const mp_float& A000142_638(void)
+ {
+ static const mp_float val("+1.57496377555751217857814458543577691514529961017726306976715791884729867209178323954322920968859616625301049786951820381015517754738879452054592469905267942367245004292875870184123848106403037818181324168152879756779089491841499977337910922462054411708561951166262847127705469266795480304866559171115128380664201933002401546103070339561480779021516387032609246474276743346693565895817223239262858404866967540868442073103E+000000000000001514");
+ return val;
+ }
+
+ static const mp_float& A000142_639(void)
+ {
+ static const mp_float val("+1.00640185258125028211143439009346144877784645090327110158121391014342385146664949006812346499101295023567370813862213223468915845278143969862884588269466215172669557743147681047655138939991541165817866143449690164581838185286718485518925079453252769081771086795241959314603794861482311914809731310342567035244425035188534587959861946979786217794748971313837308497062838998537188607427205649888966520709992258614934484713E+000000000000001517");
+ return val;
+ }
+
+ static const mp_float& A000142_640(void)
+ {
+ static const mp_float val("+6.44097185652000180551318009659815327217821728578093505011976902491791264938655673643599017594248288150831173208718164630201061409780121407122461364924583777105085169556145158704992889215945863461234343318078017053323764385834998307321120508500817722123334955489548539613464287113486796254782280386192429025564320225206621362943116460670631793886393416408558774381202169590638007087534116159289385732543950455135580702164E+000000000000001519");
+ return val;
+ }
+
+ static const mp_float& A000142_641(void)
+ {
+ static const mp_float val("+4.12866296002932115733394844191941624746623728018557936712677194497238200825678286805546970277913152704682782026788343527958880363669057821965497734916658201124359593685489046729900441987421298478651214066888008931180532971320233914992838245949024159881057706468800613892230608039745036399315441727549347005386729264357444293646537651289874979881178179917886174378350590707598962543109368458104496254560672241741907230087E+000000000000001522");
+ return val;
+ }
+
+ static const mp_float& A000142_642(void)
+ {
+ static const mp_float val("+2.65060162033882418300839489971226523087332433387914195369538758867226924930085460129161154918420244036406346061198116544949601193475535121701849545816494565121838859146083968000596083755924473623294079430942101733817902167587590173425402153899273510643639047552969994118812050361516313368360513589086680777458280187717479236521077172128099737083716391507282923950901079234278533952676214550103086595427951579198304441716E+000000000000001525");
+ return val;
+ }
+
+ static const mp_float& A000142_643(void)
+ {
+ static const mp_float val("+1.70433684187786394967439792051498654345154754668428827622613421951626912730044950863050622612544216915409280517350388938402593567404769083254289257960006005373342386430931991424383281855059436539778093074095771414844911093758820481512533584957232867343859907576559706218396148382454989495855810237782735739905674160702339149083052621678368130944829639739182920100429393947641097331570805955716284680860172865424509756023E+000000000000001528");
+ return val;
+ }
+
+ static const mp_float& A000142_644(void)
+ {
+ static const mp_float val("+1.09759292616934438359031226081165133398279662006468164988963043736847731798148948355804600962478475693523576653173650476331270257408671289615762282126243867460432496861520202477302833514658277131617091939717676791160122744380680390094071628712457966569445780479304450804647119558301013235331141793132081816499254159492306412009485888360869076328470287992033800544676529702280866681531599035481287334473951325333384282879E+000000000000001531");
+ return val;
+ }
+
+ static const mp_float& A000142_645(void)
+ {
+ static const mp_float val("+7.07947437379227127415751408223515110418903819941719664178811632102667870098060716894939676207986168223227069412970045572336693160285929818021666719714272945119789604756805305978603276169545887498930243011179015302982791701255388516106762005195353884372925284091513707689973921151041535367885864565701927716420189328725376357461183979927605542318633357548618013513163616579711590095878813778854303307356986048400328624569E+000000000000001533");
+ return val;
+ }
+
+ static const mp_float& A000142_646(void)
+ {
+ static const mp_float val("+4.57334044546980724310575409712390761330611867682350903059512314338323444083347223114131030830359064672204686840778649439729503781544710662441996700935420322547384084672896227662177716405526643324308936985221643885726883439010980981404968255356198609304909733523117855167723153063572831847654268509443445304807442306356593126919924851033233180337837148976407236729503696310493687201937713701139879936552612987266612291472E+000000000000001536");
+ return val;
+ }
+
+ static const mp_float& A000142_647(void)
+ {
+ static const mp_float val("+2.95895126821896528628942290083916822580905878390481034279504467376895268321925653354842776947242314842916432385983786187504988946659427798599971865505216948688157502783363859297428982514375738230827882229438403594065293585040104694969014461215460500220276597589457252293516880032131622205432311725609909112210415172212715753117191378618501867678580635387735482163988891512889415619653700764637502318949540602761498152582E+000000000000001539");
+ return val;
+ }
+
+ static const mp_float& A000142_648(void)
+ {
+ static const mp_float val("+1.91740042180588950551554603974378101032427009197031710213118894860228133872607823373938119461813020018209848186117493449503232837435309213492781768847380582749926061803619780824733980669315478373576467684676085528954310243105987842339921370867618404142739235237968299486198938260821291189120137998195221104712349031593839808019940013344789210255720251731252592442264801700352341321535598095485101502679302310589450802873E+000000000000001542");
+ return val;
+ }
+
+ static const mp_float& A000142_649(void)
+ {
+ static const mp_float val("+1.24439287375202228907958937979371387570045128968873579928314162764288058883322477369685839530716649991818191472790253248727598111495515679556815367981949998204702014110549237755252353454385745464451127527354779508291347347775786109678608969693084344288637763669441426366543110931273017981738969560828698496958314521504402035404941068660768197455962443373582932495029856303528669517676603163969830875238867199572553571065E+000000000000001545");
+ return val;
+ }
+
+ static const mp_float& A000142_650(void)
+ {
+ static const mp_float val("+8.08855367938814487901733096865914019205293338297678269534042057967872382741596102902957956949658224946818244573136646116729387724720851917119299891882674988330563091718570045409140297453507345518932328927806066803893757760542609712910958303005048237876145463851369271382530221053274616881303302145386540230229044389778613230132116946294993283463755881928289061217694065972936351864897920565803900689052636797221598211921E+000000000000001547");
+ return val;
+ }
+
+ static const mp_float& A000142_651(void)
+ {
+ static const mp_float val("+5.26564844528168231624028246059710026502645963231788553466661379737084921164779062989825629974227504440378677217111956621990831408793274598044664229615621417403196572708789099561350333642233281932824946132001749489334836302113238923105033855256286402857370696967241395670027173905681775589728449696646637689879107897745877212816008132038040627534905079135316178852718836948381565064048546288338339348573266554991260435961E+000000000000001550");
+ return val;
+ }
+
+ static const mp_float& A000142_652(void)
+ {
+ static const mp_float val("+3.43320278632365687018866416430930937279725168027126136860263219588579368599435949069366310743196332895126897545556995717538022078533215037925121077709385164146884165406130492914000417534736099820201864878065140667046313268977831777864482073627098734663005694422641389976857717386504517684502949202213607773801178349330311942756037302088802489152758111596226148611972681690344780421759652179996597255269769793854301804246E+000000000000001553");
+ return val;
+ }
+
+ static const mp_float& A000142_653(void)
+ {
+ static const mp_float val("+2.24188141946934793623319769929397902043660534721713367369751882391342327695431674742296200915307205380517864097248718203552328417282189419765104063744228512187915360010203211872842272650182673182591817765376536855581242564642524150945506794078495473734942718457984827654888089453387450047980425829045485876292169462112693698619692358263988025416751046872335675043618161143795141615409052873537778007691159675386859078173E+000000000000001556");
+ return val;
+ }
+
+ static const mp_float& A000142_654(void)
+ {
+ static const mp_float val("+1.46619044833295355029651129533826227936553989708000542259817731083937882312812315281461715398610912318858683119600661705123222784902551880526378057688725446970896645446672900564838846313219468261415048818556255103550132637276210794718361443327336039822652537871522077286296810502515392331379198492195747763095078828221701678897278802304648168622555184654507531478526277388042022616477520579293706817030018427703005837125E+000000000000001559");
+ return val;
+ }
+
+ static const mp_float& A000142_655(void)
+ {
+ static const mp_float val("+9.60354743658084575444214898446561792984428632587403551801806138599793129148920665093574235860901475688524374433384334168557109241111714817447776277861151677659373027675707498699694443351587517112268569761543470928253368774159180705405267453794051060838374123058469606225244108791475819770533750123882147848272766324852145996777176155095445504477736459487024331184347116891675248137927759794373779651546620701454688233169E+000000000000001561");
+ return val;
+ }
+
+ static const mp_float& A000142_656(void)
+ {
+ static const mp_float val("+6.29992711839703481491404973380944536197785182977336729981984826921464292721691956301384698724751368051671989628300123214573463662169284920245741238276915500544548706155264119146999554838641411225648181763572516928934209915848422542745855449688897495909973424726356061683760135367208137769470140081266688988466934709103007773885827557742612250937395117423487961256931708680938962778480610425109199451414583180154275480959E+000000000000001564");
+ return val;
+ }
+
+ static const mp_float& A000142_657(void)
+ {
+ static const mp_float val("+4.13905211678685187339853067511280560281944865216110231598164031287402040318151615290009747062161648809948497185793180951974765626045220192601451993547933483857768499944008526279578707528987407175250855418667143622309775914712413610584027030445605654812852540045215932526230408936255746514541882033392214665422776103880676107442988705436896248865868592147231590545804132603376898545461761049296744039579381149361358990990E+000000000000001567");
+ return val;
+ }
+
+ static const mp_float& A000142_658(void)
+ {
+ static const mp_float val("+2.72349629284574853269623318422422608665519721312200532391591932587110542529343762860826413566902364916946111148251913066399395781937754886731755411754540232378411672963157610291962789554073713921315062865482980503479832551880768155764289786033208520866856971349752083602259609080056281206568558377972077249848186676353484878697486568177477731753741533632878386579139119253021999242913838770437257578043232796279774216071E+000000000000001570");
+ return val;
+ }
+
+ static const mp_float& A000142_659(void)
+ {
+ static const mp_float val("+1.79478405698534828304681766840376499110577496344740150846059083574905847526837539725284606540588658480267487246698010710757201820296980470356226816346242013137373292482720865182403478316134577474146626428353284151793209651689426214648666968995884415251258744119486623093889082383757089315128679971083598907649955019716946535061643648428957825225715670664066856755652679587741497501080219749718152743930490412748371208391E+000000000000001573");
+ return val;
+ }
+
+ static const mp_float& A000142_660(void)
+ {
+ static const mp_float val("+1.18455747761032986681089966114648489412981147587528499558398995159437859367712776218687840316788514596976541582820687069099753201396007110435109698788519728670666373038595771020386295688648821132936773442713167540183518370115021301668120199537283714065830771118861171241966794373279678947984928780915175279048970313013184713140684807963112164648972342638284125458730768527909388350712945034813980810994123672413924997538E+000000000000001576");
+ return val;
+ }
+
+ static const mp_float& A000142_661(void)
+ {
+ static const mp_float val("+7.82992492700428041962004676017826515019805385553563382081017358003884250420581450805526624493972081486014939862444741526749368661227606999976075108992115406513104725785118046444753414501968707688712072456334037440613056426460290804026274518941445349975141397095672341909400510807378677846180379241849308594513693769017150953859926580636171408329707184839058069282210379969481056998212566680120413160671157474656044233727E+000000000000001578");
+ return val;
+ }
+
+ static const mp_float& A000142_662(void)
+ {
+ static const mp_float val("+5.18341030167683363778847095523801152943111165236458958937633490998571373778424920433258625415009517943741890188938418890708082053732675833984161722152780399111675328469748146746426760400303284489927391966093132785685843354316712512265393731539236821683543604877335090344023138154484684734171411058104242289568065275089353931455271396381145472314266156363456441864823271539796459732816719142239713512364306248222301282727E+000000000000001581");
+ return val;
+ }
+
+ static const mp_float& A000142_663(void)
+ {
+ static const mp_float val("+3.43660103001174070185375624332280164401282702551772289775651004532052820815095722247250468650151310396700873195266171724539458401624764077931499221787293404611040742775443021292880942145401077616821860873519747036909714143911980395631956044010514012776189410033673164898087340596423345978755645531523112637983627277384241656554844935800699448144358461668971620956377829030885052802857484791304930058697535042571385750448E+000000000000001584");
+ return val;
+ }
+
+ static const mp_float& A000142_664(void)
+ {
+ static const mp_float val("+2.28190308392779582603089414556634029162451714494376800411032267009283073021223559572174311183700470103409379801656738025094200378678843347746515483266762820661731053202894166138472945584546315537569715620017112032508050191557554982699618813222981304483389768262358981492329994156025101729893748632931346791621128512183136459952417037371664433567854018548197156315034878476507675061097369901426473558975163268267400138298E+000000000000001587");
+ return val;
+ }
+
+ static const mp_float& A000142_665(void)
+ {
+ static const mp_float val("+1.51746555081198422431054460680161629393030390138760572273336457561173243559113667115495916937160812618767237568101730786687643251821430826251432796372397275740051150379924620482084508813723299832483860887311379501617853377385774063495246510793282567481454195894468722692399446113756692650379342840899345616428050460601785745868357329852156848322622922334551108949498194186877603915629750984448604916718483573397821091968E+000000000000001590");
+ return val;
+ }
+
+ static const mp_float& A000142_666(void)
+ {
+ static const mp_float val("+1.01063205684078149339082270812987645175758239832414541134042080735741380210369702298920280680149101204098980220355752703933970405713072930283454242384016585642874066153029797241068282869939717688434251350949378748077490349338925526287834176188326189942648494465716169313138031111761957305152642332038964180541081606760789306748325981681536460982866866274811038560365797328460484207809414155642770874534510059882948847251E+000000000000001593");
+ return val;
+ }
+
+ static const mp_float& A000142_667(void)
+ {
+ static const mp_float val("+6.74091581912801256091678746322627593322307459682204989364060678507395006003165914333798272136594505031340198069772870535239582606106196444990639796701390626237970021240708747597925446742497916981856456510832356249676860630090633260339853955176135686917465458086326849318630667515452255225368124354699891084209014317094464676011334297815848194755721998052989627197639868180831429666088792418137281733145182099419268811161E+000000000000001595");
+ return val;
+ }
+
+ static const mp_float& A000142_668(void)
+ {
+ static const mp_float val("+4.50293176717751239069241402543515232339301383067712932895192533242939864010114830774977245787245129360935252310608277517540041180878939225253747384196528938326963974188793443395414198423988608543880112949236013974784142900900543017907022442057658638860866926001666335344845285900322106490545907068939527244251621563819102403575571310940986594096822294699397070968023431944795395016947313335315704197740981642412071565856E+000000000000001598");
+ return val;
+ }
+
+ static const mp_float& A000142_669(void)
+ {
+ static const mp_float val("+3.01246135224175578937322498301611690434992625272299952106883804739526769022766821788459777431666991542465683795796937659234287550008010341694757000027477859740738898732302813631532098745648379115855795563038893349130591600702463278979798013736573629397919973495114778345701496267315489242175211829120543726404334826194979507992057207019520031450774115153896640477607675971068119266337752621326206108288716718773675877558E+000000000000001601");
+ return val;
+ }
+
+ static const mp_float& A000142_670(void)
+ {
+ static const mp_float val("+2.01834910600197637888006073862079832591445058932440967911612149175482935245253770598268050879216884333452008143183948231686972658505366928935487190018410166026295062150642885133126506159584414007623383027236058543917496372470650396916464669203504331696606382241726901491620002499101377792257391925510764296690904333550636270354678328703078421072018657153110749119997142900615639908446294256288558092553440201578362837964E+000000000000001604");
+ return val;
+ }
+
+ static const mp_float& A000142_671(void)
+ {
+ static const mp_float val("+1.35431225012732615022852075561455567668859634543667889468691752096749049549565280071437862139954529387746297464076429263461958653857101209315711904502353221403643986703081375924327885633081141799115290011275395282968640065927806416330947793035551406568422882484198750900877021676897024498604709982017722843079596807812476937407989158559765620539324518949737312659518082886313094378567463445969622480103358375259081464274E+000000000000001607");
+ return val;
+ }
+
+ static const mp_float& A000142_672(void)
+ {
+ static const mp_float val("+9.10097832085563172953565947772981414734736744133448217229608574090153612973078682080062433580494437485655118958593604650464362153919720126601583998255813647832487590644706846211483391454305272890054748875770656301549261243034859117743969169198905452139801770293815606053893585668748004630623651079159097505494890548499845019381687145521624970024260767342234741071961516996023994223973354356915863066294568281741027439918E+000000000000001609");
+ return val;
+ }
+
+ static const mp_float& A000142_673(void)
+ {
+ static const mp_float val("+6.12495840993584015397749882851216492116477828801810650195526570362673381530881953039882017799672756427845895059133495929762515729587971645202866030826162584991264148503887707500328322448747448655006845993393651690942652816562460186241691250870863369290086591407737902874270383155067407116409717176274072621198061339140395698043875448936053604826327496421323980741430100938324148112734067482204375843616244453611711467065E+000000000000001612");
+ return val;
+ }
+
+ static const mp_float& A000142_674(void)
+ {
+ static const mp_float val("+4.12822196829675626378083421041719915686506056612420378231784908424441859151814436348880479996979437832368133269855976256659935601742292888866731704776833582284112036091620314855221289330455780393474614199547321239695347998363098165526899903086961910901518362608815346537258238246515432396460149376808724946687493342580626700481572052582900129652944732587972363019723888032430475827982761483005749318597348761734293528802E+000000000000001615");
+ return val;
+ }
+
+ static const mp_float& A000142_675(void)
+ {
+ static const mp_float val("+2.78654982860031047805206309203160943088391588213383755306454813186498254927474744535494323997961120536848489957152783973245456531176047699985043900724362668041775624361843712527274370298057651765595364584694441836794359898895091261730657434583699289858524894760950358912649310816397916867610600829345889339014058006241923022825061135493457587515737694496881345038313624421890571183888364001028880790053210414170648131941E+000000000000001618");
+ return val;
+ }
+
+ static const mp_float& A000142_676(void)
+ {
+ static const mp_float val("+1.88370768413380988316319465021336797527752713632247418587163453714072820330972927305994163022621717482909579211035281965913928615075008245189889676889669163596240322068606349668437474321486972593542466459253442681672987291653081692929924425778580719944362828858402442624950934111884991802504766160637821193173503212219539963429741327593577329160638681479891789245900010109198026120308534064695523414075970239979358137192E+000000000000001621");
+ return val;
+ }
+
+ static const mp_float& A000142_677(void)
+ {
+ static const mp_float val("+1.27527010215858929090148277819445011926288587129031502383509658164427299364068671786158048366314902735929785125870885890923729672405780581993555311254306023754654698040446498725532170115646680445828249792914580695492612396449136306113558836252099147402333635137138453657091782393746139450295726690751804947778461674672628555241934878780851851841752387361886741319474306843927063683448877561798869351329431852466025458879E+000000000000001624");
+ return val;
+ }
+
+ static const mp_float& A000142_678(void)
+ {
+ static const mp_float val("+8.64633129263523539231205323615837180860236620734833586160195482354817089688385594710151567923615040549603943153404606340462887178911192345916305010304194841056558852714227261359108113384084493422715533595960857115439912047925144155449928909789232219387822046229798715795082284629598825473005026963297237545937970154280421604540318478134175555487081186313592106146035800401825491773783389868996334202013547959719652611201E+000000000000001626");
+ return val;
+ }
+
+ static const mp_float& A000142_679(void)
+ {
+ static const mp_float val("+5.87085894769932483137988414735153445804100665478952005002772732518920803898413818808192914620134612533181077401161727705174300394480699602877171101996548297077403460992960310462834408987793371034023847311657421981383700280541172881550501729746888676964331169390033328024860871263497602496170413308078824293691881734756406269482876246653105202175728125506929040073158308472839508914398921721048510923167199064649644123005E+000000000000001629");
+ return val;
+ }
+
+ static const mp_float& A000142_680(void)
+ {
+ static const mp_float val("+3.99218408443554088533832122019904343146788452525687363401885458112866146650921396789571181941691536522563132632789974839518524268246875729956476349357652842012634353475213011114727398111699492303136216171927046947340916190767997559454341176227884300335745195185222663056905392459178369697395881049493600519710479579634356263248355847724111537479495125344711747249747649761530866061791266770312987427753695363961758003644E+000000000000001632");
+ return val;
+ }
+
+ static const mp_float& A000142_681(void)
+ {
+ static const mp_float val("+2.71867736150060334291539675095554857682962936169993094476683996974861845869277471213697974902291936371865493322929972865712115026676122372100360393912561585410603994716620060569129358114067354258435763213082318971139163925913006337988406341011189208528642477921136633541752572264700469763926594994705141953922836593730996615272130332300119957023536180359748699877078149487602519788079852670583144438300266542857957200481E+000000000000001635");
+ return val;
+ }
+
+ static const mp_float& A000142_682(void)
+ {
+ static const mp_float val("+1.85413796054341147986830058415168412939780722467935290433098485936855778882847235367742018883363100605612266446238241494415662448193115457772445788648367001250031924396734881308146222233793935604253190511322141538316909797472670322508093124569631040216534169942215184075475254284525720378997937786388906812575374556924539691615592886628681810690051675005348613316167297950544918495470459521337704506920781782229126810728E+000000000000001638");
+ return val;
+ }
+
+ static const mp_float& A000142_683(void)
+ {
+ static const mp_float val("+1.26637622705115004075004929897560026037870233445599803365806265894872496976984661756167798897336997713633177982780718940685897452115897857658580473646834661853771804362969923933463869785681258017704929119233022670670449391673833830273027604081058000467892838070532970723549598676331067018855591508103623352988980822379460609373449941567389676701305294028653102894942264500222179332406323853073652178226893957262493611727E+000000000000001641");
+ return val;
+ }
+
+ static const mp_float& A000142_684(void)
+ {
+ static const mp_float val("+8.66201339302986627873033720499310578099032396767902655022114858720927879322575086412187744457785064361250937402220117554291538572472741346384690439744349087079799141842714279704892869334059804841101715175553875067385873839049023399067508811914436723200387012402445519749079254946104498408972245915428783734444628825075510568114397600320945388636928211155987223801405089181519706633659255155023780899071954667675456304215E+000000000000001643");
+ return val;
+ }
+
+ static const mp_float& A000142_685(void)
+ {
+ static const mp_float val("+5.93347917422545840093028098542027745997837191786013318690148678223835597335963934192348604953582769087456892120520780524689703922143827822273512951224879124649662412162259281597851615493830966316154674895254404421159323579748581028361243536161389155392265103495675181028119289638081581410145988452068716858094570745176724739158362356219847591216295824641851248303962486089340999044056589781191289915864288947357687568388E+000000000000001646");
+ return val;
+ }
+
+ static const mp_float& A000142_686(void)
+ {
+ static const mp_float val("+4.07036671351866446303817275599831033754516313565205136621441993261551219772471258855951142998157779593995427994677255439937136890590665886079629884540267079509668414743309867176126208228768042892882106978144521432915295975707526585455813065806712960599093860998033174185289832691723964847360148078119139764652875531191233171062636576366815447574378935704309956336518265457287925344222820589897224882282902217887373671914E+000000000000001649");
+ return val;
+ }
+
+ static const mp_float& A000142_687(void)
+ {
+ static const mp_float val("+2.79634193218732248610722468337083920189352707419295928858930649370685687983687754834038435239734394581074859032343274487236813043835787463736705730679163483623142200928653878749998705053163645467410007493985286224412808335311070764208143576209211803931577482505648790665294115059214363850136421729667849018316525489928377188520031327964002212483598328828860940003188048369156804711481077745259393494128353823688625712605E+000000000000001652");
+ return val;
+ }
+
+ static const mp_float& A000142_688(void)
+ {
+ static const mp_float val("+1.92388324934487787044177058215913737090274662704475599054944286767031753332777175325818443444937263471779503014252172847218927374159021775050853542707264476732721834238913868579999109076576588081578085155861876922396012134694016685775202780431937721104925307963886367977722351160739482328893858150011480124601769537070723505701781553639233522188715650234256326722193377277979881641498981488738462723960307430697774490272E+000000000000001655");
+ return val;
+ }
+
+ static const mp_float& A000142_689(void)
+ {
+ static const mp_float val("+1.32555555879862085273437993110764564855199242603383687748856613582484878046283473799488907533561774532056077576819747091733840960795566003010038090925305224468845343790611655451619386153761269188207300672388833199530852360804177496499114715717605089841293537187117707536650699949749503324607868265357909805850619211041728495428527490457431896788025083011402609111591236944528138450992798245740800816808651819750766623797E+000000000000001658");
+ return val;
+ }
+
+ static const mp_float& A000142_690(void)
+ {
+ static const mp_float val("+9.14633335571048388386722152464275497500874773963347445467110633719145658519355969216473461981576244271186935280056254932963502629489405420769262827384606048835032872155220422616173764460952757398630374639482949076762881289548824725843891538451475119904925406591112182002889829653271572939794291030969577660369272556187926618456839684156280087837373072778678002869979534917244155311850307895611525635979697556280289704203E+000000000000001660");
+ return val;
+ }
+
+ static const mp_float& A000142_691(void)
+ {
+ static const mp_float val("+6.32011634879594436375225007352814368773104468808673084817773447899929650036874974728583162229269184791390172278518872158677780316977179145751560613722762779745007714659257312027776071242518355362453588875882717812043150971078237885558129053069969307854303455954458517763996872290410656901397855102399978163315167336325857293353676221751989540695624793290066499983155858627815711320488562755867564214461971011389680185604E+000000000000001663");
+ return val;
+ }
+
+ static const mp_float& A000142_692(void)
+ {
+ static const mp_float val("+4.37352051336679349971655705088147543190988292415601774693899225946751317825517482512179548262654275875641999216735059533805023979348207968860079944696151843583545338544206059923221041299822701910817883502110840725933860471986140616806225304724418761035177991520485294292685835624964174575767315730860784889014095796737493247000743945452376762161372356956726017988343854170448472233778085427060354436407683939881658688438E+000000000000001666");
+ return val;
+ }
+
+ static const mp_float& A000142_693(void)
+ {
+ static const mp_float val("+3.03084971576318789530357403626086247431354886644012029862872163581098663253083615380940426946019413181819905457197396256926881617688308122420035401674433227603396919611134799526792181620777132424196793266962812623072165307086395447446714136174022201397378348123696308944831284088100172981006749801486523928086768387139082820171515554198497096177831043371011130465922290940120791258008213200952825624430524970337989471088E+000000000000001669");
+ return val;
+ }
+
+ static const mp_float& A000142_694(void)
+ {
+ static const mp_float val("+2.10340970273965239934068038116503855717360291330944348724833281525282472297640029074372656300537472748183014387294993002307255842675685836959504568762056659956757462210127550871593774044819329902392574527272191960412082723117958440528019610504771407769780573597845238407712911157141520048818684362231647606092217260674523477199031794613756984747414744099481724543350069912443829133057699961461260983354784329414564692935E+000000000000001672");
+ return val;
+ }
+
+ static const mp_float& A000142_695(void)
+ {
+ static const mp_float val("+1.46186974340405841754177286490970179723565402475006322363759130660071318246859820206688996128873543559987194999170020136603542810659601656686855675289629378669946436236038647855757672961149434282162839296454173412486397492566981116166973629300816128399997498650502440693360473254213356433928985631750995086234090996168793816653327097256561104399453247149139798557628298589148461247475101473215576383431575108943122461590E+000000000000001675");
+ return val;
+ }
+
+ static const mp_float& A000142_696(void)
+ {
+ static const mp_float val("+1.01746134140922465860907391397715245087601520122604400365176354939409637499814434863855541305695986317751087719422334015076065796219082753054051550001582047554282719620282898907607340380960006260385336150332104695090532654826618856852213645993368025366398259060749698722578889384932496078014573999698692580018927333333480496390715659690566528662019460015801299796109295818047329028242670625358041162868376275824413233266E+000000000000001678");
+ return val;
+ }
+
+ static const mp_float& A000142_697(void)
+ {
+ static const mp_float val("+7.09170554962229587050524518042075258260582595254552670545279193927685173373706611001073122900701024634725081404373668085080178599647006788786739303511026871453350555753371805386023162455291243634885792967814769724781012604141533432259929112573775136803795865653425400096374859012979497663761580777899887282731923513334359059843288148043248704774275636310135059578881791851789883326851414258745546905192582642496160235867E+000000000000001680");
+ return val;
+ }
+
+ static const mp_float& A000142_698(void)
+ {
+ static const mp_float val("+4.95001047363636251761266113593368530265886651487677764040604877361524251014847214478749039784689315195038106820252820323385964662553610738573144033850696756274438687915853520159444167393793288057150283491534709267897146797690790335717430520576495045489049514226090929267269651591059689369305583382974121323346882612307382623770615127334187595932444394144474271586059490712549338562142287152604391739824422684462319844635E+000000000000001683");
+ return val;
+ }
+
+ static const mp_float& A000142_699(void)
+ {
+ static const mp_float val("+3.46005732107181739981125013401764602655854769389886757064382809275705451459378202920645578809497831321331636667356721406046789299124973906262627679661637032635832642853181610591451473008261508351948048160582761778260105611585862444666483933882970036796845610444037559557821486462150722869144602784698910805019470946002860454015659974006597129556778631506987515838655584008071987654937458719670469826137271456439161571400E+000000000000001686");
+ return val;
+ }
+
+ static const mp_float& A000142_700(void)
+ {
+ static const mp_float val("+2.42204012475027217986787509381235221859098338572920729945067966492993816021564742044451905166648481924932145667149704984232752509387481734383839375763145922845082849997227127414016031105783055846363633712407933244782073928110103711266538753718079025757791927310826291690475040523505506008401221949289237563513629662202002317810961981804617990689745042054891261087058908805650391358456221103769328878296090019507413099980E+000000000000001689");
+ return val;
+ }
+
+ static const mp_float& A000142_701(void)
+ {
+ static const mp_float val("+1.69785012744994079808738044076245890523227935339617431691492644511588665031116884173160785521820585829377434112671943193947159509080624695803071402409965291914403077848056216317225237805153922148300907232397961204592233823605182701597843666356373397056212141044889230475023003406977359711889256586451755532023054393203603624785484349245037211473511274480478774022028295072760924342277810993742299543685559103674696583086E+000000000000001692");
+ return val;
+ }
+
+ static const mp_float& A000142_702(void)
+ {
+ static const mp_float val("+1.19189078946985844025734106941524615147306010608411437047427836447135242851844052689558871436318051252222958747095704122150905975374598536453756124491795634923910960649335463854692116939218053348107236877143368765623748144170838256521686253782174124733460923013512239793466148391698106517746258123689132383480184184028929744599410013170016122454404914685296099363463863141078168888279023317607094279667262490779637001326E+000000000000001695");
+ return val;
+ }
+
+ static const mp_float& A000142_703(void)
+ {
+ static const mp_float val("+8.37899224997310483500910771798918044485561254577132402443417690223360757248463690407598866197315900303127399992082799978720869006883427711269905555177323313515094053364828310898485582082702915037193875246317882422334949453520992943347454364088684096876230288784991045748067023193637688819756194609534600655865694813723376104533852392585213340854466550237631578525150957881779527284601533922777872786060855310180848119324E+000000000000001697");
+ return val;
+ }
+
+ static const mp_float& A000142_704(void)
+ {
+ static const mp_float val("+5.89881054398106580384641183346438303317835123222301211320166053917245973102918438046949601802910393813401689594426291185019491780845933108734013510844835612714626213568839130872533849786222852186184488173407789225323804415278779032116607872318433604200866123304633696206639184328320932929108361005112358861729449148861256777591832084379990191961544451367292631281706274348772787208359479881635622441386842138367317076004E+000000000000001700");
+ return val;
+ }
+
+ static const mp_float& A000142_705(void)
+ {
+ static const mp_float val("+4.15866143350665139171172034259239003839073761871722353980717068011658411037557498823099469271051827638448191164070535285438741705496382841657479525145609106963811480566031587265136364099287110791260064162252491403853282112771539217642208549984495690961610616929766755825680624951466257715021394508604212997519261649947186028202241619487893085332888838213941305053602923415884814981893433316553113821177723707548958538583E+000000000000001703");
+ return val;
+ }
+
+ static const mp_float& A000142_706(void)
+ {
+ static const mp_float val("+2.93601497205569588254847456187022736710386075881435981910386250016230838192515594169108225305362590312744422961833797911519751644080446286210180544752800029516450905279618300609186273054096700218629605298550258931120417171616706687655399236289053957818897095552415329612930521215735177946805104523074574376248598724862713335910782583358452518245019519779042561367843663931614679377216763921486498357751472937529564728240E+000000000000001706");
+ return val;
+ }
+
+ static const mp_float& A000142_707(void)
+ {
+ static const mp_float val("+2.07576258524337698896177151524225074854242955648175239210643078761475202602108525077559515290891351351110307034016495123444464412364875524350597645140229620868130790032690138530694695049246367054571130946075033064302134940333011628172367260056361148177960246555557638036341878499524770808391208897813724084007759298477938328488923286434425930399228800483783090887065470399651578319692252092490954338930291366833402262865E+000000000000001709");
+ return val;
+ }
+
+ static const mp_float& A000142_708(void)
+ {
+ static const mp_float val("+1.46963991035231090818493423279151352996804012598908069361135299763124443442292835754912136825951076756586097380083678547398680803954331871240223132759282571574636599343144618079731844094866427874636360709821123409525911537755772232746036020119903692909995854561334807729730049977663537732340975899652116651477493583322380336570157686795573558722653990742518428348042353042953317450342114481483595671962646287718048802109E+000000000000001712");
+ return val;
+ }
+
+ static const mp_float& A000142_709(void)
+ {
+ static const mp_float val("+1.04197469643978843390311837104918309274734044932625821177044927532055230400585620550232705009599313420419543042479328090105664690003621296709318201126331343246417348934289534218529877463260297363117179743263176497353871280268842513016939538265011718273187060883986378680378605434163448252229751912853350705897542950575567658628241799938061653134361679436445565698762028307453902072292559167371869331421516217992096600695E+000000000000001715");
+ return val;
+ }
+
+ static const mp_float& A000142_710(void)
+ {
+ static const mp_float val("+7.39802034472249788071214043444919995850611719021643330357018985477592135844157905906652205568155125284978755601603229439750219299025711206636159227996952537049563177433455692951562129989148111278131976177168553131212486089908781842420270721681583199739628132276303288630688098582560482590831238581258790011872554949086530376260516779560237737253967923998763516461210400982922704713277170088340272253092765147743885864935E+000000000000001717");
+ return val;
+ }
+
+ static const mp_float& A000142_711(void)
+ {
+ static const mp_float val("+5.25999246509769599318633184889338117049784932224388407883840498674568008585196271099629718158958294077619895232739896131662405921607280667918309211105833253842239419155186997688560674422284307118751835061966841276292077609925143889960812483115605655014875602048451638216419238092200503122081010631274999698441386568800523097521227430267329031187571193963120860203920595098858043051140067932809933571948956020045902849969E+000000000000001720");
+ return val;
+ }
+
+ static const mp_float& A000142_712(void)
+ {
+ static const mp_float val("+3.74511463514955954714866827641208739339446871743764546413294435056292422112659745022936359329178305383265365405710806045743633016184383835557836158307353276735674466438493142354255200188666426668551306564120390988719959258266702449652098487978311226370591428658497566410090497521646758222921679569467799785290267236985972445435113930350338270205550690101742052465191463710386926652411728368160672703227656686272682829178E+000000000000001723");
+ return val;
+ }
+
+ static const mp_float& A000142_713(void)
+ {
+ static const mp_float val("+2.67026673486163595711700048108181831149025619553304121592678932195136496966326398201353624201704131738268205534271804710615210340539465674752737180873142886312535894570645610498583957734519162214677081580217838774957330951144158846601946221928535904402231688633508764850394524732934138612943157533030541246911960539970998353595236232339791186656557642042542083407681513625505878703169562326498559637401319217312422857204E+000000000000001726");
+ return val;
+ }
+
+ static const mp_float& A000142_714(void)
+ {
+ static const mp_float val("+1.90657044869120807338153834349241827440404292361059142817172757587327458833957048315766487680016750061123498751470068563379260183145178491773454347143424020827150628723440965895988945822446681821279436248275536885319534299116929416473789602456974635743193425684325258103181690659314974969641414478583806450295139825539292824466998669890610907272782156418375047553084600728611197394063067501119971581104541921161069920043E+000000000000001729");
+ return val;
+ }
+
+ static const mp_float& A000142_715(void)
+ {
+ static const mp_float val("+1.36319787081421377246779991559707906619889069038157287114278521674939133066279289545773038691211976293703301607301099022816171030948802621618019858207548174891412699537260290615632096263049377502214796917517008873003467023868604532778759565756736864556383299364292559543774908821410207103293611352187421611961024975260594369493904048971786798700039241839138159000455489520957006136755093263300779680489747473630164992831E+000000000000001732");
+ return val;
+ }
+
+ static const mp_float& A000142_716(void)
+ {
+ static const mp_float val("+9.76049675502977061086944739567508611398405734313206175738234215192564192754559713147734957029077750262915639508275869003363784581593426770785022184766044932222514928686783680807925809243433542915857945929421783530704823890899208454695918490818235950223704423448334726333428347161297082859582257281661938741640938822865855685576352990637993478692280971568229218443261304970052163939166467765233582512306591911191981348670E+000000000000001734");
+ return val;
+ }
+
+ static const mp_float& A000142_717(void)
+ {
+ static const mp_float val("+6.99827617335634552799339378269903674372656911502568828004313932293068526205019314326925964189848746938510513527433798075411833545002486994652860906477254216403543203868423899139282805227541850270670147231395418791515358729774732462016973557916675176310396071612455998781068124914650008410320478470951610077756553135994818526558245094287441324222365456614420349623818355663527401544382357387672478661323826400324650626997E+000000000000001737");
+ return val;
+ }
+
+ static const mp_float& A000142_718(void)
+ {
+ static const mp_float val("+5.02476229246985608909925673597790838199567662458844418507097403386423201815203867686732842288311400301850548712697467018145696485311785662160754130850668527377744020377528359582005054153375048494341165712141910692308027567978257907728187014584172776590864379417743407124806913688718706038610103542143256035829205151644279702068819977698382870791658397849153811029901579366412674308866532604348839678830507355433099150184E+000000000000001740");
+ return val;
+ }
+
+ static const mp_float& A000142_719(void)
+ {
+ static const mp_float val("+3.61280408828582652806236559316811612665489149307909136906603033034838282105131580866760913605295896817030544524429478786046755772939173891093582220081630671184597950651442890539461633936276659867431298147030033787769471821376367435656566463486020226368831488801357509722736170942188749641760664446801001089761198504032237105787481563965137284099202388053541590130499235564450712828075036942526815729079134788556398288982E+000000000000001743");
+ return val;
+ }
+
+ static const mp_float& A000142_720(void)
+ {
+ static const mp_float val("+2.60121894356579510020490322708104361119152187501694578572754183785083563115694738224067857795813045708261992057589224725953664156516205201587379198458774083252910524469038881188412376434119195104550534665861624327194019711390984553672727853709934562985558671936977407000370043078375899742067678401696720784628062922903210716166986726054898844551425719398549944893959449606404513236214026598619307324936977047760606768067E+000000000000001746");
+ return val;
+ }
+
+ static const mp_float& A000142_721(void)
+ {
+ static const mp_float val("+1.87547885831093826724773522672543244366908727188721791150955766509045249006415906259552925470781205955656896273521831027412591856848183950344500402088776114025348488142177033336845323408999939670380935494086231139906888211912899863198036782524862819912587802466560710447266801059509023714030796127623335685716833367413214926356397429485582066921577943686354510268544763166217654043310313177604520581279560451435397479776E+000000000000001749");
+ return val;
+ }
+
+ static const mp_float& A000142_722(void)
+ {
+ static const mp_float val("+1.35409573570049742895286483369576222432908101030257133210990063419530669782632284319397212189904030699984279109482762001791891320644388812148729290308096354326301608438651818069202323501297956442015035426730258883012773289001113701228982556982950955976888393380856832942926630364965515121530234804144048365087553691272341176829318944088590252317379275341547956413889319006009146219270046114230463859683842645936356980399E+000000000000001752");
+ return val;
+ }
+
+ static const mp_float& A000142_723(void)
+ {
+ static const mp_float val("+9.79011216911459641132921274762036088189925570448759073115458158523206742528431415629241844133006141960886337961560369272955374248258931111835312768927536641779160629011452644640332798914384225075768706135259771724182350879478052059885543886986735411712903084143594902177359537538700674328663597633961469679583013187899026708475975965760507524254652160719391724872419776413446127165322433405886253705514182330119860968281E+000000000000001754");
+ return val;
+ }
+
+ static const mp_float& A000142_724(void)
+ {
+ static const mp_float val("+7.08804121043896780180235002927714127849506113004901568935591706770801681590584344915571095152296446779681708684169707353619690955739466124968766444703536528648112295404291714719600946414014178954856543241928074728308022036742109691357133774178396438080141832919962709176408305178019288213952444686988104048018101548038895336936606599210607447560368164360839608807631918123334996067693441785861647682792268007006779341036E+000000000000001757");
+ return val;
+ }
+
+ static const mp_float& A000142_725(void)
+ {
+ static const mp_float val("+5.13882987756825165630670377122592742690891931928553637478303987408831219153173650063789043985414923915269238796023037831374275942911112940602355672410063983269881414168111493171710686150160279742270993850397854178023315976638029526233921986279337417608102828866972964152896021254063983955115522398066375434813123622328199119279039784427690399481266919161608716385533140639417872149077745294749694570024394305079915022251E+000000000000001760");
+ return val;
+ }
+
+ static const mp_float& A000142_726(void)
+ {
+ static const mp_float val("+3.73079049111455070247866693791002331193587542580129940809248694858811465105204069946310845933411234762485467365912725465577724334553467994877310218169706451853933906686048944042661958145016363092888741535388842133244927399039209436045827362038798965183482653757422371975002511430450452351413869260996188565674327749810272560596582883494503230023399783311327928095897060104217375180230443083988278257837710265488018306154E+000000000000001763");
+ return val;
+ }
+
+ static const mp_float& A000142_727(void)
+ {
+ static const mp_float val("+2.71228468704027836070199086386058694777738143455754466968323801162355935131483358850967984993589967672326934775018551413475005591220371232275804528609376590497809950160757582319015243571426895968530115096227688230869062219101505260005316492202206847688391889281646064425826825809937478859477882952744229087245236274112068151553715756300503848227011642467335403725717162695766031756027532122059478293448015363009789308574E+000000000000001766");
+ return val;
+ }
+
+ static const mp_float& A000142_728(void)
+ {
+ static const mp_float val("+1.97454325216532264659104934889050729798193368435789251952939727246195120775719885243504693075333496465454008516213505429009804070408430257096785696827626157882405643717031519928243097319998780265089923790053757032072677295505895829283870406323206585117149295397038334902001929189634484609699898789597798775514532007553585614331105070586766801509264475716220173912322094442517671118388043384859300197630155184271126616642E+000000000000001769");
+ return val;
+ }
+
+ static const mp_float& A000142_729(void)
+ {
+ static const mp_float val("+1.43944203082852020936487497534117982022882965589690364673693061162476243045499796342514921251918118923315972208319645457748147167327745657423556772987339469096273714269715978027689217946279110813250554442949188876380981748423798059547941526209617600550401836344440946143559406379243539280471226217616795307350093833506563912847375596457752998300253802797124506782082806848595382245304883627562429844072383129333651303532E+000000000000001772");
+ return val;
+ }
+
+ static const mp_float& A000142_730(void)
+ {
+ static const mp_float val("+1.05079268250481975283635873199906126876704564880473966211795934648607657423214851330035892513900226814020659712073341184156147432149254329919196444280757812440279811416892663960213129100783750893672904743352907879758116676349372583469997314133020848401793340531441890684798366656847783674743995138860260574365568498459791656378584185414159688759185276041900889950920448999474629039072565048120573786172839684413565451578E+000000000000001775");
+ return val;
+ }
+
+ static const mp_float& A000142_731(void)
+ {
+ static const mp_float val("+7.68129450911023239323378233091313787468710369276264693008228282281321975763700563222562374276610658010491022495256124056181437729011049151709326007692339608938445421457485373549157973726729219032748933673909756601031832904113913585165680366312382401817109319284840220905876060261557298662378604465068504798612305723741077008127450395377507324829644367866295505541228482186159538275620450501761394376923458093063163451037E+000000000000001777");
+ return val;
+ }
+
+ static const mp_float& A000142_732(void)
+ {
+ static const mp_float val("+5.62270758066869011184712866622841692427095990310225755282023102629927686259028812278915657970479001663679428466527482809124812417636087979051226637630792593742942048506879293437983636767965788331972219449301941831955301685811384744341278028140663918130124021716503041703101276111459942620861138468430145512584207789778468369949293689416335361775299677278128310056179248960268782017754169767289340683907971324122235646159E+000000000000001780");
+ return val;
+ }
+
+ static const mp_float& A000142_733(void)
+ {
+ static const mp_float val("+4.12144465663014985198394531234542960549061360897395478621722934227736994027868119400445177292361108219477021065964644899088487502127252488644549125383370971213576521555542522090042005750918922847335636856338323362823236135699745017602156794627106651989380907918196729568373235389700137941091214497359296660724224309907617315172832274342173820181294663444868051271179389487877017219013806439423086721304542980581598728635E+000000000000001783");
+ return val;
+ }
+
+ static const mp_float& A000142_734(void)
+ {
+ static const mp_float val("+3.02514037796652999135621585926154533043011038898688281308344633723158953616455199639926760132593053433096133462418049355930949826561403326665099058031394292870765166821768211214090832221174489369944357452552329348312255323603612842919983087256296282560205586411956399503185954776039901248760951441061723748971580643472191109336858889367155584013070282968533149633045671884101730638756133926536545653437534547746893466818E+000000000000001786");
+ return val;
+ }
+
+ static const mp_float& A000142_735(void)
+ {
+ static const mp_float val("+2.22347817780539954364681865655723581786613113590535886761633305786521830908094571735346168697455894273325658094877266276609248122522631445098847807653074805260012397613999635242356761682563249686909102727625962071009507662848655439546187569133377767681751106012787953634841676760389327417839299309180366955494111772952060465362591283684859354249606657981871864980288568834814772019485758436004361055276587892593966698111E+000000000000001789");
+ return val;
+ }
+
+ static const mp_float& A000142_736(void)
+ {
+ static const mp_float val("+1.63647993886477406412405853122612556194947251602634412656562113058880067548357604797214780161327538185167684357829667979584406618176656743592751986432663056671369124643903731538374576598366551769565099607532708084262997639856610403505994050882166037013768814025411933875243474095646544979529724291556750079243666264892716502506867184792056484727710500274657692625492386662423672206341518208899209736683568688949159489810E+000000000000001792");
+ return val;
+ }
+
+ static const mp_float& A000142_737(void)
+ {
+ static const mp_float val("+1.20608571494333848525943113751365453915676124431141562127886277324394609783139554735547292978898395642468583371720465300953707677596196020027858214000872672766799044862557050143782062952996148654169478410751605858101829260574321867383917615500156369279147615936728595266054440408491503649913406802877324808402582037225932062347561115191745629244322638702422719464987888970206246416073698919958717575935790123755530543990E+000000000000001795");
+ return val;
+ }
+
+ static const mp_float& A000142_738(void)
+ {
+ static const mp_float val("+8.90091257628183802121460179485077049897689798301824728503800726654032220199569913948339022184270159841418145283297033921038362660659926627805593619326440325018976951085671030061111624593111577067770750671346851232791499943038495381293312002391154005280109405613057033063481770214667296936360942205234657086011055434727378620125001030115082743823101073623879669651610620600122098550623898029295335710406131113315815414645E+000000000000001797");
+ return val;
+ }
+
+ static const mp_float& A000142_739(void)
+ {
+ static const mp_float val("+6.57777439387227829767759072639471939874392760945048474364308736997329810727482166407822537394175648122808009364356508067647350006227685777948333684682239400189023966852310891215161490574309455453082584746125323061032918457905448086775757569767062809902000850748049147433913028188639132435970736289668411586562169966263532800272375761255046147685271693408047075872540248623490230828911060643649253089990130892740387591423E+000000000000001800");
+ return val;
+ }
+
+ static const mp_float& A000142_740(void)
+ {
+ static const mp_float val("+4.86755305146548594028141713753209235507050643099335871029588465378024059938336803141788677671689979610877926929623815970059039004608487475681766926664857156139877735470710059499219503024988997035281112712132739065164359658850031584214060601627626479327480629553556369101095640859592958002618344854354624574056005775035014272201558063328734149287101053121954836145679783981382770813394184876300447286592696860627886817653E+000000000000001803");
+ return val;
+ }
+
+ static const mp_float& A000142_741(void)
+ {
+ static const mp_float val("+3.60685681113592508174853009891128043510724526536607880432925052845115828414307571128065410154722274891660543854851247633813747902414889219480189292658659152699649401983796154088921651741516846803143304519690359647286790507207873403902618905806071221181663146499185269503911869876958381879940193537076776809375500279300945575701354524926592004621741880363368533583948719930204633172725090993338631439365188373725264131881E+000000000000001806");
+ return val;
+ }
+
+ static const mp_float& A000142_742(void)
+ {
+ static const mp_float val("+2.67628775386285641065740933339217008284957598690163047281230389211075944683416217777024534334803927969612123540299625744289800943591847800854300455152725091303139856271976746333979865592205500327932331953610246858286798556348242065695743228108104846116794054702395469971902607448703119354915623604510968392556621207241301617170405057495531267429332475229619451919289950188211837814162017517057264528008969773304145985856E+000000000000001809");
+ return val;
+ }
+
+ static const mp_float& A000142_743(void)
+ {
+ static const mp_float val("+1.98848180112010231311845513471038237155723495826791144129954179183829426899778249808329229010759318481421807790442621928007322101088742916034745238178474742838232913210078722526147040135008686743653722641532413415707091327366743854811937218484321900664777982643879834189123637334386417680702308338151649515669569556980287101557610957719179731699994029095607252776032432989841395495922379015173547544310664541564980467491E+000000000000001812");
+ return val;
+ }
+
+ static const mp_float& A000142_744(void)
+ {
+ static const mp_float val("+1.47943046003335612096013062022452448443858280895132611232685909312769093613435017857396946384004932950177824996089310714437447643210024729529850457204785208671645287428298569559453397860446462937278369645300115581286075947560857427980081290552335494094594819087046596636707986176783494754442517403584827239658159750393333603558862552543069720384795557647131796065368130144441998248966249987289119372967134418924345467813E+000000000000001815");
+ return val;
+ }
+
+ static const mp_float& A000142_745(void)
+ {
+ static const mp_float val("+1.10217569272485031011529731206727074090674419266873795368351002438012974742009088303760725056083675047882479622086536482255898494191468423499738590617564980460375739134082434321792781406032614888272385385748586108058126580932838783845160561461489943100473140219849714494347449701703703592059675465670696293545329014043033534651352601644586941686672690447113188068699256957609288695479856240530393932860515142098637373521E+000000000000001818");
+ return val;
+ }
+
+ static const mp_float& A000142_746(void)
+ {
+ static const mp_float val("+8.22223066772738331346011794802183972716431167730878513447898478187576791575387798746055008918384215857203297980765562157629002766668354439308049886007034754234403013940254960040574149289003307066511994977684452366113624293758977327484897788502714975529529626040078870127831974774709628796765178973903394349848154444761030168499090408268618584982578270735464382992496456903765293668279727554356738739139442960055834806465E+000000000000001820");
+ return val;
+ }
+
+ static const mp_float& A000142_747(void)
+ {
+ static const mp_float val("+6.14200630879235533515470810717231427619174082294966249545580163206119863306814685663303091662033009245330863591631874931748865066701260766163113264847254961413099051413370455150308889518885470378684460248330285917486877347437956063631218648011528086720558630651938915985490485156708092711183588693505835579336571370236489535868820534976658082981985968239391894095394853307112674370204956483104483838137163891161708600429E+000000000000001823");
+ return val;
+ }
+
+ static const mp_float& A000142_748(void)
+ {
+ static const mp_float val("+4.59422071897668179069572166416489107859142213556634754660093962078177657753497384876150712563200690915507485966540642448948151069892543053090008722105746711136998090457201100452431049360126331843255976265751053866280184255883591135596151548712623008866977855727650309157146882897217653347965324342742365013343755384936894172829877760162540246070525504243065136783355350273720280428913307449362153910926598590588958033121E+000000000000001826");
+ return val;
+ }
+
+ static const mp_float& A000142_749(void)
+ {
+ static const mp_float val("+3.44107131851353466123109552645950341786497517953919431240410377596555065657369541272236883709837317495715106988938941194262165151349514746764416532857204286641611569752443624238870855970734622550598726223047539345843858007656809760561517509985754633641366413940010081558703015290016022357626027932714031394994472783317733735449578442361742644306823602678055787450733157355016490041256067279572253279284022344351129566808E+000000000000001829");
+ return val;
+ }
+
+ static const mp_float& A000142_750(void)
+ {
+ static const mp_float val("+2.58080348888515099592332164484462756339873138465439573430307783197416299243027155954177662782377988121786330241704205895696623863512136060073312399642903214981208677314332718179153141978050966912949044667285654509382893505742607320421138132489315975231024810455007561169027261467512016768219520949535523546245854587488300301587183831771306983230117702008541840588049868016262367530942050459679189959463016758263347175106E+000000000000001832");
+ return val;
+ }
+
+ static const mp_float& A000142_751(void)
+ {
+ static const mp_float val("+1.93818342015274839793841455527831530011244726987545119646161145181259640731513394121587424749565869079461534011519858627668164521497614181115057612131820314450887716663063871352544009625516276151624732545131526536546553022812698097636274737499476297398499632651710678437939473362101524592932860233101178183230636795203713526491975057660251544405818394208414922281625450880213038015737479895219071659556725585455773728504E+000000000000001835");
+ return val;
+ }
+
+ static const mp_float& A000142_752(void)
+ {
+ static const mp_float val("+1.45751393195486679524968774556929310568456034694633929973913181176307249830098072379433743411673533547755073576662933688006459720166205864198523324323128876467067562930624031257113095238388239666021798873938907955483007873155148969422478602599606175643671723754086430185330483968300346493885510895292085993789438869993192571921965243360509161393175432444728021555782339061920204587834584881204741887986657640262741843835E+000000000000001838");
+ return val;
+ }
+
+ static const mp_float& A000142_753(void)
+ {
+ static const mp_float val("+1.09750799076201469682301487241367770858047394125059349270356625425759359122063848501713608788990170761459570403227189067068864169285153015741488063215316043979701874886759895536606160714506344468514414552075997690478704928485827173975126387757503450259684807986827081929553854428130160909895789704154940753323447469104874006657239828250463398529061100630880200231504101313625914054639442415547170641653953203117844608408E+000000000000001841");
+ return val;
+ }
+
+ static const mp_float& A000142_754(void)
+ {
+ static const mp_float val("+8.27521025034559081404553213799912992269677351702947493498488955710225567780361417702920610268985887541405160840333005565699235836410053738690819996643482971606952136646169612346010451787377837292598685722653022586209435160783136891772452963691576014958023452220676197748836062388101413260614254369328253280058793917050750010195588305008494024909120698756836709745540923904739391971981395813225666638070807151508548347396E+000000000000001843");
+ return val;
+ }
+
+ static const mp_float& A000142_755(void)
+ {
+ static const mp_float val("+6.24778373901092106460437676418934309163606400535725357591359161561220303674172870365705060753084345093760896434451419202102923056489590572711569097465829643563248863167858057321237891099470267155912007720603032052588123546391268353288201987587139891293307706426610529300371227103016567011763762048842831226444389407373316257697669170281412988806386127561411715857883397548078240938845953838985378311743459399388954002284E+000000000000001846");
+ return val;
+ }
+
+ static const mp_float& A000142_756(void)
+ {
+ static const mp_float val("+4.72332450669225632484090883372714337727686438805008370339067526140282549577674689996473025929331764890883237704445272916789809830706130472969946237684167210533816140554900691334855845671199521969869477836775892231756621401071798875085880702615877757817740626058517560151080647689880524660893404108925180407191958391974227090819437892732748219537627912436427257188559848546347150149767541102272946003678055305938049225727E+000000000000001849");
+ return val;
+ }
+
+ static const mp_float& A000142_757(void)
+ {
+ static const mp_float val("+3.57555665156603803790456798713144753659858634175391336346674117288193890030299740327330080628504146022398610942265071598009886041844540768038249301926914578374098818400059823340485875173098038131191194722439350419439762400611351748440011691880219462668029653926297793034368050301239557168296306910456361568244312502724489907750314484798690402189984329714375433691739805349584792663374028614420620124784287866595103263875E+000000000000001852");
+ return val;
+ }
+
+ static const mp_float& A000142_758(void)
+ {
+ static const mp_float val("+2.71027194188705683273166253424563723274172844704946632950778980904450968642967203168116201116406142684978147094236924271291493619718161902172992970860601250407566904347245346092088293381208312903442925599609027617935339899663404625317528862445206352702366477676133727120050982128339584333568600638125922068729188877065163350074738379477407324860008121923496578738338772454985272838837513689730830054586490202879088274017E+000000000000001855");
+ return val;
+ }
+
+ static const mp_float& A000142_759(void)
+ {
+ static const mp_float val("+2.05709640389227613604333186349243865965097189131054494409641246506478285200012107204600196647352262297898413644525825521910243657366084883749301664883196349059343280399559217683895014676337109493713180530103251962012922983844524110616004406595911621701096156556185498884118695435409744509178567884337574850165454357692458982706726430023352159568746164539933903262399128293333822084677672890505700011431146063985227999979E+000000000000001858");
+ return val;
+ }
+
+ static const mp_float& A000142_760(void)
+ {
+ static const mp_float val("+1.56339326695812986339293221625425338133473863739601415751327347344923496752009201475496149451987719346402794369839627396651785179598224511649469265311229225285100893103665005439760211154016203215222017202878471491129821467721838324068163349012892832492833078982700979151930208530911405826975711592096556886125745311846268826857112086817747641272247085050349766479423337502933704784355031396784332008687671008628773279984E+000000000000001861");
+ return val;
+ }
+
+ static const mp_float& A000142_761(void)
+ {
+ static const mp_float val("+1.18974227615513682604202141656948682319573610305836677386760111329486781028279002322852569732962654422612526515447956448852008521674248853365246110901845440441961779651889069139657520688206330646783955091390516804749794136936318964615872308598811445527045973105835445134618888692023579834328516521585479790341692182315010577238262298068305955008180031723316172290841159839732549340894178892952876658611317637566496466068E+000000000000001864");
+ return val;
+ }
+
+ static const mp_float& A000142_762(void)
+ {
+ static const mp_float val("+9.06583614430214261444020319425948959275150910530475481687112048330689271435485997700136581365175426700307452047713428140252304935157776262643175365072062256167748760947394706844190307644132239528493737796395738052193431323454750510372946991522943214916090315066466091925795931833219678337583295894481356002403694429240380598555558711280491377162331841731669232856209637978762025977613643164300920138618240398256703071438E+000000000000001866");
+ return val;
+ }
+
+ static const mp_float& A000142_763(void)
+ {
+ static const mp_float val("+6.91723297810253481481787503721999055926940144734752792527266492876315914105275816245204211581628850572334585912405345671012508665525383288396742803549983501455992304602862161322117204732472898760240721938649948133823588099795974639414558554532005672980976910395713628139382295988746614571576054767489274629834018849510410396697891296707014920774859195241263624669287953777795425820919209734361602065765717423869864443507E+000000000000001869");
+ return val;
+ }
+
+ static const mp_float& A000142_764(void)
+ {
+ static const mp_float val("+5.28476599527033659852085652843607278728182270577351133490831600557505358376430723611336017648364441837263623637077684092653556620461392832335111501912187395112378120716586691250097544415609294652823911561128560374241221308244124624512722735662452334157466359542325211898488074135402413532684105842361805817193190401025953543077188950684159399471992425164325409247335996686235705327182276237052263978245008111836576434839E+000000000000001872");
+ return val;
+ }
+
+ static const mp_float& A000142_765(void)
+ {
+ static const mp_float val("+4.04284598638180749786845524425359568227059436991673617120486174426491599157969503562672053500998798005506672082364428330879970814652965516736360298962823357260969262348188818806324621477941110409410292344263348686294534300806755337752232892781776035630461765049878787102343376713582846352503340969406781450152790656784854460454049547273381940596074205250708938074212037464970314575294441321344981943357431205554980972652E+000000000000001875");
+ return val;
+ }
+
+ static const mp_float& A000142_766(void)
+ {
+ static const mp_float val("+3.09682002556846454336723671709825429261927528735621990714292409610692564955004639729006792981765079272218110815091152101454057644024171585820051989005522691661902454958712635205644660052102890573608283935705725093701613274417974588718210395870840443292933712028207150920395026562604460306017559182565594590817037643097198516707801953211410566496592841222043046564846420698167260964675542052150256168611792303455115425052E+000000000000001878");
+ return val;
+ }
+
+ static const mp_float& A000142_767(void)
+ {
+ static