@lakutata/math 0.0.0-stage → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -0
- package/README.md +954 -2
- package/README.zh-CN.md +578 -0
- package/THIRD_PARTY_NOTICES.md +553 -0
- package/binding.gyp +89 -0
- package/dist/cjs/exceptions/MathArgumentException.d.ts +11 -0
- package/dist/cjs/exceptions/MathArgumentException.js +18 -0
- package/dist/cjs/exceptions/MathCancelledException.d.ts +10 -0
- package/dist/cjs/exceptions/MathCancelledException.js +17 -0
- package/dist/cjs/exceptions/MathDefinitionException.d.ts +11 -0
- package/dist/cjs/exceptions/MathDefinitionException.js +18 -0
- package/dist/cjs/exceptions/MathDivisionByZeroException.d.ts +10 -0
- package/dist/cjs/exceptions/MathDivisionByZeroException.js +17 -0
- package/dist/cjs/exceptions/MathDomainException.d.ts +11 -0
- package/dist/cjs/exceptions/MathDomainException.js +18 -0
- package/dist/cjs/exceptions/MathException.d.ts +19 -0
- package/dist/cjs/exceptions/MathException.js +22 -0
- package/dist/cjs/exceptions/MathNotSupportedException.d.ts +11 -0
- package/dist/cjs/exceptions/MathNotSupportedException.js +18 -0
- package/dist/cjs/exceptions/MathSyntaxException.d.ts +11 -0
- package/dist/cjs/exceptions/MathSyntaxException.js +18 -0
- package/dist/cjs/exceptions/MathTimeoutException.d.ts +10 -0
- package/dist/cjs/exceptions/MathTimeoutException.js +17 -0
- package/dist/cjs/exceptions/MathUnitException.d.ts +11 -0
- package/dist/cjs/exceptions/MathUnitException.js +18 -0
- package/dist/cjs/exceptions/MathUnknownFunctionException.d.ts +12 -0
- package/dist/cjs/exceptions/MathUnknownFunctionException.js +19 -0
- package/dist/cjs/exports/Math.d.ts +28 -0
- package/dist/cjs/exports/Math.js +84 -0
- package/dist/cjs/lib/Addon.d.ts +5 -0
- package/dist/cjs/lib/Addon.js +9 -0
- package/dist/cjs/lib/Context.d.ts +90 -0
- package/dist/cjs/lib/Context.js +134 -0
- package/dist/cjs/lib/Decimal.d.ts +276 -0
- package/dist/cjs/lib/Decimal.js +402 -0
- package/dist/cjs/lib/Defaults.d.ts +273 -0
- package/dist/cjs/lib/Defaults.js +308 -0
- package/dist/cjs/lib/Distribution.d.ts +177 -0
- package/dist/cjs/lib/Distribution.js +195 -0
- package/dist/cjs/lib/Expression.d.ts +791 -0
- package/dist/cjs/lib/Expression.js +991 -0
- package/dist/cjs/lib/ExpressionMatrix.d.ts +284 -0
- package/dist/cjs/lib/ExpressionMatrix.js +412 -0
- package/dist/cjs/lib/LinearAlgebra.d.ts +613 -0
- package/dist/cjs/lib/LinearAlgebra.js +712 -0
- package/dist/cjs/lib/MathScope.d.ts +268 -0
- package/dist/cjs/lib/MathScope.js +316 -0
- package/dist/cjs/lib/MathSet.d.ts +139 -0
- package/dist/cjs/lib/MathSet.js +376 -0
- package/dist/cjs/lib/Matrix.d.ts +212 -0
- package/dist/cjs/lib/Matrix.js +393 -0
- package/dist/cjs/lib/Native.d.ts +80 -0
- package/dist/cjs/lib/Native.js +61 -0
- package/dist/cjs/lib/NumberTheory.d.ts +356 -0
- package/dist/cjs/lib/NumberTheory.js +524 -0
- package/dist/cjs/lib/Numeric.d.ts +363 -0
- package/dist/cjs/lib/Numeric.js +243 -0
- package/dist/cjs/lib/Polynomials.d.ts +140 -0
- package/dist/cjs/lib/Polynomials.js +167 -0
- package/dist/cjs/lib/SparseMatrix.d.ts +125 -0
- package/dist/cjs/lib/SparseMatrix.js +341 -0
- package/dist/cjs/lib/Statistics.d.ts +366 -0
- package/dist/cjs/lib/Statistics.js +380 -0
- package/dist/cjs/lib/Unit.d.ts +342 -0
- package/dist/cjs/lib/Unit.js +1027 -0
- package/dist/cjs/lib/UnitTable.d.ts +39 -0
- package/dist/cjs/lib/UnitTable.js +634 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/exceptions/MathArgumentException.js +14 -0
- package/dist/esm/exceptions/MathCancelledException.js +13 -0
- package/dist/esm/exceptions/MathDefinitionException.js +14 -0
- package/dist/esm/exceptions/MathDivisionByZeroException.js +13 -0
- package/dist/esm/exceptions/MathDomainException.js +14 -0
- package/dist/esm/exceptions/MathException.js +18 -0
- package/dist/esm/exceptions/MathNotSupportedException.js +14 -0
- package/dist/esm/exceptions/MathSyntaxException.js +14 -0
- package/dist/esm/exceptions/MathTimeoutException.js +13 -0
- package/dist/esm/exceptions/MathUnitException.js +14 -0
- package/dist/esm/exceptions/MathUnknownFunctionException.js +15 -0
- package/dist/esm/exports/Math.js +26 -0
- package/dist/esm/lib/Addon.js +10 -0
- package/dist/esm/lib/Context.js +128 -0
- package/dist/esm/lib/Decimal.js +397 -0
- package/dist/esm/lib/Defaults.js +290 -0
- package/dist/esm/lib/Distribution.js +190 -0
- package/dist/esm/lib/Expression.js +979 -0
- package/dist/esm/lib/ExpressionMatrix.js +407 -0
- package/dist/esm/lib/LinearAlgebra.js +708 -0
- package/dist/esm/lib/MathScope.js +311 -0
- package/dist/esm/lib/MathSet.js +370 -0
- package/dist/esm/lib/Matrix.js +382 -0
- package/dist/esm/lib/Native.js +56 -0
- package/dist/esm/lib/NumberTheory.js +520 -0
- package/dist/esm/lib/Numeric.js +239 -0
- package/dist/esm/lib/Polynomials.js +163 -0
- package/dist/esm/lib/SparseMatrix.js +332 -0
- package/dist/esm/lib/Statistics.js +376 -0
- package/dist/esm/lib/Unit.js +1018 -0
- package/dist/esm/lib/UnitTable.js +631 -0
- package/dist/types/exceptions/MathArgumentException.d.ts +11 -0
- package/dist/types/exceptions/MathCancelledException.d.ts +10 -0
- package/dist/types/exceptions/MathDefinitionException.d.ts +11 -0
- package/dist/types/exceptions/MathDivisionByZeroException.d.ts +10 -0
- package/dist/types/exceptions/MathDomainException.d.ts +11 -0
- package/dist/types/exceptions/MathException.d.ts +19 -0
- package/dist/types/exceptions/MathNotSupportedException.d.ts +11 -0
- package/dist/types/exceptions/MathSyntaxException.d.ts +11 -0
- package/dist/types/exceptions/MathTimeoutException.d.ts +10 -0
- package/dist/types/exceptions/MathUnitException.d.ts +11 -0
- package/dist/types/exceptions/MathUnknownFunctionException.d.ts +12 -0
- package/dist/types/exports/Math.d.ts +28 -0
- package/dist/types/lib/Addon.d.ts +5 -0
- package/dist/types/lib/Context.d.ts +90 -0
- package/dist/types/lib/Decimal.d.ts +276 -0
- package/dist/types/lib/Defaults.d.ts +273 -0
- package/dist/types/lib/Distribution.d.ts +177 -0
- package/dist/types/lib/Expression.d.ts +791 -0
- package/dist/types/lib/ExpressionMatrix.d.ts +284 -0
- package/dist/types/lib/LinearAlgebra.d.ts +613 -0
- package/dist/types/lib/MathScope.d.ts +268 -0
- package/dist/types/lib/MathSet.d.ts +139 -0
- package/dist/types/lib/Matrix.d.ts +212 -0
- package/dist/types/lib/Native.d.ts +80 -0
- package/dist/types/lib/NumberTheory.d.ts +356 -0
- package/dist/types/lib/Numeric.d.ts +363 -0
- package/dist/types/lib/Polynomials.d.ts +140 -0
- package/dist/types/lib/SparseMatrix.d.ts +125 -0
- package/dist/types/lib/Statistics.d.ts +366 -0
- package/dist/types/lib/Unit.d.ts +342 -0
- package/dist/types/lib/UnitTable.d.ts +39 -0
- package/native/addon.cpp +1374 -0
- package/native/async/Pool.cpp +133 -0
- package/native/async/Pool.h +59 -0
- package/native/config/boost_math_policy.h +26 -0
- package/native/config/mpdecimal/mpdecimal.h +809 -0
- package/native/config/symengine/symengine_config.h +44 -0
- package/native/config/symengine/symengine_export.h +19 -0
- package/native/core/Errors.cpp +77 -0
- package/native/core/Errors.h +72 -0
- package/native/core/Handle.cpp +109 -0
- package/native/core/Handle.h +72 -0
- package/native/core/Scope.cpp +122 -0
- package/native/core/Scope.h +36 -0
- package/native/functions/Functions.cpp +468 -0
- package/native/functions/Functions.h +115 -0
- package/native/functions/Gosper.cpp +429 -0
- package/native/functions/Gosper.h +20 -0
- package/native/functions/SpecialIntegrals.cpp +329 -0
- package/native/functions/SpecialIntegrals.h +53 -0
- package/native/functions/Summation.cpp +645 -0
- package/native/functions/Summation.h +42 -0
- package/native/integrals/Integrals.cpp +1428 -0
- package/native/integrals/Integrals.h +32 -0
- package/native/limits/Gruntz.cpp +1332 -0
- package/native/limits/Gruntz.h +24 -0
- package/native/linalg/Decompositions.cpp +159 -0
- package/native/linalg/Functions.cpp +199 -0
- package/native/linalg/Linalg.cpp +123 -0
- package/native/linalg/Linalg.h +67 -0
- package/native/linalg/LinalgSupport.h +69 -0
- package/native/linalg/Sparse.cpp +172 -0
- package/native/matrix/Matrices.cpp +766 -0
- package/native/matrix/Matrices.h +74 -0
- package/native/ntheory/NumberTheory.cpp +754 -0
- package/native/ntheory/NumberTheory.h +56 -0
- package/native/numeric/Compiled.cpp +93 -0
- package/native/numeric/Compiled.h +49 -0
- package/native/numeric/Integrate.cpp +718 -0
- package/native/numeric/Numeric.h +95 -0
- package/native/numeric/ODE.cpp +542 -0
- package/native/numeric/Roots.cpp +402 -0
- package/native/ops/Decimal.cpp +776 -0
- package/native/ops/Decimal.h +182 -0
- package/native/ops/DecimalComplex.cpp +738 -0
- package/native/ops/DecimalEvaluator.h +79 -0
- package/native/ops/DecimalFunctions.cpp +439 -0
- package/native/ops/DecimalOperations.cpp +236 -0
- package/native/ops/DecimalSpecial.cpp +1028 -0
- package/native/ops/DecimalSupport.h +109 -0
- package/native/ops/Operations.cpp +969 -0
- package/native/ops/Operations.h +120 -0
- package/native/ops/Piecewise.cpp +195 -0
- package/native/ops/Piecewise.h +40 -0
- package/native/parser/Parser.cpp +853 -0
- package/native/parser/Parser.h +56 -0
- package/native/poly/Convert.cpp +210 -0
- package/native/poly/Convert.h +40 -0
- package/native/poly/Dense.cpp +1008 -0
- package/native/poly/Dense.h +136 -0
- package/native/poly/Euclid.cpp +446 -0
- package/native/poly/Euclid.h +44 -0
- package/native/poly/Factor.cpp +919 -0
- package/native/poly/Factor.h +36 -0
- package/native/poly/Galois.cpp +439 -0
- package/native/poly/Galois.h +86 -0
- package/native/poly/Inequalities.cpp +227 -0
- package/native/poly/Inequalities.h +21 -0
- package/native/poly/Poly.cpp +338 -0
- package/native/poly/Poly.h +46 -0
- package/native/poly/Rational.cpp +403 -0
- package/native/poly/Rational.h +33 -0
- package/native/poly/RealRoots.cpp +136 -0
- package/native/poly/RealRoots.h +35 -0
- package/native/printer/Printer.cpp +973 -0
- package/native/printer/Printer.h +23 -0
- package/native/simplify/Simplify.cpp +921 -0
- package/native/simplify/Simplify.h +21 -0
- package/native/stats/Distributions.cpp +392 -0
- package/native/stats/Distributions.h +33 -0
- package/native/stats/Statistics.cpp +255 -0
- package/native/stats/Statistics.h +25 -0
- package/package.json +85 -4
- package/scripts/sources.mjs +35 -0
- package/vendor/PATCHES.md +169 -0
- package/vendor/boost/config/README.md +43 -0
- package/vendor/boost/config/include/boost/config/abi/borland_prefix.hpp +27 -0
- package/vendor/boost/config/include/boost/config/abi/borland_suffix.hpp +12 -0
- package/vendor/boost/config/include/boost/config/abi/msvc_prefix.hpp +22 -0
- package/vendor/boost/config/include/boost/config/abi/msvc_suffix.hpp +8 -0
- package/vendor/boost/config/include/boost/config/abi_prefix.hpp +25 -0
- package/vendor/boost/config/include/boost/config/abi_suffix.hpp +25 -0
- package/vendor/boost/config/include/boost/config/assert_cxx03.hpp +211 -0
- package/vendor/boost/config/include/boost/config/assert_cxx11.hpp +212 -0
- package/vendor/boost/config/include/boost/config/assert_cxx14.hpp +47 -0
- package/vendor/boost/config/include/boost/config/assert_cxx17.hpp +65 -0
- package/vendor/boost/config/include/boost/config/assert_cxx20.hpp +59 -0
- package/vendor/boost/config/include/boost/config/assert_cxx23.hpp +41 -0
- package/vendor/boost/config/include/boost/config/assert_cxx98.hpp +23 -0
- package/vendor/boost/config/include/boost/config/auto_link.hpp +530 -0
- package/vendor/boost/config/include/boost/config/compiler/borland.hpp +342 -0
- package/vendor/boost/config/include/boost/config/compiler/clang.hpp +370 -0
- package/vendor/boost/config/include/boost/config/compiler/clang_version.hpp +98 -0
- package/vendor/boost/config/include/boost/config/compiler/codegear.hpp +389 -0
- package/vendor/boost/config/include/boost/config/compiler/comeau.hpp +59 -0
- package/vendor/boost/config/include/boost/config/compiler/common_edg.hpp +185 -0
- package/vendor/boost/config/include/boost/config/compiler/compaq_cxx.hpp +19 -0
- package/vendor/boost/config/include/boost/config/compiler/cray.hpp +446 -0
- package/vendor/boost/config/include/boost/config/compiler/diab.hpp +26 -0
- package/vendor/boost/config/include/boost/config/compiler/digitalmars.hpp +146 -0
- package/vendor/boost/config/include/boost/config/compiler/gcc.hpp +386 -0
- package/vendor/boost/config/include/boost/config/compiler/gcc_xml.hpp +115 -0
- package/vendor/boost/config/include/boost/config/compiler/greenhills.hpp +28 -0
- package/vendor/boost/config/include/boost/config/compiler/hp_acc.hpp +153 -0
- package/vendor/boost/config/include/boost/config/compiler/intel.hpp +577 -0
- package/vendor/boost/config/include/boost/config/compiler/kai.hpp +33 -0
- package/vendor/boost/config/include/boost/config/compiler/metrowerks.hpp +201 -0
- package/vendor/boost/config/include/boost/config/compiler/mpw.hpp +143 -0
- package/vendor/boost/config/include/boost/config/compiler/nvcc.hpp +64 -0
- package/vendor/boost/config/include/boost/config/compiler/pathscale.hpp +141 -0
- package/vendor/boost/config/include/boost/config/compiler/pgi.hpp +23 -0
- package/vendor/boost/config/include/boost/config/compiler/sgi_mipspro.hpp +29 -0
- package/vendor/boost/config/include/boost/config/compiler/sunpro_cc.hpp +225 -0
- package/vendor/boost/config/include/boost/config/compiler/vacpp.hpp +189 -0
- package/vendor/boost/config/include/boost/config/compiler/visualc.hpp +400 -0
- package/vendor/boost/config/include/boost/config/compiler/xlcpp.hpp +303 -0
- package/vendor/boost/config/include/boost/config/compiler/xlcpp_zos.hpp +174 -0
- package/vendor/boost/config/include/boost/config/detail/cxx_composite.hpp +218 -0
- package/vendor/boost/config/include/boost/config/detail/posix_features.hpp +95 -0
- package/vendor/boost/config/include/boost/config/detail/select_compiler_config.hpp +157 -0
- package/vendor/boost/config/include/boost/config/detail/select_platform_config.hpp +147 -0
- package/vendor/boost/config/include/boost/config/detail/select_stdlib_config.hpp +121 -0
- package/vendor/boost/config/include/boost/config/detail/suffix.hpp +1334 -0
- package/vendor/boost/config/include/boost/config/header_deprecated.hpp +26 -0
- package/vendor/boost/config/include/boost/config/helper_macros.hpp +37 -0
- package/vendor/boost/config/include/boost/config/no_tr1/cmath.hpp +28 -0
- package/vendor/boost/config/include/boost/config/no_tr1/complex.hpp +28 -0
- package/vendor/boost/config/include/boost/config/no_tr1/functional.hpp +28 -0
- package/vendor/boost/config/include/boost/config/no_tr1/memory.hpp +28 -0
- package/vendor/boost/config/include/boost/config/no_tr1/utility.hpp +28 -0
- package/vendor/boost/config/include/boost/config/platform/aix.hpp +33 -0
- package/vendor/boost/config/include/boost/config/platform/amigaos.hpp +15 -0
- package/vendor/boost/config/include/boost/config/platform/beos.hpp +26 -0
- package/vendor/boost/config/include/boost/config/platform/bsd.hpp +83 -0
- package/vendor/boost/config/include/boost/config/platform/cloudabi.hpp +18 -0
- package/vendor/boost/config/include/boost/config/platform/cray.hpp +18 -0
- package/vendor/boost/config/include/boost/config/platform/cygwin.hpp +71 -0
- package/vendor/boost/config/include/boost/config/platform/haiku.hpp +31 -0
- package/vendor/boost/config/include/boost/config/platform/hpux.hpp +87 -0
- package/vendor/boost/config/include/boost/config/platform/irix.hpp +31 -0
- package/vendor/boost/config/include/boost/config/platform/linux.hpp +106 -0
- package/vendor/boost/config/include/boost/config/platform/macos.hpp +87 -0
- package/vendor/boost/config/include/boost/config/platform/qnxnto.hpp +31 -0
- package/vendor/boost/config/include/boost/config/platform/solaris.hpp +31 -0
- package/vendor/boost/config/include/boost/config/platform/symbian.hpp +97 -0
- package/vendor/boost/config/include/boost/config/platform/vms.hpp +25 -0
- package/vendor/boost/config/include/boost/config/platform/vxworks.hpp +422 -0
- package/vendor/boost/config/include/boost/config/platform/wasm.hpp +23 -0
- package/vendor/boost/config/include/boost/config/platform/win32.hpp +90 -0
- package/vendor/boost/config/include/boost/config/platform/zos.hpp +32 -0
- package/vendor/boost/config/include/boost/config/pragma_message.hpp +31 -0
- package/vendor/boost/config/include/boost/config/requires_threads.hpp +92 -0
- package/vendor/boost/config/include/boost/config/stdlib/dinkumware.hpp +324 -0
- package/vendor/boost/config/include/boost/config/stdlib/libcomo.hpp +93 -0
- package/vendor/boost/config/include/boost/config/stdlib/libcpp.hpp +185 -0
- package/vendor/boost/config/include/boost/config/stdlib/libstdcpp3.hpp +482 -0
- package/vendor/boost/config/include/boost/config/stdlib/modena.hpp +79 -0
- package/vendor/boost/config/include/boost/config/stdlib/msl.hpp +98 -0
- package/vendor/boost/config/include/boost/config/stdlib/roguewave.hpp +208 -0
- package/vendor/boost/config/include/boost/config/stdlib/sgi.hpp +168 -0
- package/vendor/boost/config/include/boost/config/stdlib/stlport.hpp +258 -0
- package/vendor/boost/config/include/boost/config/stdlib/vacpp.hpp +74 -0
- package/vendor/boost/config/include/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- package/vendor/boost/config/include/boost/config/user.hpp +133 -0
- package/vendor/boost/config/include/boost/config/warning_disable.hpp +47 -0
- package/vendor/boost/config/include/boost/config/workaround.hpp +310 -0
- package/vendor/boost/config/include/boost/config.hpp +67 -0
- package/vendor/boost/config/include/boost/cstdint.hpp +556 -0
- package/vendor/boost/config/include/boost/cxx11_char_types.hpp +70 -0
- package/vendor/boost/config/include/boost/detail/workaround.hpp +10 -0
- package/vendor/boost/config/include/boost/limits.hpp +146 -0
- package/vendor/boost/config/include/boost/static_assert.hpp +179 -0
- package/vendor/boost/config/include/boost/version.hpp +32 -0
- package/vendor/boost/math/LICENSE +23 -0
- package/vendor/boost/math/README.md +184 -0
- package/vendor/boost/math/include/boost/cstdfloat.hpp +58 -0
- package/vendor/boost/math/include/boost/math/bindings/detail/big_digamma.hpp +297 -0
- package/vendor/boost/math/include/boost/math/bindings/detail/big_lanczos.hpp +777 -0
- package/vendor/boost/math/include/boost/math/bindings/mpfr.hpp +974 -0
- package/vendor/boost/math/include/boost/math/bindings/mpreal.hpp +921 -0
- package/vendor/boost/math/include/boost/math/bindings/rr.hpp +876 -0
- package/vendor/boost/math/include/boost/math/ccmath/abs.hpp +89 -0
- package/vendor/boost/math/include/boost/math/ccmath/ccmath.hpp +45 -0
- package/vendor/boost/math/include/boost/math/ccmath/ceil.hpp +78 -0
- package/vendor/boost/math/include/boost/math/ccmath/copysign.hpp +81 -0
- package/vendor/boost/math/include/boost/math/ccmath/detail/config.hpp +52 -0
- package/vendor/boost/math/include/boost/math/ccmath/detail/swap.hpp +21 -0
- package/vendor/boost/math/include/boost/math/ccmath/div.hpp +86 -0
- package/vendor/boost/math/include/boost/math/ccmath/fabs.hpp +41 -0
- package/vendor/boost/math/include/boost/math/ccmath/fdim.hpp +93 -0
- package/vendor/boost/math/include/boost/math/ccmath/floor.hpp +131 -0
- package/vendor/boost/math/include/boost/math/ccmath/fma.hpp +130 -0
- package/vendor/boost/math/include/boost/math/ccmath/fmax.hpp +89 -0
- package/vendor/boost/math/include/boost/math/ccmath/fmin.hpp +89 -0
- package/vendor/boost/math/include/boost/math/ccmath/fmod.hpp +114 -0
- package/vendor/boost/math/include/boost/math/ccmath/fpclassify.hpp +48 -0
- package/vendor/boost/math/include/boost/math/ccmath/frexp.hpp +101 -0
- package/vendor/boost/math/include/boost/math/ccmath/hypot.hpp +116 -0
- package/vendor/boost/math/include/boost/math/ccmath/ilogb.hpp +60 -0
- package/vendor/boost/math/include/boost/math/ccmath/isfinite.hpp +53 -0
- package/vendor/boost/math/include/boost/math/ccmath/isgreater.hpp +42 -0
- package/vendor/boost/math/include/boost/math/ccmath/isgreaterequal.hpp +42 -0
- package/vendor/boost/math/include/boost/math/ccmath/isinf.hpp +61 -0
- package/vendor/boost/math/include/boost/math/ccmath/isless.hpp +42 -0
- package/vendor/boost/math/include/boost/math/ccmath/islessequal.hpp +42 -0
- package/vendor/boost/math/include/boost/math/ccmath/isnan.hpp +42 -0
- package/vendor/boost/math/include/boost/math/ccmath/isnormal.hpp +47 -0
- package/vendor/boost/math/include/boost/math/ccmath/isunordered.hpp +35 -0
- package/vendor/boost/math/include/boost/math/ccmath/ldexp.hpp +81 -0
- package/vendor/boost/math/include/boost/math/ccmath/logb.hpp +86 -0
- package/vendor/boost/math/include/boost/math/ccmath/modf.hpp +79 -0
- package/vendor/boost/math/include/boost/math/ccmath/next.hpp +458 -0
- package/vendor/boost/math/include/boost/math/ccmath/remainder.hpp +106 -0
- package/vendor/boost/math/include/boost/math/ccmath/round.hpp +179 -0
- package/vendor/boost/math/include/boost/math/ccmath/scalbln.hpp +60 -0
- package/vendor/boost/math/include/boost/math/ccmath/scalbn.hpp +81 -0
- package/vendor/boost/math/include/boost/math/ccmath/signbit.hpp +218 -0
- package/vendor/boost/math/include/boost/math/ccmath/sqrt.hpp +80 -0
- package/vendor/boost/math/include/boost/math/ccmath/trunc.hpp +70 -0
- package/vendor/boost/math/include/boost/math/common_factor.hpp +23 -0
- package/vendor/boost/math/include/boost/math/common_factor_ct.hpp +34 -0
- package/vendor/boost/math/include/boost/math/common_factor_rt.hpp +30 -0
- package/vendor/boost/math/include/boost/math/complex/acos.hpp +245 -0
- package/vendor/boost/math/include/boost/math/complex/acosh.hpp +34 -0
- package/vendor/boost/math/include/boost/math/complex/asin.hpp +252 -0
- package/vendor/boost/math/include/boost/math/complex/asinh.hpp +32 -0
- package/vendor/boost/math/include/boost/math/complex/atan.hpp +36 -0
- package/vendor/boost/math/include/boost/math/complex/atanh.hpp +214 -0
- package/vendor/boost/math/include/boost/math/complex/details.hpp +68 -0
- package/vendor/boost/math/include/boost/math/complex/fabs.hpp +23 -0
- package/vendor/boost/math/include/boost/math/complex.hpp +32 -0
- package/vendor/boost/math/include/boost/math/concepts/distributions.hpp +497 -0
- package/vendor/boost/math/include/boost/math/concepts/real_concept.hpp +400 -0
- package/vendor/boost/math/include/boost/math/concepts/real_type_concept.hpp +119 -0
- package/vendor/boost/math/include/boost/math/concepts/std_real_concept.hpp +427 -0
- package/vendor/boost/math/include/boost/math/constants/calculate_constants.hpp +1117 -0
- package/vendor/boost/math/include/boost/math/constants/constants.hpp +360 -0
- package/vendor/boost/math/include/boost/math/constants/info.hpp +169 -0
- package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_cmath.hpp +1012 -0
- package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_complex.hpp +38 -0
- package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_complex_std.hpp +813 -0
- package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_iostream.hpp +822 -0
- package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_limits.hpp +87 -0
- package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_types.hpp +441 -0
- package/vendor/boost/math/include/boost/math/differentiation/autodiff.hpp +2061 -0
- package/vendor/boost/math/include/boost/math/differentiation/autodiff_cpp11.hpp +387 -0
- package/vendor/boost/math/include/boost/math/differentiation/autodiff_reverse.hpp +811 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_operator_expressions.hpp +276 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_ops_et.hpp +160 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_ops_no_et.hpp +154 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_comparison_operator_overloads.hpp +167 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_erf_overloads.hpp +234 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_expression_template_base.hpp +258 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_helper_functions.hpp +18 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp +462 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_et.hpp +275 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_expressions.hpp +852 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_no_et.hpp +266 -0
- package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_utilities.hpp +51 -0
- package/vendor/boost/math/include/boost/math/differentiation/finite_difference.hpp +266 -0
- package/vendor/boost/math/include/boost/math/differentiation/lanczos_smoothing.hpp +591 -0
- package/vendor/boost/math/include/boost/math/distributions/arcsine.hpp +593 -0
- package/vendor/boost/math/include/boost/math/distributions/bernoulli.hpp +349 -0
- package/vendor/boost/math/include/boost/math/distributions/beta.hpp +584 -0
- package/vendor/boost/math/include/boost/math/distributions/binomial.hpp +729 -0
- package/vendor/boost/math/include/boost/math/distributions/cauchy.hpp +379 -0
- package/vendor/boost/math/include/boost/math/distributions/chi_squared.hpp +345 -0
- package/vendor/boost/math/include/boost/math/distributions/complement.hpp +198 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/common_error_handling.hpp +228 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/derived_accessors.hpp +190 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/generic_mode.hpp +145 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/generic_quantile.hpp +100 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_cdf.hpp +101 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_pdf.hpp +490 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_quantile.hpp +245 -0
- package/vendor/boost/math/include/boost/math/distributions/detail/inv_discrete_quantile.hpp +583 -0
- package/vendor/boost/math/include/boost/math/distributions/empirical_cumulative_distribution_function.hpp +73 -0
- package/vendor/boost/math/include/boost/math/distributions/exponential.hpp +352 -0
- package/vendor/boost/math/include/boost/math/distributions/extreme_value.hpp +388 -0
- package/vendor/boost/math/include/boost/math/distributions/find_location.hpp +141 -0
- package/vendor/boost/math/include/boost/math/distributions/find_scale.hpp +200 -0
- package/vendor/boost/math/include/boost/math/distributions/fisher_f.hpp +393 -0
- package/vendor/boost/math/include/boost/math/distributions/fwd.hpp +171 -0
- package/vendor/boost/math/include/boost/math/distributions/gamma.hpp +396 -0
- package/vendor/boost/math/include/boost/math/distributions/geometric.hpp +571 -0
- package/vendor/boost/math/include/boost/math/distributions/holtsmark.hpp +2518 -0
- package/vendor/boost/math/include/boost/math/distributions/hyperexponential.hpp +641 -0
- package/vendor/boost/math/include/boost/math/distributions/hypergeometric.hpp +313 -0
- package/vendor/boost/math/include/boost/math/distributions/inverse_chi_squared.hpp +398 -0
- package/vendor/boost/math/include/boost/math/distributions/inverse_gamma.hpp +504 -0
- package/vendor/boost/math/include/boost/math/distributions/inverse_gaussian.hpp +566 -0
- package/vendor/boost/math/include/boost/math/distributions/kolmogorov_smirnov.hpp +511 -0
- package/vendor/boost/math/include/boost/math/distributions/landau.hpp +4642 -0
- package/vendor/boost/math/include/boost/math/distributions/laplace.hpp +494 -0
- package/vendor/boost/math/include/boost/math/distributions/logistic.hpp +377 -0
- package/vendor/boost/math/include/boost/math/distributions/lognormal.hpp +361 -0
- package/vendor/boost/math/include/boost/math/distributions/mapairy.hpp +4220 -0
- package/vendor/boost/math/include/boost/math/distributions/negative_binomial.hpp +609 -0
- package/vendor/boost/math/include/boost/math/distributions/non_central_beta.hpp +981 -0
- package/vendor/boost/math/include/boost/math/distributions/non_central_chi_squared.hpp +998 -0
- package/vendor/boost/math/include/boost/math/distributions/non_central_f.hpp +712 -0
- package/vendor/boost/math/include/boost/math/distributions/non_central_t.hpp +1324 -0
- package/vendor/boost/math/include/boost/math/distributions/normal.hpp +368 -0
- package/vendor/boost/math/include/boost/math/distributions/pareto.hpp +508 -0
- package/vendor/boost/math/include/boost/math/distributions/poisson.hpp +563 -0
- package/vendor/boost/math/include/boost/math/distributions/rayleigh.hpp +381 -0
- package/vendor/boost/math/include/boost/math/distributions/saspoint5.hpp +2796 -0
- package/vendor/boost/math/include/boost/math/distributions/skew_normal.hpp +760 -0
- package/vendor/boost/math/include/boost/math/distributions/students_t.hpp +721 -0
- package/vendor/boost/math/include/boost/math/distributions/triangular.hpp +548 -0
- package/vendor/boost/math/include/boost/math/distributions/uniform.hpp +398 -0
- package/vendor/boost/math/include/boost/math/distributions/weibull.hpp +487 -0
- package/vendor/boost/math/include/boost/math/distributions.hpp +58 -0
- package/vendor/boost/math/include/boost/math/filters/daubechies.hpp +99 -0
- package/vendor/boost/math/include/boost/math/interpolators/barycentric_rational.hpp +99 -0
- package/vendor/boost/math/include/boost/math/interpolators/bezier_polynomial.hpp +60 -0
- package/vendor/boost/math/include/boost/math/interpolators/bilinear_uniform.hpp +54 -0
- package/vendor/boost/math/include/boost/math/interpolators/cardinal_cubic_b_spline.hpp +87 -0
- package/vendor/boost/math/include/boost/math/interpolators/cardinal_quadratic_b_spline.hpp +57 -0
- package/vendor/boost/math/include/boost/math/interpolators/cardinal_quintic_b_spline.hpp +62 -0
- package/vendor/boost/math/include/boost/math/interpolators/cardinal_trigonometric.hpp +58 -0
- package/vendor/boost/math/include/boost/math/interpolators/catmull_rom.hpp +310 -0
- package/vendor/boost/math/include/boost/math/interpolators/cubic_b_spline.hpp +90 -0
- package/vendor/boost/math/include/boost/math/interpolators/cubic_hermite.hpp +142 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/barycentric_rational_detail.hpp +215 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/bezier_polynomial_detail.hpp +167 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/bilinear_uniform_detail.hpp +137 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_cubic_b_spline_detail.hpp +331 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_quadratic_b_spline_detail.hpp +208 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_quintic_b_spline_detail.hpp +241 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_trigonometric_detail.hpp +684 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/cubic_b_spline_detail.hpp +330 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +439 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +586 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +653 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/vector_barycentric_rational_detail.hpp +196 -0
- package/vendor/boost/math/include/boost/math/interpolators/detail/whittaker_shannon_detail.hpp +128 -0
- package/vendor/boost/math/include/boost/math/interpolators/makima.hpp +178 -0
- package/vendor/boost/math/include/boost/math/interpolators/pchip.hpp +136 -0
- package/vendor/boost/math/include/boost/math/interpolators/quintic_hermite.hpp +143 -0
- package/vendor/boost/math/include/boost/math/interpolators/septic_hermite.hpp +147 -0
- package/vendor/boost/math/include/boost/math/interpolators/vector_barycentric_rational.hpp +82 -0
- package/vendor/boost/math/include/boost/math/interpolators/whittaker_shannon.hpp +47 -0
- package/vendor/boost/math/include/boost/math/octonion.hpp +4254 -0
- package/vendor/boost/math/include/boost/math/optimization/cma_es.hpp +392 -0
- package/vendor/boost/math/include/boost/math/optimization/detail/common.hpp +200 -0
- package/vendor/boost/math/include/boost/math/optimization/detail/differentiable_opt_utilties.hpp +157 -0
- package/vendor/boost/math/include/boost/math/optimization/detail/gradient_opt_base.hpp +92 -0
- package/vendor/boost/math/include/boost/math/optimization/detail/line_search_policies.hpp +206 -0
- package/vendor/boost/math/include/boost/math/optimization/detail/rdiff_optimization_policies.hpp +134 -0
- package/vendor/boost/math/include/boost/math/optimization/differential_evolution.hpp +236 -0
- package/vendor/boost/math/include/boost/math/optimization/gradient_descent.hpp +202 -0
- package/vendor/boost/math/include/boost/math/optimization/gradient_optimizers.hpp +18 -0
- package/vendor/boost/math/include/boost/math/optimization/jso.hpp +465 -0
- package/vendor/boost/math/include/boost/math/optimization/lbfgs.hpp +382 -0
- package/vendor/boost/math/include/boost/math/optimization/minimizer.hpp +336 -0
- package/vendor/boost/math/include/boost/math/optimization/nesterov.hpp +208 -0
- package/vendor/boost/math/include/boost/math/optimization/random_search.hpp +145 -0
- package/vendor/boost/math/include/boost/math/policies/error_handling.hpp +1062 -0
- package/vendor/boost/math/include/boost/math/policies/policy.hpp +1034 -0
- package/vendor/boost/math/include/boost/math/quadrature/detail/exp_sinh_detail.hpp +2002 -0
- package/vendor/boost/math/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp +692 -0
- package/vendor/boost/math/include/boost/math/quadrature/detail/sinh_sinh_detail.hpp +1353 -0
- package/vendor/boost/math/include/boost/math/quadrature/detail/tanh_sinh_detail.hpp +879 -0
- package/vendor/boost/math/include/boost/math/quadrature/exp_sinh.hpp +180 -0
- package/vendor/boost/math/include/boost/math/quadrature/gauss.hpp +904 -0
- package/vendor/boost/math/include/boost/math/quadrature/gauss_kronrod.hpp +1317 -0
- package/vendor/boost/math/include/boost/math/quadrature/naive_monte_carlo.hpp +469 -0
- package/vendor/boost/math/include/boost/math/quadrature/ooura_fourier_integrals.hpp +68 -0
- package/vendor/boost/math/include/boost/math/quadrature/sinh_sinh.hpp +72 -0
- package/vendor/boost/math/include/boost/math/quadrature/tanh_sinh.hpp +289 -0
- package/vendor/boost/math/include/boost/math/quadrature/trapezoidal.hpp +125 -0
- package/vendor/boost/math/include/boost/math/quadrature/wavelet_transforms.hpp +47 -0
- package/vendor/boost/math/include/boost/math/quaternion.hpp +1190 -0
- package/vendor/boost/math/include/boost/math/special_functions/acosh.hpp +102 -0
- package/vendor/boost/math/include/boost/math/special_functions/airy.hpp +475 -0
- package/vendor/boost/math/include/boost/math/special_functions/asinh.hpp +110 -0
- package/vendor/boost/math/include/boost/math/special_functions/atanh.hpp +116 -0
- package/vendor/boost/math/include/boost/math/special_functions/bernoulli.hpp +149 -0
- package/vendor/boost/math/include/boost/math/special_functions/bessel.hpp +795 -0
- package/vendor/boost/math/include/boost/math/special_functions/bessel_iterators.hpp +187 -0
- package/vendor/boost/math/include/boost/math/special_functions/bessel_prime.hpp +343 -0
- package/vendor/boost/math/include/boost/math/special_functions/beta.hpp +1870 -0
- package/vendor/boost/math/include/boost/math/special_functions/binomial.hpp +87 -0
- package/vendor/boost/math/include/boost/math/special_functions/cardinal_b_spline.hpp +218 -0
- package/vendor/boost/math/include/boost/math/special_functions/cbrt.hpp +215 -0
- package/vendor/boost/math/include/boost/math/special_functions/chebyshev.hpp +314 -0
- package/vendor/boost/math/include/boost/math/special_functions/chebyshev_transform.hpp +237 -0
- package/vendor/boost/math/include/boost/math/special_functions/cos_pi.hpp +128 -0
- package/vendor/boost/math/include/boost/math/special_functions/daubechies_scaling.hpp +491 -0
- package/vendor/boost/math/include/boost/math/special_functions/daubechies_wavelet.hpp +266 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/airy_ai_bi_zero.hpp +222 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bernoulli_details.hpp +629 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_derivatives_linear.hpp +107 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_i0.hpp +550 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_i1.hpp +556 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_ik.hpp +447 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_j0.hpp +192 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_j1.hpp +179 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jn.hpp +127 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy.hpp +603 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_asym.hpp +230 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp +141 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp +219 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_series.hpp +267 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_zero.hpp +643 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_k0.hpp +485 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_k1.hpp +526 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_kn.hpp +91 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_y0.hpp +205 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_y1.hpp +183 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_yn.hpp +113 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +244 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/erf_inv.hpp +559 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp +562 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/gamma_inva.hpp +241 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_0F1_bessel.hpp +46 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_addition_theorems_on_z.hpp +293 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_bessel.hpp +768 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_by_ratios.hpp +678 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_cf.hpp +50 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_large_a.hpp +35 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_large_abz.hpp +492 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_negative_b_regions.hpp +521 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_recurrence.hpp +522 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_scaled_series.hpp +60 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_small_a_negative_b_by_ratio.hpp +70 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_asym.hpp +179 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_cf.hpp +228 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_pFq_checked_series.hpp +687 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_pade.hpp +131 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_rational.hpp +167 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_separated_series.hpp +50 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_series.hpp +434 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp +331 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/ibeta_inverse.hpp +1122 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/iconv.hpp +43 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/igamma_inverse.hpp +587 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/igamma_large.hpp +823 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/lambert_w_lookup_table.ipp +162 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/lanczos_sse2.hpp +238 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/lgamma_small.hpp +569 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/polygamma.hpp +538 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/round_fwd.hpp +87 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/t_distribution_inv.hpp +567 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/unchecked_bernoulli.hpp +1305 -0
- package/vendor/boost/math/include/boost/math/special_functions/detail/unchecked_factorial.hpp +1727 -0
- package/vendor/boost/math/include/boost/math/special_functions/digamma.hpp +631 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_1.hpp +815 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_2.hpp +756 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_3.hpp +374 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_d.hpp +183 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_rc.hpp +112 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_rd.hpp +207 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_rf.hpp +169 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_rg.hpp +130 -0
- package/vendor/boost/math/include/boost/math/special_functions/ellint_rj.hpp +299 -0
- package/vendor/boost/math/include/boost/math/special_functions/erf.hpp +1334 -0
- package/vendor/boost/math/include/boost/math/special_functions/expint.hpp +1614 -0
- package/vendor/boost/math/include/boost/math/special_functions/expm1.hpp +416 -0
- package/vendor/boost/math/include/boost/math/special_functions/factorials.hpp +276 -0
- package/vendor/boost/math/include/boost/math/special_functions/fibonacci.hpp +92 -0
- package/vendor/boost/math/include/boost/math/special_functions/fourier_transform_daubechies.hpp +248 -0
- package/vendor/boost/math/include/boost/math/special_functions/fpclassify.hpp +797 -0
- package/vendor/boost/math/include/boost/math/special_functions/gamma.hpp +2628 -0
- package/vendor/boost/math/include/boost/math/special_functions/gegenbauer.hpp +84 -0
- package/vendor/boost/math/include/boost/math/special_functions/hankel.hpp +186 -0
- package/vendor/boost/math/include/boost/math/special_functions/hermite.hpp +79 -0
- package/vendor/boost/math/include/boost/math/special_functions/heuman_lambda.hpp +97 -0
- package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_0F1.hpp +116 -0
- package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_1F0.hpp +69 -0
- package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_1F1.hpp +822 -0
- package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_2F0.hpp +163 -0
- package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_pFq.hpp +205 -0
- package/vendor/boost/math/include/boost/math/special_functions/hypot.hpp +148 -0
- package/vendor/boost/math/include/boost/math/special_functions/jacobi.hpp +69 -0
- package/vendor/boost/math/include/boost/math/special_functions/jacobi_elliptic.hpp +319 -0
- package/vendor/boost/math/include/boost/math/special_functions/jacobi_theta.hpp +802 -0
- package/vendor/boost/math/include/boost/math/special_functions/jacobi_zeta.hpp +83 -0
- package/vendor/boost/math/include/boost/math/special_functions/laguerre.hpp +139 -0
- package/vendor/boost/math/include/boost/math/special_functions/lambert_w.hpp +2171 -0
- package/vendor/boost/math/include/boost/math/special_functions/lanczos.hpp +2760 -0
- package/vendor/boost/math/include/boost/math/special_functions/legendre.hpp +380 -0
- package/vendor/boost/math/include/boost/math/special_functions/legendre_stieltjes.hpp +234 -0
- package/vendor/boost/math/include/boost/math/special_functions/log1p.hpp +417 -0
- package/vendor/boost/math/include/boost/math/special_functions/logaddexp.hpp +41 -0
- package/vendor/boost/math/include/boost/math/special_functions/logistic_sigmoid.hpp +46 -0
- package/vendor/boost/math/include/boost/math/special_functions/logit.hpp +56 -0
- package/vendor/boost/math/include/boost/math/special_functions/logsumexp.hpp +60 -0
- package/vendor/boost/math/include/boost/math/special_functions/math_fwd.hpp +1927 -0
- package/vendor/boost/math/include/boost/math/special_functions/modf.hpp +74 -0
- package/vendor/boost/math/include/boost/math/special_functions/next.hpp +886 -0
- package/vendor/boost/math/include/boost/math/special_functions/nonfinite_num_facets.hpp +588 -0
- package/vendor/boost/math/include/boost/math/special_functions/owens_t.hpp +1067 -0
- package/vendor/boost/math/include/boost/math/special_functions/polygamma.hpp +83 -0
- package/vendor/boost/math/include/boost/math/special_functions/pow.hpp +144 -0
- package/vendor/boost/math/include/boost/math/special_functions/powm1.hpp +101 -0
- package/vendor/boost/math/include/boost/math/special_functions/prime.hpp +2433 -0
- package/vendor/boost/math/include/boost/math/special_functions/relative_difference.hpp +134 -0
- package/vendor/boost/math/include/boost/math/special_functions/round.hpp +353 -0
- package/vendor/boost/math/include/boost/math/special_functions/rsqrt.hpp +52 -0
- package/vendor/boost/math/include/boost/math/special_functions/sign.hpp +241 -0
- package/vendor/boost/math/include/boost/math/special_functions/sin_pi.hpp +135 -0
- package/vendor/boost/math/include/boost/math/special_functions/sinc.hpp +123 -0
- package/vendor/boost/math/include/boost/math/special_functions/sinhc.hpp +142 -0
- package/vendor/boost/math/include/boost/math/special_functions/spherical_harmonic.hpp +205 -0
- package/vendor/boost/math/include/boost/math/special_functions/sqrt1pm1.hpp +49 -0
- package/vendor/boost/math/include/boost/math/special_functions/trigamma.hpp +448 -0
- package/vendor/boost/math/include/boost/math/special_functions/trunc.hpp +385 -0
- package/vendor/boost/math/include/boost/math/special_functions/ulp.hpp +102 -0
- package/vendor/boost/math/include/boost/math/special_functions/zeta.hpp +1081 -0
- package/vendor/boost/math/include/boost/math/special_functions.hpp +86 -0
- package/vendor/boost/math/include/boost/math/statistics/anderson_darling.hpp +112 -0
- package/vendor/boost/math/include/boost/math/statistics/bivariate_statistics.hpp +470 -0
- package/vendor/boost/math/include/boost/math/statistics/chatterjee_correlation.hpp +159 -0
- package/vendor/boost/math/include/boost/math/statistics/detail/rank.hpp +140 -0
- package/vendor/boost/math/include/boost/math/statistics/detail/single_pass.hpp +401 -0
- package/vendor/boost/math/include/boost/math/statistics/linear_regression.hpp +133 -0
- package/vendor/boost/math/include/boost/math/statistics/ljung_box.hpp +70 -0
- package/vendor/boost/math/include/boost/math/statistics/runs_test.hpp +121 -0
- package/vendor/boost/math/include/boost/math/statistics/signal_statistics.hpp +350 -0
- package/vendor/boost/math/include/boost/math/statistics/t_test.hpp +275 -0
- package/vendor/boost/math/include/boost/math/statistics/univariate_statistics.hpp +1184 -0
- package/vendor/boost/math/include/boost/math/statistics/z_test.hpp +161 -0
- package/vendor/boost/math/include/boost/math/tools/agm.hpp +47 -0
- package/vendor/boost/math/include/boost/math/tools/array.hpp +41 -0
- package/vendor/boost/math/include/boost/math/tools/assert.hpp +49 -0
- package/vendor/boost/math/include/boost/math/tools/atomic.hpp +50 -0
- package/vendor/boost/math/include/boost/math/tools/big_constant.hpp +110 -0
- package/vendor/boost/math/include/boost/math/tools/bivariate_statistics.hpp +96 -0
- package/vendor/boost/math/include/boost/math/tools/centered_continued_fraction.hpp +173 -0
- package/vendor/boost/math/include/boost/math/tools/cohen_acceleration.hpp +51 -0
- package/vendor/boost/math/include/boost/math/tools/color_maps.hpp +1943 -0
- package/vendor/boost/math/include/boost/math/tools/complex.hpp +115 -0
- package/vendor/boost/math/include/boost/math/tools/concepts.hpp +24 -0
- package/vendor/boost/math/include/boost/math/tools/condition_numbers.hpp +144 -0
- package/vendor/boost/math/include/boost/math/tools/config.hpp +856 -0
- package/vendor/boost/math/include/boost/math/tools/convert_from_string.hpp +85 -0
- package/vendor/boost/math/include/boost/math/tools/cstdint.hpp +107 -0
- package/vendor/boost/math/include/boost/math/tools/cubic_roots.hpp +198 -0
- package/vendor/boost/math/include/boost/math/tools/cxx03_warn.hpp +95 -0
- package/vendor/boost/math/include/boost/math/tools/detail/is_const_iterable.hpp +38 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_10.hpp +84 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_11.hpp +90 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_12.hpp +96 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_13.hpp +102 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_14.hpp +108 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_15.hpp +114 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_16.hpp +120 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_17.hpp +126 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_18.hpp +132 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_19.hpp +138 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_2.hpp +36 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_20.hpp +144 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_3.hpp +42 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_4.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_5.hpp +54 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_6.hpp +60 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_7.hpp +66 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_8.hpp +72 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_9.hpp +78 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_10.hpp +90 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_11.hpp +97 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_12.hpp +104 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_13.hpp +111 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_14.hpp +118 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_15.hpp +125 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_16.hpp +132 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_17.hpp +139 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_18.hpp +146 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_19.hpp +153 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_2.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_20.hpp +160 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_3.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_4.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_5.hpp +55 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_6.hpp +62 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_7.hpp +69 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_8.hpp +76 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_9.hpp +83 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_10.hpp +156 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_11.hpp +181 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_12.hpp +208 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_13.hpp +237 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_14.hpp +268 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_15.hpp +301 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_16.hpp +336 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_17.hpp +373 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_18.hpp +412 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_19.hpp +453 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_2.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_20.hpp +496 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_3.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_4.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_5.hpp +61 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_6.hpp +76 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_7.hpp +93 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_8.hpp +112 -0
- package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_9.hpp +133 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_10.hpp +138 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_11.hpp +150 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_12.hpp +162 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_13.hpp +174 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_14.hpp +186 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_15.hpp +198 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_16.hpp +210 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_17.hpp +222 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_18.hpp +234 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_19.hpp +246 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_2.hpp +42 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_20.hpp +258 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_3.hpp +54 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_4.hpp +66 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_5.hpp +78 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_6.hpp +90 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_7.hpp +102 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_8.hpp +114 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_9.hpp +126 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_10.hpp +144 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_11.hpp +160 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_12.hpp +176 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_13.hpp +192 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_14.hpp +208 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_15.hpp +224 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_16.hpp +240 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_17.hpp +256 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_18.hpp +272 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_19.hpp +288 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_2.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_20.hpp +304 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_3.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_4.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_5.hpp +64 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_6.hpp +80 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_7.hpp +96 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_8.hpp +112 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_9.hpp +128 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_10.hpp +396 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_11.hpp +482 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_12.hpp +576 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_13.hpp +678 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_14.hpp +788 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_15.hpp +906 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_16.hpp +1032 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_17.hpp +1166 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_18.hpp +1308 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_19.hpp +1458 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_2.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_20.hpp +1616 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_3.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_4.hpp +48 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_5.hpp +86 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_6.hpp +132 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_7.hpp +186 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_8.hpp +248 -0
- package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_9.hpp +318 -0
- package/vendor/boost/math/include/boost/math/tools/engel_expansion.hpp +124 -0
- package/vendor/boost/math/include/boost/math/tools/estrin.hpp +72 -0
- package/vendor/boost/math/include/boost/math/tools/fraction.hpp +354 -0
- package/vendor/boost/math/include/boost/math/tools/header_deprecated.hpp +27 -0
- package/vendor/boost/math/include/boost/math/tools/is_constant_evaluated.hpp +51 -0
- package/vendor/boost/math/include/boost/math/tools/is_detected.hpp +56 -0
- package/vendor/boost/math/include/boost/math/tools/is_standalone.hpp +18 -0
- package/vendor/boost/math/include/boost/math/tools/luroth_expansion.hpp +147 -0
- package/vendor/boost/math/include/boost/math/tools/minima.hpp +164 -0
- package/vendor/boost/math/include/boost/math/tools/mp.hpp +423 -0
- package/vendor/boost/math/include/boost/math/tools/norms.hpp +638 -0
- package/vendor/boost/math/include/boost/math/tools/nothrow.hpp +27 -0
- package/vendor/boost/math/include/boost/math/tools/numeric_limits.hpp +888 -0
- package/vendor/boost/math/include/boost/math/tools/numerical_differentiation.hpp +12 -0
- package/vendor/boost/math/include/boost/math/tools/polynomial.hpp +862 -0
- package/vendor/boost/math/include/boost/math/tools/polynomial_gcd.hpp +268 -0
- package/vendor/boost/math/include/boost/math/tools/precision.hpp +418 -0
- package/vendor/boost/math/include/boost/math/tools/promotion.hpp +135 -0
- package/vendor/boost/math/include/boost/math/tools/quartic_roots.hpp +157 -0
- package/vendor/boost/math/include/boost/math/tools/random_vector.hpp +101 -0
- package/vendor/boost/math/include/boost/math/tools/rational.hpp +346 -0
- package/vendor/boost/math/include/boost/math/tools/real_cast.hpp +31 -0
- package/vendor/boost/math/include/boost/math/tools/recurrence.hpp +330 -0
- package/vendor/boost/math/include/boost/math/tools/roots.hpp +1072 -0
- package/vendor/boost/math/include/boost/math/tools/series.hpp +221 -0
- package/vendor/boost/math/include/boost/math/tools/signal_statistics.hpp +353 -0
- package/vendor/boost/math/include/boost/math/tools/simple_continued_fraction.hpp +177 -0
- package/vendor/boost/math/include/boost/math/tools/stats.hpp +87 -0
- package/vendor/boost/math/include/boost/math/tools/test_value.hpp +143 -0
- package/vendor/boost/math/include/boost/math/tools/throw_exception.hpp +43 -0
- package/vendor/boost/math/include/boost/math/tools/toms748_solve.hpp +636 -0
- package/vendor/boost/math/include/boost/math/tools/traits.hpp +140 -0
- package/vendor/boost/math/include/boost/math/tools/tuple.hpp +88 -0
- package/vendor/boost/math/include/boost/math/tools/type_traits.hpp +489 -0
- package/vendor/boost/math/include/boost/math/tools/ulps_plot.hpp +598 -0
- package/vendor/boost/math/include/boost/math/tools/univariate_statistics.hpp +437 -0
- package/vendor/boost/math/include/boost/math/tools/user.hpp +105 -0
- package/vendor/boost/math/include/boost/math/tools/utility.hpp +69 -0
- package/vendor/boost/math/include/boost/math/tools/workaround.hpp +42 -0
- package/vendor/boost/math/include/boost/math/tr1.hpp +1121 -0
- package/vendor/boost/math/include/boost/math/tr1_c_macros.ipp +810 -0
- package/vendor/boost/math/include/boost/math_fwd.hpp +42 -0
- package/vendor/boost/multiprecision/LICENSE +23 -0
- package/vendor/boost/multiprecision/README.md +168 -0
- package/vendor/boost/multiprecision/include/boost/config/abi/borland_prefix.hpp +27 -0
- package/vendor/boost/multiprecision/include/boost/config/abi/borland_suffix.hpp +12 -0
- package/vendor/boost/multiprecision/include/boost/config/abi/msvc_prefix.hpp +22 -0
- package/vendor/boost/multiprecision/include/boost/config/abi/msvc_suffix.hpp +8 -0
- package/vendor/boost/multiprecision/include/boost/config/abi_prefix.hpp +25 -0
- package/vendor/boost/multiprecision/include/boost/config/abi_suffix.hpp +25 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx03.hpp +211 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx11.hpp +212 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx14.hpp +47 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx17.hpp +65 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx20.hpp +59 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx23.hpp +41 -0
- package/vendor/boost/multiprecision/include/boost/config/assert_cxx98.hpp +23 -0
- package/vendor/boost/multiprecision/include/boost/config/auto_link.hpp +530 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/borland.hpp +342 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/clang.hpp +370 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/clang_version.hpp +98 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/codegear.hpp +389 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/comeau.hpp +59 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/common_edg.hpp +185 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/compaq_cxx.hpp +19 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/cray.hpp +446 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/diab.hpp +26 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/digitalmars.hpp +146 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/gcc.hpp +386 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/gcc_xml.hpp +115 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/greenhills.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/hp_acc.hpp +153 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/intel.hpp +577 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/kai.hpp +33 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/metrowerks.hpp +201 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/mpw.hpp +143 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/nvcc.hpp +64 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/pathscale.hpp +141 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/pgi.hpp +23 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/sgi_mipspro.hpp +29 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/sunpro_cc.hpp +225 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/vacpp.hpp +189 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/visualc.hpp +400 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/xlcpp.hpp +303 -0
- package/vendor/boost/multiprecision/include/boost/config/compiler/xlcpp_zos.hpp +174 -0
- package/vendor/boost/multiprecision/include/boost/config/detail/cxx_composite.hpp +218 -0
- package/vendor/boost/multiprecision/include/boost/config/detail/posix_features.hpp +95 -0
- package/vendor/boost/multiprecision/include/boost/config/detail/select_compiler_config.hpp +157 -0
- package/vendor/boost/multiprecision/include/boost/config/detail/select_platform_config.hpp +147 -0
- package/vendor/boost/multiprecision/include/boost/config/detail/select_stdlib_config.hpp +121 -0
- package/vendor/boost/multiprecision/include/boost/config/detail/suffix.hpp +1334 -0
- package/vendor/boost/multiprecision/include/boost/config/header_deprecated.hpp +26 -0
- package/vendor/boost/multiprecision/include/boost/config/helper_macros.hpp +37 -0
- package/vendor/boost/multiprecision/include/boost/config/no_tr1/cmath.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/config/no_tr1/complex.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/config/no_tr1/functional.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/config/no_tr1/memory.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/config/no_tr1/utility.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/aix.hpp +33 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/amigaos.hpp +15 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/beos.hpp +26 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/bsd.hpp +83 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/cloudabi.hpp +18 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/cray.hpp +18 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/cygwin.hpp +71 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/haiku.hpp +31 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/hpux.hpp +87 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/irix.hpp +31 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/linux.hpp +106 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/macos.hpp +87 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/qnxnto.hpp +31 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/solaris.hpp +31 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/symbian.hpp +97 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/vms.hpp +25 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/vxworks.hpp +422 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/wasm.hpp +23 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/win32.hpp +90 -0
- package/vendor/boost/multiprecision/include/boost/config/platform/zos.hpp +32 -0
- package/vendor/boost/multiprecision/include/boost/config/pragma_message.hpp +31 -0
- package/vendor/boost/multiprecision/include/boost/config/requires_threads.hpp +92 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/dinkumware.hpp +324 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/libcomo.hpp +93 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/libcpp.hpp +185 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/libstdcpp3.hpp +482 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/modena.hpp +79 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/msl.hpp +98 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/roguewave.hpp +208 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/sgi.hpp +168 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/stlport.hpp +258 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/vacpp.hpp +74 -0
- package/vendor/boost/multiprecision/include/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- package/vendor/boost/multiprecision/include/boost/config/user.hpp +133 -0
- package/vendor/boost/multiprecision/include/boost/config/warning_disable.hpp +47 -0
- package/vendor/boost/multiprecision/include/boost/config/workaround.hpp +310 -0
- package/vendor/boost/multiprecision/include/boost/config.hpp +67 -0
- package/vendor/boost/multiprecision/include/boost/cstdint.hpp +556 -0
- package/vendor/boost/multiprecision/include/boost/cxx11_char_types.hpp +70 -0
- package/vendor/boost/multiprecision/include/boost/detail/workaround.hpp +10 -0
- package/vendor/boost/multiprecision/include/boost/limits.hpp +146 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/complex128.hpp +24 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/complex_adaptor.hpp +1049 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float/io.hpp +700 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float.hpp +2374 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_complex.hpp +12 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_dec_float.hpp +3807 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail.hpp +177 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath.hpp +25 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fabs.hpp +27 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_floor.hpp +116 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fma.hpp +65 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fpclassify.hpp +52 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_frexp.hpp +93 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_isinf.hpp +24 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_isnan.hpp +21 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_ldexp.hpp +71 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_limits.hpp +218 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_log.hpp +172 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_sqrt.hpp +57 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_constants.hpp +80 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_double_fp.hpp +2690 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/add.hpp +368 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/bitwise.hpp +896 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/checked.hpp +178 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/comparison.hpp +374 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/divide.hpp +703 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/import_export.hpp +248 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/limits.hpp +292 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/literals.hpp +296 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/misc.hpp +1462 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/multiply.hpp +848 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/serialize.hpp +209 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int.hpp +2360 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/debug_adaptor.hpp +760 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/assert.hpp +29 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/atomic.hpp +62 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/bitscan.hpp +317 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/constexpr.hpp +88 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/default_ops.hpp +4077 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/digits.hpp +49 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/dynamic_array.hpp +44 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/empty_value.hpp +87 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/endian.hpp +35 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/et_ops.hpp +1831 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/float128_functions.hpp +95 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/fpclassify.hpp +101 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/constants.hpp +289 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/pow.hpp +941 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/trig.hpp +1064 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/trunc.hpp +82 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/hash.hpp +56 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/integer_ops.hpp +474 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/itos.hpp +39 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/min_max.hpp +106 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/no_et_ops.hpp +661 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/number_base.hpp +1656 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/number_compare.hpp +848 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/precision.hpp +313 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/rebind.hpp +19 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/standalone_config.hpp +165 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/static_array.hpp +42 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/string_helpers.hpp +48 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/tables.hpp +80 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/ublas_interop.hpp +75 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/detail/utype_helper.hpp +374 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/eigen.hpp +248 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/float128.hpp +960 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/fwd.hpp +268 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/gmp.hpp +4100 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/integer.hpp +363 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/logged_adaptor.hpp +834 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/miller_rabin.hpp +221 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/mpc.hpp +1721 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/mpfi.hpp +2579 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/mpfr.hpp +3668 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/number.hpp +2491 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/random.hpp +23 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/rational_adaptor.hpp +1289 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/tommath.hpp +1044 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_backend.hpp +91 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_byte_container.hpp +51 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_complex.hpp +22 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/max_digits10.hpp +79 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/std_integer_traits.hpp +95 -0
- package/vendor/boost/multiprecision/include/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
- package/vendor/boost/multiprecision/include/boost/static_assert.hpp +179 -0
- package/vendor/boost/multiprecision/include/boost/version.hpp +32 -0
- package/vendor/eigen/COPYING.APACHE +203 -0
- package/vendor/eigen/COPYING.BSD +26 -0
- package/vendor/eigen/COPYING.MPL2 +373 -0
- package/vendor/eigen/COPYING.README +6 -0
- package/vendor/eigen/Eigen/AccelerateSupport +52 -0
- package/vendor/eigen/Eigen/Cholesky +43 -0
- package/vendor/eigen/Eigen/CholmodSupport +48 -0
- package/vendor/eigen/Eigen/Core +451 -0
- package/vendor/eigen/Eigen/Dense +7 -0
- package/vendor/eigen/Eigen/Eigen +2 -0
- package/vendor/eigen/Eigen/Eigenvalues +63 -0
- package/vendor/eigen/Eigen/Geometry +59 -0
- package/vendor/eigen/Eigen/Householder +31 -0
- package/vendor/eigen/Eigen/IterativeLinearSolvers +52 -0
- package/vendor/eigen/Eigen/Jacobi +33 -0
- package/vendor/eigen/Eigen/KLUSupport +43 -0
- package/vendor/eigen/Eigen/LU +46 -0
- package/vendor/eigen/Eigen/MetisSupport +35 -0
- package/vendor/eigen/Eigen/OrderingMethods +73 -0
- package/vendor/eigen/Eigen/PaStiXSupport +51 -0
- package/vendor/eigen/Eigen/PardisoSupport +38 -0
- package/vendor/eigen/Eigen/QR +48 -0
- package/vendor/eigen/Eigen/QtAlignedMalloc +32 -0
- package/vendor/eigen/Eigen/SPQRSupport +41 -0
- package/vendor/eigen/Eigen/SVD +56 -0
- package/vendor/eigen/Eigen/Sparse +33 -0
- package/vendor/eigen/Eigen/SparseCholesky +40 -0
- package/vendor/eigen/Eigen/SparseCore +70 -0
- package/vendor/eigen/Eigen/SparseLU +50 -0
- package/vendor/eigen/Eigen/SparseQR +38 -0
- package/vendor/eigen/Eigen/StdDeque +30 -0
- package/vendor/eigen/Eigen/StdList +29 -0
- package/vendor/eigen/Eigen/StdVector +30 -0
- package/vendor/eigen/Eigen/SuperLUSupport +70 -0
- package/vendor/eigen/Eigen/ThreadPool +80 -0
- package/vendor/eigen/Eigen/UmfPackSupport +42 -0
- package/vendor/eigen/Eigen/Version +14 -0
- package/vendor/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/vendor/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Cholesky/LDLT.h +649 -0
- package/vendor/eigen/Eigen/src/Cholesky/LLT.h +514 -0
- package/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +124 -0
- package/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +738 -0
- package/vendor/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/vendor/eigen/Eigen/src/Core/Array.h +376 -0
- package/vendor/eigen/Eigen/src/Core/ArrayBase.h +213 -0
- package/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +165 -0
- package/vendor/eigen/Eigen/src/Core/Assign.h +80 -0
- package/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +1057 -0
- package/vendor/eigen/Eigen/src/Core/Assign_MKL.h +183 -0
- package/vendor/eigen/Eigen/src/Core/BandMatrix.h +338 -0
- package/vendor/eigen/Eigen/src/Core/Block.h +429 -0
- package/vendor/eigen/Eigen/src/Core/CommaInitializer.h +149 -0
- package/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +173 -0
- package/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +2018 -0
- package/vendor/eigen/Eigen/src/Core/CoreIterators.h +141 -0
- package/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +166 -0
- package/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +975 -0
- package/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +171 -0
- package/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +91 -0
- package/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +167 -0
- package/vendor/eigen/Eigen/src/Core/DenseBase.h +673 -0
- package/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +568 -0
- package/vendor/eigen/Eigen/src/Core/DenseStorage.h +573 -0
- package/vendor/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/vendor/eigen/Eigen/src/Core/Diagonal.h +219 -0
- package/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +420 -0
- package/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +30 -0
- package/vendor/eigen/Eigen/src/Core/Dot.h +268 -0
- package/vendor/eigen/Eigen/src/Core/EigenBase.h +149 -0
- package/vendor/eigen/Eigen/src/Core/Fill.h +138 -0
- package/vendor/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +127 -0
- package/vendor/eigen/Eigen/src/Core/Fuzzy.h +132 -0
- package/vendor/eigen/Eigen/src/Core/GeneralProduct.h +519 -0
- package/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +1702 -0
- package/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +230 -0
- package/vendor/eigen/Eigen/src/Core/IO.h +233 -0
- package/vendor/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/vendor/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/vendor/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Core/Inverse.h +108 -0
- package/vendor/eigen/Eigen/src/Core/Map.h +153 -0
- package/vendor/eigen/Eigen/src/Core/MapBase.h +283 -0
- package/vendor/eigen/Eigen/src/Core/MathFunctions.h +2103 -0
- package/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +263 -0
- package/vendor/eigen/Eigen/src/Core/Matrix.h +534 -0
- package/vendor/eigen/Eigen/src/Core/MatrixBase.h +545 -0
- package/vendor/eigen/Eigen/src/Core/NestByValue.h +91 -0
- package/vendor/eigen/Eigen/src/Core/NoAlias.h +102 -0
- package/vendor/eigen/Eigen/src/Core/NumTraits.h +335 -0
- package/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +555 -0
- package/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1014 -0
- package/vendor/eigen/Eigen/src/Core/Product.h +307 -0
- package/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1287 -0
- package/vendor/eigen/Eigen/src/Core/Random.h +207 -0
- package/vendor/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/vendor/eigen/Eigen/src/Core/RealView.h +250 -0
- package/vendor/eigen/Eigen/src/Core/Redux.h +535 -0
- package/vendor/eigen/Eigen/src/Core/Ref.h +383 -0
- package/vendor/eigen/Eigen/src/Core/Replicate.h +130 -0
- package/vendor/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/vendor/eigen/Eigen/src/Core/ReturnByValue.h +111 -0
- package/vendor/eigen/Eigen/src/Core/Reverse.h +202 -0
- package/vendor/eigen/Eigen/src/Core/Select.h +92 -0
- package/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +329 -0
- package/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +50 -0
- package/vendor/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/vendor/eigen/Eigen/src/Core/Solve.h +174 -0
- package/vendor/eigen/Eigen/src/Core/SolveTriangular.h +237 -0
- package/vendor/eigen/Eigen/src/Core/SolverBase.h +167 -0
- package/vendor/eigen/Eigen/src/Core/StableNorm.h +217 -0
- package/vendor/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/vendor/eigen/Eigen/src/Core/Stride.h +114 -0
- package/vendor/eigen/Eigen/src/Core/Swap.h +99 -0
- package/vendor/eigen/Eigen/src/Core/Transpose.h +427 -0
- package/vendor/eigen/Eigen/src/Core/Transpositions.h +323 -0
- package/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +900 -0
- package/vendor/eigen/Eigen/src/Core/VectorBlock.h +83 -0
- package/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +733 -0
- package/vendor/eigen/Eigen/src/Core/Visitor.h +537 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +565 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +130 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +3081 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +308 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +141 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +3146 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +653 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +81 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3729 -0
- package/vendor/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +128 -0
- package/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +47 -0
- package/vendor/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/vendor/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/vendor/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/vendor/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/vendor/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/vendor/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/vendor/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/vendor/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/vendor/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +732 -0
- package/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +68 -0
- package/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +6096 -0
- package/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/vendor/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +503 -0
- package/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +88 -0
- package/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2384 -0
- package/vendor/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +230 -0
- package/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +570 -0
- package/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +244 -0
- package/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1413 -0
- package/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +174 -0
- package/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +747 -0
- package/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +274 -0
- package/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +149 -0
- package/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +52 -0
- package/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1420 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +3153 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +459 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +330 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +148 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +205 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +473 -0
- package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +139 -0
- package/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +282 -0
- package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +483 -0
- package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +277 -0
- package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +253 -0
- package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +115 -0
- package/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- package/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +95 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +397 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +325 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +347 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +275 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +388 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +166 -0
- package/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +122 -0
- package/vendor/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +622 -0
- package/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/vendor/eigen/Eigen/src/Core/util/Constants.h +598 -0
- package/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +146 -0
- package/vendor/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +524 -0
- package/vendor/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/vendor/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/vendor/eigen/Eigen/src/Core/util/MKL_support.h +139 -0
- package/vendor/eigen/Eigen/src/Core/util/Macros.h +1346 -0
- package/vendor/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/vendor/eigen/Eigen/src/Core/util/Memory.h +1385 -0
- package/vendor/eigen/Eigen/src/Core/util/Meta.h +760 -0
- package/vendor/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +44 -0
- package/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/vendor/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +105 -0
- package/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/vendor/eigen/Eigen/src/Core/util/XprHelper.h +1093 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +315 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +442 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +95 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +579 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +402 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +212 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +356 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +142 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +587 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +519 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +83 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +850 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +90 -0
- package/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +529 -0
- package/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +485 -0
- package/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +245 -0
- package/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +203 -0
- package/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +453 -0
- package/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +273 -0
- package/vendor/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +257 -0
- package/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- package/vendor/eigen/Eigen/src/Geometry/Quaternion.h +930 -0
- package/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +201 -0
- package/vendor/eigen/Eigen/src/Geometry/RotationBase.h +209 -0
- package/vendor/eigen/Eigen/src/Geometry/Scaling.h +195 -0
- package/vendor/eigen/Eigen/src/Geometry/Transform.h +1485 -0
- package/vendor/eigen/Eigen/src/Geometry/Translation.h +204 -0
- package/vendor/eigen/Eigen/src/Geometry/Umeyama.h +161 -0
- package/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +115 -0
- package/vendor/eigen/Eigen/src/Householder/Householder.h +154 -0
- package/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +504 -0
- package/vendor/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +213 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +220 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +217 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +402 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +449 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +395 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +193 -0
- package/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +111 -0
- package/vendor/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +427 -0
- package/vendor/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/vendor/eigen/Eigen/src/LU/Determinant.h +98 -0
- package/vendor/eigen/Eigen/src/LU/FullPivLU.h +826 -0
- package/vendor/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/LU/InverseImpl.h +353 -0
- package/vendor/eigen/Eigen/src/LU/PartialPivLU.h +586 -0
- package/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +97 -0
- package/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/vendor/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +125 -0
- package/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +413 -0
- package/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1690 -0
- package/vendor/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +146 -0
- package/vendor/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +632 -0
- package/vendor/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +500 -0
- package/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- package/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +161 -0
- package/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +648 -0
- package/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +733 -0
- package/vendor/eigen/Eigen/src/QR/HouseholderQR.h +543 -0
- package/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +77 -0
- package/vendor/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +315 -0
- package/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1470 -0
- package/vendor/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/vendor/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +846 -0
- package/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +127 -0
- package/vendor/eigen/Eigen/src/SVD/SVDBase.h +436 -0
- package/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +379 -0
- package/vendor/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +868 -0
- package/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +388 -0
- package/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +329 -0
- package/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +206 -0
- package/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +308 -0
- package/vendor/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +279 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +534 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +194 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +592 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +938 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +142 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +314 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +100 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +31 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +295 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1876 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +451 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +249 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +178 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +47 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +370 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +613 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +115 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +184 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +83 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +177 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +209 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +532 -0
- package/vendor/eigen/Eigen/src/SparseCore/SparseView.h +225 -0
- package/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +274 -0
- package/vendor/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +969 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +79 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +210 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +113 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +319 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +75 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +177 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +168 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +114 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +133 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +215 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +235 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +136 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +130 -0
- package/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +81 -0
- package/vendor/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +706 -0
- package/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +51 -0
- package/vendor/eigen/Eigen/src/StlSupport/StdList.h +50 -0
- package/vendor/eigen/Eigen/src/StlSupport/StdVector.h +51 -0
- package/vendor/eigen/Eigen/src/StlSupport/details.h +82 -0
- package/vendor/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +929 -0
- package/vendor/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/vendor/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/vendor/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/vendor/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/vendor/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/vendor/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/vendor/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/vendor/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/vendor/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/vendor/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/vendor/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/vendor/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/vendor/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +606 -0
- package/vendor/eigen/Eigen/src/misc/Image.h +80 -0
- package/vendor/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/vendor/eigen/Eigen/src/misc/Kernel.h +77 -0
- package/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +53 -0
- package/vendor/eigen/Eigen/src/misc/blas.h +97 -0
- package/vendor/eigen/Eigen/src/misc/lapacke.h +10085 -0
- package/vendor/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +16 -0
- package/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/vendor/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/vendor/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/vendor/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/vendor/eigen/README.md +5 -0
- package/vendor/mpdecimal/COPYRIGHT.txt +23 -0
- package/vendor/mpdecimal/README.txt +53 -0
- package/vendor/mpdecimal/libmpdec/.objs/README.txt +8 -0
- package/vendor/mpdecimal/libmpdec/.objs/symbols32.exp +343 -0
- package/vendor/mpdecimal/libmpdec/.objs/symbols64.exp +347 -0
- package/vendor/mpdecimal/libmpdec/.pc/libmpdec.pc.in +11 -0
- package/vendor/mpdecimal/libmpdec/.profile/train.sh +35 -0
- package/vendor/mpdecimal/libmpdec/README.txt +84 -0
- package/vendor/mpdecimal/libmpdec/basearith.c +649 -0
- package/vendor/mpdecimal/libmpdec/basearith.h +217 -0
- package/vendor/mpdecimal/libmpdec/bits.h +188 -0
- package/vendor/mpdecimal/libmpdec/constants.c +129 -0
- package/vendor/mpdecimal/libmpdec/constants.h +88 -0
- package/vendor/mpdecimal/libmpdec/context.c +285 -0
- package/vendor/mpdecimal/libmpdec/convolute.c +172 -0
- package/vendor/mpdecimal/libmpdec/convolute.h +48 -0
- package/vendor/mpdecimal/libmpdec/crt.c +178 -0
- package/vendor/mpdecimal/libmpdec/crt.h +45 -0
- package/vendor/mpdecimal/libmpdec/difradix2.c +171 -0
- package/vendor/mpdecimal/libmpdec/difradix2.h +46 -0
- package/vendor/mpdecimal/libmpdec/fnt.c +77 -0
- package/vendor/mpdecimal/libmpdec/fnt.h +46 -0
- package/vendor/mpdecimal/libmpdec/fourstep.c +242 -0
- package/vendor/mpdecimal/libmpdec/fourstep.h +46 -0
- package/vendor/mpdecimal/libmpdec/io.c +1610 -0
- package/vendor/mpdecimal/libmpdec/io.h +61 -0
- package/vendor/mpdecimal/libmpdec/mpalloc.c +347 -0
- package/vendor/mpdecimal/libmpdec/mpalloc.h +53 -0
- package/vendor/mpdecimal/libmpdec/mpdecimal.c +9155 -0
- package/vendor/mpdecimal/libmpdec/mpdecimal.h.in +804 -0
- package/vendor/mpdecimal/libmpdec/mpsignal.c +966 -0
- package/vendor/mpdecimal/libmpdec/numbertheory.c +129 -0
- package/vendor/mpdecimal/libmpdec/numbertheory.h +75 -0
- package/vendor/mpdecimal/libmpdec/sixstep.c +212 -0
- package/vendor/mpdecimal/libmpdec/sixstep.h +46 -0
- package/vendor/mpdecimal/libmpdec/transpose.c +275 -0
- package/vendor/mpdecimal/libmpdec/transpose.h +60 -0
- package/vendor/mpdecimal/libmpdec/typearith.h +661 -0
- package/vendor/mpdecimal/libmpdec/umodarith.h +645 -0
- package/vendor/symengine/AUTHORS +101 -0
- package/vendor/symengine/LICENSE +254 -0
- package/vendor/symengine/README.md +199 -0
- package/vendor/symengine/symengine/add.cpp +508 -0
- package/vendor/symengine/symengine/add.h +187 -0
- package/vendor/symengine/symengine/as_real_imag.cpp +289 -0
- package/vendor/symengine/symengine/assumptions.cpp +202 -0
- package/vendor/symengine/symengine/assumptions.h +47 -0
- package/vendor/symengine/symengine/basic-inl.h +152 -0
- package/vendor/symengine/symengine/basic-methods.inc +9 -0
- package/vendor/symengine/symengine/basic.cpp +110 -0
- package/vendor/symengine/symengine/basic.h +356 -0
- package/vendor/symengine/symengine/complex.cpp +198 -0
- package/vendor/symengine/symengine/complex.h +396 -0
- package/vendor/symengine/symengine/complex_double.cpp +72 -0
- package/vendor/symengine/symengine/complex_double.h +570 -0
- package/vendor/symengine/symengine/complex_mpc.h +406 -0
- package/vendor/symengine/symengine/constants.cpp +130 -0
- package/vendor/symengine/symengine/constants.h +81 -0
- package/vendor/symengine/symengine/cse.cpp +556 -0
- package/vendor/symengine/symengine/cwrapper.h +949 -0
- package/vendor/symengine/symengine/dense_matrix.cpp +2100 -0
- package/vendor/symengine/symengine/derivative.cpp +841 -0
- package/vendor/symengine/symengine/derivative.h +137 -0
- package/vendor/symengine/symengine/dict.cpp +125 -0
- package/vendor/symengine/symengine/dict.h +333 -0
- package/vendor/symengine/symengine/diophantine.cpp +139 -0
- package/vendor/symengine/symengine/diophantine.h +20 -0
- package/vendor/symengine/symengine/eval.cpp +109 -0
- package/vendor/symengine/symengine/eval.h +40 -0
- package/vendor/symengine/symengine/eval_arb.h +31 -0
- package/vendor/symengine/symengine/eval_double.cpp +959 -0
- package/vendor/symengine/symengine/eval_double.h +28 -0
- package/vendor/symengine/symengine/eval_mpc.h +29 -0
- package/vendor/symengine/symengine/eval_mpfr.h +26 -0
- package/vendor/symengine/symengine/expand.cpp +379 -0
- package/vendor/symengine/symengine/expression.cpp +24 -0
- package/vendor/symengine/symengine/expression.h +375 -0
- package/vendor/symengine/symengine/fields.cpp +861 -0
- package/vendor/symengine/symengine/fields.h +647 -0
- package/vendor/symengine/symengine/finitediff.cpp +70 -0
- package/vendor/symengine/symengine/finitediff.h +21 -0
- package/vendor/symengine/symengine/flint_wrapper.h +1010 -0
- package/vendor/symengine/symengine/functions.cpp +3913 -0
- package/vendor/symengine/symengine/functions.h +1321 -0
- package/vendor/symengine/symengine/infinity.cpp +537 -0
- package/vendor/symengine/symengine/infinity.h +118 -0
- package/vendor/symengine/symengine/integer.cpp +153 -0
- package/vendor/symengine/symengine/integer.h +227 -0
- package/vendor/symengine/symengine/interruption.cpp +9 -0
- package/vendor/symengine/symengine/interruption.h +19 -0
- package/vendor/symengine/symengine/lambda_double.h +918 -0
- package/vendor/symengine/symengine/limits.h +35 -0
- package/vendor/symengine/symengine/llvm_double.h +201 -0
- package/vendor/symengine/symengine/logic.cpp +812 -0
- package/vendor/symengine/symengine/logic.h +281 -0
- package/vendor/symengine/symengine/matrices/conjugate_matrix.cpp +139 -0
- package/vendor/symengine/symengine/matrices/conjugate_matrix.h +39 -0
- package/vendor/symengine/symengine/matrices/diagonal_matrix.cpp +79 -0
- package/vendor/symengine/symengine/matrices/diagonal_matrix.h +52 -0
- package/vendor/symengine/symengine/matrices/hadamard_product.cpp +151 -0
- package/vendor/symengine/symengine/matrices/hadamard_product.h +42 -0
- package/vendor/symengine/symengine/matrices/identity_matrix.cpp +63 -0
- package/vendor/symengine/symengine/matrices/identity_matrix.h +40 -0
- package/vendor/symengine/symengine/matrices/immutable_dense_matrix.cpp +143 -0
- package/vendor/symengine/symengine/matrices/immutable_dense_matrix.h +65 -0
- package/vendor/symengine/symengine/matrices/is_diagonal.cpp +115 -0
- package/vendor/symengine/symengine/matrices/is_lower.cpp +110 -0
- package/vendor/symengine/symengine/matrices/is_real.cpp +78 -0
- package/vendor/symengine/symengine/matrices/is_square.cpp +85 -0
- package/vendor/symengine/symengine/matrices/is_symmetric.cpp +112 -0
- package/vendor/symengine/symengine/matrices/is_toeplitz.cpp +104 -0
- package/vendor/symengine/symengine/matrices/is_upper.cpp +108 -0
- package/vendor/symengine/symengine/matrices/is_zero.cpp +81 -0
- package/vendor/symengine/symengine/matrices/matrix_add.cpp +176 -0
- package/vendor/symengine/symengine/matrices/matrix_add.h +42 -0
- package/vendor/symengine/symengine/matrices/matrix_expr.h +19 -0
- package/vendor/symengine/symengine/matrices/matrix_mul.cpp +258 -0
- package/vendor/symengine/symengine/matrices/matrix_mul.h +55 -0
- package/vendor/symengine/symengine/matrices/matrix_symbol.cpp +34 -0
- package/vendor/symengine/symengine/matrices/matrix_symbol.h +41 -0
- package/vendor/symengine/symengine/matrices/size.cpp +121 -0
- package/vendor/symengine/symengine/matrices/size.h +15 -0
- package/vendor/symengine/symengine/matrices/trace.cpp +112 -0
- package/vendor/symengine/symengine/matrices/trace.h +31 -0
- package/vendor/symengine/symengine/matrices/transpose.cpp +126 -0
- package/vendor/symengine/symengine/matrices/transpose.h +39 -0
- package/vendor/symengine/symengine/matrices/zero_matrix.cpp +94 -0
- package/vendor/symengine/symengine/matrices/zero_matrix.h +47 -0
- package/vendor/symengine/symengine/matrix.cpp +33 -0
- package/vendor/symengine/symengine/matrix.h +675 -0
- package/vendor/symengine/symengine/matrix_expressions.h +51 -0
- package/vendor/symengine/symengine/monomials.cpp +33 -0
- package/vendor/symengine/symengine/monomials.h +20 -0
- package/vendor/symengine/symengine/mp_boost.cpp +635 -0
- package/vendor/symengine/symengine/mp_class.h +1286 -0
- package/vendor/symengine/symengine/mp_wrapper.h +510 -0
- package/vendor/symengine/symengine/mul.cpp +629 -0
- package/vendor/symengine/symengine/mul.h +146 -0
- package/vendor/symengine/symengine/nan.cpp +234 -0
- package/vendor/symengine/symengine/nan.h +82 -0
- package/vendor/symengine/symengine/ntheory.cpp +1700 -0
- package/vendor/symengine/symengine/ntheory.h +213 -0
- package/vendor/symengine/symengine/ntheory_funcs.cpp +189 -0
- package/vendor/symengine/symengine/ntheory_funcs.h +78 -0
- package/vendor/symengine/symengine/number.cpp +36 -0
- package/vendor/symengine/symengine/number.h +256 -0
- package/vendor/symengine/symengine/numer_denom.cpp +149 -0
- package/vendor/symengine/symengine/parser/parser.cpp +367 -0
- package/vendor/symengine/symengine/parser/parser.h +56 -0
- package/vendor/symengine/symengine/parser/parser.tab.cc +1495 -0
- package/vendor/symengine/symengine/parser/parser.tab.hh +1410 -0
- package/vendor/symengine/symengine/parser/parser_old.cpp +688 -0
- package/vendor/symengine/symengine/parser/tokenizer.cpp +435 -0
- package/vendor/symengine/symengine/parser/tokenizer.h +35 -0
- package/vendor/symengine/symengine/parser.h +25 -0
- package/vendor/symengine/symengine/polys/basic_conversions.cpp +178 -0
- package/vendor/symengine/symengine/polys/basic_conversions.h +575 -0
- package/vendor/symengine/symengine/polys/cancel.h +39 -0
- package/vendor/symengine/symengine/polys/msymenginepoly.cpp +130 -0
- package/vendor/symengine/symengine/polys/msymenginepoly.h +536 -0
- package/vendor/symengine/symengine/polys/uexprpoly.cpp +90 -0
- package/vendor/symengine/symengine/polys/uexprpoly.h +205 -0
- package/vendor/symengine/symengine/polys/uintpoly.cpp +62 -0
- package/vendor/symengine/symengine/polys/uintpoly.h +134 -0
- package/vendor/symengine/symengine/polys/uintpoly_flint.h +228 -0
- package/vendor/symengine/symengine/polys/uintpoly_piranha.h +373 -0
- package/vendor/symengine/symengine/polys/upolybase.h +769 -0
- package/vendor/symengine/symengine/polys/uratpoly.cpp +59 -0
- package/vendor/symengine/symengine/polys/uratpoly.h +58 -0
- package/vendor/symengine/symengine/polys/usymenginepoly.h +139 -0
- package/vendor/symengine/symengine/pow.cpp +303 -0
- package/vendor/symengine/symengine/pow.h +76 -0
- package/vendor/symengine/symengine/prime_sieve.cpp +143 -0
- package/vendor/symengine/symengine/prime_sieve.h +64 -0
- package/vendor/symengine/symengine/printers/codegen.cpp +716 -0
- package/vendor/symengine/symengine/printers/codegen.h +168 -0
- package/vendor/symengine/symengine/printers/latex.cpp +630 -0
- package/vendor/symengine/symengine/printers/latex.h +76 -0
- package/vendor/symengine/symengine/printers/mathml.cpp +358 -0
- package/vendor/symengine/symengine/printers/mathml.h +62 -0
- package/vendor/symengine/symengine/printers/stringbox.cpp +276 -0
- package/vendor/symengine/symengine/printers/stringbox.h +60 -0
- package/vendor/symengine/symengine/printers/strprinter.cpp +1212 -0
- package/vendor/symengine/symengine/printers/strprinter.h +217 -0
- package/vendor/symengine/symengine/printers/unicode.cpp +730 -0
- package/vendor/symengine/symengine/printers/unicode.h +84 -0
- package/vendor/symengine/symengine/printers.h +46 -0
- package/vendor/symengine/symengine/rational.cpp +365 -0
- package/vendor/symengine/symengine/rational.h +341 -0
- package/vendor/symengine/symengine/real_double.cpp +388 -0
- package/vendor/symengine/symengine/real_double.h +492 -0
- package/vendor/symengine/symengine/real_mpfr.h +379 -0
- package/vendor/symengine/symengine/refine.cpp +213 -0
- package/vendor/symengine/symengine/refine.h +43 -0
- package/vendor/symengine/symengine/rewrite.cpp +235 -0
- package/vendor/symengine/symengine/rings.cpp +107 -0
- package/vendor/symengine/symengine/rings.h +24 -0
- package/vendor/symengine/symengine/serialize-cereal.h +964 -0
- package/vendor/symengine/symengine/series.cpp +85 -0
- package/vendor/symengine/symengine/series.h +727 -0
- package/vendor/symengine/symengine/series_flint.h +214 -0
- package/vendor/symengine/symengine/series_generic.cpp +247 -0
- package/vendor/symengine/symengine/series_generic.h +86 -0
- package/vendor/symengine/symengine/series_piranha.h +95 -0
- package/vendor/symengine/symengine/series_visitor.h +357 -0
- package/vendor/symengine/symengine/set_funcs.cpp +296 -0
- package/vendor/symengine/symengine/sets.cpp +1854 -0
- package/vendor/symengine/symengine/sets.h +696 -0
- package/vendor/symengine/symengine/simplify.cpp +62 -0
- package/vendor/symengine/symengine/simplify.h +34 -0
- package/vendor/symengine/symengine/solve.cpp +665 -0
- package/vendor/symengine/symengine/solve.h +117 -0
- package/vendor/symengine/symengine/sparse_matrix.cpp +776 -0
- package/vendor/symengine/symengine/special_boost.cpp +85 -0
- package/vendor/symengine/symengine/special_double.h +570 -0
- package/vendor/symengine/symengine/subs.h +579 -0
- package/vendor/symengine/symengine/symbol.cpp +88 -0
- package/vendor/symengine/symengine/symbol.h +116 -0
- package/vendor/symengine/symengine/symengine_assert.h +50 -0
- package/vendor/symengine/symengine/symengine_casts.h +139 -0
- package/vendor/symengine/symengine/symengine_exception.h +101 -0
- package/vendor/symengine/symengine/symengine_rcp.cpp +21 -0
- package/vendor/symengine/symengine/symengine_rcp.h +384 -0
- package/vendor/symengine/symengine/test_visitors.cpp +1083 -0
- package/vendor/symengine/symengine/test_visitors.h +466 -0
- package/vendor/symengine/symengine/tribool.h +85 -0
- package/vendor/symengine/symengine/tuple.cpp +47 -0
- package/vendor/symengine/symengine/tuple.h +32 -0
- package/vendor/symengine/symengine/type_codes.inc +139 -0
- package/vendor/symengine/symengine/utilities/cereal/LICENSE +24 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/access.hpp +351 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/adapters.hpp +163 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/binary.hpp +169 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/json.hpp +1024 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/portable_binary.hpp +334 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/xml.hpp +956 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/cereal.hpp +1120 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/helpers.hpp +422 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/polymorphic_impl.hpp +825 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/polymorphic_impl_fwd.hpp +65 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/static_object.hpp +128 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/traits.hpp +1411 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/util.hpp +84 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/macros.hpp +156 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/specialize.hpp +139 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/array.hpp +79 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/atomic.hpp +55 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/base_class.hpp +203 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/bitset.hpp +176 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/boost_variant.hpp +164 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/chrono.hpp +72 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/common.hpp +129 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/complex.hpp +56 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/concepts/pair_associative_container.hpp +73 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/deque.hpp +62 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/forward_list.hpp +68 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/functional.hpp +43 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/list.hpp +62 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/map.hpp +36 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/memory.hpp +425 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/optional.hpp +65 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/polymorphic.hpp +483 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/queue.hpp +132 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/set.hpp +103 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/stack.hpp +76 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/string.hpp +61 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/tuple.hpp +123 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/unordered_map.hpp +36 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/unordered_set.hpp +99 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/utility.hpp +47 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/valarray.hpp +89 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/variant.hpp +108 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/vector.hpp +112 -0
- package/vendor/symengine/symengine/utilities/cereal/include/cereal/version.hpp +52 -0
- package/vendor/symengine/symengine/utilities/fast_float/include/fast_float/fast_float.h +3720 -0
- package/vendor/symengine/symengine/utilities/stream_fmt.h +25 -0
- package/vendor/symengine/symengine/visitor.cpp +348 -0
- package/vendor/symengine/symengine/visitor.h +425 -0
|
@@ -0,0 +1,2690 @@
|
|
|
1
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
2
|
+
// Copyright 2021 - 2025 Fahad Syed.
|
|
3
|
+
// Copyright 2021 - 2025 Christopher Kormanyos.
|
|
4
|
+
// Copyright 2021 - 2025 Janek Kozicki.
|
|
5
|
+
// Copyright 2025 Matt Borland.
|
|
6
|
+
// Distributed under the Boost Software License, Version 1.0.
|
|
7
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
8
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
|
9
|
+
//
|
|
10
|
+
|
|
11
|
+
#ifndef BOOST_MP_CPP_DOUBLE_FP_2021_06_05_HPP
|
|
12
|
+
#define BOOST_MP_CPP_DOUBLE_FP_2021_06_05_HPP
|
|
13
|
+
|
|
14
|
+
#include <boost/multiprecision/cpp_bin_float.hpp>
|
|
15
|
+
#include <boost/multiprecision/cpp_df_qf/cpp_df_qf_detail.hpp>
|
|
16
|
+
#include <boost/multiprecision/detail/hash.hpp>
|
|
17
|
+
#include <boost/multiprecision/traits/max_digits10.hpp>
|
|
18
|
+
#include <boost/multiprecision/traits/std_integer_traits.hpp>
|
|
19
|
+
|
|
20
|
+
#ifdef BOOST_MP_MATH_AVAILABLE
|
|
21
|
+
//
|
|
22
|
+
// Headers required for Boost.Math integration:
|
|
23
|
+
//
|
|
24
|
+
#include <boost/math/policies/policy.hpp>
|
|
25
|
+
//
|
|
26
|
+
// Some includes we need from Boost.Math, since we rely on that library to provide these functions:
|
|
27
|
+
//
|
|
28
|
+
#include <boost/math/special_functions/acosh.hpp>
|
|
29
|
+
#include <boost/math/special_functions/asinh.hpp>
|
|
30
|
+
#include <boost/math/special_functions/atanh.hpp>
|
|
31
|
+
#include <boost/math/special_functions/cbrt.hpp>
|
|
32
|
+
#include <boost/math/special_functions/expm1.hpp>
|
|
33
|
+
#include <boost/math/special_functions/gamma.hpp>
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#include <limits>
|
|
37
|
+
#include <string>
|
|
38
|
+
#include <type_traits>
|
|
39
|
+
|
|
40
|
+
#if (defined(BOOST_CLANG) && defined(BOOST_CLANG_VERSION) && (BOOST_CLANG_VERSION <= 90000))
|
|
41
|
+
#define BOOST_MP_DF_QF_NUM_LIMITS_CLASS_TYPE struct
|
|
42
|
+
#else
|
|
43
|
+
#define BOOST_MP_DF_QF_NUM_LIMITS_CLASS_TYPE class
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
namespace boost { namespace multiprecision { namespace backends {
|
|
47
|
+
|
|
48
|
+
template <typename FloatingPointType>
|
|
49
|
+
class cpp_double_fp_backend;
|
|
50
|
+
|
|
51
|
+
template <typename FloatingPointType>
|
|
52
|
+
constexpr auto eval_add(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
53
|
+
template <typename FloatingPointType>
|
|
54
|
+
constexpr auto eval_add(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void;
|
|
55
|
+
template <typename FloatingPointType>
|
|
56
|
+
constexpr auto eval_subtract(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
57
|
+
template <typename FloatingPointType>
|
|
58
|
+
constexpr auto eval_subtract(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void;
|
|
59
|
+
template <typename FloatingPointType>
|
|
60
|
+
constexpr auto eval_multiply(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
61
|
+
template <typename FloatingPointType>
|
|
62
|
+
constexpr auto eval_multiply(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void;
|
|
63
|
+
template <typename FloatingPointType>
|
|
64
|
+
constexpr auto eval_divide(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
65
|
+
template <typename FloatingPointType>
|
|
66
|
+
constexpr auto eval_divide(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void;
|
|
67
|
+
template <typename FloatingPointType>
|
|
68
|
+
constexpr auto eval_eq(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> bool;
|
|
69
|
+
template <typename FloatingPointType>
|
|
70
|
+
constexpr auto eval_lt(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> bool;
|
|
71
|
+
template <typename FloatingPointType>
|
|
72
|
+
constexpr auto eval_gt(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> bool;
|
|
73
|
+
template <typename FloatingPointType>
|
|
74
|
+
constexpr auto eval_is_zero(const cpp_double_fp_backend<FloatingPointType>& x) -> bool;
|
|
75
|
+
template <typename FloatingPointType>
|
|
76
|
+
constexpr auto eval_signbit(const cpp_double_fp_backend<FloatingPointType>& x) -> int;
|
|
77
|
+
|
|
78
|
+
template <typename FloatingPointType>
|
|
79
|
+
constexpr auto eval_fabs(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a) -> void;
|
|
80
|
+
template <typename FloatingPointType>
|
|
81
|
+
constexpr auto eval_frexp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, int* v) -> void;
|
|
82
|
+
template <typename FloatingPointType>
|
|
83
|
+
constexpr auto eval_ldexp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, int v) -> void;
|
|
84
|
+
template <typename FloatingPointType>
|
|
85
|
+
constexpr auto eval_floor(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
86
|
+
template <typename FloatingPointType>
|
|
87
|
+
constexpr auto eval_ceil(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
88
|
+
template <typename FloatingPointType>
|
|
89
|
+
constexpr auto eval_fpclassify(const cpp_double_fp_backend<FloatingPointType>& o) -> int;
|
|
90
|
+
|
|
91
|
+
template <typename FloatingPointType>
|
|
92
|
+
constexpr auto eval_sqrt(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& o) -> void;
|
|
93
|
+
|
|
94
|
+
template <typename FloatingPointType>
|
|
95
|
+
constexpr auto eval_pow(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x, const cpp_double_fp_backend<FloatingPointType>& a) -> void;
|
|
96
|
+
|
|
97
|
+
template <typename FloatingPointType,
|
|
98
|
+
typename IntegralType>
|
|
99
|
+
constexpr auto eval_pow(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x, IntegralType n) -> typename ::std::enable_if<boost::multiprecision::detail::is_integral<IntegralType>::value, void>::type;
|
|
100
|
+
|
|
101
|
+
template <typename FloatingPointType,
|
|
102
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<FloatingPointType>::value && ((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) < 16))>::type const* = nullptr>
|
|
103
|
+
constexpr auto eval_exp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
104
|
+
|
|
105
|
+
template <typename FloatingPointType,
|
|
106
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<FloatingPointType>::value && (((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) >= 16) && ((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) <= 36)))>::type const* = nullptr>
|
|
107
|
+
constexpr auto eval_exp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
108
|
+
|
|
109
|
+
template <typename FloatingPointType,
|
|
110
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<FloatingPointType>::value && ((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) > 36))>::type const* = nullptr>
|
|
111
|
+
constexpr auto eval_exp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
112
|
+
|
|
113
|
+
template <typename FloatingPointType>
|
|
114
|
+
constexpr auto eval_log(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void;
|
|
115
|
+
|
|
116
|
+
template <typename FloatingPointType>
|
|
117
|
+
constexpr auto eval_convert_to(signed long long* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> void;
|
|
118
|
+
|
|
119
|
+
template <typename FloatingPointType>
|
|
120
|
+
constexpr auto eval_convert_to(unsigned long long* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> void;
|
|
121
|
+
|
|
122
|
+
#ifdef BOOST_HAS_INT128
|
|
123
|
+
template <typename FloatingPointType>
|
|
124
|
+
constexpr auto eval_convert_to(boost::int128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type;
|
|
125
|
+
|
|
126
|
+
template <typename FloatingPointType>
|
|
127
|
+
constexpr auto eval_convert_to(boost::int128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<!(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type;
|
|
128
|
+
|
|
129
|
+
template <typename FloatingPointType>
|
|
130
|
+
constexpr auto eval_convert_to(boost::uint128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type;
|
|
131
|
+
|
|
132
|
+
template <typename FloatingPointType>
|
|
133
|
+
constexpr auto eval_convert_to(boost::uint128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<!(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type;
|
|
134
|
+
#endif
|
|
135
|
+
|
|
136
|
+
template <typename FloatingPointType,
|
|
137
|
+
typename OtherFloatingPointType>
|
|
138
|
+
constexpr auto eval_convert_to(OtherFloatingPointType* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename ::std::enable_if<cpp_df_qf_detail::is_floating_point<OtherFloatingPointType>::value>::type;
|
|
139
|
+
|
|
140
|
+
template <typename FloatingPointType>
|
|
141
|
+
constexpr auto hash_value(const cpp_double_fp_backend<FloatingPointType>& a) -> ::std::size_t;
|
|
142
|
+
|
|
143
|
+
template <typename FloatingPointType>
|
|
144
|
+
constexpr auto fabs(const cpp_double_fp_backend<FloatingPointType>& a) -> cpp_double_fp_backend<FloatingPointType>;
|
|
145
|
+
|
|
146
|
+
} } } // namespace boost::multiprecision::backends
|
|
147
|
+
|
|
148
|
+
namespace std {
|
|
149
|
+
|
|
150
|
+
// Foward declarations of various specializations of std::numeric_limits
|
|
151
|
+
|
|
152
|
+
template <typename FloatingPointType,
|
|
153
|
+
const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
154
|
+
BOOST_MP_DF_QF_NUM_LIMITS_CLASS_TYPE numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >;
|
|
155
|
+
|
|
156
|
+
} // namespace std
|
|
157
|
+
|
|
158
|
+
namespace boost { namespace multiprecision {
|
|
159
|
+
|
|
160
|
+
template <typename FloatingPointType>
|
|
161
|
+
struct number_category<backends::cpp_double_fp_backend<FloatingPointType>> : public std::integral_constant<int, number_kind_floating_point> { };
|
|
162
|
+
|
|
163
|
+
namespace backends {
|
|
164
|
+
|
|
165
|
+
// A cpp_double_fp_backend is represented by an unevaluated sum of two
|
|
166
|
+
// floating-point units, a0 and a1, which satisfy |a1| <= (1 / 2) * ulp(a0).
|
|
167
|
+
// The type of the floating-point constituents should adhere to IEEE754.
|
|
168
|
+
// Although the constituent parts (a0 and a1) satisfy |a1| <= (1 / 2) * ulp(a0),
|
|
169
|
+
// the composite type does not adhere to these strict error bounds. Its error
|
|
170
|
+
// bounds are larger.
|
|
171
|
+
|
|
172
|
+
// This class has been tested with floats having single-precision (4 byte),
|
|
173
|
+
// double-precision (8 byte) and quad precision (16 byte, such as GCC's __float128).
|
|
174
|
+
|
|
175
|
+
template <typename FloatingPointType>
|
|
176
|
+
class cpp_double_fp_backend
|
|
177
|
+
{
|
|
178
|
+
public:
|
|
179
|
+
using float_type = FloatingPointType;
|
|
180
|
+
|
|
181
|
+
static_assert
|
|
182
|
+
(
|
|
183
|
+
cpp_df_qf_detail::is_floating_point<float_type>::value
|
|
184
|
+
&& bool
|
|
185
|
+
{
|
|
186
|
+
((cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits == 24) && cpp_df_qf_detail::ccmath::numeric_limits<float_type>::is_specialized && cpp_df_qf_detail::ccmath::numeric_limits<float_type>::is_iec559)
|
|
187
|
+
|| ((cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits == 53) && cpp_df_qf_detail::ccmath::numeric_limits<float_type>::is_specialized && cpp_df_qf_detail::ccmath::numeric_limits<float_type>::is_iec559)
|
|
188
|
+
|| ((cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits == 64) && cpp_df_qf_detail::ccmath::numeric_limits<float_type>::is_specialized && cpp_df_qf_detail::ccmath::numeric_limits<float_type>::is_iec559)
|
|
189
|
+
|| (cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits == 113)
|
|
190
|
+
}, "Error: float_type does not fulfill the backend requirements of cpp_double_fp_backend"
|
|
191
|
+
);
|
|
192
|
+
|
|
193
|
+
using rep_type = cpp_df_qf_detail::pair<float_type, float_type>;
|
|
194
|
+
using arithmetic = cpp_df_qf_detail::exact_arithmetic<float_type>;
|
|
195
|
+
|
|
196
|
+
using signed_types = std::tuple<signed char, signed short, signed int, signed long, signed long long, std::intmax_t>;
|
|
197
|
+
using unsigned_types = std::tuple<unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long, std::uintmax_t>;
|
|
198
|
+
using float_types = std::tuple<float, double, long double>;
|
|
199
|
+
using exponent_type = int;
|
|
200
|
+
|
|
201
|
+
static constexpr int my_digits = static_cast<int>(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits * static_cast<int>(INT8_C(2)));
|
|
202
|
+
static constexpr int my_digits10 = static_cast<int>(boost::multiprecision::detail::calc_digits10 <static_cast<unsigned>(my_digits)>::value);
|
|
203
|
+
static constexpr int my_max_digits10 = static_cast<int>(boost::multiprecision::detail::calc_max_digits10<static_cast<unsigned>(my_digits)>::value);
|
|
204
|
+
static constexpr int my_max_exponent = cpp_df_qf_detail::ccmath::numeric_limits<float_type>::max_exponent;
|
|
205
|
+
static constexpr int my_max_exponent10 = cpp_df_qf_detail::ccmath::numeric_limits<float_type>::max_exponent10;
|
|
206
|
+
|
|
207
|
+
static constexpr int my_min_exponent =
|
|
208
|
+
static_cast<int>
|
|
209
|
+
(
|
|
210
|
+
cpp_df_qf_detail::ccmath::numeric_limits<float_type>::min_exponent
|
|
211
|
+
+ cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
static constexpr int my_min_exponent10 =
|
|
215
|
+
static_cast<int>
|
|
216
|
+
(
|
|
217
|
+
-static_cast<int>
|
|
218
|
+
(
|
|
219
|
+
boost::multiprecision::detail::calc_digits10<static_cast<unsigned>(-my_min_exponent)>::value
|
|
220
|
+
)
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
// Default constructor.
|
|
224
|
+
constexpr cpp_double_fp_backend() noexcept { }
|
|
225
|
+
|
|
226
|
+
// Copy constructor.
|
|
227
|
+
constexpr cpp_double_fp_backend(const cpp_double_fp_backend& other) : data(other.data) { }
|
|
228
|
+
|
|
229
|
+
// Move constructor.
|
|
230
|
+
constexpr cpp_double_fp_backend(cpp_double_fp_backend&& other) noexcept : data(static_cast<rep_type&&>(other.data)) { }
|
|
231
|
+
|
|
232
|
+
// Constructors from other floating-point types.
|
|
233
|
+
template <typename OtherFloatType,
|
|
234
|
+
typename ::std::enable_if<( cpp_df_qf_detail::is_floating_point<OtherFloatType>::value
|
|
235
|
+
&& (cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatType>::digits <= cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits))>::type const* = nullptr>
|
|
236
|
+
constexpr cpp_double_fp_backend(const OtherFloatType& f)
|
|
237
|
+
: data(f, static_cast<float_type>(0.0F)) { }
|
|
238
|
+
|
|
239
|
+
template <typename OtherFloatType,
|
|
240
|
+
typename ::std::enable_if<( cpp_df_qf_detail::is_floating_point<OtherFloatType>::value
|
|
241
|
+
&& (cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatType>::digits > cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits))>::type const* = nullptr>
|
|
242
|
+
constexpr cpp_double_fp_backend(const OtherFloatType& f)
|
|
243
|
+
: data(static_cast<float_type>(f),
|
|
244
|
+
static_cast<float_type>(f - static_cast<OtherFloatType>(static_cast<float_type>(f)))) { }
|
|
245
|
+
|
|
246
|
+
// Construtor from another kind of cpp_double_fp_backend<> object.
|
|
247
|
+
|
|
248
|
+
template <typename OtherFloatType,
|
|
249
|
+
typename ::std::enable_if<( cpp_df_qf_detail::is_floating_point<OtherFloatType>::value
|
|
250
|
+
&& (!std::is_same<FloatingPointType, OtherFloatType>::value))>::type const* = nullptr>
|
|
251
|
+
constexpr cpp_double_fp_backend(const cpp_double_fp_backend<OtherFloatType>& a)
|
|
252
|
+
: cpp_double_fp_backend(cpp_double_fp_backend(a.my_first()) += a.my_second()) { }
|
|
253
|
+
|
|
254
|
+
// Constructors from integers.
|
|
255
|
+
template <typename SignedIntegralType,
|
|
256
|
+
typename ::std::enable_if<( boost::multiprecision::detail::is_integral<SignedIntegralType>::value
|
|
257
|
+
&& (!boost::multiprecision::detail::is_unsigned<SignedIntegralType>::value)
|
|
258
|
+
&& ((static_cast<int>(sizeof(SignedIntegralType) * 8) - 1) <= cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits))>::type const* = nullptr>
|
|
259
|
+
constexpr cpp_double_fp_backend(const SignedIntegralType& n)
|
|
260
|
+
: data(static_cast<float_type>(n), static_cast<float_type>(0.0F)) { }
|
|
261
|
+
|
|
262
|
+
template <typename UnsignedIntegralType,
|
|
263
|
+
typename ::std::enable_if<( boost::multiprecision::detail::is_integral<UnsignedIntegralType>::value
|
|
264
|
+
&& boost::multiprecision::detail::is_unsigned<UnsignedIntegralType>::value
|
|
265
|
+
&& (static_cast<int>(sizeof(UnsignedIntegralType) * 8u) <= cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits))>::type const* = nullptr>
|
|
266
|
+
constexpr cpp_double_fp_backend(const UnsignedIntegralType& u)
|
|
267
|
+
: data(static_cast<float_type>(u), static_cast<float_type>(0.0F)) { }
|
|
268
|
+
|
|
269
|
+
// Constructors from integers which hold more information than *this can contain.
|
|
270
|
+
template <typename UnsignedIntegralType,
|
|
271
|
+
typename ::std::enable_if<( boost::multiprecision::detail::is_integral<UnsignedIntegralType>::value
|
|
272
|
+
&& boost::multiprecision::detail::is_unsigned<UnsignedIntegralType>::value
|
|
273
|
+
&& (static_cast<int>(sizeof(UnsignedIntegralType) * 8u) > cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits))>::type const* = nullptr>
|
|
274
|
+
constexpr cpp_double_fp_backend(UnsignedIntegralType u)
|
|
275
|
+
: data(static_cast<float_type>(u & cpp_df_qf_detail::float_mask<UnsignedIntegralType, float_type>()),
|
|
276
|
+
static_cast<float_type>(0.0F))
|
|
277
|
+
{
|
|
278
|
+
using local_unsigned_integral_type = UnsignedIntegralType;
|
|
279
|
+
|
|
280
|
+
if (u > cpp_df_qf_detail::float_mask<local_unsigned_integral_type, float_type>())
|
|
281
|
+
{
|
|
282
|
+
local_unsigned_integral_type
|
|
283
|
+
local_flt_mask
|
|
284
|
+
{
|
|
285
|
+
cpp_df_qf_detail::float_mask<local_unsigned_integral_type, float_type>()
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
for (int index_mask_lsb = cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits;
|
|
289
|
+
(index_mask_lsb < static_cast<int>(sizeof(local_unsigned_integral_type) * 8u))
|
|
290
|
+
&& (local_flt_mask != local_unsigned_integral_type { UINT8_C(0) });
|
|
291
|
+
index_mask_lsb += cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits)
|
|
292
|
+
{
|
|
293
|
+
local_flt_mask <<= static_cast<unsigned>(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits);
|
|
294
|
+
|
|
295
|
+
add_unchecked_limb(static_cast<float_type>(u & local_flt_mask));
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
template <typename SignedIntegralType,
|
|
301
|
+
typename ::std::enable_if<( boost::multiprecision::detail::is_integral<SignedIntegralType>::value
|
|
302
|
+
&& (!boost::multiprecision::detail::is_unsigned<SignedIntegralType>::value)
|
|
303
|
+
&& ((static_cast<int>(sizeof(SignedIntegralType) * 8) - 1) > cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits))>::type const* = nullptr>
|
|
304
|
+
constexpr cpp_double_fp_backend(SignedIntegralType n)
|
|
305
|
+
{
|
|
306
|
+
const bool is_neg { (n < SignedIntegralType { INT8_C(0) }) };
|
|
307
|
+
|
|
308
|
+
using local_unsigned_integral_type = typename boost::multiprecision::detail::make_unsigned<SignedIntegralType>::type;
|
|
309
|
+
|
|
310
|
+
const local_unsigned_integral_type
|
|
311
|
+
u_val
|
|
312
|
+
{
|
|
313
|
+
(!is_neg)
|
|
314
|
+
? static_cast<local_unsigned_integral_type>(n)
|
|
315
|
+
: static_cast<local_unsigned_integral_type>
|
|
316
|
+
(
|
|
317
|
+
static_cast<local_unsigned_integral_type>(~n)
|
|
318
|
+
+ static_cast<local_unsigned_integral_type>(UINT8_C(1))
|
|
319
|
+
)
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
data = cpp_double_fp_backend(u_val).data;
|
|
323
|
+
|
|
324
|
+
if(is_neg) { negate(); }
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
constexpr cpp_double_fp_backend(const float_type& a, const float_type& b) noexcept : data(a, b) { }
|
|
328
|
+
|
|
329
|
+
constexpr cpp_double_fp_backend(const cpp_df_qf_detail::pair<float_type, float_type>& p) noexcept : data(p) { }
|
|
330
|
+
|
|
331
|
+
cpp_double_fp_backend(const char* p_str)
|
|
332
|
+
{
|
|
333
|
+
*this = p_str;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Assignment operator.
|
|
337
|
+
constexpr auto operator=(const cpp_double_fp_backend& other) -> cpp_double_fp_backend&
|
|
338
|
+
{
|
|
339
|
+
if (this != &other)
|
|
340
|
+
{
|
|
341
|
+
data = other.data;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
return *this;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Move assignment operator.
|
|
348
|
+
constexpr auto operator=(cpp_double_fp_backend&& other) noexcept -> cpp_double_fp_backend&
|
|
349
|
+
{
|
|
350
|
+
data = static_cast<rep_type&&>(other.data);
|
|
351
|
+
|
|
352
|
+
return *this;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Assignment operator from another kind of cpp_double_fp_backend<> object.
|
|
356
|
+
template <typename OtherFloatType,
|
|
357
|
+
typename ::std::enable_if<( cpp_df_qf_detail::is_floating_point<OtherFloatType>::value
|
|
358
|
+
&& (!std::is_same<FloatingPointType, OtherFloatType>::value))>::type const* = nullptr>
|
|
359
|
+
constexpr auto operator=(const cpp_double_fp_backend<OtherFloatType>& other) -> cpp_double_fp_backend&
|
|
360
|
+
{
|
|
361
|
+
return operator=(cpp_double_fp_backend(other));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
template <typename OtherFloatType>
|
|
365
|
+
constexpr auto operator=(const OtherFloatType f) -> typename ::std::enable_if<cpp_df_qf_detail::is_floating_point<OtherFloatType>::value, cpp_double_fp_backend&>::type
|
|
366
|
+
{
|
|
367
|
+
return operator=(cpp_double_fp_backend(f));
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
template <typename IntegralType>
|
|
371
|
+
constexpr auto operator=(const IntegralType n) -> typename ::std::enable_if<boost::multiprecision::detail::is_integral<IntegralType>::value, cpp_double_fp_backend&>::type
|
|
372
|
+
{
|
|
373
|
+
return operator=(cpp_double_fp_backend(n));
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
auto operator=(const char* p_str) -> cpp_double_fp_backend&
|
|
377
|
+
{
|
|
378
|
+
rd_string(p_str);
|
|
379
|
+
|
|
380
|
+
return *this;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
constexpr auto hash() const -> ::std::size_t
|
|
384
|
+
{
|
|
385
|
+
#if defined(BOOST_MP_CPP_DOUBLE_FP_HAS_FLOAT128)
|
|
386
|
+
using local_float_type = typename std::conditional<::std::is_same<float_type, ::boost::float128_type>::value,
|
|
387
|
+
long double,
|
|
388
|
+
float_type>::type;
|
|
389
|
+
#else
|
|
390
|
+
using local_float_type = float_type;
|
|
391
|
+
#endif
|
|
392
|
+
|
|
393
|
+
std::size_t result { UINT8_C(0) };
|
|
394
|
+
|
|
395
|
+
int n_first { };
|
|
396
|
+
int n_second { };
|
|
397
|
+
|
|
398
|
+
boost::multiprecision::detail::hash_combine(result, static_cast<local_float_type>(cpp_df_qf_detail::ccmath::frexp(data.first, &n_first)));
|
|
399
|
+
boost::multiprecision::detail::hash_combine(result, static_cast<local_float_type>(cpp_df_qf_detail::ccmath::frexp(data.second, &n_second)));
|
|
400
|
+
boost::multiprecision::detail::hash_combine(result, n_first);
|
|
401
|
+
boost::multiprecision::detail::hash_combine(result, n_second);
|
|
402
|
+
|
|
403
|
+
return result;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// The public methods follow.
|
|
407
|
+
|
|
408
|
+
constexpr auto isneg_unchecked() const noexcept -> bool { return (data.first < 0); }
|
|
409
|
+
|
|
410
|
+
constexpr auto iszero_unchecked() const noexcept -> bool { return (data.first == float_type { 0.0F }); }
|
|
411
|
+
|
|
412
|
+
constexpr auto is_one() const noexcept -> bool
|
|
413
|
+
{
|
|
414
|
+
return
|
|
415
|
+
(
|
|
416
|
+
(data.second == float_type { 0.0F })
|
|
417
|
+
&& (data.first == float_type { 1.0F })
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
constexpr auto negate() -> void
|
|
422
|
+
{
|
|
423
|
+
const bool isinf_u { (cpp_df_qf_detail::ccmath::isinf)(data.first) };
|
|
424
|
+
const bool isnan_u { (cpp_df_qf_detail::ccmath::isnan)(data.first) };
|
|
425
|
+
|
|
426
|
+
if (isnan_u) { }
|
|
427
|
+
else if (isinf_u)
|
|
428
|
+
{
|
|
429
|
+
data.first = -data.first;
|
|
430
|
+
}
|
|
431
|
+
else
|
|
432
|
+
{
|
|
433
|
+
if (!iszero_unchecked())
|
|
434
|
+
{
|
|
435
|
+
data = arithmetic::normalize(-data.first, -data.second);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Getters/Setters
|
|
441
|
+
constexpr auto my_first () const noexcept -> const float_type& { return data.first; }
|
|
442
|
+
constexpr auto my_second() const noexcept -> const float_type& { return data.second; }
|
|
443
|
+
|
|
444
|
+
constexpr auto rep() noexcept -> rep_type& { return data; }
|
|
445
|
+
|
|
446
|
+
constexpr auto rep() const noexcept -> const rep_type& { return data; }
|
|
447
|
+
|
|
448
|
+
constexpr auto crep() const noexcept -> const rep_type& { return data; }
|
|
449
|
+
|
|
450
|
+
// Unary add/sub/mul/div follow in the upcoming paragraphs.
|
|
451
|
+
|
|
452
|
+
constexpr auto operator+=(const cpp_double_fp_backend& v) -> cpp_double_fp_backend&
|
|
453
|
+
{
|
|
454
|
+
const int fpc_u { eval_fpclassify(*this) };
|
|
455
|
+
const int fpc_v { eval_fpclassify(v) };
|
|
456
|
+
|
|
457
|
+
if ((fpc_u != FP_NORMAL) || (fpc_v != FP_NORMAL))
|
|
458
|
+
{
|
|
459
|
+
// Handle special cases like zero, inf and NaN.
|
|
460
|
+
|
|
461
|
+
if (fpc_u == FP_NAN)
|
|
462
|
+
{
|
|
463
|
+
return *this;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
const bool isinf_v { (fpc_v == FP_INFINITE) };
|
|
467
|
+
|
|
468
|
+
if (fpc_u == FP_INFINITE)
|
|
469
|
+
{
|
|
470
|
+
if (isinf_v && (isneg_unchecked() != v.isneg_unchecked()))
|
|
471
|
+
{
|
|
472
|
+
*this = cpp_double_fp_backend::my_value_nan();
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
return *this;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
const bool iszero_u { ((fpc_u == FP_ZERO) || (fpc_u == FP_SUBNORMAL)) };
|
|
479
|
+
const bool isnan_v { (fpc_v == FP_NAN) };
|
|
480
|
+
|
|
481
|
+
if (iszero_u || (isnan_v || isinf_v))
|
|
482
|
+
{
|
|
483
|
+
if (iszero_u)
|
|
484
|
+
{
|
|
485
|
+
data.first = float_type { 0.0F };
|
|
486
|
+
data.second = float_type { 0.0F };
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
const bool iszero_v { ((fpc_v == FP_ZERO) || (fpc_v == FP_SUBNORMAL)) };
|
|
490
|
+
|
|
491
|
+
return ((!iszero_v) ? operator=(v) : *this);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
add_unchecked(v);
|
|
496
|
+
|
|
497
|
+
return *this;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
constexpr auto operator-=(const cpp_double_fp_backend& v) -> cpp_double_fp_backend&
|
|
501
|
+
{
|
|
502
|
+
const int fpc_u { eval_fpclassify(*this) };
|
|
503
|
+
const int fpc_v { eval_fpclassify(v) };
|
|
504
|
+
|
|
505
|
+
if ((fpc_u != FP_NORMAL) || (fpc_v != FP_NORMAL))
|
|
506
|
+
{
|
|
507
|
+
// Handle special cases like zero, inf and NaN.
|
|
508
|
+
|
|
509
|
+
if (fpc_u == FP_NAN)
|
|
510
|
+
{
|
|
511
|
+
return *this;
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
const bool isinf_v { (fpc_v == FP_INFINITE) };
|
|
515
|
+
|
|
516
|
+
if (fpc_u == FP_INFINITE)
|
|
517
|
+
{
|
|
518
|
+
if (isinf_v && (isneg_unchecked() == v.isneg_unchecked()))
|
|
519
|
+
{
|
|
520
|
+
*this = cpp_double_fp_backend::my_value_nan();
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
return *this;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
const bool iszero_u { ((fpc_u == FP_ZERO) || (fpc_u == FP_SUBNORMAL)) };
|
|
527
|
+
const bool isnan_v { (fpc_v == FP_NAN) };
|
|
528
|
+
|
|
529
|
+
if (iszero_u || (isnan_v || isinf_v))
|
|
530
|
+
{
|
|
531
|
+
if (iszero_u)
|
|
532
|
+
{
|
|
533
|
+
data.first = float_type { 0.0F };
|
|
534
|
+
data.second = float_type { 0.0F };
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
const bool iszero_v { ((fpc_v == FP_ZERO) || (fpc_v == FP_SUBNORMAL)) };
|
|
538
|
+
|
|
539
|
+
return ((!iszero_v) ? operator=(-v) : *this);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
if (this == &v)
|
|
544
|
+
{
|
|
545
|
+
data.first = float_type { 0.0F };
|
|
546
|
+
data.second = float_type { 0.0F };
|
|
547
|
+
|
|
548
|
+
return *this;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
const rep_type thi_tlo { arithmetic::two_diff(data.second, v.data.second) };
|
|
552
|
+
|
|
553
|
+
data = arithmetic::two_diff(data.first, v.data.first);
|
|
554
|
+
|
|
555
|
+
if (cpp_df_qf_detail::ccmath::isinf(data.first))
|
|
556
|
+
{
|
|
557
|
+
// Handle overflow.
|
|
558
|
+
const bool b_neg { (data.first < float_type { 0.0F }) };
|
|
559
|
+
|
|
560
|
+
*this = cpp_double_fp_backend::my_value_inf();
|
|
561
|
+
|
|
562
|
+
if (b_neg)
|
|
563
|
+
{
|
|
564
|
+
negate();
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
return *this;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
data = arithmetic::two_hilo_sum(data.first, data.second + thi_tlo.first);
|
|
571
|
+
|
|
572
|
+
data = arithmetic::two_hilo_sum(data.first, thi_tlo.second + data.second);
|
|
573
|
+
|
|
574
|
+
return *this;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
constexpr auto operator*=(const cpp_double_fp_backend& v) -> cpp_double_fp_backend&
|
|
578
|
+
{
|
|
579
|
+
// Evaluate the sign of the result.
|
|
580
|
+
|
|
581
|
+
const int fpc_u { eval_fpclassify(*this) };
|
|
582
|
+
const int fpc_v { eval_fpclassify(v) };
|
|
583
|
+
|
|
584
|
+
if ((fpc_u != FP_NORMAL) || (fpc_v != FP_NORMAL))
|
|
585
|
+
{
|
|
586
|
+
// Handle special cases like zero, inf and NaN.
|
|
587
|
+
const bool isinf_u { (fpc_u == FP_INFINITE) };
|
|
588
|
+
const bool isinf_v { (fpc_v == FP_INFINITE) };
|
|
589
|
+
const bool iszero_u { (fpc_u == FP_ZERO) };
|
|
590
|
+
const bool iszero_v { (fpc_v == FP_ZERO) };
|
|
591
|
+
|
|
592
|
+
if (((fpc_u == FP_NAN) || (fpc_v == FP_NAN)) || (isinf_u && iszero_v) || (isinf_v && iszero_u))
|
|
593
|
+
{
|
|
594
|
+
return operator=( cpp_double_fp_backend::my_value_nan());
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
if (isinf_u || isinf_v)
|
|
598
|
+
{
|
|
599
|
+
const bool b_neg { (isneg_unchecked() != v.isneg_unchecked()) };
|
|
600
|
+
|
|
601
|
+
*this = cpp_double_fp_backend::my_value_inf();
|
|
602
|
+
|
|
603
|
+
if (b_neg)
|
|
604
|
+
{
|
|
605
|
+
negate();
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
return *this;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
if (iszero_u || iszero_v)
|
|
612
|
+
{
|
|
613
|
+
return operator=(cpp_double_fp_backend(0));
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
mul_unchecked(v);
|
|
618
|
+
|
|
619
|
+
return *this;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
constexpr auto operator/=(const cpp_double_fp_backend& v) -> cpp_double_fp_backend&
|
|
623
|
+
{
|
|
624
|
+
const int fpc_u { eval_fpclassify(*this) };
|
|
625
|
+
const int fpc_v { eval_fpclassify(v) };
|
|
626
|
+
|
|
627
|
+
if ((fpc_u != FP_NORMAL) || (fpc_v != FP_NORMAL))
|
|
628
|
+
{
|
|
629
|
+
// Handle special cases like zero, inf and NaN.
|
|
630
|
+
const bool isnan_u { (fpc_u == FP_NAN) };
|
|
631
|
+
const bool isnan_v { (fpc_v == FP_NAN) };
|
|
632
|
+
|
|
633
|
+
if (isnan_u || isnan_v)
|
|
634
|
+
{
|
|
635
|
+
return operator=(cpp_double_fp_backend::my_value_nan());
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
const bool iszero_u { (fpc_u == FP_ZERO) };
|
|
639
|
+
const bool iszero_v { (fpc_v == FP_ZERO) };
|
|
640
|
+
|
|
641
|
+
if (iszero_u)
|
|
642
|
+
{
|
|
643
|
+
if (iszero_v)
|
|
644
|
+
{
|
|
645
|
+
return operator=(cpp_double_fp_backend::my_value_nan());
|
|
646
|
+
}
|
|
647
|
+
else
|
|
648
|
+
{
|
|
649
|
+
return operator=(cpp_double_fp_backend(0));
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
// Handle more special cases like zero, inf and NaN.
|
|
654
|
+
if (iszero_v)
|
|
655
|
+
{
|
|
656
|
+
const bool b_neg = isneg_unchecked();
|
|
657
|
+
|
|
658
|
+
*this = cpp_double_fp_backend::my_value_inf();
|
|
659
|
+
|
|
660
|
+
if (b_neg)
|
|
661
|
+
{
|
|
662
|
+
negate();
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
return *this;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
const bool isinf_v { (fpc_v == FP_INFINITE) };
|
|
669
|
+
const bool isinf_u { (fpc_u == FP_INFINITE) };
|
|
670
|
+
|
|
671
|
+
if (isinf_u)
|
|
672
|
+
{
|
|
673
|
+
if (isinf_v)
|
|
674
|
+
{
|
|
675
|
+
return operator=(cpp_double_fp_backend::my_value_nan());
|
|
676
|
+
}
|
|
677
|
+
else
|
|
678
|
+
{
|
|
679
|
+
const bool b_neg { isneg_unchecked() };
|
|
680
|
+
|
|
681
|
+
return operator=((!b_neg) ? cpp_double_fp_backend::my_value_inf() : -cpp_double_fp_backend::my_value_inf());
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
if (isinf_v)
|
|
686
|
+
{
|
|
687
|
+
return operator=(cpp_double_fp_backend(0));
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
if (this == &v)
|
|
692
|
+
{
|
|
693
|
+
data.first = float_type { 1.0F };
|
|
694
|
+
data.second = float_type { 0.0F };
|
|
695
|
+
|
|
696
|
+
return *this;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// The division algorithm has been taken from Victor Shoup,
|
|
700
|
+
// package WinNTL-5_3_2. It might originally be related to the
|
|
701
|
+
// K. Briggs work. The algorithm has been significantly simplified
|
|
702
|
+
// while still attempting to retain proper rounding corrections.
|
|
703
|
+
// Checks for overflow and underflow have been added.
|
|
704
|
+
|
|
705
|
+
const float_type C { data.first / v.data.first };
|
|
706
|
+
|
|
707
|
+
float_type c { cpp_df_qf_detail::split_maker<float_type>::value * C };
|
|
708
|
+
|
|
709
|
+
float_type hc { };
|
|
710
|
+
|
|
711
|
+
if (cpp_df_qf_detail::ccmath::isinf(c))
|
|
712
|
+
{
|
|
713
|
+
// Handle overflow by scaling down (and then back up) with the split.
|
|
714
|
+
|
|
715
|
+
hc =
|
|
716
|
+
cpp_df_qf_detail::ccmath::ldexp
|
|
717
|
+
(
|
|
718
|
+
C - float_type { C - cpp_df_qf_detail::ccmath::ldexp(C, -cpp_df_qf_detail::split_maker<float_type>::n_shl) },
|
|
719
|
+
cpp_df_qf_detail::split_maker<float_type>::n_shl
|
|
720
|
+
);
|
|
721
|
+
}
|
|
722
|
+
else
|
|
723
|
+
{
|
|
724
|
+
hc = c - float_type { c - C };
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
float_type u { cpp_df_qf_detail::split_maker<float_type>::value * v.data.first };
|
|
728
|
+
|
|
729
|
+
const float_type hv =
|
|
730
|
+
(
|
|
731
|
+
cpp_df_qf_detail::ccmath::isinf(u)
|
|
732
|
+
? cpp_df_qf_detail::ccmath::ldexp
|
|
733
|
+
(
|
|
734
|
+
// Handle overflow by scaling down (and then back up) with the split.
|
|
735
|
+
v.data.first - float_type { v.data.first - cpp_df_qf_detail::ccmath::ldexp(v.data.first, -cpp_df_qf_detail::split_maker<float_type>::n_shl) },
|
|
736
|
+
cpp_df_qf_detail::split_maker<float_type>::n_shl
|
|
737
|
+
)
|
|
738
|
+
: u - float_type { u - v.data.first }
|
|
739
|
+
);
|
|
740
|
+
|
|
741
|
+
const float_type U { C * v.data.first };
|
|
742
|
+
|
|
743
|
+
u = cpp_df_qf_detail::ccmath::unsafe::fma(hc, hv, -U);
|
|
744
|
+
|
|
745
|
+
{
|
|
746
|
+
const float_type tv { v.data.first - hv };
|
|
747
|
+
|
|
748
|
+
u = cpp_df_qf_detail::ccmath::unsafe::fma(hc, tv, u);
|
|
749
|
+
|
|
750
|
+
const float_type tc { C - hc };
|
|
751
|
+
|
|
752
|
+
u = cpp_df_qf_detail::ccmath::unsafe::fma(tc, hv, u);
|
|
753
|
+
u = cpp_df_qf_detail::ccmath::unsafe::fma(tc, tv, u);
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
c = float_type { (data.first - U) - u } + data.second;
|
|
757
|
+
|
|
758
|
+
c = (c - float_type { C * v.data.second }) / v.data.first;
|
|
759
|
+
|
|
760
|
+
// Perform even more simplifications compared to Victor Shoup.
|
|
761
|
+
data.first = C + c;
|
|
762
|
+
data.second = float_type { C - data.first } + c;
|
|
763
|
+
|
|
764
|
+
return *this;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
// Unary minus operator.
|
|
768
|
+
constexpr auto operator-() const -> cpp_double_fp_backend
|
|
769
|
+
{
|
|
770
|
+
cpp_double_fp_backend v { *this };
|
|
771
|
+
|
|
772
|
+
v.negate();
|
|
773
|
+
|
|
774
|
+
return v;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
// Public helper functions.
|
|
778
|
+
static constexpr auto pown(cpp_double_fp_backend& result, const cpp_double_fp_backend& x, int p) -> void
|
|
779
|
+
{
|
|
780
|
+
using local_float_type = cpp_double_fp_backend;
|
|
781
|
+
|
|
782
|
+
if (p == 2)
|
|
783
|
+
{
|
|
784
|
+
result = x; result.mul_unchecked(x);
|
|
785
|
+
}
|
|
786
|
+
else if (p == 3)
|
|
787
|
+
{
|
|
788
|
+
result = x; result.mul_unchecked(x); result.mul_unchecked(x);
|
|
789
|
+
}
|
|
790
|
+
else if (p == 4)
|
|
791
|
+
{
|
|
792
|
+
local_float_type x2 { x };
|
|
793
|
+
x2.mul_unchecked(x);
|
|
794
|
+
|
|
795
|
+
result = x2;
|
|
796
|
+
result.mul_unchecked(x2);
|
|
797
|
+
}
|
|
798
|
+
else if (p == 1)
|
|
799
|
+
{
|
|
800
|
+
result = x;
|
|
801
|
+
}
|
|
802
|
+
else if (p < 0)
|
|
803
|
+
{
|
|
804
|
+
// The case p == 0 is checked in a higher calling layer.
|
|
805
|
+
|
|
806
|
+
pown(result, local_float_type(1U) / x, -p);
|
|
807
|
+
}
|
|
808
|
+
else
|
|
809
|
+
{
|
|
810
|
+
result = local_float_type(1U);
|
|
811
|
+
|
|
812
|
+
local_float_type y(x);
|
|
813
|
+
|
|
814
|
+
auto p_local = static_cast<std::uint32_t>(p);
|
|
815
|
+
|
|
816
|
+
for (;;)
|
|
817
|
+
{
|
|
818
|
+
if (static_cast<std::uint_fast8_t>(p_local & static_cast<std::uint32_t>(UINT8_C(1))) != static_cast<std::uint_fast8_t>(UINT8_C(0)))
|
|
819
|
+
{
|
|
820
|
+
result.mul_unchecked(y);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
p_local >>= 1U;
|
|
824
|
+
|
|
825
|
+
if (p_local == static_cast<std::uint32_t>(UINT8_C(0)))
|
|
826
|
+
{
|
|
827
|
+
break;
|
|
828
|
+
}
|
|
829
|
+
else
|
|
830
|
+
{
|
|
831
|
+
y.mul_unchecked(y);
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
constexpr auto swap(cpp_double_fp_backend& other) -> void
|
|
838
|
+
{
|
|
839
|
+
if (this != &other)
|
|
840
|
+
{
|
|
841
|
+
const rep_type tmp { data };
|
|
842
|
+
|
|
843
|
+
data = other.data;
|
|
844
|
+
|
|
845
|
+
other.data = tmp;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
constexpr auto swap(cpp_double_fp_backend&& other) noexcept -> void
|
|
850
|
+
{
|
|
851
|
+
const rep_type tmp { static_cast<typename cpp_double_fp_backend::rep_type&&>(data) };
|
|
852
|
+
|
|
853
|
+
data = other.data;
|
|
854
|
+
|
|
855
|
+
other.data = tmp;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
constexpr auto compare(const cpp_double_fp_backend& other) const noexcept -> int
|
|
859
|
+
{
|
|
860
|
+
// Return 1 for *this > other, -1 for *this < other, 0 for *this = other.
|
|
861
|
+
|
|
862
|
+
if ((cpp_df_qf_detail::ccmath::isnan)(data.first))
|
|
863
|
+
{
|
|
864
|
+
return -1;
|
|
865
|
+
}
|
|
866
|
+
else
|
|
867
|
+
{
|
|
868
|
+
return (my_first() > other.my_first()) ? 1 : (my_first() < other.my_first())
|
|
869
|
+
? -1 : (my_second() > other.my_second())
|
|
870
|
+
? 1 : (my_second() < other.my_second())
|
|
871
|
+
? -1 : 0;
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
// TBD: Exactly what compilers/language-standards are needed to make this constexpr?
|
|
876
|
+
// TBD: It odes not really become constexpr until we stop using an intermediate
|
|
877
|
+
// cpp_bin_float anyway. But I will leave this comment for future library evolution.
|
|
878
|
+
|
|
879
|
+
auto str(std::streamsize number_of_digits, const std::ios::fmtflags format_flags) const -> std::string
|
|
880
|
+
{
|
|
881
|
+
// Use cpp_bin_float when writing to string. This is similar
|
|
882
|
+
// to the use of cpp_bin_float when reading from string.
|
|
883
|
+
|
|
884
|
+
cpp_bin_float_read_write_backend_type f_bin { data.first };
|
|
885
|
+
|
|
886
|
+
eval_add(f_bin, cpp_bin_float_read_write_backend_type(data.second));
|
|
887
|
+
|
|
888
|
+
return f_bin.str(number_of_digits, format_flags);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
constexpr auto order02() const -> int
|
|
892
|
+
{
|
|
893
|
+
// TBD: Is there another option to get the base-2 log
|
|
894
|
+
// that's more unequivocally closer to constexpr?
|
|
895
|
+
|
|
896
|
+
// TBD: Either way, integrate this (or something like it)
|
|
897
|
+
// into any potential implementation of eval_ilogb().
|
|
898
|
+
|
|
899
|
+
int e2 { };
|
|
900
|
+
|
|
901
|
+
cpp_double_fp_backend dummy { };
|
|
902
|
+
|
|
903
|
+
eval_frexp(dummy, *this, &e2);
|
|
904
|
+
|
|
905
|
+
return e2;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
static constexpr auto my_value_max() noexcept -> cpp_double_fp_backend
|
|
909
|
+
{
|
|
910
|
+
// Use the non-normalized sum of two maximum values, where the lower
|
|
911
|
+
// value is "shifted" right in the sense of floating-point ldexp.
|
|
912
|
+
|
|
913
|
+
return
|
|
914
|
+
cpp_double_fp_backend
|
|
915
|
+
(
|
|
916
|
+
arithmetic::two_hilo_sum
|
|
917
|
+
(
|
|
918
|
+
float_type
|
|
919
|
+
(
|
|
920
|
+
(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::max)()
|
|
921
|
+
* (
|
|
922
|
+
static_cast<float_type>(1.0F)
|
|
923
|
+
- static_cast<float_type>(1.5F) * cpp_df_qf_detail::ccmath::sqrt(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::epsilon())
|
|
924
|
+
)
|
|
925
|
+
),
|
|
926
|
+
float_type
|
|
927
|
+
(
|
|
928
|
+
cpp_df_qf_detail::ccmath::ldexp
|
|
929
|
+
(
|
|
930
|
+
(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::max)(),
|
|
931
|
+
-cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits
|
|
932
|
+
)
|
|
933
|
+
)
|
|
934
|
+
)
|
|
935
|
+
);
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
static constexpr auto my_value_min() noexcept -> cpp_double_fp_backend
|
|
939
|
+
{
|
|
940
|
+
// Use the non-normalized minimum value, where the lower value
|
|
941
|
+
// is "shifted" left in the sense of floating-point ldexp.
|
|
942
|
+
|
|
943
|
+
return
|
|
944
|
+
cpp_double_fp_backend
|
|
945
|
+
(
|
|
946
|
+
float_type
|
|
947
|
+
(
|
|
948
|
+
cpp_df_qf_detail::ccmath::ldexp
|
|
949
|
+
(
|
|
950
|
+
(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::min)(),
|
|
951
|
+
cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits
|
|
952
|
+
)
|
|
953
|
+
)
|
|
954
|
+
);
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
static constexpr auto my_value_eps() noexcept -> cpp_double_fp_backend
|
|
958
|
+
{
|
|
959
|
+
return
|
|
960
|
+
cpp_double_fp_backend
|
|
961
|
+
(
|
|
962
|
+
float_type(cpp_df_qf_detail::ccmath::ldexp(float_type { 1 }, int { 3 - my_digits }))
|
|
963
|
+
);
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
static constexpr auto my_value_nan() noexcept -> cpp_double_fp_backend
|
|
967
|
+
{
|
|
968
|
+
return cpp_double_fp_backend(static_cast<float_type>(NAN), static_cast<float_type>(0.0F));
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
static constexpr auto my_value_inf() noexcept -> cpp_double_fp_backend
|
|
972
|
+
{
|
|
973
|
+
return cpp_double_fp_backend(static_cast<float_type>(HUGE_VAL), static_cast<float_type>(0.0F)); // conversion from double infinity OK
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
static constexpr auto my_value_logmax() -> cpp_double_fp_backend
|
|
977
|
+
{
|
|
978
|
+
return
|
|
979
|
+
cpp_double_fp_backend
|
|
980
|
+
(
|
|
981
|
+
cpp_df_qf_detail::ccmath::log
|
|
982
|
+
(
|
|
983
|
+
float_type
|
|
984
|
+
(
|
|
985
|
+
(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::max)()
|
|
986
|
+
* (
|
|
987
|
+
static_cast<float_type>(1.0F)
|
|
988
|
+
- static_cast<float_type>(1.5F) * cpp_df_qf_detail::ccmath::sqrt(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::epsilon())
|
|
989
|
+
)
|
|
990
|
+
)
|
|
991
|
+
)
|
|
992
|
+
);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
static constexpr auto my_value_logmin() -> cpp_double_fp_backend
|
|
996
|
+
{
|
|
997
|
+
return
|
|
998
|
+
cpp_double_fp_backend
|
|
999
|
+
(
|
|
1000
|
+
cpp_df_qf_detail::ccmath::log
|
|
1001
|
+
(
|
|
1002
|
+
float_type
|
|
1003
|
+
(
|
|
1004
|
+
cpp_df_qf_detail::ccmath::ldexp
|
|
1005
|
+
(
|
|
1006
|
+
(cpp_df_qf_detail::ccmath::numeric_limits<float_type>::min)(),
|
|
1007
|
+
cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits
|
|
1008
|
+
)
|
|
1009
|
+
)
|
|
1010
|
+
)
|
|
1011
|
+
);
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
constexpr auto add_unchecked_limb(const float_type v_first) -> void
|
|
1015
|
+
{
|
|
1016
|
+
const float_type thi { data.second };
|
|
1017
|
+
|
|
1018
|
+
data = arithmetic::two_sum(data.first, v_first);
|
|
1019
|
+
|
|
1020
|
+
data = arithmetic::two_hilo_sum(data.first, data.second + thi);
|
|
1021
|
+
|
|
1022
|
+
data = arithmetic::two_hilo_sum(data.first, data.second);
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
private:
|
|
1026
|
+
rep_type data;
|
|
1027
|
+
|
|
1028
|
+
using cpp_bin_float_read_write_backend_type = boost::multiprecision::backends::cpp_bin_float<static_cast<unsigned>(my_digits), digit_base_2, void, int, cpp_df_qf_detail::ccmath::numeric_limits<float_type>::min_exponent, cpp_df_qf_detail::ccmath::numeric_limits<float_type>::max_exponent>;
|
|
1029
|
+
|
|
1030
|
+
constexpr auto rd_string(const char* p_str) -> bool;
|
|
1031
|
+
|
|
1032
|
+
constexpr auto add_unchecked(const cpp_double_fp_backend& v) -> void
|
|
1033
|
+
{
|
|
1034
|
+
const rep_type thi_tlo { arithmetic::two_sum(data.second, v.data.second) };
|
|
1035
|
+
|
|
1036
|
+
data = arithmetic::two_sum(data.first, v.data.first);
|
|
1037
|
+
|
|
1038
|
+
if (cpp_df_qf_detail::ccmath::isinf(data.first))
|
|
1039
|
+
{
|
|
1040
|
+
// Handle overflow.
|
|
1041
|
+
const bool b_neg { (data.first < float_type { 0.0F }) };
|
|
1042
|
+
|
|
1043
|
+
*this = cpp_double_fp_backend::my_value_inf();
|
|
1044
|
+
|
|
1045
|
+
if (b_neg)
|
|
1046
|
+
{
|
|
1047
|
+
negate();
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
return;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
data = arithmetic::two_hilo_sum(data.first, data.second + thi_tlo.first);
|
|
1054
|
+
|
|
1055
|
+
data = arithmetic::two_hilo_sum(data.first, thi_tlo.second + data.second);
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
constexpr auto mul_unchecked(const cpp_double_fp_backend& v) -> void
|
|
1059
|
+
{
|
|
1060
|
+
// The multiplication algorithm has been taken from Victor Shoup,
|
|
1061
|
+
// package WinNTL-5_3_2. It might originally be related to the
|
|
1062
|
+
// K. Briggs work. The algorithm has been significantly simplified
|
|
1063
|
+
// while still attempting to retain proper rounding corrections.
|
|
1064
|
+
// Checks for overflow and underflow have been added.
|
|
1065
|
+
|
|
1066
|
+
float_type C { cpp_df_qf_detail::split_maker<float_type>::value * data.first };
|
|
1067
|
+
|
|
1068
|
+
float_type hu { };
|
|
1069
|
+
|
|
1070
|
+
if (cpp_df_qf_detail::ccmath::isinf(C))
|
|
1071
|
+
{
|
|
1072
|
+
// Handle overflow by scaling down (and then back up) with the split.
|
|
1073
|
+
|
|
1074
|
+
C = data.first - cpp_df_qf_detail::ccmath::ldexp(data.first, -cpp_df_qf_detail::split_maker<float_type>::n_shl);
|
|
1075
|
+
|
|
1076
|
+
hu = cpp_df_qf_detail::ccmath::ldexp(data.first - C, cpp_df_qf_detail::split_maker<float_type>::n_shl);
|
|
1077
|
+
}
|
|
1078
|
+
else
|
|
1079
|
+
{
|
|
1080
|
+
hu = C - float_type { C - data.first };
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
C = data.first * v.data.first;
|
|
1084
|
+
|
|
1085
|
+
if (cpp_df_qf_detail::ccmath::isinf(C))
|
|
1086
|
+
{
|
|
1087
|
+
// Handle overflow.
|
|
1088
|
+
const bool b_neg { (isneg_unchecked() != v.isneg_unchecked()) };
|
|
1089
|
+
|
|
1090
|
+
*this = cpp_double_fp_backend::my_value_inf();
|
|
1091
|
+
|
|
1092
|
+
if (b_neg)
|
|
1093
|
+
{
|
|
1094
|
+
negate();
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
return;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
1100
|
+
float_type c { cpp_df_qf_detail::split_maker<float_type>::value * v.data.first };
|
|
1101
|
+
|
|
1102
|
+
float_type hv { };
|
|
1103
|
+
|
|
1104
|
+
if (cpp_df_qf_detail::ccmath::isinf(c))
|
|
1105
|
+
{
|
|
1106
|
+
// Handle overflow by scaling down (and then back up) with the split.
|
|
1107
|
+
|
|
1108
|
+
c = v.data.first - cpp_df_qf_detail::ccmath::ldexp(v.data.first, -cpp_df_qf_detail::split_maker<float_type>::n_shl);
|
|
1109
|
+
|
|
1110
|
+
hv = cpp_df_qf_detail::ccmath::ldexp(v.data.first - c, cpp_df_qf_detail::split_maker<float_type>::n_shl);
|
|
1111
|
+
}
|
|
1112
|
+
else
|
|
1113
|
+
{
|
|
1114
|
+
hv = c - float_type { c - v.data.first };
|
|
1115
|
+
}
|
|
1116
|
+
|
|
1117
|
+
{
|
|
1118
|
+
const float_type tv { v.data.first - hv };
|
|
1119
|
+
|
|
1120
|
+
const float_type
|
|
1121
|
+
t1
|
|
1122
|
+
{
|
|
1123
|
+
cpp_df_qf_detail::ccmath::unsafe::fma
|
|
1124
|
+
(
|
|
1125
|
+
hu,
|
|
1126
|
+
tv,
|
|
1127
|
+
cpp_df_qf_detail::ccmath::unsafe::fma(hu, hv, -C)
|
|
1128
|
+
)
|
|
1129
|
+
};
|
|
1130
|
+
|
|
1131
|
+
const float_type tu { data.first - hu };
|
|
1132
|
+
|
|
1133
|
+
c = cpp_df_qf_detail::ccmath::unsafe::fma(tu, tv, cpp_df_qf_detail::ccmath::unsafe::fma(tu, hv, t1))
|
|
1134
|
+
+ (data.first * v.data.second)
|
|
1135
|
+
+ (data.second * v.data.first);
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
// Perform even more simplifications compared to Victor Shoup.
|
|
1139
|
+
data.first = C + c;
|
|
1140
|
+
data.second = float_type { C - data.first } + c;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
template <typename OtherFloatingPointType,
|
|
1144
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<OtherFloatingPointType>::value && ((cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatingPointType>::digits10 * 2) < 16))>::type const*>
|
|
1145
|
+
friend constexpr auto eval_exp(cpp_double_fp_backend<OtherFloatingPointType>& result, const cpp_double_fp_backend<OtherFloatingPointType>& x) -> void;
|
|
1146
|
+
|
|
1147
|
+
template <typename OtherFloatingPointType,
|
|
1148
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<OtherFloatingPointType>::value && (((cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatingPointType>::digits10 * 2) >= 16) && ((cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatingPointType>::digits10 * 2) <= 36)))>::type const*>
|
|
1149
|
+
friend constexpr auto eval_exp(cpp_double_fp_backend<OtherFloatingPointType>& result, const cpp_double_fp_backend<OtherFloatingPointType>& x) -> void;
|
|
1150
|
+
|
|
1151
|
+
template <typename OtherFloatingPointType,
|
|
1152
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<OtherFloatingPointType>::value && ((cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatingPointType>::digits10 * 2) > 36))>::type const*>
|
|
1153
|
+
friend constexpr auto eval_exp(cpp_double_fp_backend<OtherFloatingPointType>& result, const cpp_double_fp_backend<OtherFloatingPointType>& x) -> void;
|
|
1154
|
+
};
|
|
1155
|
+
|
|
1156
|
+
template <typename FloatingPointType>
|
|
1157
|
+
constexpr auto cpp_double_fp_backend<FloatingPointType>::rd_string(const char* p_str) -> bool
|
|
1158
|
+
{
|
|
1159
|
+
// Use an intermediate cpp_bin_float backend type for reading string input.
|
|
1160
|
+
|
|
1161
|
+
cpp_bin_float_read_write_backend_type f_bin { };
|
|
1162
|
+
|
|
1163
|
+
f_bin = p_str;
|
|
1164
|
+
|
|
1165
|
+
const int fpc { eval_fpclassify(f_bin) };
|
|
1166
|
+
|
|
1167
|
+
const bool is_definitely_nan { (fpc == FP_NAN) };
|
|
1168
|
+
|
|
1169
|
+
using local_double_fp_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1170
|
+
|
|
1171
|
+
if (is_definitely_nan)
|
|
1172
|
+
{
|
|
1173
|
+
static_cast<void>(operator=(local_double_fp_type::my_value_nan()));
|
|
1174
|
+
|
|
1175
|
+
return true;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
const bool b_neg { (eval_signbit(f_bin) == 1) };
|
|
1179
|
+
|
|
1180
|
+
if (b_neg) { f_bin.negate(); }
|
|
1181
|
+
|
|
1182
|
+
const int
|
|
1183
|
+
expval_from_f_bin
|
|
1184
|
+
{
|
|
1185
|
+
[&f_bin]()
|
|
1186
|
+
{
|
|
1187
|
+
int expval { };
|
|
1188
|
+
|
|
1189
|
+
cpp_bin_float_read_write_backend_type dummy { };
|
|
1190
|
+
|
|
1191
|
+
eval_frexp(dummy, f_bin, &expval);
|
|
1192
|
+
|
|
1193
|
+
return expval;
|
|
1194
|
+
}()
|
|
1195
|
+
};
|
|
1196
|
+
|
|
1197
|
+
const auto is_zero_or_subnormal =
|
|
1198
|
+
(
|
|
1199
|
+
(fpc == FP_ZERO)
|
|
1200
|
+
|| (expval_from_f_bin < static_cast<typename cpp_bin_float_read_write_backend_type::exponent_type>(local_double_fp_type::my_min_exponent))
|
|
1201
|
+
);
|
|
1202
|
+
|
|
1203
|
+
if (is_zero_or_subnormal)
|
|
1204
|
+
{
|
|
1205
|
+
data.first = float_type { 0.0F };
|
|
1206
|
+
data.second = float_type { 0.0F };
|
|
1207
|
+
|
|
1208
|
+
return true;
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
float_type flt_inf_check_first { };
|
|
1212
|
+
|
|
1213
|
+
eval_convert_to(&flt_inf_check_first, f_bin);
|
|
1214
|
+
|
|
1215
|
+
bool is_definitely_inf { ((fpc == FP_INFINITE) || cpp_df_qf_detail::ccmath::isinf(flt_inf_check_first)) };
|
|
1216
|
+
|
|
1217
|
+
if ((!is_definitely_inf) && (flt_inf_check_first > my_value_max().my_first()))
|
|
1218
|
+
{
|
|
1219
|
+
cpp_bin_float_read_write_backend_type f_bin_inf_check(f_bin);
|
|
1220
|
+
|
|
1221
|
+
eval_subtract(f_bin_inf_check, cpp_bin_float_read_write_backend_type(flt_inf_check_first));
|
|
1222
|
+
|
|
1223
|
+
float_type flt_inf_check_second { };
|
|
1224
|
+
|
|
1225
|
+
eval_convert_to(&flt_inf_check_second, f_bin_inf_check);
|
|
1226
|
+
|
|
1227
|
+
is_definitely_inf = eval_gt(local_double_fp_type(flt_inf_check_first, flt_inf_check_second), my_value_max());
|
|
1228
|
+
};
|
|
1229
|
+
|
|
1230
|
+
if (is_definitely_inf)
|
|
1231
|
+
{
|
|
1232
|
+
static_cast<void>(operator=(local_double_fp_type::my_value_inf()));
|
|
1233
|
+
|
|
1234
|
+
if (b_neg)
|
|
1235
|
+
{
|
|
1236
|
+
negate();
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
return true;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
// The input string is normal. We will now extract its value.
|
|
1243
|
+
|
|
1244
|
+
data.first = float_type { 0.0F };
|
|
1245
|
+
data.second = float_type { 0.0F };
|
|
1246
|
+
|
|
1247
|
+
// Handle small input values. Scale (and re-scale them below) if possible.
|
|
1248
|
+
|
|
1249
|
+
constexpr int pow2_scaling_for_small_input { cpp_df_qf_detail::ccmath::numeric_limits<float_type>::digits };
|
|
1250
|
+
|
|
1251
|
+
const bool
|
|
1252
|
+
has_pow2_scaling_for_small_input
|
|
1253
|
+
{
|
|
1254
|
+
(expval_from_f_bin < static_cast<int>(local_double_fp_type::my_min_exponent + pow2_scaling_for_small_input))
|
|
1255
|
+
};
|
|
1256
|
+
|
|
1257
|
+
if (has_pow2_scaling_for_small_input)
|
|
1258
|
+
{
|
|
1259
|
+
eval_ldexp(f_bin, f_bin, pow2_scaling_for_small_input);
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
using local_builtin_float_type = typename std::conditional<(sizeof(float_type) <= sizeof(double)), double, float_type>::type;
|
|
1263
|
+
|
|
1264
|
+
constexpr unsigned
|
|
1265
|
+
digit_limit
|
|
1266
|
+
{
|
|
1267
|
+
static_cast<unsigned>
|
|
1268
|
+
(
|
|
1269
|
+
static_cast<int>
|
|
1270
|
+
(
|
|
1271
|
+
(local_double_fp_type::my_digits / cpp_df_qf_detail::ccmath::numeric_limits<local_builtin_float_type>::digits)
|
|
1272
|
+
+ (((local_double_fp_type::my_digits % cpp_df_qf_detail::ccmath::numeric_limits<local_builtin_float_type>::digits) != 0) ? 1 : 0)
|
|
1273
|
+
)
|
|
1274
|
+
* cpp_df_qf_detail::ccmath::numeric_limits<local_builtin_float_type>::digits
|
|
1275
|
+
)
|
|
1276
|
+
};
|
|
1277
|
+
|
|
1278
|
+
for(auto i = static_cast<unsigned>(UINT8_C(0));
|
|
1279
|
+
i < digit_limit;
|
|
1280
|
+
i = static_cast<unsigned>(i + static_cast<unsigned>(cpp_df_qf_detail::ccmath::numeric_limits<local_builtin_float_type>::digits)))
|
|
1281
|
+
{
|
|
1282
|
+
local_builtin_float_type flt_part { };
|
|
1283
|
+
|
|
1284
|
+
eval_convert_to(&flt_part, f_bin);
|
|
1285
|
+
|
|
1286
|
+
eval_subtract(f_bin, cpp_bin_float_read_write_backend_type(flt_part));
|
|
1287
|
+
|
|
1288
|
+
eval_add(*this, local_double_fp_type { flt_part });
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
if (has_pow2_scaling_for_small_input)
|
|
1292
|
+
{
|
|
1293
|
+
eval_ldexp(*this, *this, -pow2_scaling_for_small_input);
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
if (b_neg) { negate(); }
|
|
1297
|
+
|
|
1298
|
+
return true;
|
|
1299
|
+
}
|
|
1300
|
+
|
|
1301
|
+
} } } // namespace boost::multiprecision::backends
|
|
1302
|
+
|
|
1303
|
+
#include <boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_constants.hpp>
|
|
1304
|
+
|
|
1305
|
+
namespace boost { namespace multiprecision { namespace backends {
|
|
1306
|
+
|
|
1307
|
+
template <typename FloatingPointType>
|
|
1308
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_digits;
|
|
1309
|
+
template <typename FloatingPointType>
|
|
1310
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_digits10;
|
|
1311
|
+
template <typename FloatingPointType>
|
|
1312
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_max_digits10;
|
|
1313
|
+
template <typename FloatingPointType>
|
|
1314
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_max_exponent;
|
|
1315
|
+
template <typename FloatingPointType>
|
|
1316
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_min_exponent;
|
|
1317
|
+
template <typename FloatingPointType>
|
|
1318
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_max_exponent10;
|
|
1319
|
+
template <typename FloatingPointType>
|
|
1320
|
+
constexpr int cpp_double_fp_backend<FloatingPointType>::my_min_exponent10;
|
|
1321
|
+
|
|
1322
|
+
template <typename FloatingPointType>
|
|
1323
|
+
constexpr cpp_double_fp_backend<FloatingPointType> operator+(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) { return cpp_double_fp_backend<FloatingPointType>(a) += b; }
|
|
1324
|
+
template <typename FloatingPointType>
|
|
1325
|
+
constexpr cpp_double_fp_backend<FloatingPointType> operator-(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) { return cpp_double_fp_backend<FloatingPointType>(a) -= b; }
|
|
1326
|
+
template <typename FloatingPointType>
|
|
1327
|
+
constexpr cpp_double_fp_backend<FloatingPointType> operator*(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) { return cpp_double_fp_backend<FloatingPointType>(a) *= b; }
|
|
1328
|
+
template <typename FloatingPointType>
|
|
1329
|
+
constexpr cpp_double_fp_backend<FloatingPointType> operator/(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) { return cpp_double_fp_backend<FloatingPointType>(a) /= b; }
|
|
1330
|
+
|
|
1331
|
+
template <typename FloatingPointType>
|
|
1332
|
+
constexpr auto eval_add(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void { result += x; }
|
|
1333
|
+
template <typename FloatingPointType>
|
|
1334
|
+
constexpr auto eval_add(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void { result = cpp_double_fp_backend<FloatingPointType>(a) += b; }
|
|
1335
|
+
template <typename FloatingPointType>
|
|
1336
|
+
constexpr auto eval_subtract(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void { result -= x; }
|
|
1337
|
+
template <typename FloatingPointType>
|
|
1338
|
+
constexpr auto eval_subtract(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void { result = cpp_double_fp_backend<FloatingPointType>(a) -= b; }
|
|
1339
|
+
template <typename FloatingPointType>
|
|
1340
|
+
constexpr auto eval_multiply(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void { result *= x; }
|
|
1341
|
+
template <typename FloatingPointType>
|
|
1342
|
+
constexpr auto eval_multiply(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void { result = cpp_double_fp_backend<FloatingPointType>(a) *= b; }
|
|
1343
|
+
template <typename FloatingPointType>
|
|
1344
|
+
constexpr auto eval_divide(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void { result /= x; }
|
|
1345
|
+
template <typename FloatingPointType>
|
|
1346
|
+
constexpr auto eval_divide(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> void { result = cpp_double_fp_backend<FloatingPointType>(a) /= b; }
|
|
1347
|
+
template <typename FloatingPointType>
|
|
1348
|
+
constexpr auto eval_eq(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> bool { return (a.compare(b) == 0); }
|
|
1349
|
+
template <typename FloatingPointType>
|
|
1350
|
+
constexpr auto eval_lt(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> bool { return (a.compare(b) == -1); }
|
|
1351
|
+
template <typename FloatingPointType>
|
|
1352
|
+
constexpr auto eval_gt(const cpp_double_fp_backend<FloatingPointType>& a, const cpp_double_fp_backend<FloatingPointType>& b) -> bool { return (a.compare(b) == 1); }
|
|
1353
|
+
template <typename FloatingPointType>
|
|
1354
|
+
|
|
1355
|
+
constexpr auto eval_is_zero(const cpp_double_fp_backend<FloatingPointType>& x) -> bool
|
|
1356
|
+
{
|
|
1357
|
+
return x.iszero_unchecked();
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
template <typename FloatingPointType>
|
|
1361
|
+
constexpr auto eval_signbit(const cpp_double_fp_backend<FloatingPointType>& x) -> int
|
|
1362
|
+
{
|
|
1363
|
+
return (x.isneg_unchecked() ? 1 : 0);
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
template <typename FloatingPointType>
|
|
1367
|
+
constexpr auto eval_fabs(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a) -> void
|
|
1368
|
+
{
|
|
1369
|
+
result = a;
|
|
1370
|
+
|
|
1371
|
+
if (a.isneg_unchecked())
|
|
1372
|
+
{
|
|
1373
|
+
result.negate();
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
template <typename FloatingPointType>
|
|
1378
|
+
constexpr auto eval_frexp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, int* v) -> void
|
|
1379
|
+
{
|
|
1380
|
+
using local_backend_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1381
|
+
using local_float_type = typename local_backend_type::float_type;
|
|
1382
|
+
|
|
1383
|
+
int expptr { };
|
|
1384
|
+
|
|
1385
|
+
const local_float_type fhi { cpp_df_qf_detail::ccmath::frexp(a.rep().first, &expptr) };
|
|
1386
|
+
const local_float_type flo { cpp_df_qf_detail::ccmath::ldexp(a.rep().second, -expptr) };
|
|
1387
|
+
|
|
1388
|
+
if (v != nullptr)
|
|
1389
|
+
{
|
|
1390
|
+
*v = expptr;
|
|
1391
|
+
}
|
|
1392
|
+
|
|
1393
|
+
result.rep() = local_backend_type::arithmetic::normalize(fhi, flo);
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
template <typename FloatingPointType>
|
|
1397
|
+
constexpr auto eval_ldexp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& a, int v) -> void
|
|
1398
|
+
{
|
|
1399
|
+
using local_backend_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1400
|
+
using local_float_type = typename local_backend_type::float_type;
|
|
1401
|
+
|
|
1402
|
+
const local_float_type fhi { cpp_df_qf_detail::ccmath::ldexp(a.crep().first, v) };
|
|
1403
|
+
const local_float_type flo { cpp_df_qf_detail::ccmath::ldexp(a.crep().second, v) };
|
|
1404
|
+
|
|
1405
|
+
result.rep() = local_backend_type::arithmetic::normalize(fhi, flo);
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
template <typename FloatingPointType>
|
|
1409
|
+
constexpr auto eval_floor(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void
|
|
1410
|
+
{
|
|
1411
|
+
using local_backend_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1412
|
+
using local_float_type = typename local_backend_type::float_type;
|
|
1413
|
+
|
|
1414
|
+
const local_float_type fhi { cpp_df_qf_detail::ccmath::floor(x.my_first()) };
|
|
1415
|
+
|
|
1416
|
+
if (fhi != x.my_first())
|
|
1417
|
+
{
|
|
1418
|
+
result.rep().first = fhi;
|
|
1419
|
+
result.rep().second = local_float_type { 0 };
|
|
1420
|
+
}
|
|
1421
|
+
else
|
|
1422
|
+
{
|
|
1423
|
+
const local_float_type flo = { cpp_df_qf_detail::ccmath::floor(x.my_second()) };
|
|
1424
|
+
|
|
1425
|
+
result.rep() = local_backend_type::arithmetic::normalize(fhi, flo);
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
template <typename FloatingPointType>
|
|
1430
|
+
constexpr auto eval_ceil(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void
|
|
1431
|
+
{
|
|
1432
|
+
// Compute -floor(-x);
|
|
1433
|
+
eval_floor(result, -x);
|
|
1434
|
+
|
|
1435
|
+
result.negate();
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
template <typename FloatingPointType>
|
|
1439
|
+
constexpr auto eval_fpclassify(const cpp_double_fp_backend<FloatingPointType>& o) -> int
|
|
1440
|
+
{
|
|
1441
|
+
if (cpp_df_qf_detail::ccmath::isnan(o.crep().first)) { return FP_NAN; }
|
|
1442
|
+
else if (cpp_df_qf_detail::ccmath::isinf(o.crep().first)) { return FP_INFINITE; }
|
|
1443
|
+
else if (eval_is_zero(o)) { return FP_ZERO; }
|
|
1444
|
+
else
|
|
1445
|
+
{
|
|
1446
|
+
using local_backend_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1447
|
+
using local_float_type = typename local_backend_type::float_type;
|
|
1448
|
+
|
|
1449
|
+
const local_float_type fabs_x { cpp_df_qf_detail::ccmath::fabs(o.crep().first) };
|
|
1450
|
+
|
|
1451
|
+
if ((fabs_x > 0) && (fabs_x < (cpp_df_qf_detail::ccmath::numeric_limits<local_float_type>::min)()))
|
|
1452
|
+
{
|
|
1453
|
+
return FP_SUBNORMAL;
|
|
1454
|
+
}
|
|
1455
|
+
else
|
|
1456
|
+
{
|
|
1457
|
+
return FP_NORMAL;
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
template <typename FloatingPointType>
|
|
1463
|
+
constexpr auto eval_sqrt(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& o) -> void
|
|
1464
|
+
{
|
|
1465
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1466
|
+
using local_float_type = typename double_float_type::float_type;
|
|
1467
|
+
|
|
1468
|
+
const int fpc { eval_fpclassify(o) };
|
|
1469
|
+
|
|
1470
|
+
const bool isneg_o { o.isneg_unchecked() };
|
|
1471
|
+
|
|
1472
|
+
if ((fpc != FP_NORMAL) || isneg_o)
|
|
1473
|
+
{
|
|
1474
|
+
if (fpc == FP_ZERO)
|
|
1475
|
+
{
|
|
1476
|
+
result = double_float_type(0);
|
|
1477
|
+
|
|
1478
|
+
return;
|
|
1479
|
+
}
|
|
1480
|
+
else if ((fpc == FP_NAN) || isneg_o)
|
|
1481
|
+
{
|
|
1482
|
+
result = double_float_type::my_value_nan();
|
|
1483
|
+
|
|
1484
|
+
return;
|
|
1485
|
+
}
|
|
1486
|
+
else if (fpc == FP_INFINITE)
|
|
1487
|
+
{
|
|
1488
|
+
result = double_float_type::my_value_inf();
|
|
1489
|
+
|
|
1490
|
+
return;
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
// TBD: Do we need any overflow/underflow guards when multiplying
|
|
1495
|
+
// by the split or when multiplying (hx * tx) and/or (hx * hx)?
|
|
1496
|
+
|
|
1497
|
+
const local_float_type c { cpp_df_qf_detail::ccmath::sqrt(o.crep().first) };
|
|
1498
|
+
|
|
1499
|
+
local_float_type p { cpp_df_qf_detail::split_maker<local_float_type>::value * c };
|
|
1500
|
+
|
|
1501
|
+
const local_float_type hx { local_float_type { c - p } + p };
|
|
1502
|
+
const local_float_type tx { c - hx };
|
|
1503
|
+
|
|
1504
|
+
local_float_type q = hx * tx;
|
|
1505
|
+
|
|
1506
|
+
q = q + q;
|
|
1507
|
+
|
|
1508
|
+
p = hx * hx;
|
|
1509
|
+
|
|
1510
|
+
const local_float_type u { p + q };
|
|
1511
|
+
|
|
1512
|
+
const local_float_type uu { cpp_df_qf_detail::ccmath::unsafe::fma(tx, tx, local_float_type { p - u } + q) };
|
|
1513
|
+
|
|
1514
|
+
const local_float_type
|
|
1515
|
+
cc
|
|
1516
|
+
{
|
|
1517
|
+
local_float_type { local_float_type { o.crep().first - u } - uu + o.crep().second } / local_float_type { c + c }
|
|
1518
|
+
};
|
|
1519
|
+
|
|
1520
|
+
result.rep().first = c + cc;
|
|
1521
|
+
result.rep().second = local_float_type { c - result.my_first() } + cc;
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
template <typename FloatingPointType>
|
|
1525
|
+
constexpr auto eval_pow(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x, const cpp_double_fp_backend<FloatingPointType>& a) -> void
|
|
1526
|
+
{
|
|
1527
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1528
|
+
|
|
1529
|
+
constexpr double_float_type zero { 0 };
|
|
1530
|
+
|
|
1531
|
+
result = zero;
|
|
1532
|
+
|
|
1533
|
+
signed long long val_nll { };
|
|
1534
|
+
|
|
1535
|
+
eval_convert_to(&val_nll, a);
|
|
1536
|
+
|
|
1537
|
+
const int na { static_cast<int>(val_nll) };
|
|
1538
|
+
|
|
1539
|
+
const int fpc_a { eval_fpclassify(a) };
|
|
1540
|
+
|
|
1541
|
+
if((fpc_a == FP_NORMAL) && (a.compare(double_float_type(na)) == 0))
|
|
1542
|
+
{
|
|
1543
|
+
eval_pow(result, x, na);
|
|
1544
|
+
}
|
|
1545
|
+
else
|
|
1546
|
+
{
|
|
1547
|
+
constexpr double_float_type one { 1 };
|
|
1548
|
+
|
|
1549
|
+
const int fpc_x { eval_fpclassify(x) };
|
|
1550
|
+
|
|
1551
|
+
if (fpc_a == FP_ZERO)
|
|
1552
|
+
{
|
|
1553
|
+
// pow(base, +/-0) returns 1 for any base, even when base is NaN.
|
|
1554
|
+
|
|
1555
|
+
result = one;
|
|
1556
|
+
}
|
|
1557
|
+
else if (fpc_x == FP_ZERO)
|
|
1558
|
+
{
|
|
1559
|
+
if ((fpc_a == FP_NORMAL) || (fpc_a == FP_INFINITE))
|
|
1560
|
+
{
|
|
1561
|
+
// pow(+/-0, exp), where exp is negative and finite, returns +infinity.
|
|
1562
|
+
// pow(+/-0, exp), where exp is positive non-integer, returns +0.
|
|
1563
|
+
|
|
1564
|
+
// pow(+/-0, -infinity) returns +infinity.
|
|
1565
|
+
// pow(+/-0, +infinity) returns +0.
|
|
1566
|
+
|
|
1567
|
+
result = (eval_signbit(a) ? double_float_type::my_value_inf() : zero);
|
|
1568
|
+
}
|
|
1569
|
+
else if (fpc_a == FP_NAN)
|
|
1570
|
+
{
|
|
1571
|
+
result = double_float_type::my_value_nan();
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1574
|
+
else if (fpc_x == FP_INFINITE)
|
|
1575
|
+
{
|
|
1576
|
+
if ((fpc_a == FP_NORMAL) || (fpc_a == FP_INFINITE))
|
|
1577
|
+
{
|
|
1578
|
+
// pow(+infinity, exp) returns +0 for any negative exp.
|
|
1579
|
+
// pow(-infinity, exp) returns +infinity for any positive exp.
|
|
1580
|
+
|
|
1581
|
+
result = (eval_signbit(a) ? zero : double_float_type::my_value_inf());
|
|
1582
|
+
}
|
|
1583
|
+
else if (fpc_a == FP_NAN)
|
|
1584
|
+
{
|
|
1585
|
+
result = double_float_type::my_value_nan();
|
|
1586
|
+
}
|
|
1587
|
+
}
|
|
1588
|
+
else if (fpc_x != FP_NORMAL)
|
|
1589
|
+
{
|
|
1590
|
+
result = x;
|
|
1591
|
+
}
|
|
1592
|
+
else
|
|
1593
|
+
{
|
|
1594
|
+
if (fpc_a == FP_INFINITE)
|
|
1595
|
+
{
|
|
1596
|
+
constexpr double_float_type one_minus { -1 };
|
|
1597
|
+
|
|
1598
|
+
if (x.compare(one_minus) == 0)
|
|
1599
|
+
{
|
|
1600
|
+
result = one;
|
|
1601
|
+
}
|
|
1602
|
+
else
|
|
1603
|
+
{
|
|
1604
|
+
double_float_type xabs { };
|
|
1605
|
+
|
|
1606
|
+
eval_fabs(xabs, x);
|
|
1607
|
+
|
|
1608
|
+
const int compare_one_result { xabs.compare(one) };
|
|
1609
|
+
|
|
1610
|
+
result =
|
|
1611
|
+
(
|
|
1612
|
+
(compare_one_result < 0) ? (eval_signbit(a) ? double_float_type::my_value_inf() : zero)
|
|
1613
|
+
: (compare_one_result > 0) ? (eval_signbit(a) ? zero : double_float_type::my_value_inf())
|
|
1614
|
+
: one
|
|
1615
|
+
);
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
else if (fpc_a == FP_NAN)
|
|
1619
|
+
{
|
|
1620
|
+
result = (x.compare(one) == 0) ? one : double_float_type::my_value_nan();
|
|
1621
|
+
}
|
|
1622
|
+
else
|
|
1623
|
+
{
|
|
1624
|
+
double_float_type log_x { };
|
|
1625
|
+
|
|
1626
|
+
eval_log(log_x, x);
|
|
1627
|
+
|
|
1628
|
+
double_float_type a_log_x { };
|
|
1629
|
+
|
|
1630
|
+
eval_multiply(a_log_x, a, log_x);
|
|
1631
|
+
|
|
1632
|
+
eval_exp(result, a_log_x);
|
|
1633
|
+
}
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
template <typename FloatingPointType,
|
|
1639
|
+
typename IntegralType>
|
|
1640
|
+
constexpr auto eval_pow(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x, IntegralType p) -> typename ::std::enable_if<::boost::multiprecision::detail::is_integral<IntegralType>::value, void>::type
|
|
1641
|
+
{
|
|
1642
|
+
const int fpc { eval_fpclassify(x) };
|
|
1643
|
+
|
|
1644
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1645
|
+
|
|
1646
|
+
using local_integral_type = IntegralType;
|
|
1647
|
+
|
|
1648
|
+
const bool p_is_odd { (static_cast<local_integral_type>(p & 1) != static_cast<local_integral_type>(0)) };
|
|
1649
|
+
|
|
1650
|
+
if (p == static_cast<local_integral_type>(0))
|
|
1651
|
+
{
|
|
1652
|
+
// pow(base, +/-0) returns 1 for any base, even when base is NaN.
|
|
1653
|
+
|
|
1654
|
+
result = double_float_type { unsigned { UINT8_C(1) } };
|
|
1655
|
+
}
|
|
1656
|
+
else if (fpc != FP_NORMAL)
|
|
1657
|
+
{
|
|
1658
|
+
if (fpc == FP_ZERO)
|
|
1659
|
+
{
|
|
1660
|
+
// pow( +0, exp), where exp is a negative odd integer, returns +infinity.
|
|
1661
|
+
// pow( -0, exp), where exp is a negative odd integer, returns +infinity.
|
|
1662
|
+
// pow(+/-0, exp), where exp is a negative even integer, returns +infinity.
|
|
1663
|
+
|
|
1664
|
+
// pow( +0, exp), where exp is a positive odd integer, returns +0.
|
|
1665
|
+
// pow( -0, exp), where exp is a positive odd integer, returns -0.
|
|
1666
|
+
// pow(+/-0, exp), where exp is a positive even integer, returns +0.
|
|
1667
|
+
|
|
1668
|
+
result = ((p < static_cast<local_integral_type>(0)) ? double_float_type::my_value_inf() : double_float_type { unsigned { UINT8_C(0) } });
|
|
1669
|
+
}
|
|
1670
|
+
else if (fpc == FP_INFINITE)
|
|
1671
|
+
{
|
|
1672
|
+
if (eval_signbit(x))
|
|
1673
|
+
{
|
|
1674
|
+
if (p < static_cast<local_integral_type>(0))
|
|
1675
|
+
{
|
|
1676
|
+
// pow(-infinity, exp) returns -0 if exp is a negative odd integer.
|
|
1677
|
+
// pow(-infinity, exp) returns +0 if exp is a negative even integer.
|
|
1678
|
+
|
|
1679
|
+
result = double_float_type { unsigned { UINT8_C(0) } };
|
|
1680
|
+
}
|
|
1681
|
+
else
|
|
1682
|
+
{
|
|
1683
|
+
// pow(-infinity, exp) returns -infinity if exp is a positive odd integer.
|
|
1684
|
+
// pow(-infinity, exp) returns +infinity if exp is a positive even integer.
|
|
1685
|
+
|
|
1686
|
+
result = (p_is_odd ? -double_float_type::my_value_inf() : double_float_type::my_value_inf());
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
else
|
|
1690
|
+
{
|
|
1691
|
+
// pow(+infinity, exp) returns +0 for any negative exp.
|
|
1692
|
+
// pow(+infinity, exp) returns +infinity for any positive exp.
|
|
1693
|
+
|
|
1694
|
+
result = ((p < static_cast<local_integral_type>(0)) ? double_float_type { unsigned { UINT8_C(0) } } : double_float_type::my_value_inf());
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
else
|
|
1698
|
+
{
|
|
1699
|
+
result = double_float_type::my_value_nan();
|
|
1700
|
+
}
|
|
1701
|
+
}
|
|
1702
|
+
else
|
|
1703
|
+
{
|
|
1704
|
+
double_float_type::pown(result, x, p);
|
|
1705
|
+
}
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
template <typename FloatingPointType,
|
|
1709
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<FloatingPointType>::value && ((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) < 16))>::type const*>
|
|
1710
|
+
constexpr auto eval_exp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void
|
|
1711
|
+
{
|
|
1712
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1713
|
+
|
|
1714
|
+
constexpr double_float_type one { 1 };
|
|
1715
|
+
|
|
1716
|
+
const int fpc { eval_fpclassify(x) };
|
|
1717
|
+
|
|
1718
|
+
const bool b_neg { x.isneg_unchecked() };
|
|
1719
|
+
|
|
1720
|
+
if (fpc == FP_ZERO)
|
|
1721
|
+
{
|
|
1722
|
+
result = one;
|
|
1723
|
+
}
|
|
1724
|
+
else if (fpc != FP_NORMAL)
|
|
1725
|
+
{
|
|
1726
|
+
if (fpc == FP_INFINITE)
|
|
1727
|
+
{
|
|
1728
|
+
result = (b_neg ? double_float_type { 0.0F } : double_float_type::my_value_inf());
|
|
1729
|
+
}
|
|
1730
|
+
else if (fpc == FP_NAN)
|
|
1731
|
+
{
|
|
1732
|
+
result = x;
|
|
1733
|
+
}
|
|
1734
|
+
}
|
|
1735
|
+
else
|
|
1736
|
+
{
|
|
1737
|
+
using local_float_type = typename double_float_type::float_type;
|
|
1738
|
+
|
|
1739
|
+
// Get a local copy of the argument and force it to be positive.
|
|
1740
|
+
const double_float_type xx { (!b_neg) ? x : -x };
|
|
1741
|
+
|
|
1742
|
+
// Check the range of the input.
|
|
1743
|
+
if (eval_lt(x, double_float_type::my_value_logmin()))
|
|
1744
|
+
{
|
|
1745
|
+
result = double_float_type(0U);
|
|
1746
|
+
}
|
|
1747
|
+
else if (eval_gt(xx, double_float_type::my_value_logmax()))
|
|
1748
|
+
{
|
|
1749
|
+
result = double_float_type::my_value_inf();
|
|
1750
|
+
}
|
|
1751
|
+
else if (xx.is_one())
|
|
1752
|
+
{
|
|
1753
|
+
if(!b_neg)
|
|
1754
|
+
{
|
|
1755
|
+
result = cpp_df_qf_detail::constant_df_exp1<local_float_type>();
|
|
1756
|
+
}
|
|
1757
|
+
else
|
|
1758
|
+
{
|
|
1759
|
+
eval_divide(result, one, cpp_df_qf_detail::constant_df_exp1<local_float_type>());
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
else
|
|
1763
|
+
{
|
|
1764
|
+
// Use an argument reduction algorithm for exp() in classic MPFUN-style.
|
|
1765
|
+
|
|
1766
|
+
double_float_type nf { };
|
|
1767
|
+
|
|
1768
|
+
// Prepare the scaled variables.
|
|
1769
|
+
const bool b_scale { (xx.order02() > -1) };
|
|
1770
|
+
|
|
1771
|
+
double_float_type r { };
|
|
1772
|
+
|
|
1773
|
+
if (b_scale)
|
|
1774
|
+
{
|
|
1775
|
+
eval_floor(nf, xx / cpp_df_qf_detail::constant_df_ln_two<local_float_type>());
|
|
1776
|
+
|
|
1777
|
+
eval_ldexp(r, xx - (nf * cpp_df_qf_detail::constant_df_ln_two<local_float_type>()), -2);
|
|
1778
|
+
}
|
|
1779
|
+
else
|
|
1780
|
+
{
|
|
1781
|
+
r = xx;
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
// PadeApproximant[Exp[x] - 1, {x, 0, {6, 6}}]
|
|
1785
|
+
// FullSimplify[%]
|
|
1786
|
+
// (84 x (7920 + 240 x^2 + x^4))
|
|
1787
|
+
// / (665280 + x (-332640 + x (75600 + x (-10080 + x (840 + (-42 + x) x)))))
|
|
1788
|
+
|
|
1789
|
+
constexpr double_float_type n84(84);
|
|
1790
|
+
constexpr double_float_type n240(240);
|
|
1791
|
+
constexpr double_float_type n7920(7920);
|
|
1792
|
+
|
|
1793
|
+
constexpr double_float_type n665280(665280);
|
|
1794
|
+
constexpr double_float_type n332640(332640);
|
|
1795
|
+
constexpr double_float_type n75600(75600);
|
|
1796
|
+
constexpr double_float_type n10080(10080);
|
|
1797
|
+
constexpr double_float_type n840(840);
|
|
1798
|
+
constexpr double_float_type n42(42);
|
|
1799
|
+
|
|
1800
|
+
const double_float_type r2 { r * r };
|
|
1801
|
+
|
|
1802
|
+
// Use the small-argument Pade approximation having coefficients shown above.
|
|
1803
|
+
result = (n84 * r * (n7920 + (n240 + r2) * r2));
|
|
1804
|
+
const double_float_type bot = (n665280 + r * (-n332640 + r * (n75600 + r * (-n10080 + r * (n840 + (-n42 + r) * r)))));
|
|
1805
|
+
|
|
1806
|
+
eval_divide(result, bot);
|
|
1807
|
+
result.add_unchecked_limb(local_float_type { 1.0F });
|
|
1808
|
+
|
|
1809
|
+
// Rescale the result.
|
|
1810
|
+
if (b_scale)
|
|
1811
|
+
{
|
|
1812
|
+
result *= result;
|
|
1813
|
+
result *= result;
|
|
1814
|
+
|
|
1815
|
+
signed long long lln { };
|
|
1816
|
+
|
|
1817
|
+
eval_convert_to(&lln, nf);
|
|
1818
|
+
|
|
1819
|
+
const int n { static_cast<int>(lln) };
|
|
1820
|
+
|
|
1821
|
+
if (n > 0)
|
|
1822
|
+
{
|
|
1823
|
+
eval_ldexp(result, result, n);
|
|
1824
|
+
}
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1827
|
+
if (b_neg)
|
|
1828
|
+
{
|
|
1829
|
+
eval_divide(result, one, result);
|
|
1830
|
+
}
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1835
|
+
template <typename FloatingPointType,
|
|
1836
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<FloatingPointType>::value && (((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) >= 16) && ((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) <= 36)))>::type const*>
|
|
1837
|
+
constexpr auto eval_exp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void
|
|
1838
|
+
{
|
|
1839
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1840
|
+
|
|
1841
|
+
constexpr double_float_type one { 1 };
|
|
1842
|
+
|
|
1843
|
+
const int fpc { eval_fpclassify(x) };
|
|
1844
|
+
|
|
1845
|
+
const bool b_neg { x.isneg_unchecked() };
|
|
1846
|
+
|
|
1847
|
+
if (fpc == FP_ZERO)
|
|
1848
|
+
{
|
|
1849
|
+
result = one;
|
|
1850
|
+
}
|
|
1851
|
+
else if (fpc != FP_NORMAL)
|
|
1852
|
+
{
|
|
1853
|
+
if (fpc == FP_INFINITE)
|
|
1854
|
+
{
|
|
1855
|
+
result = (b_neg ? double_float_type(0) : double_float_type::my_value_inf());
|
|
1856
|
+
}
|
|
1857
|
+
else if (fpc == FP_NAN)
|
|
1858
|
+
{
|
|
1859
|
+
result = x;
|
|
1860
|
+
}
|
|
1861
|
+
}
|
|
1862
|
+
else
|
|
1863
|
+
{
|
|
1864
|
+
using local_float_type = typename double_float_type::float_type;
|
|
1865
|
+
|
|
1866
|
+
// Get a local copy of the argument and force it to be positive.
|
|
1867
|
+
const double_float_type xx { (!b_neg) ? x : -x };
|
|
1868
|
+
|
|
1869
|
+
// Check the range of the input.
|
|
1870
|
+
if (eval_lt(x, double_float_type::my_value_logmin()))
|
|
1871
|
+
{
|
|
1872
|
+
result = double_float_type(0U);
|
|
1873
|
+
}
|
|
1874
|
+
else if (eval_gt(xx, double_float_type::my_value_logmax()))
|
|
1875
|
+
{
|
|
1876
|
+
result = double_float_type::my_value_inf();
|
|
1877
|
+
}
|
|
1878
|
+
else if (xx.is_one())
|
|
1879
|
+
{
|
|
1880
|
+
if(!b_neg)
|
|
1881
|
+
{
|
|
1882
|
+
result = cpp_df_qf_detail::constant_df_exp1<local_float_type>();
|
|
1883
|
+
}
|
|
1884
|
+
else
|
|
1885
|
+
{
|
|
1886
|
+
eval_divide(result, one, cpp_df_qf_detail::constant_df_exp1<local_float_type>());
|
|
1887
|
+
}
|
|
1888
|
+
}
|
|
1889
|
+
else
|
|
1890
|
+
{
|
|
1891
|
+
// Use an argument reduction algorithm for exp() in classic MPFUN-style.
|
|
1892
|
+
|
|
1893
|
+
double_float_type nf { };
|
|
1894
|
+
|
|
1895
|
+
// Prepare the scaled variables.
|
|
1896
|
+
const bool b_scale { (xx.order02() > -4) };
|
|
1897
|
+
|
|
1898
|
+
double_float_type r { };
|
|
1899
|
+
|
|
1900
|
+
if (b_scale)
|
|
1901
|
+
{
|
|
1902
|
+
eval_floor(nf, xx / cpp_df_qf_detail::constant_df_ln_two<local_float_type>());
|
|
1903
|
+
|
|
1904
|
+
eval_ldexp(r, xx - (nf * cpp_df_qf_detail::constant_df_ln_two<local_float_type>()), -4);
|
|
1905
|
+
}
|
|
1906
|
+
else
|
|
1907
|
+
{
|
|
1908
|
+
r = xx;
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1911
|
+
// PadeApproximant[Exp[r], {r, 0, 8, 8}]
|
|
1912
|
+
// FullSimplify[%]
|
|
1913
|
+
|
|
1914
|
+
constexpr double_float_type n144(144U);
|
|
1915
|
+
constexpr double_float_type n3603600(3603600UL);
|
|
1916
|
+
constexpr double_float_type n120120(120120UL);
|
|
1917
|
+
constexpr double_float_type n770(770U);
|
|
1918
|
+
|
|
1919
|
+
constexpr double_float_type n518918400(518918400UL);
|
|
1920
|
+
constexpr double_float_type n259459200(259459200UL);
|
|
1921
|
+
constexpr double_float_type n60540480(60540480UL);
|
|
1922
|
+
constexpr double_float_type n8648640(8648640UL);
|
|
1923
|
+
constexpr double_float_type n831600(831600UL);
|
|
1924
|
+
constexpr double_float_type n55440(55440U);
|
|
1925
|
+
constexpr double_float_type n2520(2520U);
|
|
1926
|
+
constexpr double_float_type n72(72U);
|
|
1927
|
+
|
|
1928
|
+
const double_float_type r2 { r * r };
|
|
1929
|
+
|
|
1930
|
+
result = (n144 * r) * (n3603600 + r2 * (n120120 + r2 * (n770 + r2)));
|
|
1931
|
+
const double_float_type bot = (n518918400 + r * (-n259459200 + r * (n60540480 + r * (-n8648640 + r * (n831600 + r * (-n55440 + r * (n2520 + r * (-n72 + r))))))));
|
|
1932
|
+
|
|
1933
|
+
eval_divide(result, bot);
|
|
1934
|
+
result.add_unchecked_limb(local_float_type { 1.0F });
|
|
1935
|
+
|
|
1936
|
+
// Rescale the result.
|
|
1937
|
+
if (b_scale)
|
|
1938
|
+
{
|
|
1939
|
+
result *= result;
|
|
1940
|
+
result *= result;
|
|
1941
|
+
result *= result;
|
|
1942
|
+
result *= result;
|
|
1943
|
+
|
|
1944
|
+
signed long long lln { };
|
|
1945
|
+
|
|
1946
|
+
eval_convert_to(&lln, nf);
|
|
1947
|
+
|
|
1948
|
+
const int n { static_cast<int>(lln) };
|
|
1949
|
+
|
|
1950
|
+
if (n > 0)
|
|
1951
|
+
{
|
|
1952
|
+
eval_ldexp(result, result, n);
|
|
1953
|
+
}
|
|
1954
|
+
}
|
|
1955
|
+
|
|
1956
|
+
if (b_neg)
|
|
1957
|
+
{
|
|
1958
|
+
eval_divide(result, one, result);
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
}
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
template <typename FloatingPointType,
|
|
1965
|
+
typename ::std::enable_if<(cpp_df_qf_detail::is_floating_point<FloatingPointType>::value && ((cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits10 * 2) > 36))>::type const*>
|
|
1966
|
+
constexpr auto eval_exp(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void
|
|
1967
|
+
{
|
|
1968
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
1969
|
+
|
|
1970
|
+
constexpr double_float_type one { 1 };
|
|
1971
|
+
|
|
1972
|
+
const int fpc { eval_fpclassify(x) };
|
|
1973
|
+
|
|
1974
|
+
const bool b_neg { x.isneg_unchecked() };
|
|
1975
|
+
|
|
1976
|
+
if (fpc == FP_ZERO)
|
|
1977
|
+
{
|
|
1978
|
+
result = one;
|
|
1979
|
+
}
|
|
1980
|
+
else if (fpc != FP_NORMAL)
|
|
1981
|
+
{
|
|
1982
|
+
if (fpc == FP_INFINITE)
|
|
1983
|
+
{
|
|
1984
|
+
result = (b_neg ? double_float_type(0) : double_float_type::my_value_inf());
|
|
1985
|
+
}
|
|
1986
|
+
else if (fpc == FP_NAN)
|
|
1987
|
+
{
|
|
1988
|
+
result = x;
|
|
1989
|
+
}
|
|
1990
|
+
}
|
|
1991
|
+
else
|
|
1992
|
+
{
|
|
1993
|
+
using local_float_type = typename double_float_type::float_type;
|
|
1994
|
+
|
|
1995
|
+
// Get a local copy of the argument and force it to be positive.
|
|
1996
|
+
const double_float_type xx { (!b_neg) ? x : -x };
|
|
1997
|
+
|
|
1998
|
+
// Check the range of the input.
|
|
1999
|
+
if (eval_lt(x, double_float_type::my_value_logmin()))
|
|
2000
|
+
{
|
|
2001
|
+
result = double_float_type(0U);
|
|
2002
|
+
}
|
|
2003
|
+
else if (eval_gt(xx, double_float_type::my_value_logmax()))
|
|
2004
|
+
{
|
|
2005
|
+
result = double_float_type::my_value_inf();
|
|
2006
|
+
}
|
|
2007
|
+
else if (xx.is_one())
|
|
2008
|
+
{
|
|
2009
|
+
if(!b_neg)
|
|
2010
|
+
{
|
|
2011
|
+
result = cpp_df_qf_detail::constant_df_exp1<local_float_type>();
|
|
2012
|
+
}
|
|
2013
|
+
else
|
|
2014
|
+
{
|
|
2015
|
+
eval_divide(result, one, cpp_df_qf_detail::constant_df_exp1<local_float_type>());
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
else
|
|
2019
|
+
{
|
|
2020
|
+
// Use an argument reduction algorithm for exp() in classic MPFUN-style.
|
|
2021
|
+
|
|
2022
|
+
double_float_type nf { };
|
|
2023
|
+
|
|
2024
|
+
// Prepare the scaled variables.
|
|
2025
|
+
const bool b_scale { (xx.order02() > -4) };
|
|
2026
|
+
|
|
2027
|
+
double_float_type xh { };
|
|
2028
|
+
|
|
2029
|
+
if (b_scale)
|
|
2030
|
+
{
|
|
2031
|
+
eval_floor(nf, xx / cpp_df_qf_detail::constant_df_ln_two<local_float_type>());
|
|
2032
|
+
|
|
2033
|
+
eval_ldexp(xh, xx - (nf * cpp_df_qf_detail::constant_df_ln_two<local_float_type>()), -4);
|
|
2034
|
+
}
|
|
2035
|
+
else
|
|
2036
|
+
{
|
|
2037
|
+
xh = xx;
|
|
2038
|
+
}
|
|
2039
|
+
|
|
2040
|
+
double_float_type x_pow_n_div_n_fact(xh);
|
|
2041
|
+
|
|
2042
|
+
result = x_pow_n_div_n_fact;
|
|
2043
|
+
result.add_unchecked_limb(local_float_type { 1.0F });
|
|
2044
|
+
|
|
2045
|
+
double_float_type dummy { };
|
|
2046
|
+
|
|
2047
|
+
// Use the Taylor series expansion of hypergeometric_0f0(; ; x).
|
|
2048
|
+
// For this high(er) digit count, a scaled argument with subsequent
|
|
2049
|
+
// Taylor series expansion is actually more precise than Pade approximation.
|
|
2050
|
+
for (unsigned n { UINT8_C(2) }; n < unsigned { UINT8_C(64) }; ++n)
|
|
2051
|
+
{
|
|
2052
|
+
eval_multiply(x_pow_n_div_n_fact, xh);
|
|
2053
|
+
|
|
2054
|
+
eval_divide(x_pow_n_div_n_fact, double_float_type(n));
|
|
2055
|
+
|
|
2056
|
+
int n_tol { };
|
|
2057
|
+
|
|
2058
|
+
eval_frexp(dummy, x_pow_n_div_n_fact, &n_tol);
|
|
2059
|
+
|
|
2060
|
+
if ((n > 4U) && (n_tol < -(double_float_type::my_digits - 1)))
|
|
2061
|
+
{
|
|
2062
|
+
break;
|
|
2063
|
+
}
|
|
2064
|
+
|
|
2065
|
+
eval_add(result, x_pow_n_div_n_fact);
|
|
2066
|
+
}
|
|
2067
|
+
|
|
2068
|
+
// Rescale the result.
|
|
2069
|
+
if (b_scale)
|
|
2070
|
+
{
|
|
2071
|
+
result *= result;
|
|
2072
|
+
result *= result;
|
|
2073
|
+
result *= result;
|
|
2074
|
+
result *= result;
|
|
2075
|
+
|
|
2076
|
+
signed long long lln { };
|
|
2077
|
+
|
|
2078
|
+
eval_convert_to(&lln, nf);
|
|
2079
|
+
|
|
2080
|
+
const int n { static_cast<int>(lln) };
|
|
2081
|
+
|
|
2082
|
+
if (n > 0)
|
|
2083
|
+
{
|
|
2084
|
+
eval_ldexp(result, result, n);
|
|
2085
|
+
}
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2088
|
+
if (b_neg)
|
|
2089
|
+
{
|
|
2090
|
+
eval_divide(result, one, result);
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2093
|
+
}
|
|
2094
|
+
}
|
|
2095
|
+
|
|
2096
|
+
template <typename FloatingPointType>
|
|
2097
|
+
constexpr auto eval_log(cpp_double_fp_backend<FloatingPointType>& result, const cpp_double_fp_backend<FloatingPointType>& x) -> void
|
|
2098
|
+
{
|
|
2099
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2100
|
+
|
|
2101
|
+
constexpr double_float_type one { 1 };
|
|
2102
|
+
|
|
2103
|
+
const int result_compare_with_one { x.compare(one) };
|
|
2104
|
+
|
|
2105
|
+
const int fpc { eval_fpclassify(x) };
|
|
2106
|
+
|
|
2107
|
+
if (fpc == FP_ZERO)
|
|
2108
|
+
{
|
|
2109
|
+
result = -double_float_type::my_value_inf();
|
|
2110
|
+
}
|
|
2111
|
+
else if (x.isneg_unchecked() || (fpc == FP_NAN))
|
|
2112
|
+
{
|
|
2113
|
+
result = double_float_type::my_value_nan();
|
|
2114
|
+
}
|
|
2115
|
+
else if (fpc == FP_INFINITE)
|
|
2116
|
+
{
|
|
2117
|
+
result = double_float_type::my_value_inf();
|
|
2118
|
+
}
|
|
2119
|
+
else if (result_compare_with_one == -1)
|
|
2120
|
+
{
|
|
2121
|
+
// Use argument inversion and negation of the result.
|
|
2122
|
+
|
|
2123
|
+
double_float_type x_inv { };
|
|
2124
|
+
|
|
2125
|
+
eval_divide(x_inv, one, x);
|
|
2126
|
+
eval_log(result, x_inv);
|
|
2127
|
+
|
|
2128
|
+
result.negate();
|
|
2129
|
+
}
|
|
2130
|
+
else if (result_compare_with_one == 1)
|
|
2131
|
+
{
|
|
2132
|
+
// Optimize to only use eval_frexp if (and only if) the exponent is
|
|
2133
|
+
// actually large/small in the sense of above/below a defined cutoff.
|
|
2134
|
+
|
|
2135
|
+
double_float_type x2 { };
|
|
2136
|
+
|
|
2137
|
+
int n2 { };
|
|
2138
|
+
|
|
2139
|
+
eval_frexp(x2, x, &n2);
|
|
2140
|
+
|
|
2141
|
+
// Get initial estimate using the self-written, detail math function log.
|
|
2142
|
+
using local_float_type = typename double_float_type::float_type;
|
|
2143
|
+
|
|
2144
|
+
const local_float_type s { cpp_df_qf_detail::ccmath::log(x2.my_first()) };
|
|
2145
|
+
|
|
2146
|
+
double_float_type E { };
|
|
2147
|
+
|
|
2148
|
+
eval_exp(E, double_float_type(s));
|
|
2149
|
+
|
|
2150
|
+
// Perform one single step of Newton-Raphson iteration.
|
|
2151
|
+
// result = s + (x2 - E) / E;
|
|
2152
|
+
|
|
2153
|
+
eval_subtract(result, x2, E);
|
|
2154
|
+
eval_divide(result, E);
|
|
2155
|
+
result.add_unchecked_limb(s);
|
|
2156
|
+
|
|
2157
|
+
double_float_type xn2 { n2 };
|
|
2158
|
+
|
|
2159
|
+
eval_multiply(xn2, cpp_df_qf_detail::constant_df_ln_two<local_float_type>());
|
|
2160
|
+
|
|
2161
|
+
eval_add(result, xn2);
|
|
2162
|
+
}
|
|
2163
|
+
else
|
|
2164
|
+
{
|
|
2165
|
+
result = double_float_type { 0 };
|
|
2166
|
+
}
|
|
2167
|
+
}
|
|
2168
|
+
|
|
2169
|
+
namespace detail {
|
|
2170
|
+
|
|
2171
|
+
template<typename DestType, typename FloatingPointType>
|
|
2172
|
+
constexpr auto extract(cpp_double_fp_backend<FloatingPointType>& source) -> DestType
|
|
2173
|
+
{
|
|
2174
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2175
|
+
using local_float_type = typename double_float_type::float_type;
|
|
2176
|
+
|
|
2177
|
+
using destination_type = DestType;
|
|
2178
|
+
|
|
2179
|
+
destination_type result { };
|
|
2180
|
+
|
|
2181
|
+
constexpr double_float_type zero { 0 };
|
|
2182
|
+
|
|
2183
|
+
result = static_cast<destination_type>(0);
|
|
2184
|
+
|
|
2185
|
+
unsigned fail_safe { UINT32_C(32) };
|
|
2186
|
+
|
|
2187
|
+
constexpr bool
|
|
2188
|
+
destination_type_is_longer
|
|
2189
|
+
{
|
|
2190
|
+
(std::numeric_limits<signed long long>::digits > cpp_df_qf_detail::ccmath::numeric_limits<local_float_type>::digits)
|
|
2191
|
+
};
|
|
2192
|
+
|
|
2193
|
+
using float_extract_type = typename std::conditional<destination_type_is_longer, local_float_type, float>::type;
|
|
2194
|
+
|
|
2195
|
+
while((source.compare(zero) != 0) && (fail_safe > unsigned { UINT8_C(0) }))
|
|
2196
|
+
{
|
|
2197
|
+
const float_extract_type next_flt_val { static_cast<float_extract_type>(source.my_first()) };
|
|
2198
|
+
|
|
2199
|
+
result += static_cast<destination_type>(next_flt_val);
|
|
2200
|
+
|
|
2201
|
+
eval_subtract(source, double_float_type(next_flt_val));
|
|
2202
|
+
|
|
2203
|
+
--fail_safe;
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2206
|
+
return result;
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
} // namespace detail
|
|
2210
|
+
|
|
2211
|
+
template <typename FloatingPointType>
|
|
2212
|
+
constexpr auto eval_convert_to(signed long long* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> void
|
|
2213
|
+
{
|
|
2214
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2215
|
+
|
|
2216
|
+
if (fpc != FP_NORMAL)
|
|
2217
|
+
{
|
|
2218
|
+
*result = static_cast<signed long long>(backend.crep().first);
|
|
2219
|
+
}
|
|
2220
|
+
else
|
|
2221
|
+
{
|
|
2222
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2223
|
+
using local_float_type = typename double_float_type::float_type;
|
|
2224
|
+
|
|
2225
|
+
static_assert(std::is_same<local_float_type, FloatingPointType>::value, "Error something went wrong with the limb type");
|
|
2226
|
+
|
|
2227
|
+
constexpr bool
|
|
2228
|
+
long_long_is_longer
|
|
2229
|
+
{
|
|
2230
|
+
(std::numeric_limits<signed long long>::digits > cpp_df_qf_detail::ccmath::numeric_limits<local_float_type>::digits)
|
|
2231
|
+
};
|
|
2232
|
+
|
|
2233
|
+
using longer_type = typename ::std::conditional<long_long_is_longer, signed long long, double_float_type>::type;
|
|
2234
|
+
|
|
2235
|
+
constexpr longer_type my_max_val { static_cast<longer_type>((std::numeric_limits<signed long long>::max)()) };
|
|
2236
|
+
constexpr longer_type my_min_val { static_cast<longer_type>((std::numeric_limits<signed long long>::min)()) };
|
|
2237
|
+
|
|
2238
|
+
constexpr double_float_type my_max_val_dd { static_cast<double_float_type>(my_max_val) };
|
|
2239
|
+
constexpr double_float_type my_min_val_dd { static_cast<double_float_type>(my_min_val) };
|
|
2240
|
+
|
|
2241
|
+
if (backend.compare(my_max_val_dd) >= 0)
|
|
2242
|
+
{
|
|
2243
|
+
*result = (std::numeric_limits<signed long long>::max)();
|
|
2244
|
+
}
|
|
2245
|
+
else if (backend.compare(my_min_val_dd) <= 0)
|
|
2246
|
+
{
|
|
2247
|
+
*result = (std::numeric_limits<signed long long>::min)();
|
|
2248
|
+
}
|
|
2249
|
+
else
|
|
2250
|
+
{
|
|
2251
|
+
double_float_type source { backend };
|
|
2252
|
+
|
|
2253
|
+
*result = detail::extract<signed long long>(source);
|
|
2254
|
+
|
|
2255
|
+
#if !defined(__x86_64__) && !defined(_M_X64)
|
|
2256
|
+
|
|
2257
|
+
// It has been "empirically found" that non-X64 needs this workaround.
|
|
2258
|
+
// Even though the same conditions are met for x86_64 on GCC and MSVC,
|
|
2259
|
+
// this workaround will actually break the long long conversion tests
|
|
2260
|
+
// on those platforms.
|
|
2261
|
+
//
|
|
2262
|
+
// Our assumption is that on x64 there is x87 math (double -> long double)
|
|
2263
|
+
// being performed in the background. Seemingly these might "aid" the conversion
|
|
2264
|
+
// of double value to long long. Somehow I get the feeling this issue will arise
|
|
2265
|
+
// in future evolution of the cpp_double_fp_backend.
|
|
2266
|
+
//
|
|
2267
|
+
// This workaround has been tested on: ARM64 (linux and mac), s390x and PPC64LE.
|
|
2268
|
+
|
|
2269
|
+
constexpr bool
|
|
2270
|
+
needs_workaround
|
|
2271
|
+
{
|
|
2272
|
+
(sizeof(signed long long) == 8U)
|
|
2273
|
+
&& (std::is_same<local_float_type, double>::value || (std::is_same<local_float_type, long double>::value))
|
|
2274
|
+
};
|
|
2275
|
+
|
|
2276
|
+
BOOST_IF_CONSTEXPR (needs_workaround)
|
|
2277
|
+
{
|
|
2278
|
+
// This is the last value stored in a double as 9223372036854775808
|
|
2279
|
+
constexpr signed long long upper_bound = 9223372036854775296LL;
|
|
2280
|
+
|
|
2281
|
+
if (!eval_signbit(backend) && *result >= upper_bound)
|
|
2282
|
+
{
|
|
2283
|
+
// LONG_MAX is stored with .second = -1, so we compensate for the offset
|
|
2284
|
+
// We also only need this at the upper end where the values aren't exactly
|
|
2285
|
+
// representable in double. Below a certain point we are fine
|
|
2286
|
+
*result += static_cast<signed long long>(1);
|
|
2287
|
+
}
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
#endif // non-x64
|
|
2291
|
+
}
|
|
2292
|
+
}
|
|
2293
|
+
}
|
|
2294
|
+
|
|
2295
|
+
template <typename FloatingPointType>
|
|
2296
|
+
constexpr auto eval_convert_to(unsigned long long* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> void
|
|
2297
|
+
{
|
|
2298
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2299
|
+
|
|
2300
|
+
if (fpc != FP_NORMAL)
|
|
2301
|
+
{
|
|
2302
|
+
*result = static_cast<unsigned long long>(backend.crep().first);
|
|
2303
|
+
}
|
|
2304
|
+
else
|
|
2305
|
+
{
|
|
2306
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2307
|
+
using local_float_type = typename double_float_type::float_type;
|
|
2308
|
+
|
|
2309
|
+
static_assert(std::is_same<local_float_type, FloatingPointType>::value, "Error something went wrong with the limb type");
|
|
2310
|
+
|
|
2311
|
+
constexpr bool
|
|
2312
|
+
ulong_long_is_longer
|
|
2313
|
+
{
|
|
2314
|
+
(std::numeric_limits<unsigned long long>::digits > cpp_df_qf_detail::ccmath::numeric_limits<local_float_type>::digits)
|
|
2315
|
+
};
|
|
2316
|
+
|
|
2317
|
+
using longer_type = typename ::std::conditional<ulong_long_is_longer, unsigned long long, double_float_type>::type;
|
|
2318
|
+
|
|
2319
|
+
constexpr longer_type my_max_val { static_cast<longer_type>((std::numeric_limits<unsigned long long>::max)()) };
|
|
2320
|
+
|
|
2321
|
+
constexpr double_float_type my_max_val_dd { static_cast<double_float_type>(my_max_val) };
|
|
2322
|
+
|
|
2323
|
+
if (backend.compare(my_max_val_dd) >= 0)
|
|
2324
|
+
{
|
|
2325
|
+
*result = (std::numeric_limits<unsigned long long>::max)();
|
|
2326
|
+
}
|
|
2327
|
+
else
|
|
2328
|
+
{
|
|
2329
|
+
double_float_type source { backend };
|
|
2330
|
+
|
|
2331
|
+
*result = detail::extract<unsigned long long>(source);
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
#ifdef BOOST_HAS_INT128
|
|
2337
|
+
template <typename FloatingPointType>
|
|
2338
|
+
constexpr auto eval_convert_to(boost::int128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type
|
|
2339
|
+
{
|
|
2340
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2341
|
+
|
|
2342
|
+
if (fpc != FP_NORMAL)
|
|
2343
|
+
{
|
|
2344
|
+
*result = static_cast<boost::int128_type>(backend.crep().first);
|
|
2345
|
+
}
|
|
2346
|
+
else
|
|
2347
|
+
{
|
|
2348
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2349
|
+
using local_float_type = typename double_float_type::float_type;
|
|
2350
|
+
|
|
2351
|
+
static_assert(std::is_same<local_float_type, FloatingPointType>::value, "Error something went wrong with the limb type");
|
|
2352
|
+
|
|
2353
|
+
constexpr bool
|
|
2354
|
+
n128_is_longer
|
|
2355
|
+
{
|
|
2356
|
+
((static_cast<int>(sizeof(boost::int128_type) * static_cast<std::size_t>(CHAR_BIT)) - 1) > cpp_df_qf_detail::ccmath::numeric_limits<local_float_type>::digits)
|
|
2357
|
+
};
|
|
2358
|
+
|
|
2359
|
+
using longer_type = typename ::std::conditional<n128_is_longer, boost::int128_type, double_float_type>::type;
|
|
2360
|
+
|
|
2361
|
+
constexpr boost::int128_type my_max_val_n128 = (((static_cast<boost::int128_type>(1) << (sizeof(boost::int128_type) * CHAR_BIT - 2)) - 1) << 1) + 1;
|
|
2362
|
+
constexpr boost::int128_type my_min_val_n128 = static_cast<boost::int128_type>(-my_max_val_n128 - 1);
|
|
2363
|
+
|
|
2364
|
+
constexpr longer_type my_max_val(static_cast<longer_type>(my_max_val_n128));
|
|
2365
|
+
constexpr longer_type my_min_val(static_cast<longer_type>(my_min_val_n128));
|
|
2366
|
+
|
|
2367
|
+
constexpr double_float_type my_max_val_dd(static_cast<double_float_type>(my_max_val));
|
|
2368
|
+
constexpr double_float_type my_min_val_dd(static_cast<double_float_type>(my_min_val));
|
|
2369
|
+
|
|
2370
|
+
if (backend.compare(my_max_val_dd) >= 0)
|
|
2371
|
+
{
|
|
2372
|
+
*result = my_max_val;
|
|
2373
|
+
}
|
|
2374
|
+
else if (backend.compare(my_min_val_dd) <= 0)
|
|
2375
|
+
{
|
|
2376
|
+
*result = my_min_val;
|
|
2377
|
+
}
|
|
2378
|
+
else
|
|
2379
|
+
{
|
|
2380
|
+
double_float_type source { backend };
|
|
2381
|
+
|
|
2382
|
+
*result = detail::extract<boost::int128_type>(source);
|
|
2383
|
+
}
|
|
2384
|
+
}
|
|
2385
|
+
}
|
|
2386
|
+
|
|
2387
|
+
template <typename FloatingPointType>
|
|
2388
|
+
constexpr auto eval_convert_to(boost::int128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<!(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type
|
|
2389
|
+
{
|
|
2390
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2391
|
+
|
|
2392
|
+
if (fpc != FP_NORMAL)
|
|
2393
|
+
{
|
|
2394
|
+
*result = static_cast<boost::int128_type>(backend.crep().first);
|
|
2395
|
+
}
|
|
2396
|
+
else
|
|
2397
|
+
{
|
|
2398
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2399
|
+
|
|
2400
|
+
double_float_type source { backend };
|
|
2401
|
+
|
|
2402
|
+
*result = detail::extract<boost::int128_type>(source);
|
|
2403
|
+
}
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
template <typename FloatingPointType>
|
|
2407
|
+
constexpr auto eval_convert_to(boost::uint128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type
|
|
2408
|
+
{
|
|
2409
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2410
|
+
|
|
2411
|
+
if (fpc != FP_NORMAL)
|
|
2412
|
+
{
|
|
2413
|
+
*result = static_cast<boost::int128_type>(backend.crep().first);
|
|
2414
|
+
}
|
|
2415
|
+
else
|
|
2416
|
+
{
|
|
2417
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2418
|
+
using local_float_type = typename double_float_type::float_type;
|
|
2419
|
+
|
|
2420
|
+
static_assert(std::is_same<local_float_type, FloatingPointType>::value, "Error something went wrong with the limb type");
|
|
2421
|
+
|
|
2422
|
+
constexpr bool
|
|
2423
|
+
u128_is_longer
|
|
2424
|
+
{
|
|
2425
|
+
(static_cast<int>(sizeof(boost::uint128_type) * static_cast<std::size_t>(CHAR_BIT)) > cpp_df_qf_detail::ccmath::numeric_limits<local_float_type>::digits)
|
|
2426
|
+
};
|
|
2427
|
+
|
|
2428
|
+
using longer_type = typename ::std::conditional<u128_is_longer, boost::uint128_type, double_float_type>::type;
|
|
2429
|
+
|
|
2430
|
+
constexpr boost::uint128_type my_max_val_u128 = static_cast<boost::uint128_type>(~static_cast<boost::uint128_type>(0));
|
|
2431
|
+
|
|
2432
|
+
constexpr longer_type my_max_val(static_cast<longer_type>(my_max_val_u128));
|
|
2433
|
+
|
|
2434
|
+
constexpr double_float_type my_max_val_dd(static_cast<double_float_type>(my_max_val));
|
|
2435
|
+
|
|
2436
|
+
if (backend.compare(my_max_val_dd) >= 0)
|
|
2437
|
+
{
|
|
2438
|
+
*result = my_max_val;
|
|
2439
|
+
}
|
|
2440
|
+
else
|
|
2441
|
+
{
|
|
2442
|
+
double_float_type source { backend };
|
|
2443
|
+
|
|
2444
|
+
*result = detail::extract<boost::uint128_type>(source);
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
}
|
|
2448
|
+
|
|
2449
|
+
template <typename FloatingPointType>
|
|
2450
|
+
constexpr auto eval_convert_to(boost::uint128_type* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename std::enable_if<!(cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits > 24), void>::type
|
|
2451
|
+
{
|
|
2452
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2453
|
+
|
|
2454
|
+
if (fpc != FP_NORMAL)
|
|
2455
|
+
{
|
|
2456
|
+
*result = static_cast<boost::uint128_type>(backend.crep().first);
|
|
2457
|
+
}
|
|
2458
|
+
else
|
|
2459
|
+
{
|
|
2460
|
+
using double_float_type = cpp_double_fp_backend<FloatingPointType>;
|
|
2461
|
+
|
|
2462
|
+
double_float_type source { backend };
|
|
2463
|
+
|
|
2464
|
+
*result = detail::extract<boost::uint128_type>(source);
|
|
2465
|
+
}
|
|
2466
|
+
}
|
|
2467
|
+
#endif
|
|
2468
|
+
|
|
2469
|
+
template <typename FloatingPointType,
|
|
2470
|
+
typename OtherFloatingPointType>
|
|
2471
|
+
constexpr auto eval_convert_to(OtherFloatingPointType* result, const cpp_double_fp_backend<FloatingPointType>& backend) -> typename ::std::enable_if<cpp_df_qf_detail::is_floating_point<OtherFloatingPointType>::value>::type
|
|
2472
|
+
{
|
|
2473
|
+
const auto fpc = eval_fpclassify(backend);
|
|
2474
|
+
|
|
2475
|
+
// TBD: Implement min/max check for the destination floating-point type result.
|
|
2476
|
+
|
|
2477
|
+
if (fpc != FP_NORMAL)
|
|
2478
|
+
{
|
|
2479
|
+
*result = static_cast<OtherFloatingPointType>(backend.my_first());
|
|
2480
|
+
}
|
|
2481
|
+
else
|
|
2482
|
+
{
|
|
2483
|
+
BOOST_IF_CONSTEXPR(cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatingPointType>::digits > cpp_df_qf_detail::ccmath::numeric_limits<FloatingPointType>::digits)
|
|
2484
|
+
{
|
|
2485
|
+
*result = static_cast<OtherFloatingPointType>(backend.my_first());
|
|
2486
|
+
*result += static_cast<OtherFloatingPointType>(backend.my_second());
|
|
2487
|
+
}
|
|
2488
|
+
else
|
|
2489
|
+
{
|
|
2490
|
+
cpp_double_fp_backend<FloatingPointType> source = backend;
|
|
2491
|
+
|
|
2492
|
+
*result = 0;
|
|
2493
|
+
|
|
2494
|
+
for(auto digit_count = static_cast<int>(0);
|
|
2495
|
+
digit_count < cpp_double_fp_backend<FloatingPointType>::my_digits;
|
|
2496
|
+
digit_count += cpp_df_qf_detail::ccmath::numeric_limits<OtherFloatingPointType>::digits)
|
|
2497
|
+
{
|
|
2498
|
+
const auto next = static_cast<OtherFloatingPointType>(source.my_first());
|
|
2499
|
+
|
|
2500
|
+
*result += next;
|
|
2501
|
+
|
|
2502
|
+
eval_subtract(source, cpp_double_fp_backend<FloatingPointType>(next));
|
|
2503
|
+
}
|
|
2504
|
+
}
|
|
2505
|
+
}
|
|
2506
|
+
}
|
|
2507
|
+
|
|
2508
|
+
template <typename FloatingPointType>
|
|
2509
|
+
constexpr auto hash_value(const cpp_double_fp_backend<FloatingPointType>& a) -> ::std::size_t
|
|
2510
|
+
{
|
|
2511
|
+
return a.hash();
|
|
2512
|
+
}
|
|
2513
|
+
|
|
2514
|
+
} // namespace backends
|
|
2515
|
+
|
|
2516
|
+
using backends::cpp_double_fp_backend;
|
|
2517
|
+
|
|
2518
|
+
using cpp_double_float = number<cpp_double_fp_backend<float>, ::boost::multiprecision::et_off>;
|
|
2519
|
+
using cpp_double_double = number<cpp_double_fp_backend<double>, ::boost::multiprecision::et_off>;
|
|
2520
|
+
using cpp_double_long_double = number<cpp_double_fp_backend<long double>, ::boost::multiprecision::et_off>;
|
|
2521
|
+
#ifdef BOOST_MP_CPP_DOUBLE_FP_HAS_FLOAT128
|
|
2522
|
+
using cpp_double_float128 = number<cpp_double_fp_backend<::boost::float128_type>, ::boost::multiprecision::et_off>;
|
|
2523
|
+
#endif
|
|
2524
|
+
|
|
2525
|
+
} } // namespace boost::multiprecision
|
|
2526
|
+
|
|
2527
|
+
namespace std {
|
|
2528
|
+
|
|
2529
|
+
// Specialization of numeric_limits for boost::multiprecision::number<cpp_double_fp_backend<>>
|
|
2530
|
+
template <typename FloatingPointType,
|
|
2531
|
+
const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2532
|
+
BOOST_MP_DF_QF_NUM_LIMITS_CLASS_TYPE numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >
|
|
2533
|
+
{
|
|
2534
|
+
private:
|
|
2535
|
+
using local_float_type = FloatingPointType;
|
|
2536
|
+
using inner_self_type = boost::multiprecision::cpp_double_fp_backend<local_float_type>;
|
|
2537
|
+
|
|
2538
|
+
using self_type = boost::multiprecision::number<inner_self_type, ExpressionTemplatesOption>;
|
|
2539
|
+
|
|
2540
|
+
public:
|
|
2541
|
+
static constexpr bool is_specialized = true;
|
|
2542
|
+
static constexpr bool is_signed = true;
|
|
2543
|
+
static constexpr bool is_integer = false;
|
|
2544
|
+
static constexpr bool is_exact = false;
|
|
2545
|
+
static constexpr bool is_bounded = true;
|
|
2546
|
+
static constexpr bool is_modulo = false;
|
|
2547
|
+
static constexpr bool is_iec559 = false;
|
|
2548
|
+
static constexpr bool has_infinity = true;
|
|
2549
|
+
static constexpr bool has_quiet_NaN = true;
|
|
2550
|
+
static constexpr bool has_signaling_NaN = false;
|
|
2551
|
+
|
|
2552
|
+
// These members were deprecated in C++23, but only MSVC warns (as of June 25)
|
|
2553
|
+
#ifdef BOOST_MSVC
|
|
2554
|
+
#pragma warning(push)
|
|
2555
|
+
#pragma warning(disable:4996)
|
|
2556
|
+
#endif
|
|
2557
|
+
|
|
2558
|
+
#ifdef _MSC_VER
|
|
2559
|
+
# pragma warning(push)
|
|
2560
|
+
# pragma warning(disable : 4996)
|
|
2561
|
+
#elif (defined(__clang__) && (__clang_major__ >= 17))
|
|
2562
|
+
# pragma clang diagnostic push
|
|
2563
|
+
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
|
2564
|
+
#endif
|
|
2565
|
+
static constexpr float_denorm_style has_denorm = denorm_absent;
|
|
2566
|
+
#ifdef _MSC_VER
|
|
2567
|
+
#pragma warning(pop)
|
|
2568
|
+
#elif (defined(__clang__) && (__clang_major__ >= 17))
|
|
2569
|
+
# pragma clang diagnostic pop
|
|
2570
|
+
#endif
|
|
2571
|
+
static constexpr bool has_denorm_loss = true;
|
|
2572
|
+
|
|
2573
|
+
#ifdef BOOST_MSVC
|
|
2574
|
+
#pragma warning(pop)
|
|
2575
|
+
#endif // deprecated members
|
|
2576
|
+
|
|
2577
|
+
static constexpr bool traps = false;
|
|
2578
|
+
static constexpr bool tinyness_before = false;
|
|
2579
|
+
static constexpr float_round_style round_style = round_to_nearest;
|
|
2580
|
+
|
|
2581
|
+
static constexpr int radix = 2;
|
|
2582
|
+
static constexpr int digits = inner_self_type::my_digits;
|
|
2583
|
+
static constexpr int digits10 = inner_self_type::my_digits10;
|
|
2584
|
+
static constexpr int max_digits10 = inner_self_type::my_max_digits10;
|
|
2585
|
+
|
|
2586
|
+
static constexpr int max_exponent = inner_self_type::my_max_exponent;
|
|
2587
|
+
static constexpr int min_exponent = inner_self_type::my_min_exponent;
|
|
2588
|
+
static constexpr int max_exponent10 = inner_self_type::my_max_exponent10;
|
|
2589
|
+
static constexpr int min_exponent10 = inner_self_type::my_min_exponent10;
|
|
2590
|
+
|
|
2591
|
+
static constexpr auto(min) () noexcept -> self_type { return static_cast<self_type>(inner_self_type::my_value_min()); }
|
|
2592
|
+
static constexpr auto(max) () noexcept -> self_type { return static_cast<self_type>(inner_self_type::my_value_max()); }
|
|
2593
|
+
static constexpr auto lowest () noexcept -> self_type { return static_cast<self_type>(-(max)()); }
|
|
2594
|
+
static constexpr auto epsilon () noexcept -> self_type { return static_cast<self_type>(inner_self_type::my_value_eps()); }
|
|
2595
|
+
static constexpr auto round_error () noexcept -> self_type { return static_cast<self_type>(static_cast<local_float_type>(0.5)); }
|
|
2596
|
+
static constexpr auto denorm_min () noexcept -> self_type { return static_cast<self_type>((min)()); }
|
|
2597
|
+
static constexpr auto infinity () noexcept -> self_type { return static_cast<self_type>(inner_self_type::my_value_inf()); }
|
|
2598
|
+
static constexpr auto quiet_NaN () noexcept -> self_type { return static_cast<self_type>(inner_self_type::my_value_nan()); }
|
|
2599
|
+
static constexpr auto signaling_NaN() noexcept -> self_type { return static_cast<self_type>(static_cast<local_float_type>(0.0)); }
|
|
2600
|
+
};
|
|
2601
|
+
|
|
2602
|
+
} // namespace std
|
|
2603
|
+
|
|
2604
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2605
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_specialized;
|
|
2606
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2607
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_signed;
|
|
2608
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2609
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_integer;
|
|
2610
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2611
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_exact;
|
|
2612
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2613
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_bounded;
|
|
2614
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2615
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_modulo;
|
|
2616
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2617
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::is_iec559;
|
|
2618
|
+
|
|
2619
|
+
#ifdef BOOST_MSVC
|
|
2620
|
+
#pragma warning(push)
|
|
2621
|
+
#pragma warning(disable:4996)
|
|
2622
|
+
#endif
|
|
2623
|
+
|
|
2624
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2625
|
+
constexpr std::float_denorm_style std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::has_denorm;
|
|
2626
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2627
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::has_denorm_loss;
|
|
2628
|
+
|
|
2629
|
+
#ifdef BOOST_MSVC
|
|
2630
|
+
#pragma warning(pop)
|
|
2631
|
+
#endif // deprecated members
|
|
2632
|
+
|
|
2633
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2634
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::has_infinity;
|
|
2635
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2636
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::has_quiet_NaN;
|
|
2637
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2638
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::has_signaling_NaN;
|
|
2639
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2640
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::traps;
|
|
2641
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2642
|
+
constexpr bool std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::tinyness_before;
|
|
2643
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2644
|
+
constexpr std::float_round_style std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::round_style;
|
|
2645
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2646
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::radix;
|
|
2647
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2648
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::digits;
|
|
2649
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2650
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::digits10;
|
|
2651
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2652
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::max_digits10;
|
|
2653
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2654
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::max_exponent;
|
|
2655
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2656
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::min_exponent;
|
|
2657
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2658
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::max_exponent10;
|
|
2659
|
+
template <typename FloatingPointType, const boost::multiprecision::expression_template_option ExpressionTemplatesOption>
|
|
2660
|
+
constexpr int std::numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplatesOption> >::min_exponent10;
|
|
2661
|
+
|
|
2662
|
+
#if defined(BOOST_MP_MATH_AVAILABLE)
|
|
2663
|
+
namespace boost { namespace math { namespace policies {
|
|
2664
|
+
|
|
2665
|
+
template <class FloatingPointType, class Policy, boost::multiprecision::expression_template_option ExpressionTemplates>
|
|
2666
|
+
struct precision<boost::multiprecision::number<boost::multiprecision::cpp_double_fp_backend<FloatingPointType>, ExpressionTemplates>, Policy>
|
|
2667
|
+
{
|
|
2668
|
+
private:
|
|
2669
|
+
using my_multiprecision_backend_type = boost::multiprecision::cpp_double_fp_backend<FloatingPointType>;
|
|
2670
|
+
|
|
2671
|
+
using digits2_type = digits2<my_multiprecision_backend_type::my_digits>;
|
|
2672
|
+
|
|
2673
|
+
static constexpr auto use_full_precision() noexcept -> bool
|
|
2674
|
+
{
|
|
2675
|
+
return ((digits2_type::value <= precision_type::value) || (precision_type::value <= 0));
|
|
2676
|
+
}
|
|
2677
|
+
|
|
2678
|
+
public:
|
|
2679
|
+
using precision_type = typename Policy::precision_type;
|
|
2680
|
+
|
|
2681
|
+
using type =
|
|
2682
|
+
typename std::conditional<use_full_precision(),
|
|
2683
|
+
digits2_type, // This is the default case: Use full precision for FloatingPointType.
|
|
2684
|
+
precision_type>::type; // Here we find (and use) user-customized precision.
|
|
2685
|
+
};
|
|
2686
|
+
|
|
2687
|
+
} } } // namespace boost::math::policies
|
|
2688
|
+
#endif
|
|
2689
|
+
|
|
2690
|
+
#endif // BOOST_MP_CPP_DOUBLE_FP_2021_06_05_HPP
|