@lakutata/math 0.0.0-stage → 3.1.5

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.
Files changed (1728) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +954 -2
  3. package/README.zh-CN.md +578 -0
  4. package/THIRD_PARTY_NOTICES.md +553 -0
  5. package/binding.gyp +89 -0
  6. package/dist/cjs/exceptions/MathArgumentException.d.ts +11 -0
  7. package/dist/cjs/exceptions/MathArgumentException.js +18 -0
  8. package/dist/cjs/exceptions/MathCancelledException.d.ts +10 -0
  9. package/dist/cjs/exceptions/MathCancelledException.js +17 -0
  10. package/dist/cjs/exceptions/MathDefinitionException.d.ts +11 -0
  11. package/dist/cjs/exceptions/MathDefinitionException.js +18 -0
  12. package/dist/cjs/exceptions/MathDivisionByZeroException.d.ts +10 -0
  13. package/dist/cjs/exceptions/MathDivisionByZeroException.js +17 -0
  14. package/dist/cjs/exceptions/MathDomainException.d.ts +11 -0
  15. package/dist/cjs/exceptions/MathDomainException.js +18 -0
  16. package/dist/cjs/exceptions/MathException.d.ts +19 -0
  17. package/dist/cjs/exceptions/MathException.js +22 -0
  18. package/dist/cjs/exceptions/MathNotSupportedException.d.ts +11 -0
  19. package/dist/cjs/exceptions/MathNotSupportedException.js +18 -0
  20. package/dist/cjs/exceptions/MathSyntaxException.d.ts +11 -0
  21. package/dist/cjs/exceptions/MathSyntaxException.js +18 -0
  22. package/dist/cjs/exceptions/MathTimeoutException.d.ts +10 -0
  23. package/dist/cjs/exceptions/MathTimeoutException.js +17 -0
  24. package/dist/cjs/exceptions/MathUnitException.d.ts +11 -0
  25. package/dist/cjs/exceptions/MathUnitException.js +18 -0
  26. package/dist/cjs/exceptions/MathUnknownFunctionException.d.ts +12 -0
  27. package/dist/cjs/exceptions/MathUnknownFunctionException.js +19 -0
  28. package/dist/cjs/exports/Math.d.ts +28 -0
  29. package/dist/cjs/exports/Math.js +84 -0
  30. package/dist/cjs/lib/Addon.d.ts +5 -0
  31. package/dist/cjs/lib/Addon.js +9 -0
  32. package/dist/cjs/lib/Context.d.ts +90 -0
  33. package/dist/cjs/lib/Context.js +134 -0
  34. package/dist/cjs/lib/Decimal.d.ts +276 -0
  35. package/dist/cjs/lib/Decimal.js +402 -0
  36. package/dist/cjs/lib/Defaults.d.ts +273 -0
  37. package/dist/cjs/lib/Defaults.js +308 -0
  38. package/dist/cjs/lib/Distribution.d.ts +177 -0
  39. package/dist/cjs/lib/Distribution.js +196 -0
  40. package/dist/cjs/lib/Expression.d.ts +791 -0
  41. package/dist/cjs/lib/Expression.js +991 -0
  42. package/dist/cjs/lib/ExpressionMatrix.d.ts +284 -0
  43. package/dist/cjs/lib/ExpressionMatrix.js +412 -0
  44. package/dist/cjs/lib/LinearAlgebra.d.ts +613 -0
  45. package/dist/cjs/lib/LinearAlgebra.js +712 -0
  46. package/dist/cjs/lib/MathScope.d.ts +268 -0
  47. package/dist/cjs/lib/MathScope.js +316 -0
  48. package/dist/cjs/lib/MathSet.d.ts +139 -0
  49. package/dist/cjs/lib/MathSet.js +376 -0
  50. package/dist/cjs/lib/Matrix.d.ts +212 -0
  51. package/dist/cjs/lib/Matrix.js +393 -0
  52. package/dist/cjs/lib/Native.d.ts +80 -0
  53. package/dist/cjs/lib/Native.js +61 -0
  54. package/dist/cjs/lib/NumberTheory.d.ts +356 -0
  55. package/dist/cjs/lib/NumberTheory.js +524 -0
  56. package/dist/cjs/lib/Numeric.d.ts +363 -0
  57. package/dist/cjs/lib/Numeric.js +243 -0
  58. package/dist/cjs/lib/Polynomials.d.ts +140 -0
  59. package/dist/cjs/lib/Polynomials.js +167 -0
  60. package/dist/cjs/lib/SparseMatrix.d.ts +125 -0
  61. package/dist/cjs/lib/SparseMatrix.js +341 -0
  62. package/dist/cjs/lib/Statistics.d.ts +366 -0
  63. package/dist/cjs/lib/Statistics.js +380 -0
  64. package/dist/cjs/lib/Unit.d.ts +342 -0
  65. package/dist/cjs/lib/Unit.js +1027 -0
  66. package/dist/cjs/lib/UnitTable.d.ts +39 -0
  67. package/dist/cjs/lib/UnitTable.js +634 -0
  68. package/dist/cjs/package.json +1 -0
  69. package/dist/esm/exceptions/MathArgumentException.js +14 -0
  70. package/dist/esm/exceptions/MathCancelledException.js +13 -0
  71. package/dist/esm/exceptions/MathDefinitionException.js +14 -0
  72. package/dist/esm/exceptions/MathDivisionByZeroException.js +13 -0
  73. package/dist/esm/exceptions/MathDomainException.js +14 -0
  74. package/dist/esm/exceptions/MathException.js +18 -0
  75. package/dist/esm/exceptions/MathNotSupportedException.js +14 -0
  76. package/dist/esm/exceptions/MathSyntaxException.js +14 -0
  77. package/dist/esm/exceptions/MathTimeoutException.js +13 -0
  78. package/dist/esm/exceptions/MathUnitException.js +14 -0
  79. package/dist/esm/exceptions/MathUnknownFunctionException.js +15 -0
  80. package/dist/esm/exports/Math.js +26 -0
  81. package/dist/esm/lib/Addon.js +10 -0
  82. package/dist/esm/lib/Context.js +128 -0
  83. package/dist/esm/lib/Decimal.js +397 -0
  84. package/dist/esm/lib/Defaults.js +290 -0
  85. package/dist/esm/lib/Distribution.js +191 -0
  86. package/dist/esm/lib/Expression.js +979 -0
  87. package/dist/esm/lib/ExpressionMatrix.js +407 -0
  88. package/dist/esm/lib/LinearAlgebra.js +708 -0
  89. package/dist/esm/lib/MathScope.js +311 -0
  90. package/dist/esm/lib/MathSet.js +370 -0
  91. package/dist/esm/lib/Matrix.js +382 -0
  92. package/dist/esm/lib/Native.js +56 -0
  93. package/dist/esm/lib/NumberTheory.js +520 -0
  94. package/dist/esm/lib/Numeric.js +239 -0
  95. package/dist/esm/lib/Polynomials.js +163 -0
  96. package/dist/esm/lib/SparseMatrix.js +332 -0
  97. package/dist/esm/lib/Statistics.js +376 -0
  98. package/dist/esm/lib/Unit.js +1018 -0
  99. package/dist/esm/lib/UnitTable.js +631 -0
  100. package/dist/types/exceptions/MathArgumentException.d.ts +11 -0
  101. package/dist/types/exceptions/MathCancelledException.d.ts +10 -0
  102. package/dist/types/exceptions/MathDefinitionException.d.ts +11 -0
  103. package/dist/types/exceptions/MathDivisionByZeroException.d.ts +10 -0
  104. package/dist/types/exceptions/MathDomainException.d.ts +11 -0
  105. package/dist/types/exceptions/MathException.d.ts +19 -0
  106. package/dist/types/exceptions/MathNotSupportedException.d.ts +11 -0
  107. package/dist/types/exceptions/MathSyntaxException.d.ts +11 -0
  108. package/dist/types/exceptions/MathTimeoutException.d.ts +10 -0
  109. package/dist/types/exceptions/MathUnitException.d.ts +11 -0
  110. package/dist/types/exceptions/MathUnknownFunctionException.d.ts +12 -0
  111. package/dist/types/exports/Math.d.ts +28 -0
  112. package/dist/types/lib/Addon.d.ts +5 -0
  113. package/dist/types/lib/Context.d.ts +90 -0
  114. package/dist/types/lib/Decimal.d.ts +276 -0
  115. package/dist/types/lib/Defaults.d.ts +273 -0
  116. package/dist/types/lib/Distribution.d.ts +177 -0
  117. package/dist/types/lib/Expression.d.ts +791 -0
  118. package/dist/types/lib/ExpressionMatrix.d.ts +284 -0
  119. package/dist/types/lib/LinearAlgebra.d.ts +613 -0
  120. package/dist/types/lib/MathScope.d.ts +268 -0
  121. package/dist/types/lib/MathSet.d.ts +139 -0
  122. package/dist/types/lib/Matrix.d.ts +212 -0
  123. package/dist/types/lib/Native.d.ts +80 -0
  124. package/dist/types/lib/NumberTheory.d.ts +356 -0
  125. package/dist/types/lib/Numeric.d.ts +363 -0
  126. package/dist/types/lib/Polynomials.d.ts +140 -0
  127. package/dist/types/lib/SparseMatrix.d.ts +125 -0
  128. package/dist/types/lib/Statistics.d.ts +366 -0
  129. package/dist/types/lib/Unit.d.ts +342 -0
  130. package/dist/types/lib/UnitTable.d.ts +39 -0
  131. package/native/addon.cpp +1374 -0
  132. package/native/async/Pool.cpp +133 -0
  133. package/native/async/Pool.h +59 -0
  134. package/native/config/boost_math_policy.h +26 -0
  135. package/native/config/mpdecimal/mpdecimal.h +809 -0
  136. package/native/config/symengine/symengine_config.h +44 -0
  137. package/native/config/symengine/symengine_export.h +19 -0
  138. package/native/core/Errors.cpp +77 -0
  139. package/native/core/Errors.h +72 -0
  140. package/native/core/Handle.cpp +109 -0
  141. package/native/core/Handle.h +72 -0
  142. package/native/core/Scope.cpp +122 -0
  143. package/native/core/Scope.h +36 -0
  144. package/native/functions/Functions.cpp +468 -0
  145. package/native/functions/Functions.h +115 -0
  146. package/native/functions/Gosper.cpp +429 -0
  147. package/native/functions/Gosper.h +20 -0
  148. package/native/functions/SpecialIntegrals.cpp +329 -0
  149. package/native/functions/SpecialIntegrals.h +53 -0
  150. package/native/functions/Summation.cpp +645 -0
  151. package/native/functions/Summation.h +42 -0
  152. package/native/integrals/Integrals.cpp +1428 -0
  153. package/native/integrals/Integrals.h +32 -0
  154. package/native/limits/Gruntz.cpp +1332 -0
  155. package/native/limits/Gruntz.h +24 -0
  156. package/native/linalg/Decompositions.cpp +159 -0
  157. package/native/linalg/Functions.cpp +199 -0
  158. package/native/linalg/Linalg.cpp +123 -0
  159. package/native/linalg/Linalg.h +67 -0
  160. package/native/linalg/LinalgSupport.h +69 -0
  161. package/native/linalg/Sparse.cpp +172 -0
  162. package/native/matrix/Matrices.cpp +766 -0
  163. package/native/matrix/Matrices.h +74 -0
  164. package/native/ntheory/NumberTheory.cpp +754 -0
  165. package/native/ntheory/NumberTheory.h +56 -0
  166. package/native/numeric/Compiled.cpp +93 -0
  167. package/native/numeric/Compiled.h +49 -0
  168. package/native/numeric/Integrate.cpp +718 -0
  169. package/native/numeric/Numeric.h +95 -0
  170. package/native/numeric/ODE.cpp +542 -0
  171. package/native/numeric/Roots.cpp +402 -0
  172. package/native/ops/Decimal.cpp +776 -0
  173. package/native/ops/Decimal.h +182 -0
  174. package/native/ops/DecimalComplex.cpp +738 -0
  175. package/native/ops/DecimalEvaluator.h +79 -0
  176. package/native/ops/DecimalFunctions.cpp +439 -0
  177. package/native/ops/DecimalOperations.cpp +236 -0
  178. package/native/ops/DecimalSpecial.cpp +1028 -0
  179. package/native/ops/DecimalSupport.h +109 -0
  180. package/native/ops/Operations.cpp +969 -0
  181. package/native/ops/Operations.h +120 -0
  182. package/native/ops/Piecewise.cpp +195 -0
  183. package/native/ops/Piecewise.h +40 -0
  184. package/native/parser/Parser.cpp +853 -0
  185. package/native/parser/Parser.h +56 -0
  186. package/native/poly/Convert.cpp +210 -0
  187. package/native/poly/Convert.h +40 -0
  188. package/native/poly/Dense.cpp +1008 -0
  189. package/native/poly/Dense.h +136 -0
  190. package/native/poly/Euclid.cpp +446 -0
  191. package/native/poly/Euclid.h +44 -0
  192. package/native/poly/Factor.cpp +919 -0
  193. package/native/poly/Factor.h +36 -0
  194. package/native/poly/Galois.cpp +439 -0
  195. package/native/poly/Galois.h +86 -0
  196. package/native/poly/Inequalities.cpp +227 -0
  197. package/native/poly/Inequalities.h +21 -0
  198. package/native/poly/Poly.cpp +338 -0
  199. package/native/poly/Poly.h +46 -0
  200. package/native/poly/Rational.cpp +403 -0
  201. package/native/poly/Rational.h +33 -0
  202. package/native/poly/RealRoots.cpp +136 -0
  203. package/native/poly/RealRoots.h +35 -0
  204. package/native/printer/Printer.cpp +973 -0
  205. package/native/printer/Printer.h +23 -0
  206. package/native/simplify/Simplify.cpp +921 -0
  207. package/native/simplify/Simplify.h +21 -0
  208. package/native/stats/Distributions.cpp +392 -0
  209. package/native/stats/Distributions.h +33 -0
  210. package/native/stats/Statistics.cpp +255 -0
  211. package/native/stats/Statistics.h +25 -0
  212. package/package.json +85 -4
  213. package/scripts/sources.mjs +35 -0
  214. package/vendor/PATCHES.md +169 -0
  215. package/vendor/boost/config/README.md +43 -0
  216. package/vendor/boost/config/include/boost/config/abi/borland_prefix.hpp +27 -0
  217. package/vendor/boost/config/include/boost/config/abi/borland_suffix.hpp +12 -0
  218. package/vendor/boost/config/include/boost/config/abi/msvc_prefix.hpp +22 -0
  219. package/vendor/boost/config/include/boost/config/abi/msvc_suffix.hpp +8 -0
  220. package/vendor/boost/config/include/boost/config/abi_prefix.hpp +25 -0
  221. package/vendor/boost/config/include/boost/config/abi_suffix.hpp +25 -0
  222. package/vendor/boost/config/include/boost/config/assert_cxx03.hpp +211 -0
  223. package/vendor/boost/config/include/boost/config/assert_cxx11.hpp +212 -0
  224. package/vendor/boost/config/include/boost/config/assert_cxx14.hpp +47 -0
  225. package/vendor/boost/config/include/boost/config/assert_cxx17.hpp +65 -0
  226. package/vendor/boost/config/include/boost/config/assert_cxx20.hpp +59 -0
  227. package/vendor/boost/config/include/boost/config/assert_cxx23.hpp +41 -0
  228. package/vendor/boost/config/include/boost/config/assert_cxx98.hpp +23 -0
  229. package/vendor/boost/config/include/boost/config/auto_link.hpp +530 -0
  230. package/vendor/boost/config/include/boost/config/compiler/borland.hpp +342 -0
  231. package/vendor/boost/config/include/boost/config/compiler/clang.hpp +370 -0
  232. package/vendor/boost/config/include/boost/config/compiler/clang_version.hpp +98 -0
  233. package/vendor/boost/config/include/boost/config/compiler/codegear.hpp +389 -0
  234. package/vendor/boost/config/include/boost/config/compiler/comeau.hpp +59 -0
  235. package/vendor/boost/config/include/boost/config/compiler/common_edg.hpp +185 -0
  236. package/vendor/boost/config/include/boost/config/compiler/compaq_cxx.hpp +19 -0
  237. package/vendor/boost/config/include/boost/config/compiler/cray.hpp +446 -0
  238. package/vendor/boost/config/include/boost/config/compiler/diab.hpp +26 -0
  239. package/vendor/boost/config/include/boost/config/compiler/digitalmars.hpp +146 -0
  240. package/vendor/boost/config/include/boost/config/compiler/gcc.hpp +386 -0
  241. package/vendor/boost/config/include/boost/config/compiler/gcc_xml.hpp +115 -0
  242. package/vendor/boost/config/include/boost/config/compiler/greenhills.hpp +28 -0
  243. package/vendor/boost/config/include/boost/config/compiler/hp_acc.hpp +153 -0
  244. package/vendor/boost/config/include/boost/config/compiler/intel.hpp +577 -0
  245. package/vendor/boost/config/include/boost/config/compiler/kai.hpp +33 -0
  246. package/vendor/boost/config/include/boost/config/compiler/metrowerks.hpp +201 -0
  247. package/vendor/boost/config/include/boost/config/compiler/mpw.hpp +143 -0
  248. package/vendor/boost/config/include/boost/config/compiler/nvcc.hpp +64 -0
  249. package/vendor/boost/config/include/boost/config/compiler/pathscale.hpp +141 -0
  250. package/vendor/boost/config/include/boost/config/compiler/pgi.hpp +23 -0
  251. package/vendor/boost/config/include/boost/config/compiler/sgi_mipspro.hpp +29 -0
  252. package/vendor/boost/config/include/boost/config/compiler/sunpro_cc.hpp +225 -0
  253. package/vendor/boost/config/include/boost/config/compiler/vacpp.hpp +189 -0
  254. package/vendor/boost/config/include/boost/config/compiler/visualc.hpp +400 -0
  255. package/vendor/boost/config/include/boost/config/compiler/xlcpp.hpp +303 -0
  256. package/vendor/boost/config/include/boost/config/compiler/xlcpp_zos.hpp +174 -0
  257. package/vendor/boost/config/include/boost/config/detail/cxx_composite.hpp +218 -0
  258. package/vendor/boost/config/include/boost/config/detail/posix_features.hpp +95 -0
  259. package/vendor/boost/config/include/boost/config/detail/select_compiler_config.hpp +157 -0
  260. package/vendor/boost/config/include/boost/config/detail/select_platform_config.hpp +147 -0
  261. package/vendor/boost/config/include/boost/config/detail/select_stdlib_config.hpp +121 -0
  262. package/vendor/boost/config/include/boost/config/detail/suffix.hpp +1334 -0
  263. package/vendor/boost/config/include/boost/config/header_deprecated.hpp +26 -0
  264. package/vendor/boost/config/include/boost/config/helper_macros.hpp +37 -0
  265. package/vendor/boost/config/include/boost/config/no_tr1/cmath.hpp +28 -0
  266. package/vendor/boost/config/include/boost/config/no_tr1/complex.hpp +28 -0
  267. package/vendor/boost/config/include/boost/config/no_tr1/functional.hpp +28 -0
  268. package/vendor/boost/config/include/boost/config/no_tr1/memory.hpp +28 -0
  269. package/vendor/boost/config/include/boost/config/no_tr1/utility.hpp +28 -0
  270. package/vendor/boost/config/include/boost/config/platform/aix.hpp +33 -0
  271. package/vendor/boost/config/include/boost/config/platform/amigaos.hpp +15 -0
  272. package/vendor/boost/config/include/boost/config/platform/beos.hpp +26 -0
  273. package/vendor/boost/config/include/boost/config/platform/bsd.hpp +83 -0
  274. package/vendor/boost/config/include/boost/config/platform/cloudabi.hpp +18 -0
  275. package/vendor/boost/config/include/boost/config/platform/cray.hpp +18 -0
  276. package/vendor/boost/config/include/boost/config/platform/cygwin.hpp +71 -0
  277. package/vendor/boost/config/include/boost/config/platform/haiku.hpp +31 -0
  278. package/vendor/boost/config/include/boost/config/platform/hpux.hpp +87 -0
  279. package/vendor/boost/config/include/boost/config/platform/irix.hpp +31 -0
  280. package/vendor/boost/config/include/boost/config/platform/linux.hpp +106 -0
  281. package/vendor/boost/config/include/boost/config/platform/macos.hpp +87 -0
  282. package/vendor/boost/config/include/boost/config/platform/qnxnto.hpp +31 -0
  283. package/vendor/boost/config/include/boost/config/platform/solaris.hpp +31 -0
  284. package/vendor/boost/config/include/boost/config/platform/symbian.hpp +97 -0
  285. package/vendor/boost/config/include/boost/config/platform/vms.hpp +25 -0
  286. package/vendor/boost/config/include/boost/config/platform/vxworks.hpp +422 -0
  287. package/vendor/boost/config/include/boost/config/platform/wasm.hpp +23 -0
  288. package/vendor/boost/config/include/boost/config/platform/win32.hpp +90 -0
  289. package/vendor/boost/config/include/boost/config/platform/zos.hpp +32 -0
  290. package/vendor/boost/config/include/boost/config/pragma_message.hpp +31 -0
  291. package/vendor/boost/config/include/boost/config/requires_threads.hpp +92 -0
  292. package/vendor/boost/config/include/boost/config/stdlib/dinkumware.hpp +324 -0
  293. package/vendor/boost/config/include/boost/config/stdlib/libcomo.hpp +93 -0
  294. package/vendor/boost/config/include/boost/config/stdlib/libcpp.hpp +185 -0
  295. package/vendor/boost/config/include/boost/config/stdlib/libstdcpp3.hpp +482 -0
  296. package/vendor/boost/config/include/boost/config/stdlib/modena.hpp +79 -0
  297. package/vendor/boost/config/include/boost/config/stdlib/msl.hpp +98 -0
  298. package/vendor/boost/config/include/boost/config/stdlib/roguewave.hpp +208 -0
  299. package/vendor/boost/config/include/boost/config/stdlib/sgi.hpp +168 -0
  300. package/vendor/boost/config/include/boost/config/stdlib/stlport.hpp +258 -0
  301. package/vendor/boost/config/include/boost/config/stdlib/vacpp.hpp +74 -0
  302. package/vendor/boost/config/include/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  303. package/vendor/boost/config/include/boost/config/user.hpp +133 -0
  304. package/vendor/boost/config/include/boost/config/warning_disable.hpp +47 -0
  305. package/vendor/boost/config/include/boost/config/workaround.hpp +310 -0
  306. package/vendor/boost/config/include/boost/config.hpp +67 -0
  307. package/vendor/boost/config/include/boost/cstdint.hpp +556 -0
  308. package/vendor/boost/config/include/boost/cxx11_char_types.hpp +70 -0
  309. package/vendor/boost/config/include/boost/detail/workaround.hpp +10 -0
  310. package/vendor/boost/config/include/boost/limits.hpp +146 -0
  311. package/vendor/boost/config/include/boost/static_assert.hpp +179 -0
  312. package/vendor/boost/config/include/boost/version.hpp +32 -0
  313. package/vendor/boost/math/LICENSE +23 -0
  314. package/vendor/boost/math/README.md +184 -0
  315. package/vendor/boost/math/include/boost/cstdfloat.hpp +58 -0
  316. package/vendor/boost/math/include/boost/math/bindings/detail/big_digamma.hpp +297 -0
  317. package/vendor/boost/math/include/boost/math/bindings/detail/big_lanczos.hpp +777 -0
  318. package/vendor/boost/math/include/boost/math/bindings/mpfr.hpp +974 -0
  319. package/vendor/boost/math/include/boost/math/bindings/mpreal.hpp +921 -0
  320. package/vendor/boost/math/include/boost/math/bindings/rr.hpp +876 -0
  321. package/vendor/boost/math/include/boost/math/ccmath/abs.hpp +89 -0
  322. package/vendor/boost/math/include/boost/math/ccmath/ccmath.hpp +45 -0
  323. package/vendor/boost/math/include/boost/math/ccmath/ceil.hpp +78 -0
  324. package/vendor/boost/math/include/boost/math/ccmath/copysign.hpp +81 -0
  325. package/vendor/boost/math/include/boost/math/ccmath/detail/config.hpp +52 -0
  326. package/vendor/boost/math/include/boost/math/ccmath/detail/swap.hpp +21 -0
  327. package/vendor/boost/math/include/boost/math/ccmath/div.hpp +86 -0
  328. package/vendor/boost/math/include/boost/math/ccmath/fabs.hpp +41 -0
  329. package/vendor/boost/math/include/boost/math/ccmath/fdim.hpp +93 -0
  330. package/vendor/boost/math/include/boost/math/ccmath/floor.hpp +131 -0
  331. package/vendor/boost/math/include/boost/math/ccmath/fma.hpp +130 -0
  332. package/vendor/boost/math/include/boost/math/ccmath/fmax.hpp +89 -0
  333. package/vendor/boost/math/include/boost/math/ccmath/fmin.hpp +89 -0
  334. package/vendor/boost/math/include/boost/math/ccmath/fmod.hpp +114 -0
  335. package/vendor/boost/math/include/boost/math/ccmath/fpclassify.hpp +48 -0
  336. package/vendor/boost/math/include/boost/math/ccmath/frexp.hpp +101 -0
  337. package/vendor/boost/math/include/boost/math/ccmath/hypot.hpp +116 -0
  338. package/vendor/boost/math/include/boost/math/ccmath/ilogb.hpp +60 -0
  339. package/vendor/boost/math/include/boost/math/ccmath/isfinite.hpp +53 -0
  340. package/vendor/boost/math/include/boost/math/ccmath/isgreater.hpp +42 -0
  341. package/vendor/boost/math/include/boost/math/ccmath/isgreaterequal.hpp +42 -0
  342. package/vendor/boost/math/include/boost/math/ccmath/isinf.hpp +61 -0
  343. package/vendor/boost/math/include/boost/math/ccmath/isless.hpp +42 -0
  344. package/vendor/boost/math/include/boost/math/ccmath/islessequal.hpp +42 -0
  345. package/vendor/boost/math/include/boost/math/ccmath/isnan.hpp +42 -0
  346. package/vendor/boost/math/include/boost/math/ccmath/isnormal.hpp +47 -0
  347. package/vendor/boost/math/include/boost/math/ccmath/isunordered.hpp +35 -0
  348. package/vendor/boost/math/include/boost/math/ccmath/ldexp.hpp +81 -0
  349. package/vendor/boost/math/include/boost/math/ccmath/logb.hpp +86 -0
  350. package/vendor/boost/math/include/boost/math/ccmath/modf.hpp +79 -0
  351. package/vendor/boost/math/include/boost/math/ccmath/next.hpp +458 -0
  352. package/vendor/boost/math/include/boost/math/ccmath/remainder.hpp +106 -0
  353. package/vendor/boost/math/include/boost/math/ccmath/round.hpp +179 -0
  354. package/vendor/boost/math/include/boost/math/ccmath/scalbln.hpp +60 -0
  355. package/vendor/boost/math/include/boost/math/ccmath/scalbn.hpp +81 -0
  356. package/vendor/boost/math/include/boost/math/ccmath/signbit.hpp +218 -0
  357. package/vendor/boost/math/include/boost/math/ccmath/sqrt.hpp +80 -0
  358. package/vendor/boost/math/include/boost/math/ccmath/trunc.hpp +70 -0
  359. package/vendor/boost/math/include/boost/math/common_factor.hpp +23 -0
  360. package/vendor/boost/math/include/boost/math/common_factor_ct.hpp +34 -0
  361. package/vendor/boost/math/include/boost/math/common_factor_rt.hpp +30 -0
  362. package/vendor/boost/math/include/boost/math/complex/acos.hpp +245 -0
  363. package/vendor/boost/math/include/boost/math/complex/acosh.hpp +34 -0
  364. package/vendor/boost/math/include/boost/math/complex/asin.hpp +252 -0
  365. package/vendor/boost/math/include/boost/math/complex/asinh.hpp +32 -0
  366. package/vendor/boost/math/include/boost/math/complex/atan.hpp +36 -0
  367. package/vendor/boost/math/include/boost/math/complex/atanh.hpp +214 -0
  368. package/vendor/boost/math/include/boost/math/complex/details.hpp +68 -0
  369. package/vendor/boost/math/include/boost/math/complex/fabs.hpp +23 -0
  370. package/vendor/boost/math/include/boost/math/complex.hpp +32 -0
  371. package/vendor/boost/math/include/boost/math/concepts/distributions.hpp +497 -0
  372. package/vendor/boost/math/include/boost/math/concepts/real_concept.hpp +400 -0
  373. package/vendor/boost/math/include/boost/math/concepts/real_type_concept.hpp +119 -0
  374. package/vendor/boost/math/include/boost/math/concepts/std_real_concept.hpp +427 -0
  375. package/vendor/boost/math/include/boost/math/constants/calculate_constants.hpp +1117 -0
  376. package/vendor/boost/math/include/boost/math/constants/constants.hpp +360 -0
  377. package/vendor/boost/math/include/boost/math/constants/info.hpp +169 -0
  378. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_cmath.hpp +1012 -0
  379. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_complex.hpp +38 -0
  380. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_complex_std.hpp +813 -0
  381. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_iostream.hpp +822 -0
  382. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_limits.hpp +87 -0
  383. package/vendor/boost/math/include/boost/math/cstdfloat/cstdfloat_types.hpp +441 -0
  384. package/vendor/boost/math/include/boost/math/differentiation/autodiff.hpp +2061 -0
  385. package/vendor/boost/math/include/boost/math/differentiation/autodiff_cpp11.hpp +387 -0
  386. package/vendor/boost/math/include/boost/math/differentiation/autodiff_reverse.hpp +811 -0
  387. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_operator_expressions.hpp +276 -0
  388. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_ops_et.hpp +160 -0
  389. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_basic_ops_no_et.hpp +154 -0
  390. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_comparison_operator_overloads.hpp +167 -0
  391. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_erf_overloads.hpp +234 -0
  392. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_expression_template_base.hpp +258 -0
  393. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_helper_functions.hpp +18 -0
  394. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_memory_management.hpp +462 -0
  395. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_et.hpp +275 -0
  396. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_expressions.hpp +852 -0
  397. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_stl_no_et.hpp +266 -0
  398. package/vendor/boost/math/include/boost/math/differentiation/detail/reverse_mode_autodiff_utilities.hpp +51 -0
  399. package/vendor/boost/math/include/boost/math/differentiation/finite_difference.hpp +266 -0
  400. package/vendor/boost/math/include/boost/math/differentiation/lanczos_smoothing.hpp +591 -0
  401. package/vendor/boost/math/include/boost/math/distributions/arcsine.hpp +593 -0
  402. package/vendor/boost/math/include/boost/math/distributions/bernoulli.hpp +349 -0
  403. package/vendor/boost/math/include/boost/math/distributions/beta.hpp +584 -0
  404. package/vendor/boost/math/include/boost/math/distributions/binomial.hpp +729 -0
  405. package/vendor/boost/math/include/boost/math/distributions/cauchy.hpp +379 -0
  406. package/vendor/boost/math/include/boost/math/distributions/chi_squared.hpp +345 -0
  407. package/vendor/boost/math/include/boost/math/distributions/complement.hpp +198 -0
  408. package/vendor/boost/math/include/boost/math/distributions/detail/common_error_handling.hpp +228 -0
  409. package/vendor/boost/math/include/boost/math/distributions/detail/derived_accessors.hpp +190 -0
  410. package/vendor/boost/math/include/boost/math/distributions/detail/generic_mode.hpp +145 -0
  411. package/vendor/boost/math/include/boost/math/distributions/detail/generic_quantile.hpp +100 -0
  412. package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_cdf.hpp +101 -0
  413. package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_pdf.hpp +490 -0
  414. package/vendor/boost/math/include/boost/math/distributions/detail/hypergeometric_quantile.hpp +245 -0
  415. package/vendor/boost/math/include/boost/math/distributions/detail/inv_discrete_quantile.hpp +583 -0
  416. package/vendor/boost/math/include/boost/math/distributions/empirical_cumulative_distribution_function.hpp +73 -0
  417. package/vendor/boost/math/include/boost/math/distributions/exponential.hpp +352 -0
  418. package/vendor/boost/math/include/boost/math/distributions/extreme_value.hpp +388 -0
  419. package/vendor/boost/math/include/boost/math/distributions/find_location.hpp +141 -0
  420. package/vendor/boost/math/include/boost/math/distributions/find_scale.hpp +200 -0
  421. package/vendor/boost/math/include/boost/math/distributions/fisher_f.hpp +393 -0
  422. package/vendor/boost/math/include/boost/math/distributions/fwd.hpp +171 -0
  423. package/vendor/boost/math/include/boost/math/distributions/gamma.hpp +396 -0
  424. package/vendor/boost/math/include/boost/math/distributions/geometric.hpp +571 -0
  425. package/vendor/boost/math/include/boost/math/distributions/holtsmark.hpp +2518 -0
  426. package/vendor/boost/math/include/boost/math/distributions/hyperexponential.hpp +641 -0
  427. package/vendor/boost/math/include/boost/math/distributions/hypergeometric.hpp +313 -0
  428. package/vendor/boost/math/include/boost/math/distributions/inverse_chi_squared.hpp +398 -0
  429. package/vendor/boost/math/include/boost/math/distributions/inverse_gamma.hpp +504 -0
  430. package/vendor/boost/math/include/boost/math/distributions/inverse_gaussian.hpp +566 -0
  431. package/vendor/boost/math/include/boost/math/distributions/kolmogorov_smirnov.hpp +511 -0
  432. package/vendor/boost/math/include/boost/math/distributions/landau.hpp +4642 -0
  433. package/vendor/boost/math/include/boost/math/distributions/laplace.hpp +494 -0
  434. package/vendor/boost/math/include/boost/math/distributions/logistic.hpp +377 -0
  435. package/vendor/boost/math/include/boost/math/distributions/lognormal.hpp +361 -0
  436. package/vendor/boost/math/include/boost/math/distributions/mapairy.hpp +4220 -0
  437. package/vendor/boost/math/include/boost/math/distributions/negative_binomial.hpp +609 -0
  438. package/vendor/boost/math/include/boost/math/distributions/non_central_beta.hpp +981 -0
  439. package/vendor/boost/math/include/boost/math/distributions/non_central_chi_squared.hpp +998 -0
  440. package/vendor/boost/math/include/boost/math/distributions/non_central_f.hpp +712 -0
  441. package/vendor/boost/math/include/boost/math/distributions/non_central_t.hpp +1324 -0
  442. package/vendor/boost/math/include/boost/math/distributions/normal.hpp +368 -0
  443. package/vendor/boost/math/include/boost/math/distributions/pareto.hpp +508 -0
  444. package/vendor/boost/math/include/boost/math/distributions/poisson.hpp +563 -0
  445. package/vendor/boost/math/include/boost/math/distributions/rayleigh.hpp +381 -0
  446. package/vendor/boost/math/include/boost/math/distributions/saspoint5.hpp +2796 -0
  447. package/vendor/boost/math/include/boost/math/distributions/skew_normal.hpp +760 -0
  448. package/vendor/boost/math/include/boost/math/distributions/students_t.hpp +721 -0
  449. package/vendor/boost/math/include/boost/math/distributions/triangular.hpp +548 -0
  450. package/vendor/boost/math/include/boost/math/distributions/uniform.hpp +398 -0
  451. package/vendor/boost/math/include/boost/math/distributions/weibull.hpp +487 -0
  452. package/vendor/boost/math/include/boost/math/distributions.hpp +58 -0
  453. package/vendor/boost/math/include/boost/math/filters/daubechies.hpp +99 -0
  454. package/vendor/boost/math/include/boost/math/interpolators/barycentric_rational.hpp +99 -0
  455. package/vendor/boost/math/include/boost/math/interpolators/bezier_polynomial.hpp +60 -0
  456. package/vendor/boost/math/include/boost/math/interpolators/bilinear_uniform.hpp +54 -0
  457. package/vendor/boost/math/include/boost/math/interpolators/cardinal_cubic_b_spline.hpp +87 -0
  458. package/vendor/boost/math/include/boost/math/interpolators/cardinal_quadratic_b_spline.hpp +57 -0
  459. package/vendor/boost/math/include/boost/math/interpolators/cardinal_quintic_b_spline.hpp +62 -0
  460. package/vendor/boost/math/include/boost/math/interpolators/cardinal_trigonometric.hpp +58 -0
  461. package/vendor/boost/math/include/boost/math/interpolators/catmull_rom.hpp +310 -0
  462. package/vendor/boost/math/include/boost/math/interpolators/cubic_b_spline.hpp +90 -0
  463. package/vendor/boost/math/include/boost/math/interpolators/cubic_hermite.hpp +142 -0
  464. package/vendor/boost/math/include/boost/math/interpolators/detail/barycentric_rational_detail.hpp +215 -0
  465. package/vendor/boost/math/include/boost/math/interpolators/detail/bezier_polynomial_detail.hpp +167 -0
  466. package/vendor/boost/math/include/boost/math/interpolators/detail/bilinear_uniform_detail.hpp +137 -0
  467. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_cubic_b_spline_detail.hpp +331 -0
  468. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_quadratic_b_spline_detail.hpp +208 -0
  469. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_quintic_b_spline_detail.hpp +241 -0
  470. package/vendor/boost/math/include/boost/math/interpolators/detail/cardinal_trigonometric_detail.hpp +684 -0
  471. package/vendor/boost/math/include/boost/math/interpolators/detail/cubic_b_spline_detail.hpp +330 -0
  472. package/vendor/boost/math/include/boost/math/interpolators/detail/cubic_hermite_detail.hpp +439 -0
  473. package/vendor/boost/math/include/boost/math/interpolators/detail/quintic_hermite_detail.hpp +586 -0
  474. package/vendor/boost/math/include/boost/math/interpolators/detail/septic_hermite_detail.hpp +653 -0
  475. package/vendor/boost/math/include/boost/math/interpolators/detail/vector_barycentric_rational_detail.hpp +196 -0
  476. package/vendor/boost/math/include/boost/math/interpolators/detail/whittaker_shannon_detail.hpp +128 -0
  477. package/vendor/boost/math/include/boost/math/interpolators/makima.hpp +178 -0
  478. package/vendor/boost/math/include/boost/math/interpolators/pchip.hpp +136 -0
  479. package/vendor/boost/math/include/boost/math/interpolators/quintic_hermite.hpp +143 -0
  480. package/vendor/boost/math/include/boost/math/interpolators/septic_hermite.hpp +147 -0
  481. package/vendor/boost/math/include/boost/math/interpolators/vector_barycentric_rational.hpp +82 -0
  482. package/vendor/boost/math/include/boost/math/interpolators/whittaker_shannon.hpp +47 -0
  483. package/vendor/boost/math/include/boost/math/octonion.hpp +4254 -0
  484. package/vendor/boost/math/include/boost/math/optimization/cma_es.hpp +392 -0
  485. package/vendor/boost/math/include/boost/math/optimization/detail/common.hpp +200 -0
  486. package/vendor/boost/math/include/boost/math/optimization/detail/differentiable_opt_utilties.hpp +157 -0
  487. package/vendor/boost/math/include/boost/math/optimization/detail/gradient_opt_base.hpp +92 -0
  488. package/vendor/boost/math/include/boost/math/optimization/detail/line_search_policies.hpp +206 -0
  489. package/vendor/boost/math/include/boost/math/optimization/detail/rdiff_optimization_policies.hpp +134 -0
  490. package/vendor/boost/math/include/boost/math/optimization/differential_evolution.hpp +236 -0
  491. package/vendor/boost/math/include/boost/math/optimization/gradient_descent.hpp +202 -0
  492. package/vendor/boost/math/include/boost/math/optimization/gradient_optimizers.hpp +18 -0
  493. package/vendor/boost/math/include/boost/math/optimization/jso.hpp +465 -0
  494. package/vendor/boost/math/include/boost/math/optimization/lbfgs.hpp +382 -0
  495. package/vendor/boost/math/include/boost/math/optimization/minimizer.hpp +336 -0
  496. package/vendor/boost/math/include/boost/math/optimization/nesterov.hpp +208 -0
  497. package/vendor/boost/math/include/boost/math/optimization/random_search.hpp +145 -0
  498. package/vendor/boost/math/include/boost/math/policies/error_handling.hpp +1062 -0
  499. package/vendor/boost/math/include/boost/math/policies/policy.hpp +1034 -0
  500. package/vendor/boost/math/include/boost/math/quadrature/detail/exp_sinh_detail.hpp +2002 -0
  501. package/vendor/boost/math/include/boost/math/quadrature/detail/ooura_fourier_integrals_detail.hpp +692 -0
  502. package/vendor/boost/math/include/boost/math/quadrature/detail/sinh_sinh_detail.hpp +1353 -0
  503. package/vendor/boost/math/include/boost/math/quadrature/detail/tanh_sinh_detail.hpp +879 -0
  504. package/vendor/boost/math/include/boost/math/quadrature/exp_sinh.hpp +180 -0
  505. package/vendor/boost/math/include/boost/math/quadrature/gauss.hpp +904 -0
  506. package/vendor/boost/math/include/boost/math/quadrature/gauss_kronrod.hpp +1317 -0
  507. package/vendor/boost/math/include/boost/math/quadrature/naive_monte_carlo.hpp +469 -0
  508. package/vendor/boost/math/include/boost/math/quadrature/ooura_fourier_integrals.hpp +68 -0
  509. package/vendor/boost/math/include/boost/math/quadrature/sinh_sinh.hpp +72 -0
  510. package/vendor/boost/math/include/boost/math/quadrature/tanh_sinh.hpp +289 -0
  511. package/vendor/boost/math/include/boost/math/quadrature/trapezoidal.hpp +125 -0
  512. package/vendor/boost/math/include/boost/math/quadrature/wavelet_transforms.hpp +47 -0
  513. package/vendor/boost/math/include/boost/math/quaternion.hpp +1190 -0
  514. package/vendor/boost/math/include/boost/math/special_functions/acosh.hpp +102 -0
  515. package/vendor/boost/math/include/boost/math/special_functions/airy.hpp +475 -0
  516. package/vendor/boost/math/include/boost/math/special_functions/asinh.hpp +110 -0
  517. package/vendor/boost/math/include/boost/math/special_functions/atanh.hpp +116 -0
  518. package/vendor/boost/math/include/boost/math/special_functions/bernoulli.hpp +149 -0
  519. package/vendor/boost/math/include/boost/math/special_functions/bessel.hpp +795 -0
  520. package/vendor/boost/math/include/boost/math/special_functions/bessel_iterators.hpp +187 -0
  521. package/vendor/boost/math/include/boost/math/special_functions/bessel_prime.hpp +343 -0
  522. package/vendor/boost/math/include/boost/math/special_functions/beta.hpp +1870 -0
  523. package/vendor/boost/math/include/boost/math/special_functions/binomial.hpp +87 -0
  524. package/vendor/boost/math/include/boost/math/special_functions/cardinal_b_spline.hpp +218 -0
  525. package/vendor/boost/math/include/boost/math/special_functions/cbrt.hpp +215 -0
  526. package/vendor/boost/math/include/boost/math/special_functions/chebyshev.hpp +314 -0
  527. package/vendor/boost/math/include/boost/math/special_functions/chebyshev_transform.hpp +237 -0
  528. package/vendor/boost/math/include/boost/math/special_functions/cos_pi.hpp +128 -0
  529. package/vendor/boost/math/include/boost/math/special_functions/daubechies_scaling.hpp +491 -0
  530. package/vendor/boost/math/include/boost/math/special_functions/daubechies_wavelet.hpp +266 -0
  531. package/vendor/boost/math/include/boost/math/special_functions/detail/airy_ai_bi_zero.hpp +222 -0
  532. package/vendor/boost/math/include/boost/math/special_functions/detail/bernoulli_details.hpp +629 -0
  533. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_derivatives_linear.hpp +107 -0
  534. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_i0.hpp +550 -0
  535. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_i1.hpp +556 -0
  536. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_ik.hpp +447 -0
  537. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_j0.hpp +192 -0
  538. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_j1.hpp +179 -0
  539. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jn.hpp +127 -0
  540. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy.hpp +603 -0
  541. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_asym.hpp +230 -0
  542. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_derivatives_asym.hpp +141 -0
  543. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_derivatives_series.hpp +219 -0
  544. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_series.hpp +267 -0
  545. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_jy_zero.hpp +643 -0
  546. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_k0.hpp +485 -0
  547. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_k1.hpp +526 -0
  548. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_kn.hpp +91 -0
  549. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_y0.hpp +205 -0
  550. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_y1.hpp +183 -0
  551. package/vendor/boost/math/include/boost/math/special_functions/detail/bessel_yn.hpp +113 -0
  552. package/vendor/boost/math/include/boost/math/special_functions/detail/daubechies_scaling_integer_grid.hpp +244 -0
  553. package/vendor/boost/math/include/boost/math/special_functions/detail/erf_inv.hpp +559 -0
  554. package/vendor/boost/math/include/boost/math/special_functions/detail/fp_traits.hpp +562 -0
  555. package/vendor/boost/math/include/boost/math/special_functions/detail/gamma_inva.hpp +241 -0
  556. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_0F1_bessel.hpp +46 -0
  557. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_addition_theorems_on_z.hpp +293 -0
  558. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_bessel.hpp +768 -0
  559. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_by_ratios.hpp +678 -0
  560. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_cf.hpp +50 -0
  561. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_large_a.hpp +35 -0
  562. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_large_abz.hpp +492 -0
  563. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_negative_b_regions.hpp +521 -0
  564. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_recurrence.hpp +522 -0
  565. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_scaled_series.hpp +60 -0
  566. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_1F1_small_a_negative_b_by_ratio.hpp +70 -0
  567. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_asym.hpp +179 -0
  568. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_cf.hpp +228 -0
  569. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_pFq_checked_series.hpp +687 -0
  570. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_pade.hpp +131 -0
  571. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_rational.hpp +167 -0
  572. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_separated_series.hpp +50 -0
  573. package/vendor/boost/math/include/boost/math/special_functions/detail/hypergeometric_series.hpp +434 -0
  574. package/vendor/boost/math/include/boost/math/special_functions/detail/ibeta_inv_ab.hpp +331 -0
  575. package/vendor/boost/math/include/boost/math/special_functions/detail/ibeta_inverse.hpp +1122 -0
  576. package/vendor/boost/math/include/boost/math/special_functions/detail/iconv.hpp +43 -0
  577. package/vendor/boost/math/include/boost/math/special_functions/detail/igamma_inverse.hpp +587 -0
  578. package/vendor/boost/math/include/boost/math/special_functions/detail/igamma_large.hpp +823 -0
  579. package/vendor/boost/math/include/boost/math/special_functions/detail/lambert_w_lookup_table.ipp +162 -0
  580. package/vendor/boost/math/include/boost/math/special_functions/detail/lanczos_sse2.hpp +238 -0
  581. package/vendor/boost/math/include/boost/math/special_functions/detail/lgamma_small.hpp +569 -0
  582. package/vendor/boost/math/include/boost/math/special_functions/detail/polygamma.hpp +538 -0
  583. package/vendor/boost/math/include/boost/math/special_functions/detail/round_fwd.hpp +87 -0
  584. package/vendor/boost/math/include/boost/math/special_functions/detail/t_distribution_inv.hpp +567 -0
  585. package/vendor/boost/math/include/boost/math/special_functions/detail/unchecked_bernoulli.hpp +1305 -0
  586. package/vendor/boost/math/include/boost/math/special_functions/detail/unchecked_factorial.hpp +1727 -0
  587. package/vendor/boost/math/include/boost/math/special_functions/digamma.hpp +631 -0
  588. package/vendor/boost/math/include/boost/math/special_functions/ellint_1.hpp +815 -0
  589. package/vendor/boost/math/include/boost/math/special_functions/ellint_2.hpp +756 -0
  590. package/vendor/boost/math/include/boost/math/special_functions/ellint_3.hpp +374 -0
  591. package/vendor/boost/math/include/boost/math/special_functions/ellint_d.hpp +183 -0
  592. package/vendor/boost/math/include/boost/math/special_functions/ellint_rc.hpp +112 -0
  593. package/vendor/boost/math/include/boost/math/special_functions/ellint_rd.hpp +207 -0
  594. package/vendor/boost/math/include/boost/math/special_functions/ellint_rf.hpp +169 -0
  595. package/vendor/boost/math/include/boost/math/special_functions/ellint_rg.hpp +130 -0
  596. package/vendor/boost/math/include/boost/math/special_functions/ellint_rj.hpp +299 -0
  597. package/vendor/boost/math/include/boost/math/special_functions/erf.hpp +1334 -0
  598. package/vendor/boost/math/include/boost/math/special_functions/expint.hpp +1614 -0
  599. package/vendor/boost/math/include/boost/math/special_functions/expm1.hpp +416 -0
  600. package/vendor/boost/math/include/boost/math/special_functions/factorials.hpp +276 -0
  601. package/vendor/boost/math/include/boost/math/special_functions/fibonacci.hpp +92 -0
  602. package/vendor/boost/math/include/boost/math/special_functions/fourier_transform_daubechies.hpp +248 -0
  603. package/vendor/boost/math/include/boost/math/special_functions/fpclassify.hpp +797 -0
  604. package/vendor/boost/math/include/boost/math/special_functions/gamma.hpp +2628 -0
  605. package/vendor/boost/math/include/boost/math/special_functions/gegenbauer.hpp +84 -0
  606. package/vendor/boost/math/include/boost/math/special_functions/hankel.hpp +186 -0
  607. package/vendor/boost/math/include/boost/math/special_functions/hermite.hpp +79 -0
  608. package/vendor/boost/math/include/boost/math/special_functions/heuman_lambda.hpp +97 -0
  609. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_0F1.hpp +116 -0
  610. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_1F0.hpp +69 -0
  611. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_1F1.hpp +822 -0
  612. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_2F0.hpp +163 -0
  613. package/vendor/boost/math/include/boost/math/special_functions/hypergeometric_pFq.hpp +205 -0
  614. package/vendor/boost/math/include/boost/math/special_functions/hypot.hpp +148 -0
  615. package/vendor/boost/math/include/boost/math/special_functions/jacobi.hpp +69 -0
  616. package/vendor/boost/math/include/boost/math/special_functions/jacobi_elliptic.hpp +319 -0
  617. package/vendor/boost/math/include/boost/math/special_functions/jacobi_theta.hpp +802 -0
  618. package/vendor/boost/math/include/boost/math/special_functions/jacobi_zeta.hpp +83 -0
  619. package/vendor/boost/math/include/boost/math/special_functions/laguerre.hpp +139 -0
  620. package/vendor/boost/math/include/boost/math/special_functions/lambert_w.hpp +2171 -0
  621. package/vendor/boost/math/include/boost/math/special_functions/lanczos.hpp +2760 -0
  622. package/vendor/boost/math/include/boost/math/special_functions/legendre.hpp +380 -0
  623. package/vendor/boost/math/include/boost/math/special_functions/legendre_stieltjes.hpp +234 -0
  624. package/vendor/boost/math/include/boost/math/special_functions/log1p.hpp +417 -0
  625. package/vendor/boost/math/include/boost/math/special_functions/logaddexp.hpp +41 -0
  626. package/vendor/boost/math/include/boost/math/special_functions/logistic_sigmoid.hpp +46 -0
  627. package/vendor/boost/math/include/boost/math/special_functions/logit.hpp +56 -0
  628. package/vendor/boost/math/include/boost/math/special_functions/logsumexp.hpp +60 -0
  629. package/vendor/boost/math/include/boost/math/special_functions/math_fwd.hpp +1927 -0
  630. package/vendor/boost/math/include/boost/math/special_functions/modf.hpp +74 -0
  631. package/vendor/boost/math/include/boost/math/special_functions/next.hpp +886 -0
  632. package/vendor/boost/math/include/boost/math/special_functions/nonfinite_num_facets.hpp +588 -0
  633. package/vendor/boost/math/include/boost/math/special_functions/owens_t.hpp +1067 -0
  634. package/vendor/boost/math/include/boost/math/special_functions/polygamma.hpp +83 -0
  635. package/vendor/boost/math/include/boost/math/special_functions/pow.hpp +144 -0
  636. package/vendor/boost/math/include/boost/math/special_functions/powm1.hpp +101 -0
  637. package/vendor/boost/math/include/boost/math/special_functions/prime.hpp +2433 -0
  638. package/vendor/boost/math/include/boost/math/special_functions/relative_difference.hpp +134 -0
  639. package/vendor/boost/math/include/boost/math/special_functions/round.hpp +353 -0
  640. package/vendor/boost/math/include/boost/math/special_functions/rsqrt.hpp +52 -0
  641. package/vendor/boost/math/include/boost/math/special_functions/sign.hpp +241 -0
  642. package/vendor/boost/math/include/boost/math/special_functions/sin_pi.hpp +135 -0
  643. package/vendor/boost/math/include/boost/math/special_functions/sinc.hpp +123 -0
  644. package/vendor/boost/math/include/boost/math/special_functions/sinhc.hpp +142 -0
  645. package/vendor/boost/math/include/boost/math/special_functions/spherical_harmonic.hpp +205 -0
  646. package/vendor/boost/math/include/boost/math/special_functions/sqrt1pm1.hpp +49 -0
  647. package/vendor/boost/math/include/boost/math/special_functions/trigamma.hpp +448 -0
  648. package/vendor/boost/math/include/boost/math/special_functions/trunc.hpp +385 -0
  649. package/vendor/boost/math/include/boost/math/special_functions/ulp.hpp +102 -0
  650. package/vendor/boost/math/include/boost/math/special_functions/zeta.hpp +1081 -0
  651. package/vendor/boost/math/include/boost/math/special_functions.hpp +86 -0
  652. package/vendor/boost/math/include/boost/math/statistics/anderson_darling.hpp +112 -0
  653. package/vendor/boost/math/include/boost/math/statistics/bivariate_statistics.hpp +470 -0
  654. package/vendor/boost/math/include/boost/math/statistics/chatterjee_correlation.hpp +159 -0
  655. package/vendor/boost/math/include/boost/math/statistics/detail/rank.hpp +140 -0
  656. package/vendor/boost/math/include/boost/math/statistics/detail/single_pass.hpp +401 -0
  657. package/vendor/boost/math/include/boost/math/statistics/linear_regression.hpp +133 -0
  658. package/vendor/boost/math/include/boost/math/statistics/ljung_box.hpp +70 -0
  659. package/vendor/boost/math/include/boost/math/statistics/runs_test.hpp +121 -0
  660. package/vendor/boost/math/include/boost/math/statistics/signal_statistics.hpp +350 -0
  661. package/vendor/boost/math/include/boost/math/statistics/t_test.hpp +275 -0
  662. package/vendor/boost/math/include/boost/math/statistics/univariate_statistics.hpp +1184 -0
  663. package/vendor/boost/math/include/boost/math/statistics/z_test.hpp +161 -0
  664. package/vendor/boost/math/include/boost/math/tools/agm.hpp +47 -0
  665. package/vendor/boost/math/include/boost/math/tools/array.hpp +41 -0
  666. package/vendor/boost/math/include/boost/math/tools/assert.hpp +49 -0
  667. package/vendor/boost/math/include/boost/math/tools/atomic.hpp +50 -0
  668. package/vendor/boost/math/include/boost/math/tools/big_constant.hpp +110 -0
  669. package/vendor/boost/math/include/boost/math/tools/bivariate_statistics.hpp +96 -0
  670. package/vendor/boost/math/include/boost/math/tools/centered_continued_fraction.hpp +173 -0
  671. package/vendor/boost/math/include/boost/math/tools/cohen_acceleration.hpp +51 -0
  672. package/vendor/boost/math/include/boost/math/tools/color_maps.hpp +1943 -0
  673. package/vendor/boost/math/include/boost/math/tools/complex.hpp +115 -0
  674. package/vendor/boost/math/include/boost/math/tools/concepts.hpp +24 -0
  675. package/vendor/boost/math/include/boost/math/tools/condition_numbers.hpp +144 -0
  676. package/vendor/boost/math/include/boost/math/tools/config.hpp +856 -0
  677. package/vendor/boost/math/include/boost/math/tools/convert_from_string.hpp +85 -0
  678. package/vendor/boost/math/include/boost/math/tools/cstdint.hpp +107 -0
  679. package/vendor/boost/math/include/boost/math/tools/cubic_roots.hpp +198 -0
  680. package/vendor/boost/math/include/boost/math/tools/cxx03_warn.hpp +95 -0
  681. package/vendor/boost/math/include/boost/math/tools/detail/is_const_iterable.hpp +38 -0
  682. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_10.hpp +84 -0
  683. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_11.hpp +90 -0
  684. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_12.hpp +96 -0
  685. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_13.hpp +102 -0
  686. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_14.hpp +108 -0
  687. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_15.hpp +114 -0
  688. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_16.hpp +120 -0
  689. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_17.hpp +126 -0
  690. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_18.hpp +132 -0
  691. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_19.hpp +138 -0
  692. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_2.hpp +36 -0
  693. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_20.hpp +144 -0
  694. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_3.hpp +42 -0
  695. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_4.hpp +48 -0
  696. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_5.hpp +54 -0
  697. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_6.hpp +60 -0
  698. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_7.hpp +66 -0
  699. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_8.hpp +72 -0
  700. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner1_9.hpp +78 -0
  701. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_10.hpp +90 -0
  702. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_11.hpp +97 -0
  703. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_12.hpp +104 -0
  704. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_13.hpp +111 -0
  705. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_14.hpp +118 -0
  706. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_15.hpp +125 -0
  707. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_16.hpp +132 -0
  708. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_17.hpp +139 -0
  709. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_18.hpp +146 -0
  710. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_19.hpp +153 -0
  711. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_2.hpp +48 -0
  712. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_20.hpp +160 -0
  713. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_3.hpp +48 -0
  714. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_4.hpp +48 -0
  715. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_5.hpp +55 -0
  716. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_6.hpp +62 -0
  717. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_7.hpp +69 -0
  718. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_8.hpp +76 -0
  719. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner2_9.hpp +83 -0
  720. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_10.hpp +156 -0
  721. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_11.hpp +181 -0
  722. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_12.hpp +208 -0
  723. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_13.hpp +237 -0
  724. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_14.hpp +268 -0
  725. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_15.hpp +301 -0
  726. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_16.hpp +336 -0
  727. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_17.hpp +373 -0
  728. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_18.hpp +412 -0
  729. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_19.hpp +453 -0
  730. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_2.hpp +48 -0
  731. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_20.hpp +496 -0
  732. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_3.hpp +48 -0
  733. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_4.hpp +48 -0
  734. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_5.hpp +61 -0
  735. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_6.hpp +76 -0
  736. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_7.hpp +93 -0
  737. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_8.hpp +112 -0
  738. package/vendor/boost/math/include/boost/math/tools/detail/polynomial_horner3_9.hpp +133 -0
  739. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_10.hpp +138 -0
  740. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_11.hpp +150 -0
  741. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_12.hpp +162 -0
  742. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_13.hpp +174 -0
  743. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_14.hpp +186 -0
  744. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_15.hpp +198 -0
  745. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_16.hpp +210 -0
  746. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_17.hpp +222 -0
  747. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_18.hpp +234 -0
  748. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_19.hpp +246 -0
  749. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_2.hpp +42 -0
  750. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_20.hpp +258 -0
  751. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_3.hpp +54 -0
  752. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_4.hpp +66 -0
  753. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_5.hpp +78 -0
  754. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_6.hpp +90 -0
  755. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_7.hpp +102 -0
  756. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_8.hpp +114 -0
  757. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner1_9.hpp +126 -0
  758. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_10.hpp +144 -0
  759. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_11.hpp +160 -0
  760. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_12.hpp +176 -0
  761. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_13.hpp +192 -0
  762. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_14.hpp +208 -0
  763. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_15.hpp +224 -0
  764. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_16.hpp +240 -0
  765. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_17.hpp +256 -0
  766. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_18.hpp +272 -0
  767. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_19.hpp +288 -0
  768. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_2.hpp +48 -0
  769. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_20.hpp +304 -0
  770. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_3.hpp +48 -0
  771. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_4.hpp +48 -0
  772. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_5.hpp +64 -0
  773. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_6.hpp +80 -0
  774. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_7.hpp +96 -0
  775. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_8.hpp +112 -0
  776. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner2_9.hpp +128 -0
  777. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_10.hpp +396 -0
  778. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_11.hpp +482 -0
  779. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_12.hpp +576 -0
  780. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_13.hpp +678 -0
  781. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_14.hpp +788 -0
  782. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_15.hpp +906 -0
  783. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_16.hpp +1032 -0
  784. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_17.hpp +1166 -0
  785. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_18.hpp +1308 -0
  786. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_19.hpp +1458 -0
  787. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_2.hpp +48 -0
  788. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_20.hpp +1616 -0
  789. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_3.hpp +48 -0
  790. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_4.hpp +48 -0
  791. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_5.hpp +86 -0
  792. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_6.hpp +132 -0
  793. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_7.hpp +186 -0
  794. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_8.hpp +248 -0
  795. package/vendor/boost/math/include/boost/math/tools/detail/rational_horner3_9.hpp +318 -0
  796. package/vendor/boost/math/include/boost/math/tools/engel_expansion.hpp +124 -0
  797. package/vendor/boost/math/include/boost/math/tools/estrin.hpp +72 -0
  798. package/vendor/boost/math/include/boost/math/tools/fraction.hpp +354 -0
  799. package/vendor/boost/math/include/boost/math/tools/header_deprecated.hpp +27 -0
  800. package/vendor/boost/math/include/boost/math/tools/is_constant_evaluated.hpp +51 -0
  801. package/vendor/boost/math/include/boost/math/tools/is_detected.hpp +56 -0
  802. package/vendor/boost/math/include/boost/math/tools/is_standalone.hpp +18 -0
  803. package/vendor/boost/math/include/boost/math/tools/luroth_expansion.hpp +147 -0
  804. package/vendor/boost/math/include/boost/math/tools/minima.hpp +164 -0
  805. package/vendor/boost/math/include/boost/math/tools/mp.hpp +423 -0
  806. package/vendor/boost/math/include/boost/math/tools/norms.hpp +638 -0
  807. package/vendor/boost/math/include/boost/math/tools/nothrow.hpp +27 -0
  808. package/vendor/boost/math/include/boost/math/tools/numeric_limits.hpp +888 -0
  809. package/vendor/boost/math/include/boost/math/tools/numerical_differentiation.hpp +12 -0
  810. package/vendor/boost/math/include/boost/math/tools/polynomial.hpp +862 -0
  811. package/vendor/boost/math/include/boost/math/tools/polynomial_gcd.hpp +268 -0
  812. package/vendor/boost/math/include/boost/math/tools/precision.hpp +418 -0
  813. package/vendor/boost/math/include/boost/math/tools/promotion.hpp +135 -0
  814. package/vendor/boost/math/include/boost/math/tools/quartic_roots.hpp +157 -0
  815. package/vendor/boost/math/include/boost/math/tools/random_vector.hpp +101 -0
  816. package/vendor/boost/math/include/boost/math/tools/rational.hpp +346 -0
  817. package/vendor/boost/math/include/boost/math/tools/real_cast.hpp +31 -0
  818. package/vendor/boost/math/include/boost/math/tools/recurrence.hpp +330 -0
  819. package/vendor/boost/math/include/boost/math/tools/roots.hpp +1072 -0
  820. package/vendor/boost/math/include/boost/math/tools/series.hpp +221 -0
  821. package/vendor/boost/math/include/boost/math/tools/signal_statistics.hpp +353 -0
  822. package/vendor/boost/math/include/boost/math/tools/simple_continued_fraction.hpp +177 -0
  823. package/vendor/boost/math/include/boost/math/tools/stats.hpp +87 -0
  824. package/vendor/boost/math/include/boost/math/tools/test_value.hpp +143 -0
  825. package/vendor/boost/math/include/boost/math/tools/throw_exception.hpp +43 -0
  826. package/vendor/boost/math/include/boost/math/tools/toms748_solve.hpp +636 -0
  827. package/vendor/boost/math/include/boost/math/tools/traits.hpp +140 -0
  828. package/vendor/boost/math/include/boost/math/tools/tuple.hpp +88 -0
  829. package/vendor/boost/math/include/boost/math/tools/type_traits.hpp +489 -0
  830. package/vendor/boost/math/include/boost/math/tools/ulps_plot.hpp +598 -0
  831. package/vendor/boost/math/include/boost/math/tools/univariate_statistics.hpp +437 -0
  832. package/vendor/boost/math/include/boost/math/tools/user.hpp +105 -0
  833. package/vendor/boost/math/include/boost/math/tools/utility.hpp +69 -0
  834. package/vendor/boost/math/include/boost/math/tools/workaround.hpp +42 -0
  835. package/vendor/boost/math/include/boost/math/tr1.hpp +1121 -0
  836. package/vendor/boost/math/include/boost/math/tr1_c_macros.ipp +810 -0
  837. package/vendor/boost/math/include/boost/math_fwd.hpp +42 -0
  838. package/vendor/boost/multiprecision/LICENSE +23 -0
  839. package/vendor/boost/multiprecision/README.md +168 -0
  840. package/vendor/boost/multiprecision/include/boost/config/abi/borland_prefix.hpp +27 -0
  841. package/vendor/boost/multiprecision/include/boost/config/abi/borland_suffix.hpp +12 -0
  842. package/vendor/boost/multiprecision/include/boost/config/abi/msvc_prefix.hpp +22 -0
  843. package/vendor/boost/multiprecision/include/boost/config/abi/msvc_suffix.hpp +8 -0
  844. package/vendor/boost/multiprecision/include/boost/config/abi_prefix.hpp +25 -0
  845. package/vendor/boost/multiprecision/include/boost/config/abi_suffix.hpp +25 -0
  846. package/vendor/boost/multiprecision/include/boost/config/assert_cxx03.hpp +211 -0
  847. package/vendor/boost/multiprecision/include/boost/config/assert_cxx11.hpp +212 -0
  848. package/vendor/boost/multiprecision/include/boost/config/assert_cxx14.hpp +47 -0
  849. package/vendor/boost/multiprecision/include/boost/config/assert_cxx17.hpp +65 -0
  850. package/vendor/boost/multiprecision/include/boost/config/assert_cxx20.hpp +59 -0
  851. package/vendor/boost/multiprecision/include/boost/config/assert_cxx23.hpp +41 -0
  852. package/vendor/boost/multiprecision/include/boost/config/assert_cxx98.hpp +23 -0
  853. package/vendor/boost/multiprecision/include/boost/config/auto_link.hpp +530 -0
  854. package/vendor/boost/multiprecision/include/boost/config/compiler/borland.hpp +342 -0
  855. package/vendor/boost/multiprecision/include/boost/config/compiler/clang.hpp +370 -0
  856. package/vendor/boost/multiprecision/include/boost/config/compiler/clang_version.hpp +98 -0
  857. package/vendor/boost/multiprecision/include/boost/config/compiler/codegear.hpp +389 -0
  858. package/vendor/boost/multiprecision/include/boost/config/compiler/comeau.hpp +59 -0
  859. package/vendor/boost/multiprecision/include/boost/config/compiler/common_edg.hpp +185 -0
  860. package/vendor/boost/multiprecision/include/boost/config/compiler/compaq_cxx.hpp +19 -0
  861. package/vendor/boost/multiprecision/include/boost/config/compiler/cray.hpp +446 -0
  862. package/vendor/boost/multiprecision/include/boost/config/compiler/diab.hpp +26 -0
  863. package/vendor/boost/multiprecision/include/boost/config/compiler/digitalmars.hpp +146 -0
  864. package/vendor/boost/multiprecision/include/boost/config/compiler/gcc.hpp +386 -0
  865. package/vendor/boost/multiprecision/include/boost/config/compiler/gcc_xml.hpp +115 -0
  866. package/vendor/boost/multiprecision/include/boost/config/compiler/greenhills.hpp +28 -0
  867. package/vendor/boost/multiprecision/include/boost/config/compiler/hp_acc.hpp +153 -0
  868. package/vendor/boost/multiprecision/include/boost/config/compiler/intel.hpp +577 -0
  869. package/vendor/boost/multiprecision/include/boost/config/compiler/kai.hpp +33 -0
  870. package/vendor/boost/multiprecision/include/boost/config/compiler/metrowerks.hpp +201 -0
  871. package/vendor/boost/multiprecision/include/boost/config/compiler/mpw.hpp +143 -0
  872. package/vendor/boost/multiprecision/include/boost/config/compiler/nvcc.hpp +64 -0
  873. package/vendor/boost/multiprecision/include/boost/config/compiler/pathscale.hpp +141 -0
  874. package/vendor/boost/multiprecision/include/boost/config/compiler/pgi.hpp +23 -0
  875. package/vendor/boost/multiprecision/include/boost/config/compiler/sgi_mipspro.hpp +29 -0
  876. package/vendor/boost/multiprecision/include/boost/config/compiler/sunpro_cc.hpp +225 -0
  877. package/vendor/boost/multiprecision/include/boost/config/compiler/vacpp.hpp +189 -0
  878. package/vendor/boost/multiprecision/include/boost/config/compiler/visualc.hpp +400 -0
  879. package/vendor/boost/multiprecision/include/boost/config/compiler/xlcpp.hpp +303 -0
  880. package/vendor/boost/multiprecision/include/boost/config/compiler/xlcpp_zos.hpp +174 -0
  881. package/vendor/boost/multiprecision/include/boost/config/detail/cxx_composite.hpp +218 -0
  882. package/vendor/boost/multiprecision/include/boost/config/detail/posix_features.hpp +95 -0
  883. package/vendor/boost/multiprecision/include/boost/config/detail/select_compiler_config.hpp +157 -0
  884. package/vendor/boost/multiprecision/include/boost/config/detail/select_platform_config.hpp +147 -0
  885. package/vendor/boost/multiprecision/include/boost/config/detail/select_stdlib_config.hpp +121 -0
  886. package/vendor/boost/multiprecision/include/boost/config/detail/suffix.hpp +1334 -0
  887. package/vendor/boost/multiprecision/include/boost/config/header_deprecated.hpp +26 -0
  888. package/vendor/boost/multiprecision/include/boost/config/helper_macros.hpp +37 -0
  889. package/vendor/boost/multiprecision/include/boost/config/no_tr1/cmath.hpp +28 -0
  890. package/vendor/boost/multiprecision/include/boost/config/no_tr1/complex.hpp +28 -0
  891. package/vendor/boost/multiprecision/include/boost/config/no_tr1/functional.hpp +28 -0
  892. package/vendor/boost/multiprecision/include/boost/config/no_tr1/memory.hpp +28 -0
  893. package/vendor/boost/multiprecision/include/boost/config/no_tr1/utility.hpp +28 -0
  894. package/vendor/boost/multiprecision/include/boost/config/platform/aix.hpp +33 -0
  895. package/vendor/boost/multiprecision/include/boost/config/platform/amigaos.hpp +15 -0
  896. package/vendor/boost/multiprecision/include/boost/config/platform/beos.hpp +26 -0
  897. package/vendor/boost/multiprecision/include/boost/config/platform/bsd.hpp +83 -0
  898. package/vendor/boost/multiprecision/include/boost/config/platform/cloudabi.hpp +18 -0
  899. package/vendor/boost/multiprecision/include/boost/config/platform/cray.hpp +18 -0
  900. package/vendor/boost/multiprecision/include/boost/config/platform/cygwin.hpp +71 -0
  901. package/vendor/boost/multiprecision/include/boost/config/platform/haiku.hpp +31 -0
  902. package/vendor/boost/multiprecision/include/boost/config/platform/hpux.hpp +87 -0
  903. package/vendor/boost/multiprecision/include/boost/config/platform/irix.hpp +31 -0
  904. package/vendor/boost/multiprecision/include/boost/config/platform/linux.hpp +106 -0
  905. package/vendor/boost/multiprecision/include/boost/config/platform/macos.hpp +87 -0
  906. package/vendor/boost/multiprecision/include/boost/config/platform/qnxnto.hpp +31 -0
  907. package/vendor/boost/multiprecision/include/boost/config/platform/solaris.hpp +31 -0
  908. package/vendor/boost/multiprecision/include/boost/config/platform/symbian.hpp +97 -0
  909. package/vendor/boost/multiprecision/include/boost/config/platform/vms.hpp +25 -0
  910. package/vendor/boost/multiprecision/include/boost/config/platform/vxworks.hpp +422 -0
  911. package/vendor/boost/multiprecision/include/boost/config/platform/wasm.hpp +23 -0
  912. package/vendor/boost/multiprecision/include/boost/config/platform/win32.hpp +90 -0
  913. package/vendor/boost/multiprecision/include/boost/config/platform/zos.hpp +32 -0
  914. package/vendor/boost/multiprecision/include/boost/config/pragma_message.hpp +31 -0
  915. package/vendor/boost/multiprecision/include/boost/config/requires_threads.hpp +92 -0
  916. package/vendor/boost/multiprecision/include/boost/config/stdlib/dinkumware.hpp +324 -0
  917. package/vendor/boost/multiprecision/include/boost/config/stdlib/libcomo.hpp +93 -0
  918. package/vendor/boost/multiprecision/include/boost/config/stdlib/libcpp.hpp +185 -0
  919. package/vendor/boost/multiprecision/include/boost/config/stdlib/libstdcpp3.hpp +482 -0
  920. package/vendor/boost/multiprecision/include/boost/config/stdlib/modena.hpp +79 -0
  921. package/vendor/boost/multiprecision/include/boost/config/stdlib/msl.hpp +98 -0
  922. package/vendor/boost/multiprecision/include/boost/config/stdlib/roguewave.hpp +208 -0
  923. package/vendor/boost/multiprecision/include/boost/config/stdlib/sgi.hpp +168 -0
  924. package/vendor/boost/multiprecision/include/boost/config/stdlib/stlport.hpp +258 -0
  925. package/vendor/boost/multiprecision/include/boost/config/stdlib/vacpp.hpp +74 -0
  926. package/vendor/boost/multiprecision/include/boost/config/stdlib/xlcpp_zos.hpp +61 -0
  927. package/vendor/boost/multiprecision/include/boost/config/user.hpp +133 -0
  928. package/vendor/boost/multiprecision/include/boost/config/warning_disable.hpp +47 -0
  929. package/vendor/boost/multiprecision/include/boost/config/workaround.hpp +310 -0
  930. package/vendor/boost/multiprecision/include/boost/config.hpp +67 -0
  931. package/vendor/boost/multiprecision/include/boost/cstdint.hpp +556 -0
  932. package/vendor/boost/multiprecision/include/boost/cxx11_char_types.hpp +70 -0
  933. package/vendor/boost/multiprecision/include/boost/detail/workaround.hpp +10 -0
  934. package/vendor/boost/multiprecision/include/boost/limits.hpp +146 -0
  935. package/vendor/boost/multiprecision/include/boost/multiprecision/complex128.hpp +24 -0
  936. package/vendor/boost/multiprecision/include/boost/multiprecision/complex_adaptor.hpp +1049 -0
  937. package/vendor/boost/multiprecision/include/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
  938. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float/io.hpp +700 -0
  939. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
  940. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_bin_float.hpp +2374 -0
  941. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_complex.hpp +12 -0
  942. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_dec_float.hpp +3807 -0
  943. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail.hpp +177 -0
  944. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath.hpp +25 -0
  945. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fabs.hpp +27 -0
  946. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_floor.hpp +116 -0
  947. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fma.hpp +65 -0
  948. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_fpclassify.hpp +52 -0
  949. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_frexp.hpp +93 -0
  950. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_isinf.hpp +24 -0
  951. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_isnan.hpp +21 -0
  952. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_ldexp.hpp +71 -0
  953. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_limits.hpp +218 -0
  954. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_log.hpp +172 -0
  955. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_ccmath_sqrt.hpp +57 -0
  956. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_df_qf/cpp_df_qf_detail_constants.hpp +80 -0
  957. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_double_fp.hpp +2690 -0
  958. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/add.hpp +368 -0
  959. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
  960. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/bitwise.hpp +896 -0
  961. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/checked.hpp +178 -0
  962. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/comparison.hpp +374 -0
  963. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
  964. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/divide.hpp +703 -0
  965. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/import_export.hpp +248 -0
  966. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
  967. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/limits.hpp +292 -0
  968. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/literals.hpp +296 -0
  969. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/misc.hpp +1462 -0
  970. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/multiply.hpp +848 -0
  971. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/serialize.hpp +209 -0
  972. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
  973. package/vendor/boost/multiprecision/include/boost/multiprecision/cpp_int.hpp +2360 -0
  974. package/vendor/boost/multiprecision/include/boost/multiprecision/debug_adaptor.hpp +760 -0
  975. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/assert.hpp +29 -0
  976. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/atomic.hpp +62 -0
  977. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/bitscan.hpp +317 -0
  978. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
  979. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/constexpr.hpp +88 -0
  980. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/default_ops.hpp +4077 -0
  981. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/digits.hpp +49 -0
  982. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/dynamic_array.hpp +44 -0
  983. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/empty_value.hpp +87 -0
  984. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/endian.hpp +35 -0
  985. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/et_ops.hpp +1831 -0
  986. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/float128_functions.hpp +95 -0
  987. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
  988. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/fpclassify.hpp +101 -0
  989. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/constants.hpp +289 -0
  990. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/pow.hpp +941 -0
  991. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/trig.hpp +1064 -0
  992. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/functions/trunc.hpp +82 -0
  993. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
  994. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/hash.hpp +56 -0
  995. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/integer_ops.hpp +474 -0
  996. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/itos.hpp +39 -0
  997. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/min_max.hpp +106 -0
  998. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/no_et_ops.hpp +661 -0
  999. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
  1000. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/number_base.hpp +1656 -0
  1001. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/number_compare.hpp +848 -0
  1002. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/precision.hpp +313 -0
  1003. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/rebind.hpp +19 -0
  1004. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/standalone_config.hpp +165 -0
  1005. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/static_array.hpp +42 -0
  1006. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/string_helpers.hpp +48 -0
  1007. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/tables.hpp +80 -0
  1008. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/ublas_interop.hpp +75 -0
  1009. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
  1010. package/vendor/boost/multiprecision/include/boost/multiprecision/detail/utype_helper.hpp +374 -0
  1011. package/vendor/boost/multiprecision/include/boost/multiprecision/eigen.hpp +248 -0
  1012. package/vendor/boost/multiprecision/include/boost/multiprecision/float128.hpp +960 -0
  1013. package/vendor/boost/multiprecision/include/boost/multiprecision/fwd.hpp +268 -0
  1014. package/vendor/boost/multiprecision/include/boost/multiprecision/gmp.hpp +4100 -0
  1015. package/vendor/boost/multiprecision/include/boost/multiprecision/integer.hpp +363 -0
  1016. package/vendor/boost/multiprecision/include/boost/multiprecision/logged_adaptor.hpp +834 -0
  1017. package/vendor/boost/multiprecision/include/boost/multiprecision/miller_rabin.hpp +221 -0
  1018. package/vendor/boost/multiprecision/include/boost/multiprecision/mpc.hpp +1721 -0
  1019. package/vendor/boost/multiprecision/include/boost/multiprecision/mpfi.hpp +2579 -0
  1020. package/vendor/boost/multiprecision/include/boost/multiprecision/mpfr.hpp +3668 -0
  1021. package/vendor/boost/multiprecision/include/boost/multiprecision/number.hpp +2491 -0
  1022. package/vendor/boost/multiprecision/include/boost/multiprecision/random.hpp +23 -0
  1023. package/vendor/boost/multiprecision/include/boost/multiprecision/rational_adaptor.hpp +1289 -0
  1024. package/vendor/boost/multiprecision/include/boost/multiprecision/tommath.hpp +1044 -0
  1025. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
  1026. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
  1027. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_backend.hpp +91 -0
  1028. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_byte_container.hpp +51 -0
  1029. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_complex.hpp +22 -0
  1030. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
  1031. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
  1032. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
  1033. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/max_digits10.hpp +79 -0
  1034. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/std_integer_traits.hpp +95 -0
  1035. package/vendor/boost/multiprecision/include/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
  1036. package/vendor/boost/multiprecision/include/boost/static_assert.hpp +179 -0
  1037. package/vendor/boost/multiprecision/include/boost/version.hpp +32 -0
  1038. package/vendor/eigen/COPYING.APACHE +203 -0
  1039. package/vendor/eigen/COPYING.BSD +26 -0
  1040. package/vendor/eigen/COPYING.MPL2 +373 -0
  1041. package/vendor/eigen/COPYING.README +6 -0
  1042. package/vendor/eigen/Eigen/AccelerateSupport +52 -0
  1043. package/vendor/eigen/Eigen/Cholesky +43 -0
  1044. package/vendor/eigen/Eigen/CholmodSupport +48 -0
  1045. package/vendor/eigen/Eigen/Core +451 -0
  1046. package/vendor/eigen/Eigen/Dense +7 -0
  1047. package/vendor/eigen/Eigen/Eigen +2 -0
  1048. package/vendor/eigen/Eigen/Eigenvalues +63 -0
  1049. package/vendor/eigen/Eigen/Geometry +59 -0
  1050. package/vendor/eigen/Eigen/Householder +31 -0
  1051. package/vendor/eigen/Eigen/IterativeLinearSolvers +52 -0
  1052. package/vendor/eigen/Eigen/Jacobi +33 -0
  1053. package/vendor/eigen/Eigen/KLUSupport +43 -0
  1054. package/vendor/eigen/Eigen/LU +46 -0
  1055. package/vendor/eigen/Eigen/MetisSupport +35 -0
  1056. package/vendor/eigen/Eigen/OrderingMethods +73 -0
  1057. package/vendor/eigen/Eigen/PaStiXSupport +51 -0
  1058. package/vendor/eigen/Eigen/PardisoSupport +38 -0
  1059. package/vendor/eigen/Eigen/QR +48 -0
  1060. package/vendor/eigen/Eigen/QtAlignedMalloc +32 -0
  1061. package/vendor/eigen/Eigen/SPQRSupport +41 -0
  1062. package/vendor/eigen/Eigen/SVD +56 -0
  1063. package/vendor/eigen/Eigen/Sparse +33 -0
  1064. package/vendor/eigen/Eigen/SparseCholesky +40 -0
  1065. package/vendor/eigen/Eigen/SparseCore +70 -0
  1066. package/vendor/eigen/Eigen/SparseLU +50 -0
  1067. package/vendor/eigen/Eigen/SparseQR +38 -0
  1068. package/vendor/eigen/Eigen/StdDeque +30 -0
  1069. package/vendor/eigen/Eigen/StdList +29 -0
  1070. package/vendor/eigen/Eigen/StdVector +30 -0
  1071. package/vendor/eigen/Eigen/SuperLUSupport +70 -0
  1072. package/vendor/eigen/Eigen/ThreadPool +80 -0
  1073. package/vendor/eigen/Eigen/UmfPackSupport +42 -0
  1074. package/vendor/eigen/Eigen/Version +14 -0
  1075. package/vendor/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  1076. package/vendor/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  1077. package/vendor/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  1078. package/vendor/eigen/Eigen/src/Cholesky/LDLT.h +649 -0
  1079. package/vendor/eigen/Eigen/src/Cholesky/LLT.h +514 -0
  1080. package/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +124 -0
  1081. package/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +738 -0
  1082. package/vendor/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  1083. package/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  1084. package/vendor/eigen/Eigen/src/Core/Array.h +376 -0
  1085. package/vendor/eigen/Eigen/src/Core/ArrayBase.h +213 -0
  1086. package/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +165 -0
  1087. package/vendor/eigen/Eigen/src/Core/Assign.h +80 -0
  1088. package/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +1057 -0
  1089. package/vendor/eigen/Eigen/src/Core/Assign_MKL.h +183 -0
  1090. package/vendor/eigen/Eigen/src/Core/BandMatrix.h +338 -0
  1091. package/vendor/eigen/Eigen/src/Core/Block.h +429 -0
  1092. package/vendor/eigen/Eigen/src/Core/CommaInitializer.h +149 -0
  1093. package/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +173 -0
  1094. package/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +2018 -0
  1095. package/vendor/eigen/Eigen/src/Core/CoreIterators.h +141 -0
  1096. package/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +166 -0
  1097. package/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +975 -0
  1098. package/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +171 -0
  1099. package/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +91 -0
  1100. package/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +167 -0
  1101. package/vendor/eigen/Eigen/src/Core/DenseBase.h +673 -0
  1102. package/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +568 -0
  1103. package/vendor/eigen/Eigen/src/Core/DenseStorage.h +573 -0
  1104. package/vendor/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  1105. package/vendor/eigen/Eigen/src/Core/Diagonal.h +219 -0
  1106. package/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +420 -0
  1107. package/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +30 -0
  1108. package/vendor/eigen/Eigen/src/Core/Dot.h +268 -0
  1109. package/vendor/eigen/Eigen/src/Core/EigenBase.h +149 -0
  1110. package/vendor/eigen/Eigen/src/Core/Fill.h +138 -0
  1111. package/vendor/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  1112. package/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +127 -0
  1113. package/vendor/eigen/Eigen/src/Core/Fuzzy.h +132 -0
  1114. package/vendor/eigen/Eigen/src/Core/GeneralProduct.h +519 -0
  1115. package/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +1702 -0
  1116. package/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +230 -0
  1117. package/vendor/eigen/Eigen/src/Core/IO.h +233 -0
  1118. package/vendor/eigen/Eigen/src/Core/IndexedView.h +321 -0
  1119. package/vendor/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  1120. package/vendor/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  1121. package/vendor/eigen/Eigen/src/Core/Inverse.h +108 -0
  1122. package/vendor/eigen/Eigen/src/Core/Map.h +153 -0
  1123. package/vendor/eigen/Eigen/src/Core/MapBase.h +283 -0
  1124. package/vendor/eigen/Eigen/src/Core/MathFunctions.h +2103 -0
  1125. package/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +263 -0
  1126. package/vendor/eigen/Eigen/src/Core/Matrix.h +534 -0
  1127. package/vendor/eigen/Eigen/src/Core/MatrixBase.h +545 -0
  1128. package/vendor/eigen/Eigen/src/Core/NestByValue.h +91 -0
  1129. package/vendor/eigen/Eigen/src/Core/NoAlias.h +102 -0
  1130. package/vendor/eigen/Eigen/src/Core/NumTraits.h +335 -0
  1131. package/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  1132. package/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +555 -0
  1133. package/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1014 -0
  1134. package/vendor/eigen/Eigen/src/Core/Product.h +307 -0
  1135. package/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1287 -0
  1136. package/vendor/eigen/Eigen/src/Core/Random.h +207 -0
  1137. package/vendor/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  1138. package/vendor/eigen/Eigen/src/Core/RealView.h +250 -0
  1139. package/vendor/eigen/Eigen/src/Core/Redux.h +535 -0
  1140. package/vendor/eigen/Eigen/src/Core/Ref.h +383 -0
  1141. package/vendor/eigen/Eigen/src/Core/Replicate.h +130 -0
  1142. package/vendor/eigen/Eigen/src/Core/Reshaped.h +398 -0
  1143. package/vendor/eigen/Eigen/src/Core/ReturnByValue.h +111 -0
  1144. package/vendor/eigen/Eigen/src/Core/Reverse.h +202 -0
  1145. package/vendor/eigen/Eigen/src/Core/Select.h +92 -0
  1146. package/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +329 -0
  1147. package/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +50 -0
  1148. package/vendor/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  1149. package/vendor/eigen/Eigen/src/Core/Solve.h +174 -0
  1150. package/vendor/eigen/Eigen/src/Core/SolveTriangular.h +237 -0
  1151. package/vendor/eigen/Eigen/src/Core/SolverBase.h +167 -0
  1152. package/vendor/eigen/Eigen/src/Core/StableNorm.h +217 -0
  1153. package/vendor/eigen/Eigen/src/Core/StlIterators.h +619 -0
  1154. package/vendor/eigen/Eigen/src/Core/Stride.h +114 -0
  1155. package/vendor/eigen/Eigen/src/Core/Swap.h +99 -0
  1156. package/vendor/eigen/Eigen/src/Core/Transpose.h +427 -0
  1157. package/vendor/eigen/Eigen/src/Core/Transpositions.h +323 -0
  1158. package/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +900 -0
  1159. package/vendor/eigen/Eigen/src/Core/VectorBlock.h +83 -0
  1160. package/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +733 -0
  1161. package/vendor/eigen/Eigen/src/Core/Visitor.h +537 -0
  1162. package/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +565 -0
  1163. package/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +130 -0
  1164. package/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +3081 -0
  1165. package/vendor/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  1166. package/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +308 -0
  1167. package/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  1168. package/vendor/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  1169. package/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +141 -0
  1170. package/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  1171. package/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +3146 -0
  1172. package/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  1173. package/vendor/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  1174. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  1175. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  1176. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  1177. package/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  1178. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +653 -0
  1179. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +81 -0
  1180. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  1181. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  1182. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  1183. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  1184. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  1185. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3729 -0
  1186. package/vendor/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  1187. package/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  1188. package/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +128 -0
  1189. package/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  1190. package/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  1191. package/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  1192. package/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +47 -0
  1193. package/vendor/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  1194. package/vendor/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  1195. package/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  1196. package/vendor/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  1197. package/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  1198. package/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  1199. package/vendor/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  1200. package/vendor/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  1201. package/vendor/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  1202. package/vendor/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  1203. package/vendor/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  1204. package/vendor/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  1205. package/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  1206. package/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  1207. package/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  1208. package/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +732 -0
  1209. package/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  1210. package/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +68 -0
  1211. package/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +6096 -0
  1212. package/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  1213. package/vendor/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  1214. package/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +503 -0
  1215. package/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +88 -0
  1216. package/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2384 -0
  1217. package/vendor/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  1218. package/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +230 -0
  1219. package/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  1220. package/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  1221. package/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  1222. package/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  1223. package/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  1224. package/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  1225. package/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  1226. package/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +570 -0
  1227. package/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +244 -0
  1228. package/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1413 -0
  1229. package/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +174 -0
  1230. package/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +747 -0
  1231. package/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +274 -0
  1232. package/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +149 -0
  1233. package/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +52 -0
  1234. package/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1420 -0
  1235. package/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +3153 -0
  1236. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +459 -0
  1237. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +330 -0
  1238. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +148 -0
  1239. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +205 -0
  1240. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +473 -0
  1241. package/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +139 -0
  1242. package/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +282 -0
  1243. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +483 -0
  1244. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +277 -0
  1245. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +253 -0
  1246. package/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +115 -0
  1247. package/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  1248. package/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +95 -0
  1249. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +397 -0
  1250. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +325 -0
  1251. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +347 -0
  1252. package/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +275 -0
  1253. package/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +388 -0
  1254. package/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +166 -0
  1255. package/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +122 -0
  1256. package/vendor/eigen/Eigen/src/Core/util/Assert.h +158 -0
  1257. package/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +622 -0
  1258. package/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  1259. package/vendor/eigen/Eigen/src/Core/util/Constants.h +598 -0
  1260. package/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +146 -0
  1261. package/vendor/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  1262. package/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +524 -0
  1263. package/vendor/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  1264. package/vendor/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  1265. package/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  1266. package/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  1267. package/vendor/eigen/Eigen/src/Core/util/MKL_support.h +139 -0
  1268. package/vendor/eigen/Eigen/src/Core/util/Macros.h +1346 -0
  1269. package/vendor/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  1270. package/vendor/eigen/Eigen/src/Core/util/Memory.h +1385 -0
  1271. package/vendor/eigen/Eigen/src/Core/util/Meta.h +760 -0
  1272. package/vendor/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  1273. package/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +44 -0
  1274. package/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  1275. package/vendor/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  1276. package/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +105 -0
  1277. package/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  1278. package/vendor/eigen/Eigen/src/Core/util/XprHelper.h +1093 -0
  1279. package/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +315 -0
  1280. package/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +442 -0
  1281. package/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +95 -0
  1282. package/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +579 -0
  1283. package/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +402 -0
  1284. package/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +212 -0
  1285. package/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +356 -0
  1286. package/vendor/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  1287. package/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +142 -0
  1288. package/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +587 -0
  1289. package/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +519 -0
  1290. package/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +83 -0
  1291. package/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +850 -0
  1292. package/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +90 -0
  1293. package/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +529 -0
  1294. package/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +485 -0
  1295. package/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +245 -0
  1296. package/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +203 -0
  1297. package/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +453 -0
  1298. package/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +273 -0
  1299. package/vendor/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  1300. package/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +257 -0
  1301. package/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  1302. package/vendor/eigen/Eigen/src/Geometry/Quaternion.h +930 -0
  1303. package/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +201 -0
  1304. package/vendor/eigen/Eigen/src/Geometry/RotationBase.h +209 -0
  1305. package/vendor/eigen/Eigen/src/Geometry/Scaling.h +195 -0
  1306. package/vendor/eigen/Eigen/src/Geometry/Transform.h +1485 -0
  1307. package/vendor/eigen/Eigen/src/Geometry/Translation.h +204 -0
  1308. package/vendor/eigen/Eigen/src/Geometry/Umeyama.h +161 -0
  1309. package/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  1310. package/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +115 -0
  1311. package/vendor/eigen/Eigen/src/Householder/Householder.h +154 -0
  1312. package/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +504 -0
  1313. package/vendor/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  1314. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +213 -0
  1315. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +220 -0
  1316. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +217 -0
  1317. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +402 -0
  1318. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +449 -0
  1319. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  1320. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +395 -0
  1321. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +193 -0
  1322. package/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +111 -0
  1323. package/vendor/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  1324. package/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +427 -0
  1325. package/vendor/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  1326. package/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  1327. package/vendor/eigen/Eigen/src/LU/Determinant.h +98 -0
  1328. package/vendor/eigen/Eigen/src/LU/FullPivLU.h +826 -0
  1329. package/vendor/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  1330. package/vendor/eigen/Eigen/src/LU/InverseImpl.h +353 -0
  1331. package/vendor/eigen/Eigen/src/LU/PartialPivLU.h +586 -0
  1332. package/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +97 -0
  1333. package/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  1334. package/vendor/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  1335. package/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +125 -0
  1336. package/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +413 -0
  1337. package/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1690 -0
  1338. package/vendor/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  1339. package/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +146 -0
  1340. package/vendor/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  1341. package/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +632 -0
  1342. package/vendor/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  1343. package/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +500 -0
  1344. package/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  1345. package/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +161 -0
  1346. package/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +648 -0
  1347. package/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +733 -0
  1348. package/vendor/eigen/Eigen/src/QR/HouseholderQR.h +543 -0
  1349. package/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +77 -0
  1350. package/vendor/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  1351. package/vendor/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  1352. package/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +315 -0
  1353. package/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1470 -0
  1354. package/vendor/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  1355. package/vendor/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  1356. package/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +846 -0
  1357. package/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +127 -0
  1358. package/vendor/eigen/Eigen/src/SVD/SVDBase.h +436 -0
  1359. package/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +379 -0
  1360. package/vendor/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  1361. package/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +868 -0
  1362. package/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +388 -0
  1363. package/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +329 -0
  1364. package/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +206 -0
  1365. package/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +308 -0
  1366. package/vendor/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  1367. package/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +279 -0
  1368. package/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +534 -0
  1369. package/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +194 -0
  1370. package/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +592 -0
  1371. package/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +938 -0
  1372. package/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +142 -0
  1373. package/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +314 -0
  1374. package/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  1375. package/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +100 -0
  1376. package/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +31 -0
  1377. package/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +295 -0
  1378. package/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1876 -0
  1379. package/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +451 -0
  1380. package/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +249 -0
  1381. package/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +178 -0
  1382. package/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +47 -0
  1383. package/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +370 -0
  1384. package/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +613 -0
  1385. package/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +115 -0
  1386. package/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +184 -0
  1387. package/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +83 -0
  1388. package/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +177 -0
  1389. package/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +209 -0
  1390. package/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +532 -0
  1391. package/vendor/eigen/Eigen/src/SparseCore/SparseView.h +225 -0
  1392. package/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +274 -0
  1393. package/vendor/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  1394. package/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +969 -0
  1395. package/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +79 -0
  1396. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +210 -0
  1397. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +113 -0
  1398. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +319 -0
  1399. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +75 -0
  1400. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +177 -0
  1401. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +168 -0
  1402. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
  1403. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +114 -0
  1404. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +133 -0
  1405. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +215 -0
  1406. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +235 -0
  1407. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +136 -0
  1408. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +130 -0
  1409. package/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +81 -0
  1410. package/vendor/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  1411. package/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +706 -0
  1412. package/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +51 -0
  1413. package/vendor/eigen/Eigen/src/StlSupport/StdList.h +50 -0
  1414. package/vendor/eigen/Eigen/src/StlSupport/StdVector.h +51 -0
  1415. package/vendor/eigen/Eigen/src/StlSupport/details.h +82 -0
  1416. package/vendor/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  1417. package/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +929 -0
  1418. package/vendor/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  1419. package/vendor/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  1420. package/vendor/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  1421. package/vendor/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  1422. package/vendor/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  1423. package/vendor/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  1424. package/vendor/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  1425. package/vendor/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  1426. package/vendor/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  1427. package/vendor/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  1428. package/vendor/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  1429. package/vendor/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  1430. package/vendor/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  1431. package/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +606 -0
  1432. package/vendor/eigen/Eigen/src/misc/Image.h +80 -0
  1433. package/vendor/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  1434. package/vendor/eigen/Eigen/src/misc/Kernel.h +77 -0
  1435. package/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +53 -0
  1436. package/vendor/eigen/Eigen/src/misc/blas.h +97 -0
  1437. package/vendor/eigen/Eigen/src/misc/lapacke.h +10085 -0
  1438. package/vendor/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  1439. package/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +16 -0
  1440. package/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  1441. package/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  1442. package/vendor/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  1443. package/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  1444. package/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  1445. package/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  1446. package/vendor/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  1447. package/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  1448. package/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  1449. package/vendor/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  1450. package/vendor/eigen/README.md +5 -0
  1451. package/vendor/mpdecimal/COPYRIGHT.txt +23 -0
  1452. package/vendor/mpdecimal/README.txt +53 -0
  1453. package/vendor/mpdecimal/libmpdec/.objs/README.txt +8 -0
  1454. package/vendor/mpdecimal/libmpdec/.objs/symbols32.exp +343 -0
  1455. package/vendor/mpdecimal/libmpdec/.objs/symbols64.exp +347 -0
  1456. package/vendor/mpdecimal/libmpdec/.pc/libmpdec.pc.in +11 -0
  1457. package/vendor/mpdecimal/libmpdec/.profile/train.sh +35 -0
  1458. package/vendor/mpdecimal/libmpdec/README.txt +84 -0
  1459. package/vendor/mpdecimal/libmpdec/basearith.c +649 -0
  1460. package/vendor/mpdecimal/libmpdec/basearith.h +217 -0
  1461. package/vendor/mpdecimal/libmpdec/bits.h +188 -0
  1462. package/vendor/mpdecimal/libmpdec/constants.c +129 -0
  1463. package/vendor/mpdecimal/libmpdec/constants.h +88 -0
  1464. package/vendor/mpdecimal/libmpdec/context.c +285 -0
  1465. package/vendor/mpdecimal/libmpdec/convolute.c +172 -0
  1466. package/vendor/mpdecimal/libmpdec/convolute.h +48 -0
  1467. package/vendor/mpdecimal/libmpdec/crt.c +178 -0
  1468. package/vendor/mpdecimal/libmpdec/crt.h +45 -0
  1469. package/vendor/mpdecimal/libmpdec/difradix2.c +171 -0
  1470. package/vendor/mpdecimal/libmpdec/difradix2.h +46 -0
  1471. package/vendor/mpdecimal/libmpdec/fnt.c +77 -0
  1472. package/vendor/mpdecimal/libmpdec/fnt.h +46 -0
  1473. package/vendor/mpdecimal/libmpdec/fourstep.c +242 -0
  1474. package/vendor/mpdecimal/libmpdec/fourstep.h +46 -0
  1475. package/vendor/mpdecimal/libmpdec/io.c +1610 -0
  1476. package/vendor/mpdecimal/libmpdec/io.h +61 -0
  1477. package/vendor/mpdecimal/libmpdec/mpalloc.c +347 -0
  1478. package/vendor/mpdecimal/libmpdec/mpalloc.h +53 -0
  1479. package/vendor/mpdecimal/libmpdec/mpdecimal.c +9155 -0
  1480. package/vendor/mpdecimal/libmpdec/mpdecimal.h.in +804 -0
  1481. package/vendor/mpdecimal/libmpdec/mpsignal.c +966 -0
  1482. package/vendor/mpdecimal/libmpdec/numbertheory.c +129 -0
  1483. package/vendor/mpdecimal/libmpdec/numbertheory.h +75 -0
  1484. package/vendor/mpdecimal/libmpdec/sixstep.c +212 -0
  1485. package/vendor/mpdecimal/libmpdec/sixstep.h +46 -0
  1486. package/vendor/mpdecimal/libmpdec/transpose.c +275 -0
  1487. package/vendor/mpdecimal/libmpdec/transpose.h +60 -0
  1488. package/vendor/mpdecimal/libmpdec/typearith.h +661 -0
  1489. package/vendor/mpdecimal/libmpdec/umodarith.h +645 -0
  1490. package/vendor/symengine/AUTHORS +101 -0
  1491. package/vendor/symengine/LICENSE +254 -0
  1492. package/vendor/symengine/README.md +199 -0
  1493. package/vendor/symengine/symengine/add.cpp +508 -0
  1494. package/vendor/symengine/symengine/add.h +187 -0
  1495. package/vendor/symengine/symengine/as_real_imag.cpp +289 -0
  1496. package/vendor/symengine/symengine/assumptions.cpp +202 -0
  1497. package/vendor/symengine/symengine/assumptions.h +47 -0
  1498. package/vendor/symengine/symengine/basic-inl.h +152 -0
  1499. package/vendor/symengine/symengine/basic-methods.inc +9 -0
  1500. package/vendor/symengine/symengine/basic.cpp +110 -0
  1501. package/vendor/symengine/symengine/basic.h +356 -0
  1502. package/vendor/symengine/symengine/complex.cpp +198 -0
  1503. package/vendor/symengine/symengine/complex.h +396 -0
  1504. package/vendor/symengine/symengine/complex_double.cpp +72 -0
  1505. package/vendor/symengine/symengine/complex_double.h +570 -0
  1506. package/vendor/symengine/symengine/complex_mpc.h +406 -0
  1507. package/vendor/symengine/symengine/constants.cpp +130 -0
  1508. package/vendor/symengine/symengine/constants.h +81 -0
  1509. package/vendor/symengine/symengine/cse.cpp +556 -0
  1510. package/vendor/symengine/symengine/cwrapper.h +949 -0
  1511. package/vendor/symengine/symengine/dense_matrix.cpp +2100 -0
  1512. package/vendor/symengine/symengine/derivative.cpp +841 -0
  1513. package/vendor/symengine/symengine/derivative.h +137 -0
  1514. package/vendor/symengine/symengine/dict.cpp +125 -0
  1515. package/vendor/symengine/symengine/dict.h +333 -0
  1516. package/vendor/symengine/symengine/diophantine.cpp +139 -0
  1517. package/vendor/symengine/symengine/diophantine.h +20 -0
  1518. package/vendor/symengine/symengine/eval.cpp +109 -0
  1519. package/vendor/symengine/symengine/eval.h +40 -0
  1520. package/vendor/symengine/symengine/eval_arb.h +31 -0
  1521. package/vendor/symengine/symengine/eval_double.cpp +959 -0
  1522. package/vendor/symengine/symengine/eval_double.h +28 -0
  1523. package/vendor/symengine/symengine/eval_mpc.h +29 -0
  1524. package/vendor/symengine/symengine/eval_mpfr.h +26 -0
  1525. package/vendor/symengine/symengine/expand.cpp +379 -0
  1526. package/vendor/symengine/symengine/expression.cpp +24 -0
  1527. package/vendor/symengine/symengine/expression.h +375 -0
  1528. package/vendor/symengine/symengine/fields.cpp +861 -0
  1529. package/vendor/symengine/symengine/fields.h +647 -0
  1530. package/vendor/symengine/symengine/finitediff.cpp +70 -0
  1531. package/vendor/symengine/symengine/finitediff.h +21 -0
  1532. package/vendor/symengine/symengine/flint_wrapper.h +1010 -0
  1533. package/vendor/symengine/symengine/functions.cpp +3913 -0
  1534. package/vendor/symengine/symengine/functions.h +1321 -0
  1535. package/vendor/symengine/symengine/infinity.cpp +537 -0
  1536. package/vendor/symengine/symengine/infinity.h +118 -0
  1537. package/vendor/symengine/symengine/integer.cpp +153 -0
  1538. package/vendor/symengine/symengine/integer.h +227 -0
  1539. package/vendor/symengine/symengine/interruption.cpp +9 -0
  1540. package/vendor/symengine/symengine/interruption.h +19 -0
  1541. package/vendor/symengine/symengine/lambda_double.h +918 -0
  1542. package/vendor/symengine/symengine/limits.h +35 -0
  1543. package/vendor/symengine/symengine/llvm_double.h +201 -0
  1544. package/vendor/symengine/symengine/logic.cpp +812 -0
  1545. package/vendor/symengine/symengine/logic.h +281 -0
  1546. package/vendor/symengine/symengine/matrices/conjugate_matrix.cpp +139 -0
  1547. package/vendor/symengine/symengine/matrices/conjugate_matrix.h +39 -0
  1548. package/vendor/symengine/symengine/matrices/diagonal_matrix.cpp +79 -0
  1549. package/vendor/symengine/symengine/matrices/diagonal_matrix.h +52 -0
  1550. package/vendor/symengine/symengine/matrices/hadamard_product.cpp +151 -0
  1551. package/vendor/symengine/symengine/matrices/hadamard_product.h +42 -0
  1552. package/vendor/symengine/symengine/matrices/identity_matrix.cpp +63 -0
  1553. package/vendor/symengine/symengine/matrices/identity_matrix.h +40 -0
  1554. package/vendor/symengine/symengine/matrices/immutable_dense_matrix.cpp +143 -0
  1555. package/vendor/symengine/symengine/matrices/immutable_dense_matrix.h +65 -0
  1556. package/vendor/symengine/symengine/matrices/is_diagonal.cpp +115 -0
  1557. package/vendor/symengine/symengine/matrices/is_lower.cpp +110 -0
  1558. package/vendor/symengine/symengine/matrices/is_real.cpp +78 -0
  1559. package/vendor/symengine/symengine/matrices/is_square.cpp +85 -0
  1560. package/vendor/symengine/symengine/matrices/is_symmetric.cpp +112 -0
  1561. package/vendor/symengine/symengine/matrices/is_toeplitz.cpp +104 -0
  1562. package/vendor/symengine/symengine/matrices/is_upper.cpp +108 -0
  1563. package/vendor/symengine/symengine/matrices/is_zero.cpp +81 -0
  1564. package/vendor/symengine/symengine/matrices/matrix_add.cpp +176 -0
  1565. package/vendor/symengine/symengine/matrices/matrix_add.h +42 -0
  1566. package/vendor/symengine/symengine/matrices/matrix_expr.h +19 -0
  1567. package/vendor/symengine/symengine/matrices/matrix_mul.cpp +258 -0
  1568. package/vendor/symengine/symengine/matrices/matrix_mul.h +55 -0
  1569. package/vendor/symengine/symengine/matrices/matrix_symbol.cpp +34 -0
  1570. package/vendor/symengine/symengine/matrices/matrix_symbol.h +41 -0
  1571. package/vendor/symengine/symengine/matrices/size.cpp +121 -0
  1572. package/vendor/symengine/symengine/matrices/size.h +15 -0
  1573. package/vendor/symengine/symengine/matrices/trace.cpp +112 -0
  1574. package/vendor/symengine/symengine/matrices/trace.h +31 -0
  1575. package/vendor/symengine/symengine/matrices/transpose.cpp +126 -0
  1576. package/vendor/symengine/symengine/matrices/transpose.h +39 -0
  1577. package/vendor/symengine/symengine/matrices/zero_matrix.cpp +94 -0
  1578. package/vendor/symengine/symengine/matrices/zero_matrix.h +47 -0
  1579. package/vendor/symengine/symengine/matrix.cpp +33 -0
  1580. package/vendor/symengine/symengine/matrix.h +675 -0
  1581. package/vendor/symengine/symengine/matrix_expressions.h +51 -0
  1582. package/vendor/symengine/symengine/monomials.cpp +33 -0
  1583. package/vendor/symengine/symengine/monomials.h +20 -0
  1584. package/vendor/symengine/symengine/mp_boost.cpp +635 -0
  1585. package/vendor/symengine/symengine/mp_class.h +1286 -0
  1586. package/vendor/symengine/symengine/mp_wrapper.h +510 -0
  1587. package/vendor/symengine/symengine/mul.cpp +629 -0
  1588. package/vendor/symengine/symengine/mul.h +146 -0
  1589. package/vendor/symengine/symengine/nan.cpp +234 -0
  1590. package/vendor/symengine/symengine/nan.h +82 -0
  1591. package/vendor/symengine/symengine/ntheory.cpp +1700 -0
  1592. package/vendor/symengine/symengine/ntheory.h +213 -0
  1593. package/vendor/symengine/symengine/ntheory_funcs.cpp +189 -0
  1594. package/vendor/symengine/symengine/ntheory_funcs.h +78 -0
  1595. package/vendor/symengine/symengine/number.cpp +36 -0
  1596. package/vendor/symengine/symengine/number.h +256 -0
  1597. package/vendor/symengine/symengine/numer_denom.cpp +149 -0
  1598. package/vendor/symengine/symengine/parser/parser.cpp +367 -0
  1599. package/vendor/symengine/symengine/parser/parser.h +56 -0
  1600. package/vendor/symengine/symengine/parser/parser.tab.cc +1495 -0
  1601. package/vendor/symengine/symengine/parser/parser.tab.hh +1410 -0
  1602. package/vendor/symengine/symengine/parser/parser_old.cpp +688 -0
  1603. package/vendor/symengine/symengine/parser/tokenizer.cpp +435 -0
  1604. package/vendor/symengine/symengine/parser/tokenizer.h +35 -0
  1605. package/vendor/symengine/symengine/parser.h +25 -0
  1606. package/vendor/symengine/symengine/polys/basic_conversions.cpp +178 -0
  1607. package/vendor/symengine/symengine/polys/basic_conversions.h +575 -0
  1608. package/vendor/symengine/symengine/polys/cancel.h +39 -0
  1609. package/vendor/symengine/symengine/polys/msymenginepoly.cpp +130 -0
  1610. package/vendor/symengine/symengine/polys/msymenginepoly.h +536 -0
  1611. package/vendor/symengine/symengine/polys/uexprpoly.cpp +90 -0
  1612. package/vendor/symengine/symengine/polys/uexprpoly.h +205 -0
  1613. package/vendor/symengine/symengine/polys/uintpoly.cpp +62 -0
  1614. package/vendor/symengine/symengine/polys/uintpoly.h +134 -0
  1615. package/vendor/symengine/symengine/polys/uintpoly_flint.h +228 -0
  1616. package/vendor/symengine/symengine/polys/uintpoly_piranha.h +373 -0
  1617. package/vendor/symengine/symengine/polys/upolybase.h +769 -0
  1618. package/vendor/symengine/symengine/polys/uratpoly.cpp +59 -0
  1619. package/vendor/symengine/symengine/polys/uratpoly.h +58 -0
  1620. package/vendor/symengine/symengine/polys/usymenginepoly.h +139 -0
  1621. package/vendor/symengine/symengine/pow.cpp +303 -0
  1622. package/vendor/symengine/symengine/pow.h +76 -0
  1623. package/vendor/symengine/symengine/prime_sieve.cpp +143 -0
  1624. package/vendor/symengine/symengine/prime_sieve.h +64 -0
  1625. package/vendor/symengine/symengine/printers/codegen.cpp +716 -0
  1626. package/vendor/symengine/symengine/printers/codegen.h +168 -0
  1627. package/vendor/symengine/symengine/printers/latex.cpp +630 -0
  1628. package/vendor/symengine/symengine/printers/latex.h +76 -0
  1629. package/vendor/symengine/symengine/printers/mathml.cpp +358 -0
  1630. package/vendor/symengine/symengine/printers/mathml.h +62 -0
  1631. package/vendor/symengine/symengine/printers/stringbox.cpp +276 -0
  1632. package/vendor/symengine/symengine/printers/stringbox.h +60 -0
  1633. package/vendor/symengine/symengine/printers/strprinter.cpp +1212 -0
  1634. package/vendor/symengine/symengine/printers/strprinter.h +217 -0
  1635. package/vendor/symengine/symengine/printers/unicode.cpp +730 -0
  1636. package/vendor/symengine/symengine/printers/unicode.h +84 -0
  1637. package/vendor/symengine/symengine/printers.h +46 -0
  1638. package/vendor/symengine/symengine/rational.cpp +365 -0
  1639. package/vendor/symengine/symengine/rational.h +341 -0
  1640. package/vendor/symengine/symengine/real_double.cpp +388 -0
  1641. package/vendor/symengine/symengine/real_double.h +492 -0
  1642. package/vendor/symengine/symengine/real_mpfr.h +379 -0
  1643. package/vendor/symengine/symengine/refine.cpp +213 -0
  1644. package/vendor/symengine/symengine/refine.h +43 -0
  1645. package/vendor/symengine/symengine/rewrite.cpp +235 -0
  1646. package/vendor/symengine/symengine/rings.cpp +107 -0
  1647. package/vendor/symengine/symengine/rings.h +24 -0
  1648. package/vendor/symengine/symengine/serialize-cereal.h +964 -0
  1649. package/vendor/symengine/symengine/series.cpp +85 -0
  1650. package/vendor/symengine/symengine/series.h +727 -0
  1651. package/vendor/symengine/symengine/series_flint.h +214 -0
  1652. package/vendor/symengine/symengine/series_generic.cpp +247 -0
  1653. package/vendor/symengine/symengine/series_generic.h +86 -0
  1654. package/vendor/symengine/symengine/series_piranha.h +95 -0
  1655. package/vendor/symengine/symengine/series_visitor.h +357 -0
  1656. package/vendor/symengine/symengine/set_funcs.cpp +296 -0
  1657. package/vendor/symengine/symengine/sets.cpp +1854 -0
  1658. package/vendor/symengine/symengine/sets.h +696 -0
  1659. package/vendor/symengine/symengine/simplify.cpp +62 -0
  1660. package/vendor/symengine/symengine/simplify.h +34 -0
  1661. package/vendor/symengine/symengine/solve.cpp +665 -0
  1662. package/vendor/symengine/symengine/solve.h +117 -0
  1663. package/vendor/symengine/symengine/sparse_matrix.cpp +776 -0
  1664. package/vendor/symengine/symengine/special_boost.cpp +85 -0
  1665. package/vendor/symengine/symengine/special_double.h +570 -0
  1666. package/vendor/symengine/symengine/subs.h +579 -0
  1667. package/vendor/symengine/symengine/symbol.cpp +88 -0
  1668. package/vendor/symengine/symengine/symbol.h +116 -0
  1669. package/vendor/symengine/symengine/symengine_assert.h +50 -0
  1670. package/vendor/symengine/symengine/symengine_casts.h +139 -0
  1671. package/vendor/symengine/symengine/symengine_exception.h +101 -0
  1672. package/vendor/symengine/symengine/symengine_rcp.cpp +21 -0
  1673. package/vendor/symengine/symengine/symengine_rcp.h +384 -0
  1674. package/vendor/symengine/symengine/test_visitors.cpp +1083 -0
  1675. package/vendor/symengine/symengine/test_visitors.h +466 -0
  1676. package/vendor/symengine/symengine/tribool.h +85 -0
  1677. package/vendor/symengine/symengine/tuple.cpp +47 -0
  1678. package/vendor/symengine/symengine/tuple.h +32 -0
  1679. package/vendor/symengine/symengine/type_codes.inc +139 -0
  1680. package/vendor/symengine/symengine/utilities/cereal/LICENSE +24 -0
  1681. package/vendor/symengine/symengine/utilities/cereal/include/cereal/access.hpp +351 -0
  1682. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/adapters.hpp +163 -0
  1683. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/binary.hpp +169 -0
  1684. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/json.hpp +1024 -0
  1685. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/portable_binary.hpp +334 -0
  1686. package/vendor/symengine/symengine/utilities/cereal/include/cereal/archives/xml.hpp +956 -0
  1687. package/vendor/symengine/symengine/utilities/cereal/include/cereal/cereal.hpp +1120 -0
  1688. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/helpers.hpp +422 -0
  1689. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/polymorphic_impl.hpp +825 -0
  1690. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/polymorphic_impl_fwd.hpp +65 -0
  1691. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/static_object.hpp +128 -0
  1692. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/traits.hpp +1411 -0
  1693. package/vendor/symengine/symengine/utilities/cereal/include/cereal/details/util.hpp +84 -0
  1694. package/vendor/symengine/symengine/utilities/cereal/include/cereal/macros.hpp +156 -0
  1695. package/vendor/symengine/symengine/utilities/cereal/include/cereal/specialize.hpp +139 -0
  1696. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/array.hpp +79 -0
  1697. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/atomic.hpp +55 -0
  1698. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/base_class.hpp +203 -0
  1699. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/bitset.hpp +176 -0
  1700. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/boost_variant.hpp +164 -0
  1701. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/chrono.hpp +72 -0
  1702. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/common.hpp +129 -0
  1703. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/complex.hpp +56 -0
  1704. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/concepts/pair_associative_container.hpp +73 -0
  1705. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/deque.hpp +62 -0
  1706. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/forward_list.hpp +68 -0
  1707. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/functional.hpp +43 -0
  1708. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/list.hpp +62 -0
  1709. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/map.hpp +36 -0
  1710. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/memory.hpp +425 -0
  1711. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/optional.hpp +65 -0
  1712. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/polymorphic.hpp +483 -0
  1713. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/queue.hpp +132 -0
  1714. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/set.hpp +103 -0
  1715. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/stack.hpp +76 -0
  1716. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/string.hpp +61 -0
  1717. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/tuple.hpp +123 -0
  1718. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/unordered_map.hpp +36 -0
  1719. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/unordered_set.hpp +99 -0
  1720. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/utility.hpp +47 -0
  1721. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/valarray.hpp +89 -0
  1722. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/variant.hpp +108 -0
  1723. package/vendor/symengine/symengine/utilities/cereal/include/cereal/types/vector.hpp +112 -0
  1724. package/vendor/symengine/symengine/utilities/cereal/include/cereal/version.hpp +52 -0
  1725. package/vendor/symengine/symengine/utilities/fast_float/include/fast_float/fast_float.h +3720 -0
  1726. package/vendor/symengine/symengine/utilities/stream_fmt.h +25 -0
  1727. package/vendor/symengine/symengine/visitor.cpp +348 -0
  1728. 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