boost.cxx 0.0.2 → 1.90.1

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 (327) hide show
  1. package/README.md +29 -2
  2. package/boost/cast.hpp +20 -0
  3. package/boost/numeric/conversion/bounds.hpp +24 -0
  4. package/boost/numeric/conversion/cast.hpp +61 -0
  5. package/boost/numeric/conversion/conversion_traits.hpp +32 -0
  6. package/boost/numeric/conversion/converter.hpp +68 -0
  7. package/boost/numeric/conversion/converter_policies.hpp +194 -0
  8. package/boost/numeric/conversion/detail/bounds.hpp +58 -0
  9. package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
  10. package/boost/numeric/conversion/detail/converter.hpp +593 -0
  11. package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
  12. package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
  13. package/boost/numeric/conversion/detail/meta.hpp +120 -0
  14. package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
  15. package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
  16. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
  17. package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
  18. package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
  19. package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
  20. package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
  21. package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
  22. package/boost/numeric/conversion/is_subranged.hpp +27 -0
  23. package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
  24. package/boost/numeric/conversion/sign_mixture.hpp +30 -0
  25. package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
  26. package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
  27. package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
  28. package/boost/numeric/interval/arith.hpp +305 -0
  29. package/boost/numeric/interval/arith2.hpp +304 -0
  30. package/boost/numeric/interval/arith3.hpp +69 -0
  31. package/boost/numeric/interval/checking.hpp +130 -0
  32. package/boost/numeric/interval/compare/certain.hpp +113 -0
  33. package/boost/numeric/interval/compare/explicit.hpp +248 -0
  34. package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
  35. package/boost/numeric/interval/compare/possible.hpp +113 -0
  36. package/boost/numeric/interval/compare/set.hpp +101 -0
  37. package/boost/numeric/interval/compare/tribool.hpp +138 -0
  38. package/boost/numeric/interval/compare.hpp +19 -0
  39. package/boost/numeric/interval/constants.hpp +85 -0
  40. package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
  41. package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
  42. package/boost/numeric/interval/detail/bugs.hpp +48 -0
  43. package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
  44. package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
  45. package/boost/numeric/interval/detail/division.hpp +194 -0
  46. package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
  47. package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
  48. package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
  49. package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
  50. package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
  51. package/boost/numeric/interval/detail/test_input.hpp +76 -0
  52. package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
  53. package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
  54. package/boost/numeric/interval/ext/integer.hpp +70 -0
  55. package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
  56. package/boost/numeric/interval/hw_rounding.hpp +73 -0
  57. package/boost/numeric/interval/interval.hpp +450 -0
  58. package/boost/numeric/interval/io.hpp +41 -0
  59. package/boost/numeric/interval/limits.hpp +49 -0
  60. package/boost/numeric/interval/policies.hpp +75 -0
  61. package/boost/numeric/interval/rounded_arith.hpp +120 -0
  62. package/boost/numeric/interval/rounded_transc.hpp +140 -0
  63. package/boost/numeric/interval/rounding.hpp +101 -0
  64. package/boost/numeric/interval/transc.hpp +232 -0
  65. package/boost/numeric/interval/utility.hpp +335 -0
  66. package/boost/numeric/interval/utility_fwd.hpp +172 -0
  67. package/boost/numeric/interval.hpp +32 -0
  68. package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
  69. package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
  70. package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
  71. package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
  72. package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
  73. package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
  74. package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
  75. package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
  76. package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
  77. package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
  78. package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
  79. package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
  80. package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
  81. package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
  82. package/boost/numeric/odeint/config.hpp +53 -0
  83. package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
  84. package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
  85. package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
  86. package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
  87. package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
  88. package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
  89. package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
  90. package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
  91. package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
  92. package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
  93. package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
  94. package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
  95. package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
  96. package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
  97. package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
  98. package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
  99. package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
  100. package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
  101. package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
  102. package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
  103. package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
  104. package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
  105. package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
  106. package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
  107. package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
  108. package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
  109. package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
  110. package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
  111. package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
  112. package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
  113. package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
  114. package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
  115. package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
  116. package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
  117. package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
  118. package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
  119. package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
  120. package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
  121. package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
  122. package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
  123. package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
  124. package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
  125. package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
  126. package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
  127. package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
  128. package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
  129. package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
  130. package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
  131. package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
  132. package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
  133. package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
  134. package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
  135. package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
  136. package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
  137. package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
  138. package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
  139. package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
  140. package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
  141. package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
  142. package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
  143. package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
  144. package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
  145. package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
  146. package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
  147. package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
  148. package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
  149. package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
  150. package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
  151. package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
  152. package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
  153. package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
  154. package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
  155. package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
  156. package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
  157. package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
  158. package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
  159. package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
  160. package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
  161. package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
  162. package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
  163. package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
  164. package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
  165. package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
  166. package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
  167. package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
  168. package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
  169. package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
  170. package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
  171. package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
  172. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
  173. package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
  174. package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
  175. package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
  176. package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
  177. package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
  178. package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
  179. package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
  180. package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
  181. package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
  182. package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
  183. package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
  184. package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
  185. package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
  186. package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
  187. package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
  188. package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
  189. package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
  190. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
  191. package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
  192. package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
  193. package/boost/numeric/odeint/stepper/euler.hpp +166 -0
  194. package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
  195. package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
  196. package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
  197. package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
  198. package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
  199. package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
  200. package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
  201. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
  202. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
  203. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
  204. package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
  205. package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
  206. package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
  207. package/boost/numeric/odeint/stepper/generation.hpp +37 -0
  208. package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
  209. package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
  210. package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
  211. package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
  212. package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
  213. package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
  214. package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
  215. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
  216. package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
  217. package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
  218. package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
  219. package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
  220. package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
  221. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
  222. package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
  223. package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
  224. package/boost/numeric/odeint/tools/assert.hpp +30 -0
  225. package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
  226. package/boost/numeric/odeint/tools/traits.hpp +39 -0
  227. package/boost/numeric/odeint/util/bind.hpp +35 -0
  228. package/boost/numeric/odeint/util/copy.hpp +88 -0
  229. package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
  230. package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
  231. package/boost/numeric/odeint/util/is_pair.hpp +42 -0
  232. package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
  233. package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
  234. package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
  235. package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
  236. package/boost/numeric/odeint/util/resize.hpp +120 -0
  237. package/boost/numeric/odeint/util/resizer.hpp +94 -0
  238. package/boost/numeric/odeint/util/same_instance.hpp +56 -0
  239. package/boost/numeric/odeint/util/same_size.hpp +117 -0
  240. package/boost/numeric/odeint/util/split.hpp +64 -0
  241. package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
  242. package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
  243. package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
  244. package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
  245. package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
  246. package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
  247. package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
  248. package/boost/numeric/odeint/version.hpp +55 -0
  249. package/boost/numeric/odeint.hpp +87 -0
  250. package/boost/numeric/ublas/assignment.hpp +1288 -0
  251. package/boost/numeric/ublas/banded.hpp +2372 -0
  252. package/boost/numeric/ublas/blas.hpp +499 -0
  253. package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
  254. package/boost/numeric/ublas/detail/config.hpp +304 -0
  255. package/boost/numeric/ublas/detail/definitions.hpp +212 -0
  256. package/boost/numeric/ublas/detail/documentation.hpp +33 -0
  257. package/boost/numeric/ublas/detail/duff.hpp +56 -0
  258. package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
  259. package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
  260. package/boost/numeric/ublas/detail/raw.hpp +878 -0
  261. package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
  262. package/boost/numeric/ublas/detail/temporary.hpp +33 -0
  263. package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
  264. package/boost/numeric/ublas/doxydoc.hpp +58 -0
  265. package/boost/numeric/ublas/exception.hpp +297 -0
  266. package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
  267. package/boost/numeric/ublas/expression_types.hpp +506 -0
  268. package/boost/numeric/ublas/functional.hpp +2112 -0
  269. package/boost/numeric/ublas/fwd.hpp +229 -0
  270. package/boost/numeric/ublas/hermitian.hpp +2633 -0
  271. package/boost/numeric/ublas/io.hpp +355 -0
  272. package/boost/numeric/ublas/lu.hpp +350 -0
  273. package/boost/numeric/ublas/matrix.hpp +6013 -0
  274. package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
  275. package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
  276. package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
  277. package/boost/numeric/ublas/matrix_vector.hpp +406 -0
  278. package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
  279. package/boost/numeric/ublas/opencl/library.hpp +38 -0
  280. package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
  281. package/boost/numeric/ublas/opencl/misc.hpp +182 -0
  282. package/boost/numeric/ublas/opencl/operations.hpp +18 -0
  283. package/boost/numeric/ublas/opencl/prod.hpp +364 -0
  284. package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
  285. package/boost/numeric/ublas/opencl/vector.hpp +90 -0
  286. package/boost/numeric/ublas/opencl.hpp +16 -0
  287. package/boost/numeric/ublas/operation/begin.hpp +318 -0
  288. package/boost/numeric/ublas/operation/c_array.hpp +41 -0
  289. package/boost/numeric/ublas/operation/end.hpp +318 -0
  290. package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
  291. package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
  292. package/boost/numeric/ublas/operation/size.hpp +350 -0
  293. package/boost/numeric/ublas/operation.hpp +830 -0
  294. package/boost/numeric/ublas/operation_blocked.hpp +266 -0
  295. package/boost/numeric/ublas/operation_sparse.hpp +198 -0
  296. package/boost/numeric/ublas/operations.hpp +26 -0
  297. package/boost/numeric/ublas/storage.hpp +2131 -0
  298. package/boost/numeric/ublas/storage_sparse.hpp +578 -0
  299. package/boost/numeric/ublas/symmetric.hpp +2309 -0
  300. package/boost/numeric/ublas/tags.hpp +37 -0
  301. package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
  302. package/boost/numeric/ublas/tensor/expression.hpp +181 -0
  303. package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
  304. package/boost/numeric/ublas/tensor/extents.hpp +335 -0
  305. package/boost/numeric/ublas/tensor/functions.hpp +558 -0
  306. package/boost/numeric/ublas/tensor/index.hpp +89 -0
  307. package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
  308. package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
  309. package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
  310. package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
  311. package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
  312. package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
  313. package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
  314. package/boost/numeric/ublas/tensor/strides.hpp +251 -0
  315. package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
  316. package/boost/numeric/ublas/tensor.hpp +26 -0
  317. package/boost/numeric/ublas/traits/c_array.hpp +110 -0
  318. package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
  319. package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
  320. package/boost/numeric/ublas/traits.hpp +753 -0
  321. package/boost/numeric/ublas/triangular.hpp +2775 -0
  322. package/boost/numeric/ublas/vector.hpp +2947 -0
  323. package/boost/numeric/ublas/vector_expression.hpp +1762 -0
  324. package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
  325. package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
  326. package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
  327. package/package.json +3 -7
