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,120 @@
1
+ /* Boost interval/rounded_arith.hpp template implementation file
2
+ *
3
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
4
+ *
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
8
+ */
9
+
10
+ #ifndef BOOST_NUMERIC_INTERVAL_ROUNDED_ARITH_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_ROUNDED_ARITH_HPP
12
+
13
+ #include <boost/numeric/interval/rounding.hpp>
14
+ #include <boost/numeric/interval/detail/bugs.hpp>
15
+ #include <boost/config/no_tr1/cmath.hpp>
16
+
17
+ namespace boost {
18
+ namespace numeric {
19
+ namespace interval_lib {
20
+
21
+ /*
22
+ * Three classes of rounding: exact, std, opp
23
+ * See documentation for details.
24
+ */
25
+
26
+ template<class T, class Rounding>
27
+ struct rounded_arith_exact: Rounding {
28
+ void init() { }
29
+ template<class U> T conv_down(U const &v) { return v; }
30
+ template<class U> T conv_up (U const &v) { return v; }
31
+ T add_down (const T& x, const T& y) { return x + y; }
32
+ T add_up (const T& x, const T& y) { return x + y; }
33
+ T sub_down (const T& x, const T& y) { return x - y; }
34
+ T sub_up (const T& x, const T& y) { return x - y; }
35
+ T mul_down (const T& x, const T& y) { return x * y; }
36
+ T mul_up (const T& x, const T& y) { return x * y; }
37
+ T div_down (const T& x, const T& y) { return x / y; }
38
+ T div_up (const T& x, const T& y) { return x / y; }
39
+ T median (const T& x, const T& y) { return (x + y) / 2; }
40
+ T sqrt_down(const T& x)
41
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); return sqrt(x); }
42
+ T sqrt_up (const T& x)
43
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); return sqrt(x); }
44
+ T int_down (const T& x)
45
+ { BOOST_NUMERIC_INTERVAL_using_math(floor); return floor(x); }
46
+ T int_up (const T& x)
47
+ { BOOST_NUMERIC_INTERVAL_using_math(ceil); return ceil(x); }
48
+ };
49
+
50
+ template<class T, class Rounding>
51
+ struct rounded_arith_std: Rounding {
52
+ # define BOOST_DN(EXPR) this->downward(); return this->force_rounding(EXPR)
53
+ # define BOOST_NR(EXPR) this->to_nearest(); return this->force_rounding(EXPR)
54
+ # define BOOST_UP(EXPR) this->upward(); return this->force_rounding(EXPR)
55
+ void init() { }
56
+ template<class U> T conv_down(U const &v) { BOOST_DN(v); }
57
+ template<class U> T conv_up (U const &v) { BOOST_UP(v); }
58
+ T add_down(const T& x, const T& y) { BOOST_DN(x + y); }
59
+ T sub_down(const T& x, const T& y) { BOOST_DN(x - y); }
60
+ T mul_down(const T& x, const T& y) { BOOST_DN(x * y); }
61
+ T div_down(const T& x, const T& y) { BOOST_DN(x / y); }
62
+ T add_up (const T& x, const T& y) { BOOST_UP(x + y); }
63
+ T sub_up (const T& x, const T& y) { BOOST_UP(x - y); }
64
+ T mul_up (const T& x, const T& y) { BOOST_UP(x * y); }
65
+ T div_up (const T& x, const T& y) { BOOST_UP(x / y); }
66
+ T median(const T& x, const T& y) { BOOST_NR((x + y) / 2); }
67
+ T sqrt_down(const T& x)
68
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_DN(sqrt(x)); }
69
+ T sqrt_up (const T& x)
70
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_UP(sqrt(x)); }
71
+ T int_down(const T& x) { this->downward(); return this->to_int(x); }
72
+ T int_up (const T& x) { this->upward(); return this->to_int(x); }
73
+ # undef BOOST_DN
74
+ # undef BOOST_NR
75
+ # undef BOOST_UP
76
+ };
77
+
78
+ template<class T, class Rounding>
79
+ struct rounded_arith_opp: Rounding {
80
+ void init() { this->upward(); }
81
+ # define BOOST_DN(EXPR) \
82
+ this->downward(); \
83
+ T r = this->force_rounding(EXPR); \
84
+ this->upward(); \
85
+ return r
86
+ # define BOOST_NR(EXPR) \
87
+ this->to_nearest(); \
88
+ T r = this->force_rounding(EXPR); \
89
+ this->upward(); \
90
+ return r
91
+ # define BOOST_UP(EXPR) return this->force_rounding(EXPR)
92
+ # define BOOST_UP_NEG(EXPR) return -this->force_rounding(EXPR)
93
+ template<class U> T conv_down(U const &v) { BOOST_UP_NEG(-v); }
94
+ template<class U> T conv_up (U const &v) { BOOST_UP(v); }
95
+ T add_down(const T& x, const T& y) { BOOST_UP_NEG((-x) - y); }
96
+ T sub_down(const T& x, const T& y) { BOOST_UP_NEG(y - x); }
97
+ T mul_down(const T& x, const T& y) { BOOST_UP_NEG(x * (-y)); }
98
+ T div_down(const T& x, const T& y) { BOOST_UP_NEG(x / (-y)); }
99
+ T add_up (const T& x, const T& y) { BOOST_UP(x + y); }
100
+ T sub_up (const T& x, const T& y) { BOOST_UP(x - y); }
101
+ T mul_up (const T& x, const T& y) { BOOST_UP(x * y); }
102
+ T div_up (const T& x, const T& y) { BOOST_UP(x / y); }
103
+ T median (const T& x, const T& y) { BOOST_NR((x + y) / 2); }
104
+ T sqrt_down(const T& x)
105
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_DN(sqrt(x)); }
106
+ T sqrt_up (const T& x)
107
+ { BOOST_NUMERIC_INTERVAL_using_math(sqrt); BOOST_UP(sqrt(x)); }
108
+ T int_down(const T& x) { return -this->to_int(-x); }
109
+ T int_up (const T& x) { return this->to_int(x); }
110
+ # undef BOOST_DN
111
+ # undef BOOST_NR
112
+ # undef BOOST_UP
113
+ # undef BOOST_UP_NEG
114
+ };
115
+
116
+ } // namespace interval_lib
117
+ } // namespace numeric
118
+ } // namespace boost
119
+
120
+ #endif // BOOST_NUMERIC_INTERVAL_ROUNDED_ARITH_HPP
@@ -0,0 +1,140 @@
1
+ /* Boost interval/rounded_transc.hpp template implementation file
2
+ *
3
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
4
+ *
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
8
+ */
9
+
10
+ #ifndef BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
12
+
13
+ #include <boost/numeric/interval/rounding.hpp>
14
+ #include <boost/numeric/interval/detail/bugs.hpp>
15
+ #include <boost/config/no_tr1/cmath.hpp>
16
+
17
+ namespace boost {
18
+ namespace numeric {
19
+ namespace interval_lib {
20
+
21
+ template<class T, class Rounding>
22
+ struct rounded_transc_exact: Rounding
23
+ {
24
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
25
+ T f##_down(const T& x) { BOOST_NUMERIC_INTERVAL_using_math(f); return f(x); } \
26
+ T f##_up (const T& x) { BOOST_NUMERIC_INTERVAL_using_math(f); return f(x); }
27
+ BOOST_NUMERIC_INTERVAL_new_func(exp)
28
+ BOOST_NUMERIC_INTERVAL_new_func(log)
29
+ BOOST_NUMERIC_INTERVAL_new_func(sin)
30
+ BOOST_NUMERIC_INTERVAL_new_func(cos)
31
+ BOOST_NUMERIC_INTERVAL_new_func(tan)
32
+ BOOST_NUMERIC_INTERVAL_new_func(asin)
33
+ BOOST_NUMERIC_INTERVAL_new_func(acos)
34
+ BOOST_NUMERIC_INTERVAL_new_func(atan)
35
+ BOOST_NUMERIC_INTERVAL_new_func(sinh)
36
+ BOOST_NUMERIC_INTERVAL_new_func(cosh)
37
+ BOOST_NUMERIC_INTERVAL_new_func(tanh)
38
+ # undef BOOST_NUMERIC_INTERVAL_new_func
39
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
40
+ T f##_down(const T& x) { BOOST_NUMERIC_INTERVAL_using_ahyp(f); return f(x); } \
41
+ T f##_up (const T& x) { BOOST_NUMERIC_INTERVAL_using_ahyp(f); return f(x); }
42
+ BOOST_NUMERIC_INTERVAL_new_func(asinh)
43
+ BOOST_NUMERIC_INTERVAL_new_func(acosh)
44
+ BOOST_NUMERIC_INTERVAL_new_func(atanh)
45
+ # undef BOOST_NUMERIC_INTERVAL_new_func
46
+ };
47
+
48
+ template<class T, class Rounding>
49
+ struct rounded_transc_std: Rounding
50
+ {
51
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
52
+ T f##_down(const T& x) \
53
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
54
+ this->downward(); return this->force_rounding(f(x)); } \
55
+ T f##_up (const T& x) \
56
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
57
+ this->upward(); return this->force_rounding(f(x)); }
58
+ BOOST_NUMERIC_INTERVAL_new_func(exp)
59
+ BOOST_NUMERIC_INTERVAL_new_func(log)
60
+ BOOST_NUMERIC_INTERVAL_new_func(sin)
61
+ BOOST_NUMERIC_INTERVAL_new_func(cos)
62
+ BOOST_NUMERIC_INTERVAL_new_func(tan)
63
+ BOOST_NUMERIC_INTERVAL_new_func(asin)
64
+ BOOST_NUMERIC_INTERVAL_new_func(acos)
65
+ BOOST_NUMERIC_INTERVAL_new_func(atan)
66
+ BOOST_NUMERIC_INTERVAL_new_func(sinh)
67
+ BOOST_NUMERIC_INTERVAL_new_func(cosh)
68
+ BOOST_NUMERIC_INTERVAL_new_func(tanh)
69
+ # undef BOOST_NUMERIC_INTERVAL_new_func
70
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
71
+ T f##_down(const T& x) \
72
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
73
+ this->downward(); return this->force_rounding(f(x)); } \
74
+ T f##_up (const T& x) \
75
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
76
+ this->upward(); return this->force_rounding(f(x)); }
77
+ BOOST_NUMERIC_INTERVAL_new_func(asinh)
78
+ BOOST_NUMERIC_INTERVAL_new_func(acosh)
79
+ BOOST_NUMERIC_INTERVAL_new_func(atanh)
80
+ # undef BOOST_NUMERIC_INTERVAL_new_func
81
+ };
82
+
83
+ template<class T, class Rounding>
84
+ struct rounded_transc_opp: Rounding
85
+ {
86
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
87
+ T f##_down(const T& x) \
88
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
89
+ this->downward(); T y = this->force_rounding(f(x)); \
90
+ this->upward(); return y; } \
91
+ T f##_up (const T& x) \
92
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
93
+ return this->force_rounding(f(x)); }
94
+ BOOST_NUMERIC_INTERVAL_new_func(exp)
95
+ BOOST_NUMERIC_INTERVAL_new_func(log)
96
+ BOOST_NUMERIC_INTERVAL_new_func(cos)
97
+ BOOST_NUMERIC_INTERVAL_new_func(acos)
98
+ BOOST_NUMERIC_INTERVAL_new_func(cosh)
99
+ # undef BOOST_NUMERIC_INTERVAL_new_func
100
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
101
+ T f##_down(const T& x) \
102
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
103
+ return -this->force_rounding(-f(x)); } \
104
+ T f##_up (const T& x) \
105
+ { BOOST_NUMERIC_INTERVAL_using_math(f); \
106
+ return this->force_rounding(f(x)); }
107
+ BOOST_NUMERIC_INTERVAL_new_func(sin)
108
+ BOOST_NUMERIC_INTERVAL_new_func(tan)
109
+ BOOST_NUMERIC_INTERVAL_new_func(asin)
110
+ BOOST_NUMERIC_INTERVAL_new_func(atan)
111
+ BOOST_NUMERIC_INTERVAL_new_func(sinh)
112
+ BOOST_NUMERIC_INTERVAL_new_func(tanh)
113
+ # undef BOOST_NUMERIC_INTERVAL_new_func
114
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
115
+ T f##_down(const T& x) \
116
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
117
+ this->downward(); T y = this->force_rounding(f(x)); \
118
+ this->upward(); return y; } \
119
+ T f##_up (const T& x) \
120
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
121
+ return this->force_rounding(f(x)); }
122
+ BOOST_NUMERIC_INTERVAL_new_func(asinh)
123
+ BOOST_NUMERIC_INTERVAL_new_func(atanh)
124
+ # undef BOOST_NUMERIC_INTERVAL_new_func
125
+ # define BOOST_NUMERIC_INTERVAL_new_func(f) \
126
+ T f##_down(const T& x) \
127
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
128
+ return -this->force_rounding(-f(x)); } \
129
+ T f##_up (const T& x) \
130
+ { BOOST_NUMERIC_INTERVAL_using_ahyp(f); \
131
+ return this->force_rounding(f(x)); }
132
+ BOOST_NUMERIC_INTERVAL_new_func(acosh)
133
+ # undef BOOST_NUMERIC_INTERVAL_new_func
134
+ };
135
+
136
+ } // namespace interval_lib
137
+ } // namespace numeric
138
+ } // namespace boost
139
+
140
+ #endif // BOOST_NUMERIC_INTERVAL_ROUNDED_TRANSC_HPP
@@ -0,0 +1,101 @@
1
+ /* Boost interval/rounding.hpp template implementation file
2
+ *
3
+ * Copyright 2002-2003 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
4
+ *
5
+ * Distributed under the Boost Software License, Version 1.0.
6
+ * (See accompanying file LICENSE_1_0.txt or
7
+ * copy at http://www.boost.org/LICENSE_1_0.txt)
8
+ */
9
+
10
+ #ifndef BOOST_NUMERIC_INTERVAL_ROUNDING_HPP
11
+ #define BOOST_NUMERIC_INTERVAL_ROUNDING_HPP
12
+
13
+ namespace boost {
14
+ namespace numeric {
15
+ namespace interval_lib {
16
+
17
+ /*
18
+ * Default rounding_control class (does nothing)
19
+ */
20
+
21
+ template<class T>
22
+ struct rounding_control
23
+ {
24
+ typedef int rounding_mode;
25
+ static void get_rounding_mode(rounding_mode&) {}
26
+ static void set_rounding_mode(rounding_mode) {}
27
+ static void upward() {}
28
+ static void downward() {}
29
+ static void to_nearest() {}
30
+ static const T& to_int(const T& x) { return x; }
31
+ static const T& force_rounding(const T& x) { return x; }
32
+ };
33
+
34
+ /*
35
+ * A few rounding control classes (exact/std/opp: see documentation)
36
+ * rounded_arith_* control the rounding of the arithmetic operators
37
+ * rounded_transc_* control the rounding of the transcendental functions
38
+ */
39
+
40
+ template<class T, class Rounding = rounding_control<T> >
41
+ struct rounded_arith_exact;
42
+
43
+ template<class T, class Rounding = rounding_control<T> >
44
+ struct rounded_arith_std;
45
+
46
+ template<class T, class Rounding = rounding_control<T> >
47
+ struct rounded_arith_opp;
48
+
49
+ template<class T, class Rounding>
50
+ struct rounded_transc_dummy;
51
+
52
+ template<class T, class Rounding = rounded_arith_exact<T> >
53
+ struct rounded_transc_exact;
54
+
55
+ template<class T, class Rounding = rounded_arith_std<T> >
56
+ struct rounded_transc_std;
57
+
58
+ template<class T, class Rounding = rounded_arith_opp<T> >
59
+ struct rounded_transc_opp;
60
+
61
+ /*
62
+ * State-saving classes: allow to set and reset rounding control
63
+ */
64
+
65
+ namespace detail {
66
+
67
+ template<class Rounding>
68
+ struct save_state_unprotected: Rounding
69
+ {
70
+ typedef save_state_unprotected<Rounding> unprotected_rounding;
71
+ };
72
+
73
+ } // namespace detail
74
+
75
+ template<class Rounding>
76
+ struct save_state: Rounding
77
+ {
78
+ typename Rounding::rounding_mode mode;
79
+ save_state() {
80
+ this->get_rounding_mode(mode);
81
+ this->init();
82
+ }
83
+ ~save_state() { this->set_rounding_mode(mode); }
84
+ typedef detail::save_state_unprotected<Rounding> unprotected_rounding;
85
+ };
86
+
87
+ template<class Rounding>
88
+ struct save_state_nothing: Rounding
89
+ {
90
+ typedef save_state_nothing<Rounding> unprotected_rounding;
91
+ };
92
+
93
+ template<class T>
94
+ struct rounded_math: save_state_nothing<rounded_arith_exact<T> >
95
+ {};
96
+
97
+ } // namespace interval_lib
98
+ } // namespace numeric
99
+ } // namespace boost
100
+
101
+ #endif // BOOST_NUMERIC_INTERVAL_ROUNDING_HPP
@@ -0,0 +1,232 @@
1
+ /* Boost interval/transc.hpp template implementation file
2
+ *
3
+ * Copyright 2000 Jens Maurer
4
+ * Copyright 2002 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_TRANSC_HPP
12
+ #define BOOST_NUMERIC_INTERVAL_TRANSC_HPP
13
+
14
+ #include <boost/config.hpp>
15
+ #include <boost/numeric/interval/detail/interval_prototype.hpp>
16
+ #include <boost/numeric/interval/detail/bugs.hpp>
17
+ #include <boost/numeric/interval/detail/test_input.hpp>
18
+ #include <boost/numeric/interval/rounding.hpp>
19
+ #include <boost/numeric/interval/constants.hpp>
20
+ #include <boost/numeric/interval/arith.hpp>
21
+ #include <boost/numeric/interval/arith2.hpp>
22
+ #include <algorithm>
23
+
24
+ namespace boost {
25
+ namespace numeric {
26
+
27
+ template<class T, class Policies> inline
28
+ interval<T, Policies> exp(const interval<T, Policies>& x)
29
+ {
30
+ typedef interval<T, Policies> I;
31
+ if (interval_lib::detail::test_input(x))
32
+ return I::empty();
33
+ typename Policies::rounding rnd;
34
+ return I(rnd.exp_down(x.lower()), rnd.exp_up(x.upper()), true);
35
+ }
36
+
37
+ template<class T, class Policies> inline
38
+ interval<T, Policies> log(const interval<T, Policies>& x)
39
+ {
40
+ typedef interval<T, Policies> I;
41
+ if (interval_lib::detail::test_input(x) ||
42
+ !interval_lib::user::is_pos(x.upper()))
43
+ return I::empty();
44
+ typename Policies::rounding rnd;
45
+ typedef typename Policies::checking checking;
46
+ T l = !interval_lib::user::is_pos(x.lower())
47
+ ? checking::neg_inf() : rnd.log_down(x.lower());
48
+ return I(l, rnd.log_up(x.upper()), true);
49
+ }
50
+
51
+ template<class T, class Policies> inline
52
+ interval<T, Policies> cos(const interval<T, Policies>& x)
53
+ {
54
+ if (interval_lib::detail::test_input(x))
55
+ return interval<T, Policies>::empty();
56
+ typename Policies::rounding rnd;
57
+ typedef interval<T, Policies> I;
58
+ typedef typename interval_lib::unprotect<I>::type R;
59
+
60
+ // get lower bound within [0, pi]
61
+ const R pi2 = interval_lib::pi_twice<R>();
62
+ R tmp = fmod((const R&)x, pi2);
63
+ if (width(tmp) >= pi2.lower())
64
+ return I(static_cast<T>(-1), static_cast<T>(1), true); // we are covering a full period
65
+ if (tmp.lower() >= interval_lib::constants::pi_upper<T>())
66
+ return -cos(tmp - interval_lib::pi<R>());
67
+ T l = tmp.lower();
68
+ T u = tmp.upper();
69
+
70
+ BOOST_USING_STD_MIN();
71
+ // separate into monotone subintervals
72
+ if (u <= interval_lib::constants::pi_lower<T>())
73
+ return I(rnd.cos_down(u), rnd.cos_up(l), true);
74
+ else if (u <= pi2.lower())
75
+ return I(static_cast<T>(-1), rnd.cos_up(min BOOST_PREVENT_MACRO_SUBSTITUTION(rnd.sub_down(pi2.lower(), u), l)), true);
76
+ else
77
+ return I(static_cast<T>(-1), static_cast<T>(1), true);
78
+ }
79
+
80
+ template<class T, class Policies> inline
81
+ interval<T, Policies> sin(const interval<T, Policies>& x)
82
+ {
83
+ typedef interval<T, Policies> I;
84
+ if (interval_lib::detail::test_input(x))
85
+ return I::empty();
86
+ typename Policies::rounding rnd;
87
+ typedef typename interval_lib::unprotect<I>::type R;
88
+ I r = cos((const R&)x - interval_lib::pi_half<R>());
89
+ (void)&rnd;
90
+ return r;
91
+ }
92
+
93
+ template<class T, class Policies> inline
94
+ interval<T, Policies> tan(const interval<T, Policies>& x)
95
+ {
96
+ typedef interval<T, Policies> I;
97
+ if (interval_lib::detail::test_input(x))
98
+ return I::empty();
99
+ typename Policies::rounding rnd;
100
+ typedef typename interval_lib::unprotect<I>::type R;
101
+
102
+ // get lower bound within [-pi/2, pi/2]
103
+ const R pi = interval_lib::pi<R>();
104
+ R tmp = fmod((const R&)x, pi);
105
+ const T pi_half_d = interval_lib::constants::pi_half_lower<T>();
106
+ if (tmp.lower() >= pi_half_d)
107
+ tmp -= pi;
108
+ if (tmp.lower() <= -pi_half_d || tmp.upper() >= pi_half_d)
109
+ return I::whole();
110
+ return I(rnd.tan_down(tmp.lower()), rnd.tan_up(tmp.upper()), true);
111
+ }
112
+
113
+ template<class T, class Policies> inline
114
+ interval<T, Policies> asin(const interval<T, Policies>& x)
115
+ {
116
+ typedef interval<T, Policies> I;
117
+ if (interval_lib::detail::test_input(x)
118
+ || x.upper() < static_cast<T>(-1) || x.lower() > static_cast<T>(1))
119
+ return I::empty();
120
+ typename Policies::rounding rnd;
121
+ T l = (x.lower() <= static_cast<T>(-1))
122
+ ? -interval_lib::constants::pi_half_upper<T>()
123
+ : rnd.asin_down(x.lower());
124
+ T u = (x.upper() >= static_cast<T>(1) )
125
+ ? interval_lib::constants::pi_half_upper<T>()
126
+ : rnd.asin_up (x.upper());
127
+ return I(l, u, true);
128
+ }
129
+
130
+ template<class T, class Policies> inline
131
+ interval<T, Policies> acos(const interval<T, Policies>& x)
132
+ {
133
+ typedef interval<T, Policies> I;
134
+ if (interval_lib::detail::test_input(x)
135
+ || x.upper() < static_cast<T>(-1) || x.lower() > static_cast<T>(1))
136
+ return I::empty();
137
+ typename Policies::rounding rnd;
138
+ T l = (x.upper() >= static_cast<T>(1) )
139
+ ? static_cast<T>(0)
140
+ : rnd.acos_down(x.upper());
141
+ T u = (x.lower() <= static_cast<T>(-1))
142
+ ? interval_lib::constants::pi_upper<T>()
143
+ : rnd.acos_up (x.lower());
144
+ return I(l, u, true);
145
+ }
146
+
147
+ template<class T, class Policies> inline
148
+ interval<T, Policies> atan(const interval<T, Policies>& x)
149
+ {
150
+ typedef interval<T, Policies> I;
151
+ if (interval_lib::detail::test_input(x))
152
+ return I::empty();
153
+ typename Policies::rounding rnd;
154
+ return I(rnd.atan_down(x.lower()), rnd.atan_up(x.upper()), true);
155
+ }
156
+
157
+ template<class T, class Policies> inline
158
+ interval<T, Policies> sinh(const interval<T, Policies>& x)
159
+ {
160
+ typedef interval<T, Policies> I;
161
+ if (interval_lib::detail::test_input(x))
162
+ return I::empty();
163
+ typename Policies::rounding rnd;
164
+ return I(rnd.sinh_down(x.lower()), rnd.sinh_up(x.upper()), true);
165
+ }
166
+
167
+ template<class T, class Policies> inline
168
+ interval<T, Policies> cosh(const interval<T, Policies>& x)
169
+ {
170
+ typedef interval<T, Policies> I;
171
+ if (interval_lib::detail::test_input(x))
172
+ return I::empty();
173
+ typename Policies::rounding rnd;
174
+ if (interval_lib::user::is_neg(x.upper()))
175
+ return I(rnd.cosh_down(x.upper()), rnd.cosh_up(x.lower()), true);
176
+ else if (!interval_lib::user::is_neg(x.lower()))
177
+ return I(rnd.cosh_down(x.lower()), rnd.cosh_up(x.upper()), true);
178
+ else
179
+ return I(static_cast<T>(1), rnd.cosh_up(-x.lower() > x.upper() ? x.lower() : x.upper()), true);
180
+ }
181
+
182
+ template<class T, class Policies> inline
183
+ interval<T, Policies> tanh(const interval<T, Policies>& x)
184
+ {
185
+ typedef interval<T, Policies> I;
186
+ if (interval_lib::detail::test_input(x))
187
+ return I::empty();
188
+ typename Policies::rounding rnd;
189
+ return I(rnd.tanh_down(x.lower()), rnd.tanh_up(x.upper()), true);
190
+ }
191
+
192
+ template<class T, class Policies> inline
193
+ interval<T, Policies> asinh(const interval<T, Policies>& x)
194
+ {
195
+ typedef interval<T, Policies> I;
196
+ if (interval_lib::detail::test_input(x))
197
+ return I::empty();
198
+ typename Policies::rounding rnd;
199
+ return I(rnd.asinh_down(x.lower()), rnd.asinh_up(x.upper()), true);
200
+ }
201
+
202
+ template<class T, class Policies> inline
203
+ interval<T, Policies> acosh(const interval<T, Policies>& x)
204
+ {
205
+ typedef interval<T, Policies> I;
206
+ if (interval_lib::detail::test_input(x) || x.upper() < static_cast<T>(1))
207
+ return I::empty();
208
+ typename Policies::rounding rnd;
209
+ T l = x.lower() <= static_cast<T>(1) ? static_cast<T>(0) : rnd.acosh_down(x.lower());
210
+ return I(l, rnd.acosh_up(x.upper()), true);
211
+ }
212
+
213
+ template<class T, class Policies> inline
214
+ interval<T, Policies> atanh(const interval<T, Policies>& x)
215
+ {
216
+ typedef interval<T, Policies> I;
217
+ if (interval_lib::detail::test_input(x)
218
+ || x.upper() < static_cast<T>(-1) || x.lower() > static_cast<T>(1))
219
+ return I::empty();
220
+ typename Policies::rounding rnd;
221
+ typedef typename Policies::checking checking;
222
+ T l = (x.lower() <= static_cast<T>(-1))
223
+ ? checking::neg_inf() : rnd.atanh_down(x.lower());
224
+ T u = (x.upper() >= static_cast<T>(1) )
225
+ ? checking::pos_inf() : rnd.atanh_up (x.upper());
226
+ return I(l, u, true);
227
+ }
228
+
229
+ } // namespace numeric
230
+ } // namespace boost
231
+
232
+ #endif // BOOST_NUMERIC_INTERVAL_TRANSC_HPP