@@ -0,0 +1,28 @@
1
+ // (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
2
+ // Use, modification, and distribution is subject to the Boost Software
3
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4
+ // http://www.boost.org/LICENSE_1_0.txt)
5
+
6
+ // See library home page at http://www.boost.org/libs/numeric/conversion
7
+ //
8
+ // Contact the author at: fernando_cacciola@hotmail.com
9
+ //
10
+ #ifndef BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
11
+ #define BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_FLC_12NOV2002_HPP
12
+
13
+ #include "boost/numeric/conversion/detail/udt_builtin_mixture.hpp"
14
+
15
+ namespace boost { namespace numeric
16
+ {
17
+
18
+ template<class T, class S>
19
+ struct udt_builtin_mixture
20
+ : convdetail::get_udt_builtin_mixture< BOOST_DEDUCED_TYPENAME remove_cv<T>::type
21
+ ,BOOST_DEDUCED_TYPENAME remove_cv<S>::type
22
+ >::type {} ;
23
+
24
+ } } // namespace boost::numeric
25
+
26
+ #endif
27
+
28
+
@@ -0,0 +1,26 @@
1
+ // (c) Copyright Fernando Luis Cacciola Carballal 2000-2004
2
+ // Use, modification, and distribution is subject to the Boost Software
3
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
4
+ // http://www.boost.org/LICENSE_1_0.txt)
5
+
6
+ // See library home page at http://www.boost.org/libs/numeric/conversion
7
+ //
8
+ // Contact the author at: fernando_cacciola@hotmail.com
9
+ //
10
+ #ifndef BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP
11
+ #define BOOST_NUMERIC_CONVERSION_UDT_BUILTIN_MIXTURE_ENUM_FLC_12NOV2002_HPP
12
+
13
+ namespace boost { namespace numeric
14
+ {
15
+ enum udt_builtin_mixture_enum
16
+ {
17
+ builtin_to_builtin
18
+ ,builtin_to_udt
19
+ ,udt_to_builtin
20
+ ,udt_to_udt
21
+ } ;
22
+
23
+ } } // namespace boost::numeric
24
+
25
+ #endif
26
+
@@ -0,0 +1,305 @@
1
+ /* Boost interval/arith.hpp template implementation file
2
+ *
3
+ * Copyright 2000 Jens Maurer
4
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
5
+ *
6
+ * Distributed under the Boost Software License, Version 1.0.
7
+ * (See accompanying file LICENSE_1_0.txt or
8
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
9
+ */
10
+
11
+ #ifndef BOOST_NUMERIC_INTERVAL_ARITH_HPP
12
+ #define BOOST_NUMERIC_INTERVAL_ARITH_HPP
13
+
14
+ #include <boost/config.hpp>
15
+ #include <boost/numeric/interval/interval.hpp>
16
+ #include <boost/numeric/interval/detail/bugs.hpp>
17
+ #include <boost/numeric/interval/detail/test_input.hpp>
18
+ #include <boost/numeric/interval/detail/division.hpp>
19
+ #include <algorithm>
20
+
21
+ namespace boost {
22
+ namespace numeric {
23
+
24
+ /*
25
+ * Basic arithmetic operators
26
+ */
27
+
28
+ template<class T, class Policies> inline
29
+ const interval<T, Policies>& operator+(const interval<T, Policies>& x)
30
+ {
31
+ return x;
32
+ }
33
+
34
+ template<class T, class Policies> inline
35
+ interval<T, Policies> operator-(const interval<T, Policies>& x)
36
+ {
37
+ if (interval_lib::detail::test_input(x))
38
+ return interval<T, Policies>::empty();
39
+ return interval<T, Policies>(-x.upper(), -x.lower(), true);
40
+ }
41
+
42
+ template<class T, class Policies> inline
43
+ interval<T, Policies>& interval<T, Policies>::operator+=(const interval<T, Policies>& r)
44
+ {
45
+ if (interval_lib::detail::test_input(*this, r))
46
+ set_empty();
47
+ else {
48
+ typename Policies::rounding rnd;
49
+ set(rnd.add_down(low, r.low), rnd.add_up(up, r.up));
50
+ }
51
+ return *this;
52
+ }
53
+
54
+ template<class T, class Policies> inline
55
+ interval<T, Policies>& interval<T, Policies>::operator+=(const T& r)
56
+ {
57
+ if (interval_lib::detail::test_input(*this, r))
58
+ set_empty();
59
+ else {
60
+ typename Policies::rounding rnd;
61
+ set(rnd.add_down(low, r), rnd.add_up(up, r));
62
+ }
63
+ return *this;
64
+ }
65
+
66
+ template<class T, class Policies> inline
67
+ interval<T, Policies>& interval<T, Policies>::operator-=(const interval<T, Policies>& r)
68
+ {
69
+ if (interval_lib::detail::test_input(*this, r))
70
+ set_empty();
71
+ else {
72
+ typename Policies::rounding rnd;
73
+ set(rnd.sub_down(low, r.up), rnd.sub_up(up, r.low));
74
+ }
75
+ return *this;
76
+ }
77
+
78
+ template<class T, class Policies> inline
79
+ interval<T, Policies>& interval<T, Policies>::operator-=(const T& r)
80
+ {
81
+ if (interval_lib::detail::test_input(*this, r))
82
+ set_empty();
83
+ else {
84
+ typename Policies::rounding rnd;
85
+ set(rnd.sub_down(low, r), rnd.sub_up(up, r));
86
+ }
87
+ return *this;
88
+ }
89
+
90
+ template<class T, class Policies> inline
91
+ interval<T, Policies>& interval<T, Policies>::operator*=(const interval<T, Policies>& r)
92
+ {
93
+ return *this = *this * r;
94
+ }
95
+
96
+ template<class T, class Policies> inline
97
+ interval<T, Policies>& interval<T, Policies>::operator*=(const T& r)
98
+ {
99
+ return *this = r * *this;
100
+ }
101
+
102
+ template<class T, class Policies> inline
103
+ interval<T, Policies>& interval<T, Policies>::operator/=(const interval<T, Policies>& r)
104
+ {
105
+ return *this = *this / r;
106
+ }
107
+
108
+ template<class T, class Policies> inline
109
+ interval<T, Policies>& interval<T, Policies>::operator/=(const T& r)
110
+ {
111
+ return *this = *this / r;
112
+ }
113
+
114
+ template<class T, class Policies> inline
115
+ interval<T, Policies> operator+(const interval<T, Policies>& x,
116
+ const interval<T, Policies>& y)
117
+ {
118
+ if (interval_lib::detail::test_input(x, y))
119
+ return interval<T, Policies>::empty();
120
+ typename Policies::rounding rnd;
121
+ return interval<T,Policies>(rnd.add_down(x.lower(), y.lower()),
122
+ rnd.add_up (x.upper(), y.upper()), true);
123
+ }
124
+
125
+ template<class T, class Policies> inline
126
+ interval<T, Policies> operator+(const T& x, const interval<T, Policies>& y)
127
+ {
128
+ if (interval_lib::detail::test_input(x, y))
129
+ return interval<T, Policies>::empty();
130
+ typename Policies::rounding rnd;
131
+ return interval<T,Policies>(rnd.add_down(x, y.lower()),
132
+ rnd.add_up (x, y.upper()), true);
133
+ }
134
+
135
+ template<class T, class Policies> inline
136
+ interval<T, Policies> operator+(const interval<T, Policies>& x, const T& y)
137
+ { return y + x; }
138
+
139
+ template<class T, class Policies> inline
140
+ interval<T, Policies> operator-(const interval<T, Policies>& x,
141
+ const interval<T, Policies>& y)
142
+ {
143
+ if (interval_lib::detail::test_input(x, y))
144
+ return interval<T, Policies>::empty();
145
+ typename Policies::rounding rnd;
146
+ return interval<T,Policies>(rnd.sub_down(x.lower(), y.upper()),
147
+ rnd.sub_up (x.upper(), y.lower()), true);
148
+ }
149
+
150
+ template<class T, class Policies> inline
151
+ interval<T, Policies> operator-(const T& x, const interval<T, Policies>& y)
152
+ {
153
+ if (interval_lib::detail::test_input(x, y))
154
+ return interval<T, Policies>::empty();
155
+ typename Policies::rounding rnd;
156
+ return interval<T,Policies>(rnd.sub_down(x, y.upper()),
157
+ rnd.sub_up (x, y.lower()), true);
158
+ }
159
+
160
+ template<class T, class Policies> inline
161
+ interval<T, Policies> operator-(const interval<T, Policies>& x, const T& y)
162
+ {
163
+ if (interval_lib::detail::test_input(x, y))
164
+ return interval<T, Policies>::empty();
165
+ typename Policies::rounding rnd;
166
+ return interval<T,Policies>(rnd.sub_down(x.lower(), y),
167
+ rnd.sub_up (x.upper(), y), true);
168
+ }
169
+
170
+ template<class T, class Policies> inline
171
+ interval<T, Policies> operator*(const interval<T, Policies>& x,
172
+ const interval<T, Policies>& y)
173
+ {
174
+ BOOST_USING_STD_MIN();
175
+ BOOST_USING_STD_MAX();
176
+ typedef interval<T, Policies> I;
177
+ if (interval_lib::detail::test_input(x, y))
178
+ return I::empty();
179
+ typename Policies::rounding rnd;
180
+ const T& xl = x.lower();
181
+ const T& xu = x.upper();
182
+ const T& yl = y.lower();
183
+ const T& yu = y.upper();
184
+
185
+ if (interval_lib::user::is_neg(xl))
186
+ if (interval_lib::user::is_pos(xu))
187
+ if (interval_lib::user::is_neg(yl))
188
+ if (interval_lib::user::is_pos(yu)) // M * M
189
+ return I(min BOOST_PREVENT_MACRO_SUBSTITUTION(rnd.mul_down(xl, yu), rnd.mul_down(xu, yl)),
190
+ max BOOST_PREVENT_MACRO_SUBSTITUTION(rnd.mul_up (xl, yl), rnd.mul_up (xu, yu)), true);
191
+ else // M * N
192
+ return I(rnd.mul_down(xu, yl), rnd.mul_up(xl, yl), true);
193
+ else
194
+ if (interval_lib::user::is_pos(yu)) // M * P
195
+ return I(rnd.mul_down(xl, yu), rnd.mul_up(xu, yu), true);
196
+ else // M * Z
197
+ return I(static_cast<T>(0), static_cast<T>(0), true);
198
+ else
199
+ if (interval_lib::user::is_neg(yl))
200
+ if (interval_lib::user::is_pos(yu)) // N * M
201
+ return I(rnd.mul_down(xl, yu), rnd.mul_up(xl, yl), true);
202
+ else // N * N
203
+ return I(rnd.mul_down(xu, yu), rnd.mul_up(xl, yl), true);
204
+ else
205
+ if (interval_lib::user::is_pos(yu)) // N * P
206
+ return I(rnd.mul_down(xl, yu), rnd.mul_up(xu, yl), true);
207
+ else // N * Z
208
+ return I(static_cast<T>(0), static_cast<T>(0), true);
209
+ else
210
+ if (interval_lib::user::is_pos(xu))
211
+ if (interval_lib::user::is_neg(yl))
212
+ if (interval_lib::user::is_pos(yu)) // P * M
213
+ return I(rnd.mul_down(xu, yl), rnd.mul_up(xu, yu), true);
214
+ else // P * N
215
+ return I(rnd.mul_down(xu, yl), rnd.mul_up(xl, yu), true);
216
+ else
217
+ if (interval_lib::user::is_pos(yu)) // P * P
218
+ return I(rnd.mul_down(xl, yl), rnd.mul_up(xu, yu), true);
219
+ else // P * Z
220
+ return I(static_cast<T>(0), static_cast<T>(0), true);
221
+ else // Z * ?
222
+ return I(static_cast<T>(0), static_cast<T>(0), true);
223
+ }
224
+
225
+ template<class T, class Policies> inline
226
+ interval<T, Policies> operator*(const T& x, const interval<T, Policies>& y)
227
+ {
228
+ typedef interval<T, Policies> I;
229
+ if (interval_lib::detail::test_input(x, y))
230
+ return I::empty();
231
+ typename Policies::rounding rnd;
232
+ const T& yl = y.lower();
233
+ const T& yu = y.upper();
234
+ // x is supposed not to be infinite
235
+ if (interval_lib::user::is_neg(x))
236
+ return I(rnd.mul_down(x, yu), rnd.mul_up(x, yl), true);
237
+ else if (interval_lib::user::is_zero(x))
238
+ return I(static_cast<T>(0), static_cast<T>(0), true);
239
+ else
240
+ return I(rnd.mul_down(x, yl), rnd.mul_up(x, yu), true);
241
+ }
242
+
243
+ template<class T, class Policies> inline
244
+ interval<T, Policies> operator*(const interval<T, Policies>& x, const T& y)
245
+ { return y * x; }
246
+
247
+ template<class T, class Policies> inline
248
+ interval<T, Policies> operator/(const interval<T, Policies>& x,
249
+ const interval<T, Policies>& y)
250
+ {
251
+ if (interval_lib::detail::test_input(x, y))
252
+ return interval<T, Policies>::empty();
253
+ if (zero_in(y))
254
+ if (!interval_lib::user::is_zero(y.lower()))
255
+ if (!interval_lib::user::is_zero(y.upper()))
256
+ return interval_lib::detail::div_zero(x);
257
+ else
258
+ return interval_lib::detail::div_negative(x, y.lower());
259
+ else
260
+ if (!interval_lib::user::is_zero(y.upper()))
261
+ return interval_lib::detail::div_positive(x, y.upper());
262
+ else
263
+ return interval<T, Policies>::empty();
264
+ else
265
+ return interval_lib::detail::div_non_zero(x, y);
266
+ }
267
+
268
+ template<class T, class Policies> inline
269
+ interval<T, Policies> operator/(const T& x, const interval<T, Policies>& y)
270
+ {
271
+ if (interval_lib::detail::test_input(x, y))
272
+ return interval<T, Policies>::empty();
273
+ if (zero_in(y))
274
+ if (!interval_lib::user::is_zero(y.lower()))
275
+ if (!interval_lib::user::is_zero(y.upper()))
276
+ return interval_lib::detail::div_zero<T, Policies>(x);
277
+ else
278
+ return interval_lib::detail::div_negative<T, Policies>(x, y.lower());
279
+ else
280
+ if (!interval_lib::user::is_zero(y.upper()))
281
+ return interval_lib::detail::div_positive<T, Policies>(x, y.upper());
282
+ else
283
+ return interval<T, Policies>::empty();
284
+ else
285
+ return interval_lib::detail::div_non_zero(x, y);
286
+ }
287
+
288
+ template<class T, class Policies> inline
289
+ interval<T, Policies> operator/(const interval<T, Policies>& x, const T& y)
290
+ {
291
+ if (interval_lib::detail::test_input(x, y) || interval_lib::user::is_zero(y))
292
+ return interval<T, Policies>::empty();
293
+ typename Policies::rounding rnd;
294
+ const T& xl = x.lower();
295
+ const T& xu = x.upper();
296
+ if (interval_lib::user::is_neg(y))
297
+ return interval<T, Policies>(rnd.div_down(xu, y), rnd.div_up(xl, y), true);
298
+ else
299
+ return interval<T, Policies>(rnd.div_down(xl, y), rnd.div_up(xu, y), true);
300
+ }
301
+
302
+ } // namespace numeric
303
+ } // namespace boost
304
+
305
+ #endif // BOOST_NUMERIC_INTERVAL_ARITH_HPP
@@ -0,0 +1,304 @@
1
+ /* Boost interval/arith2.hpp template implementation file
2
+ *
3
+ * This header provides some auxiliary arithmetic
4
+ * functions: fmod, sqrt, square, pov, inverse and
5
+ * a multi-interval division.
6
+ *
7
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
8
+ *
9
+ * Distributed under the Boost Software License, Version 1.0.
10
+ * (See accompanying file LICENSE_1_0.txt or
11
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
12
+ */
13
+
14
+ #ifndef BOOST_NUMERIC_INTERVAL_ARITH2_HPP
15
+ #define BOOST_NUMERIC_INTERVAL_ARITH2_HPP
16
+
17
+ #include <boost/config.hpp>
18
+ #include <boost/numeric/interval/detail/interval_prototype.hpp>
19
+ #include <boost/numeric/interval/detail/test_input.hpp>
20
+ #include <boost/numeric/interval/detail/bugs.hpp>
21
+ #include <boost/numeric/interval/detail/division.hpp>
22
+ #include <boost/numeric/interval/arith.hpp>
23
+ #include <boost/numeric/interval/policies.hpp>
24
+ #include <algorithm>
25
+ #include <cassert>
26
+ #include <boost/config/no_tr1/cmath.hpp>
27
+
28
+ namespace boost {
29
+ namespace numeric {
30
+
31
+ template<class T, class Policies> inline
32
+ interval<T, Policies> fmod(const interval<T, Policies>& x,
33
+ const interval<T, Policies>& y)
34
+ {
35
+ if (interval_lib::detail::test_input(x, y))
36
+ return interval<T, Policies>::empty();
37
+ typename Policies::rounding rnd;
38
+ typedef typename interval_lib::unprotect<interval<T, Policies> >::type I;
39
+ T const &yb = interval_lib::user::is_neg(x.lower()) ? y.lower() : y.upper();
40
+ T n = rnd.int_down(rnd.div_down(x.lower(), yb));
41
+ return (const I&)x - n * (const I&)y;
42
+ }
43
+
44
+ template<class T, class Policies> inline
45
+ interval<T, Policies> fmod(const interval<T, Policies>& x, const T& y)
46
+ {
47
+ if (interval_lib::detail::test_input(x, y))
48
+ return interval<T, Policies>::empty();
49
+ typename Policies::rounding rnd;
50
+ typedef typename interval_lib::unprotect<interval<T, Policies> >::type I;
51
+ T n = rnd.int_down(rnd.div_down(x.lower(), y));
52
+ return (const I&)x - n * I(y);
53
+ }
54
+
55
+ template<class T, class Policies> inline
56
+ interval<T, Policies> fmod(const T& x, const interval<T, Policies>& y)
57
+ {
58
+ if (interval_lib::detail::test_input(x, y))
59
+ return interval<T, Policies>::empty();
60
+ typename Policies::rounding rnd;
61
+ typedef typename interval_lib::unprotect<interval<T, Policies> >::type I;
62
+ T const &yb = interval_lib::user::is_neg(x) ? y.lower() : y.upper();
63
+ T n = rnd.int_down(rnd.div_down(x, yb));
64
+ return x - n * (const I&)y;
65
+ }
66
+
67
+ namespace interval_lib {
68
+
69
+ template<class T, class Policies> inline
70
+ interval<T, Policies> division_part1(const interval<T, Policies>& x,
71
+ const interval<T, Policies>& y, bool& b)
72
+ {
73
+ typedef interval<T, Policies> I;
74
+ b = false;
75
+ if (detail::test_input(x, y))
76
+ return I::empty();
77
+ if (zero_in(y))
78
+ if (!user::is_zero(y.lower()))
79
+ if (!user::is_zero(y.upper()))
80
+ return detail::div_zero_part1(x, y, b);
81
+ else
82
+ return detail::div_negative(x, y.lower());
83
+ else
84
+ if (!user::is_zero(y.upper()))
85
+ return detail::div_positive(x, y.upper());
86
+ else
87
+ return I::empty();
88
+ else
89
+ return detail::div_non_zero(x, y);
90
+ }
91
+
92
+ template<class T, class Policies> inline
93
+ interval<T, Policies> division_part2(const interval<T, Policies>& x,
94
+ const interval<T, Policies>& y, bool b = true)
95
+ {
96
+ if (!b) return interval<T, Policies>::empty();
97
+ return detail::div_zero_part2(x, y);
98
+ }
99
+
100
+ template<class T, class Policies> inline
101
+ interval<T, Policies> multiplicative_inverse(const interval<T, Policies>& x)
102
+ {
103
+ typedef interval<T, Policies> I;
104
+ if (detail::test_input(x))
105
+ return I::empty();
106
+ T one = static_cast<T>(1);
107
+ typename Policies::rounding rnd;
108
+ if (zero_in(x)) {
109
+ typedef typename Policies::checking checking;
110
+ if (!user::is_zero(x.lower()))
111
+ if (!user::is_zero(x.upper()))
112
+ return I::whole();
113
+ else
114
+ return I(checking::neg_inf(), rnd.div_up(one, x.lower()), true);
115
+ else
116
+ if (!user::is_zero(x.upper()))
117
+ return I(rnd.div_down(one, x.upper()), checking::pos_inf(), true);
118
+ else
119
+ return I::empty();
120
+ } else
121
+ return I(rnd.div_down(one, x.upper()), rnd.div_up(one, x.lower()), true);
122
+ }
123
+
124
+ namespace detail {
125
+
126
+ template<class T, class Rounding> inline
127
+ T pow_dn(const T& x_, int pwr, Rounding& rnd) // x and pwr are positive
128
+ {
129
+ T x = x_;
130
+ T y = (pwr & 1) ? x_ : static_cast<T>(1);
131
+ pwr >>= 1;
132
+ while (pwr > 0) {
133
+ x = rnd.mul_down(x, x);
134
+ if (pwr & 1) y = rnd.mul_down(x, y);
135
+ pwr >>= 1;
136
+ }
137
+ return y;
138
+ }
139
+
140
+ template<class T, class Rounding> inline
141
+ T pow_up(const T& x_, int pwr, Rounding& rnd) // x and pwr are positive
142
+ {
143
+ T x = x_;
144
+ T y = (pwr & 1) ? x_ : static_cast<T>(1);
145
+ pwr >>= 1;
146
+ while (pwr > 0) {
147
+ x = rnd.mul_up(x, x);
148
+ if (pwr & 1) y = rnd.mul_up(x, y);
149
+ pwr >>= 1;
150
+ }
151
+ return y;
152
+ }
153
+
154
+ } // namespace detail
155
+ } // namespace interval_lib
156
+
157
+ template<class T, class Policies> inline
158
+ interval<T, Policies> pow(const interval<T, Policies>& x, int pwr)
159
+ {
160
+ BOOST_USING_STD_MAX();
161
+ using interval_lib::detail::pow_dn;
162
+ using interval_lib::detail::pow_up;
163
+ typedef interval<T, Policies> I;
164
+
165
+ if (interval_lib::detail::test_input(x))
166
+ return I::empty();
167
+
168
+ if (pwr == 0)
169
+ if (interval_lib::user::is_zero(x.lower())
170
+ && interval_lib::user::is_zero(x.upper()))
171
+ return I::empty();
172
+ else
173
+ return I(static_cast<T>(1));
174
+ else if (pwr < 0)
175
+ return interval_lib::multiplicative_inverse(pow(x, -pwr));
176
+
177
+ typename Policies::rounding rnd;
178
+
179
+ if (interval_lib::user::is_neg(x.upper())) { // [-2,-1]
180
+ T yl = pow_dn(static_cast<T>(-x.upper()), pwr, rnd);
181
+ T yu = pow_up(static_cast<T>(-x.lower()), pwr, rnd);
182
+ if (pwr & 1) // [-2,-1]^1
183
+ return I(-yu, -yl, true);
184
+ else // [-2,-1]^2
185
+ return I(yl, yu, true);
186
+ } else if (interval_lib::user::is_neg(x.lower())) { // [-1,1]
187
+ if (pwr & 1) { // [-1,1]^1
188
+ return I(-pow_up(static_cast<T>(-x.lower()), pwr, rnd), pow_up(x.upper(), pwr, rnd), true);
189
+ } else { // [-1,1]^2
190
+ return I(static_cast<T>(0), pow_up(max BOOST_PREVENT_MACRO_SUBSTITUTION(static_cast<T>(-x.lower()), x.upper()), pwr, rnd), true);
191
+ }
192
+ } else { // [1,2]
193
+ return I(pow_dn(x.lower(), pwr, rnd), pow_up(x.upper(), pwr, rnd), true);
194
+ }
195
+ }
196
+
197
+ template<class T, class Policies> inline
198
+ interval<T, Policies> sqrt(const interval<T, Policies>& x)
199
+ {
200
+ typedef interval<T, Policies> I;
201
+ if (interval_lib::detail::test_input(x) || interval_lib::user::is_neg(x.upper()))
202
+ return I::empty();
203
+ typename Policies::rounding rnd;
204
+ T l = !interval_lib::user::is_pos(x.lower()) ? static_cast<T>(0) : rnd.sqrt_down(x.lower());
205
+ return I(l, rnd.sqrt_up(x.upper()), true);
206
+ }
207
+
208
+ template<class T, class Policies> inline
209
+ interval<T, Policies> square(const interval<T, Policies>& x)
210
+ {
211
+ typedef interval<T, Policies> I;
212
+ if (interval_lib::detail::test_input(x))
213
+ return I::empty();
214
+ typename Policies::rounding rnd;
215
+ const T& xl = x.lower();
216
+ const T& xu = x.upper();
217
+ if (interval_lib::user::is_neg(xu))
218
+ return I(rnd.mul_down(xu, xu), rnd.mul_up(xl, xl), true);
219
+ else if (interval_lib::user::is_pos(x.lower()))
220
+ return I(rnd.mul_down(xl, xl), rnd.mul_up(xu, xu), true);
221
+ else
222
+ return I(static_cast<T>(0), (-xl > xu ? rnd.mul_up(xl, xl) : rnd.mul_up(xu, xu)), true);
223
+ }
224
+
225
+ namespace interval_lib {
226
+ namespace detail {
227
+
228
+ template< class I > inline
229
+ I root_aux(typename I::base_type const &x, int k) // x and k are bigger than one
230
+ {
231
+ typedef typename I::base_type T;
232
+ T tk(k);
233
+ I y(static_cast<T>(1), x, true);
234
+ for(;;) {
235
+ T y0 = median(y);
236
+ I yy = intersect(y, y0 - (pow(I(y0, y0, true), k) - x) / (tk * pow(y, k - 1)));
237
+ if (equal(y, yy)) return y;
238
+ y = yy;
239
+ }
240
+ }
241
+
242
+ template< class I > inline // x is positive and k bigger than one
243
+ typename I::base_type root_aux_dn(typename I::base_type const &x, int k)
244
+ {
245
+ typedef typename I::base_type T;
246
+ typedef typename I::traits_type Policies;
247
+ typename Policies::rounding rnd;
248
+ T one(1);
249
+ if (x > one) return root_aux<I>(x, k).lower();
250
+ if (x == one) return one;
251
+ return rnd.div_down(one, root_aux<I>(rnd.div_up(one, x), k).upper());
252
+ }
253
+
254
+ template< class I > inline // x is positive and k bigger than one
255
+ typename I::base_type root_aux_up(typename I::base_type const &x, int k)
256
+ {
257
+ typedef typename I::base_type T;
258
+ typedef typename I::traits_type Policies;
259
+ typename Policies::rounding rnd;
260
+ T one(1);
261
+ if (x > one) return root_aux<I>(x, k).upper();
262
+ if (x == one) return one;
263
+ return rnd.div_up(one, root_aux<I>(rnd.div_down(one, x), k).lower());
264
+ }
265
+
266
+ } // namespace detail
267
+ } // namespace interval_lib
268
+
269
+ template< class T, class Policies > inline
270
+ interval<T, Policies> nth_root(interval<T, Policies> const &x, int k)
271
+ {
272
+ typedef interval<T, Policies> I;
273
+ if (interval_lib::detail::test_input(x)) return I::empty();
274
+ assert(k > 0);
275
+ if (k == 1) return x;
276
+ typedef typename interval_lib::unprotect<I>::type R;
277
+ if (!interval_lib::user::is_pos(x.upper())) {
278
+ if (interval_lib::user::is_zero(x.upper())) {
279
+ T zero(0);
280
+ if (!(k & 1) || interval_lib::user::is_zero(x.lower())) // [-1,0]^/2 or [0,0]
281
+ return I(zero, zero, true);
282
+ else // [-1,0]^/3
283
+ return I(-interval_lib::detail::root_aux_up<R>(-x.lower(), k), zero, true);
284
+ } else if (!(k & 1)) // [-2,-1]^/2
285
+ return I::empty();
286
+ else { // [-2,-1]^/3
287
+ return I(-interval_lib::detail::root_aux_up<R>(-x.lower(), k),
288
+ -interval_lib::detail::root_aux_dn<R>(-x.upper(), k), true);
289
+ }
290
+ }
291
+ T u = interval_lib::detail::root_aux_up<R>(x.upper(), k);
292
+ if (!interval_lib::user::is_pos(x.lower()))
293
+ if (!(k & 1) || interval_lib::user::is_zero(x.lower())) // [-1,1]^/2 or [0,1]
294
+ return I(static_cast<T>(0), u, true);
295
+ else // [-1,1]^/3
296
+ return I(-interval_lib::detail::root_aux_up<R>(-x.lower(), k), u, true);
297
+ else // [1,2]
298
+ return I(interval_lib::detail::root_aux_dn<R>(x.lower(), k), u, true);
299
+ }
300
+
301
+ } // namespace numeric
302
+ } // namespace boost
303
+
304
+ #endif // BOOST_NUMERIC_INTERVAL_ARITH2_HPP