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.
- package/README.md +29 -2
- package/boost/cast.hpp +20 -0
- package/boost/numeric/conversion/bounds.hpp +24 -0
- package/boost/numeric/conversion/cast.hpp +61 -0
- package/boost/numeric/conversion/conversion_traits.hpp +32 -0
- package/boost/numeric/conversion/converter.hpp +68 -0
- package/boost/numeric/conversion/converter_policies.hpp +194 -0
- package/boost/numeric/conversion/detail/bounds.hpp +58 -0
- package/boost/numeric/conversion/detail/conversion_traits.hpp +97 -0
- package/boost/numeric/conversion/detail/converter.hpp +593 -0
- package/boost/numeric/conversion/detail/int_float_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/is_subranged.hpp +234 -0
- package/boost/numeric/conversion/detail/meta.hpp +120 -0
- package/boost/numeric/conversion/detail/numeric_cast_traits.hpp +138 -0
- package/boost/numeric/conversion/detail/old_numeric_cast.hpp +308 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_common.hpp +1741 -0
- package/boost/numeric/conversion/detail/preprocessed/numeric_cast_traits_long_long.hpp +347 -0
- package/boost/numeric/conversion/detail/sign_mixture.hpp +72 -0
- package/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +69 -0
- package/boost/numeric/conversion/int_float_mixture.hpp +30 -0
- package/boost/numeric/conversion/int_float_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/is_subranged.hpp +27 -0
- package/boost/numeric/conversion/numeric_cast_traits.hpp +31 -0
- package/boost/numeric/conversion/sign_mixture.hpp +30 -0
- package/boost/numeric/conversion/sign_mixture_enum.hpp +29 -0
- package/boost/numeric/conversion/udt_builtin_mixture.hpp +28 -0
- package/boost/numeric/conversion/udt_builtin_mixture_enum.hpp +26 -0
- package/boost/numeric/interval/arith.hpp +305 -0
- package/boost/numeric/interval/arith2.hpp +304 -0
- package/boost/numeric/interval/arith3.hpp +69 -0
- package/boost/numeric/interval/checking.hpp +130 -0
- package/boost/numeric/interval/compare/certain.hpp +113 -0
- package/boost/numeric/interval/compare/explicit.hpp +248 -0
- package/boost/numeric/interval/compare/lexicographic.hpp +122 -0
- package/boost/numeric/interval/compare/possible.hpp +113 -0
- package/boost/numeric/interval/compare/set.hpp +101 -0
- package/boost/numeric/interval/compare/tribool.hpp +138 -0
- package/boost/numeric/interval/compare.hpp +19 -0
- package/boost/numeric/interval/constants.hpp +85 -0
- package/boost/numeric/interval/detail/alpha_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/bcc_rounding_control.hpp +57 -0
- package/boost/numeric/interval/detail/bugs.hpp +48 -0
- package/boost/numeric/interval/detail/c99_rounding_control.hpp +50 -0
- package/boost/numeric/interval/detail/c99sub_rounding_control.hpp +43 -0
- package/boost/numeric/interval/detail/division.hpp +194 -0
- package/boost/numeric/interval/detail/ia64_rounding_control.hpp +83 -0
- package/boost/numeric/interval/detail/interval_prototype.hpp +41 -0
- package/boost/numeric/interval/detail/msvc_rounding_control.hpp +113 -0
- package/boost/numeric/interval/detail/ppc_rounding_control.hpp +99 -0
- package/boost/numeric/interval/detail/sparc_rounding_control.hpp +112 -0
- package/boost/numeric/interval/detail/test_input.hpp +76 -0
- package/boost/numeric/interval/detail/x86_rounding_control.hpp +108 -0
- package/boost/numeric/interval/detail/x86gcc_rounding_control.hpp +51 -0
- package/boost/numeric/interval/ext/integer.hpp +70 -0
- package/boost/numeric/interval/ext/x86_fast_rounding_control.hpp +70 -0
- package/boost/numeric/interval/hw_rounding.hpp +73 -0
- package/boost/numeric/interval/interval.hpp +450 -0
- package/boost/numeric/interval/io.hpp +41 -0
- package/boost/numeric/interval/limits.hpp +49 -0
- package/boost/numeric/interval/policies.hpp +75 -0
- package/boost/numeric/interval/rounded_arith.hpp +120 -0
- package/boost/numeric/interval/rounded_transc.hpp +140 -0
- package/boost/numeric/interval/rounding.hpp +101 -0
- package/boost/numeric/interval/transc.hpp +232 -0
- package/boost/numeric/interval/utility.hpp +335 -0
- package/boost/numeric/interval/utility_fwd.hpp +172 -0
- package/boost/numeric/interval.hpp +32 -0
- package/boost/numeric/odeint/algebra/algebra_dispatcher.hpp +86 -0
- package/boost/numeric/odeint/algebra/array_algebra.hpp +293 -0
- package/boost/numeric/odeint/algebra/default_operations.hpp +599 -0
- package/boost/numeric/odeint/algebra/detail/extract_value_type.hpp +51 -0
- package/boost/numeric/odeint/algebra/detail/for_each.hpp +165 -0
- package/boost/numeric/odeint/algebra/detail/macros.hpp +35 -0
- package/boost/numeric/odeint/algebra/detail/norm_inf.hpp +46 -0
- package/boost/numeric/odeint/algebra/fusion_algebra.hpp +216 -0
- package/boost/numeric/odeint/algebra/fusion_algebra_dispatcher.hpp +48 -0
- package/boost/numeric/odeint/algebra/multi_array_algebra.hpp +146 -0
- package/boost/numeric/odeint/algebra/norm_result_type.hpp +33 -0
- package/boost/numeric/odeint/algebra/operations_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/algebra/range_algebra.hpp +142 -0
- package/boost/numeric/odeint/algebra/vector_space_algebra.hpp +175 -0
- package/boost/numeric/odeint/config.hpp +53 -0
- package/boost/numeric/odeint/external/blaze/blaze_algebra_dispatcher.hpp +55 -0
- package/boost/numeric/odeint/external/blaze/blaze_resize.hpp +64 -0
- package/boost/numeric/odeint/external/compute/compute.hpp +27 -0
- package/boost/numeric/odeint/external/compute/compute_algebra.hpp +65 -0
- package/boost/numeric/odeint/external/compute/compute_algebra_dispatcher.hpp +41 -0
- package/boost/numeric/odeint/external/compute/compute_operations.hpp +198 -0
- package/boost/numeric/odeint/external/compute/compute_operations_dispatcher.hpp +44 -0
- package/boost/numeric/odeint/external/compute/compute_resize.hpp +92 -0
- package/boost/numeric/odeint/external/eigen/eigen.hpp +27 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra.hpp +98 -0
- package/boost/numeric/odeint/external/eigen/eigen_algebra_dispatcher.hpp +49 -0
- package/boost/numeric/odeint/external/eigen/eigen_resize.hpp +103 -0
- package/boost/numeric/odeint/external/gsl/gsl_wrapper.hpp +228 -0
- package/boost/numeric/odeint/external/mkl/mkl_operations.hpp +181 -0
- package/boost/numeric/odeint/external/mpi/mpi.hpp +25 -0
- package/boost/numeric/odeint/external/mpi/mpi_nested_algebra.hpp +62 -0
- package/boost/numeric/odeint/external/mpi/mpi_state.hpp +113 -0
- package/boost/numeric/odeint/external/mpi/mpi_vector_state.hpp +95 -0
- package/boost/numeric/odeint/external/mtl4/implicit_euler_mtl4.hpp +161 -0
- package/boost/numeric/odeint/external/mtl4/mtl4.hpp +23 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_algebra_dispatcher.hpp +99 -0
- package/boost/numeric/odeint/external/mtl4/mtl4_resize.hpp +134 -0
- package/boost/numeric/odeint/external/nt2/nt2_algebra_dispatcher.hpp +25 -0
- package/boost/numeric/odeint/external/nt2/nt2_copy.hpp +33 -0
- package/boost/numeric/odeint/external/nt2/nt2_norm_inf.hpp +31 -0
- package/boost/numeric/odeint/external/nt2/nt2_resize.hpp +54 -0
- package/boost/numeric/odeint/external/openmp/openmp.hpp +31 -0
- package/boost/numeric/odeint/external/openmp/openmp_nested_algebra.hpp +281 -0
- package/boost/numeric/odeint/external/openmp/openmp_range_algebra.hpp +276 -0
- package/boost/numeric/odeint/external/openmp/openmp_state.hpp +172 -0
- package/boost/numeric/odeint/external/thrust/thrust.hpp +27 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra.hpp +217 -0
- package/boost/numeric/odeint/external/thrust/thrust_algebra_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations.hpp +233 -0
- package/boost/numeric/odeint/external/thrust/thrust_operations_dispatcher.hpp +118 -0
- package/boost/numeric/odeint/external/thrust/thrust_resize.hpp +197 -0
- package/boost/numeric/odeint/external/vexcl/vexcl.hpp +28 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_abs.hpp +61 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_algebra_dispatcher.hpp +51 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_copy.hpp +55 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_norm_inf.hpp +68 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_resize.hpp +96 -0
- package/boost/numeric/odeint/external/vexcl/vexcl_same_instance.hpp +58 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_operations.hpp +226 -0
- package/boost/numeric/odeint/external/viennacl/viennacl_resize.hpp +68 -0
- package/boost/numeric/odeint/integrate/check_adapter.hpp +222 -0
- package/boost/numeric/odeint/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/integrate/detail/integrate_adaptive.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_const.hpp +167 -0
- package/boost/numeric/odeint/integrate/detail/integrate_n_steps.hpp +161 -0
- package/boost/numeric/odeint/integrate/detail/integrate_times.hpp +179 -0
- package/boost/numeric/odeint/integrate/integrate.hpp +133 -0
- package/boost/numeric/odeint/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/integrate/integrate_const.hpp +195 -0
- package/boost/numeric/odeint/integrate/integrate_n_steps.hpp +178 -0
- package/boost/numeric/odeint/integrate/integrate_times.hpp +220 -0
- package/boost/numeric/odeint/integrate/max_step_checker.hpp +114 -0
- package/boost/numeric/odeint/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/adaptive_iterator.hpp +183 -0
- package/boost/numeric/odeint/iterator/adaptive_time_iterator.hpp +175 -0
- package/boost/numeric/odeint/iterator/const_step_iterator.hpp +180 -0
- package/boost/numeric/odeint/iterator/const_step_time_iterator.hpp +173 -0
- package/boost/numeric/odeint/iterator/detail/ode_iterator_base.hpp +199 -0
- package/boost/numeric/odeint/iterator/impl/adaptive_iterator_impl.hpp +251 -0
- package/boost/numeric/odeint/iterator/impl/const_step_iterator_impl.hpp +228 -0
- package/boost/numeric/odeint/iterator/impl/n_step_iterator_impl.hpp +239 -0
- package/boost/numeric/odeint/iterator/impl/times_iterator_impl.hpp +369 -0
- package/boost/numeric/odeint/iterator/integrate/detail/functors.hpp +70 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_adaptive.hpp +121 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_const.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_n_steps.hpp +107 -0
- package/boost/numeric/odeint/iterator/integrate/detail/integrate_times.hpp +67 -0
- package/boost/numeric/odeint/iterator/integrate/integrate.hpp +111 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_adaptive.hpp +127 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_const.hpp +158 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_n_steps.hpp +123 -0
- package/boost/numeric/odeint/iterator/integrate/integrate_times.hpp +131 -0
- package/boost/numeric/odeint/iterator/integrate/null_observer.hpp +38 -0
- package/boost/numeric/odeint/iterator/integrate/observer_collection.hpp +55 -0
- package/boost/numeric/odeint/iterator/n_step_iterator.hpp +168 -0
- package/boost/numeric/odeint/iterator/n_step_time_iterator.hpp +169 -0
- package/boost/numeric/odeint/iterator/times_iterator.hpp +189 -0
- package/boost/numeric/odeint/iterator/times_time_iterator.hpp +193 -0
- package/boost/numeric/odeint/stepper/adams_bashforth.hpp +418 -0
- package/boost/numeric/odeint/stepper/adams_bashforth_moulton.hpp +313 -0
- package/boost/numeric/odeint/stepper/adams_moulton.hpp +201 -0
- package/boost/numeric/odeint/stepper/adaptive_adams_bashforth_moulton.hpp +237 -0
- package/boost/numeric/odeint/stepper/base/algebra_stepper_base.hpp +91 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_base.hpp +588 -0
- package/boost/numeric/odeint/stepper/base/explicit_error_stepper_fsal_base.hpp +677 -0
- package/boost/numeric/odeint/stepper/base/explicit_stepper_base.hpp +415 -0
- package/boost/numeric/odeint/stepper/base/symplectic_rkn_stepper_base.hpp +431 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer.hpp +642 -0
- package/boost/numeric/odeint/stepper/bulirsch_stoer_dense_out.hpp +838 -0
- package/boost/numeric/odeint/stepper/controlled_adams_bashforth_moulton.hpp +322 -0
- package/boost/numeric/odeint/stepper/controlled_runge_kutta.hpp +1018 -0
- package/boost/numeric/odeint/stepper/controlled_step_result.hpp +42 -0
- package/boost/numeric/odeint/stepper/dense_output_runge_kutta.hpp +476 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_bashforth_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_call_algebra.hpp +148 -0
- package/boost/numeric/odeint/stepper/detail/adams_moulton_coefficients.hpp +168 -0
- package/boost/numeric/odeint/stepper/detail/adaptive_adams_coefficients.hpp +207 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_algorithm.hpp +247 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_call_algebra.hpp +263 -0
- package/boost/numeric/odeint/stepper/detail/generic_rk_operations.hpp +252 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster.hpp +199 -0
- package/boost/numeric/odeint/stepper/detail/pid_step_adjuster_coefficients.hpp +180 -0
- package/boost/numeric/odeint/stepper/detail/rotating_buffer.hpp +84 -0
- package/boost/numeric/odeint/stepper/euler.hpp +166 -0
- package/boost/numeric/odeint/stepper/explicit_error_generic_rk.hpp +255 -0
- package/boost/numeric/odeint/stepper/explicit_generic_rk.hpp +246 -0
- package/boost/numeric/odeint/stepper/extrapolation_stepper.hpp +288 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_adams_bashforth_moulton.hpp +59 -0
- package/boost/numeric/odeint/stepper/generation/generation_controlled_runge_kutta.hpp +61 -0
- package/boost/numeric/odeint/stepper/generation/generation_dense_output_runge_kutta.hpp +65 -0
- package/boost/numeric/odeint/stepper/generation/generation_rosenbrock4.hpp +79 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54.hpp +47 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_cash_karp54_classic.hpp +48 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_dopri5.hpp +56 -0
- package/boost/numeric/odeint/stepper/generation/generation_runge_kutta_fehlberg78.hpp +46 -0
- package/boost/numeric/odeint/stepper/generation/make_controlled.hpp +103 -0
- package/boost/numeric/odeint/stepper/generation/make_dense_output.hpp +100 -0
- package/boost/numeric/odeint/stepper/generation.hpp +37 -0
- package/boost/numeric/odeint/stepper/implicit_euler.hpp +170 -0
- package/boost/numeric/odeint/stepper/modified_midpoint.hpp +315 -0
- package/boost/numeric/odeint/stepper/rosenbrock4.hpp +346 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_controller.hpp +240 -0
- package/boost/numeric/odeint/stepper/rosenbrock4_dense_output.hpp +204 -0
- package/boost/numeric/odeint/stepper/runge_kutta4.hpp +181 -0
- package/boost/numeric/odeint/stepper/runge_kutta4_classic.hpp +232 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54.hpp +231 -0
- package/boost/numeric/odeint/stepper/runge_kutta_cash_karp54_classic.hpp +289 -0
- package/boost/numeric/odeint/stepper/runge_kutta_dopri5.hpp +403 -0
- package/boost/numeric/odeint/stepper/runge_kutta_fehlberg78.hpp +374 -0
- package/boost/numeric/odeint/stepper/stepper_categories.hpp +66 -0
- package/boost/numeric/odeint/stepper/symplectic_euler.hpp +136 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_m4_mclachlan.hpp +160 -0
- package/boost/numeric/odeint/stepper/symplectic_rkn_sb3a_mclachlan.hpp +162 -0
- package/boost/numeric/odeint/stepper/velocity_verlet.hpp +375 -0
- package/boost/numeric/odeint/tools/assert.hpp +30 -0
- package/boost/numeric/odeint/tools/is_standalone.hpp +21 -0
- package/boost/numeric/odeint/tools/traits.hpp +39 -0
- package/boost/numeric/odeint/util/bind.hpp +35 -0
- package/boost/numeric/odeint/util/copy.hpp +88 -0
- package/boost/numeric/odeint/util/detail/is_range.hpp +127 -0
- package/boost/numeric/odeint/util/detail/less_with_sign.hpp +78 -0
- package/boost/numeric/odeint/util/is_pair.hpp +42 -0
- package/boost/numeric/odeint/util/is_resizeable.hpp +84 -0
- package/boost/numeric/odeint/util/multi_array_adaption.hpp +131 -0
- package/boost/numeric/odeint/util/n_ary_helper.hpp +96 -0
- package/boost/numeric/odeint/util/odeint_error.hpp +77 -0
- package/boost/numeric/odeint/util/resize.hpp +120 -0
- package/boost/numeric/odeint/util/resizer.hpp +94 -0
- package/boost/numeric/odeint/util/same_instance.hpp +56 -0
- package/boost/numeric/odeint/util/same_size.hpp +117 -0
- package/boost/numeric/odeint/util/split.hpp +64 -0
- package/boost/numeric/odeint/util/split_adaptor.hpp +103 -0
- package/boost/numeric/odeint/util/state_wrapper.hpp +50 -0
- package/boost/numeric/odeint/util/stepper_traits.hpp +63 -0
- package/boost/numeric/odeint/util/ublas_matrix_expression.patch +6 -0
- package/boost/numeric/odeint/util/ublas_wrapper.hpp +297 -0
- package/boost/numeric/odeint/util/unit_helper.hpp +151 -0
- package/boost/numeric/odeint/util/unwrap_reference.hpp +141 -0
- package/boost/numeric/odeint/version.hpp +55 -0
- package/boost/numeric/odeint.hpp +87 -0
- package/boost/numeric/ublas/assignment.hpp +1288 -0
- package/boost/numeric/ublas/banded.hpp +2372 -0
- package/boost/numeric/ublas/blas.hpp +499 -0
- package/boost/numeric/ublas/detail/concepts.hpp +1465 -0
- package/boost/numeric/ublas/detail/config.hpp +304 -0
- package/boost/numeric/ublas/detail/definitions.hpp +212 -0
- package/boost/numeric/ublas/detail/documentation.hpp +33 -0
- package/boost/numeric/ublas/detail/duff.hpp +56 -0
- package/boost/numeric/ublas/detail/iterator.hpp +1448 -0
- package/boost/numeric/ublas/detail/matrix_assign.hpp +1785 -0
- package/boost/numeric/ublas/detail/raw.hpp +878 -0
- package/boost/numeric/ublas/detail/returntype_deduction.hpp +174 -0
- package/boost/numeric/ublas/detail/temporary.hpp +33 -0
- package/boost/numeric/ublas/detail/vector_assign.hpp +609 -0
- package/boost/numeric/ublas/doxydoc.hpp +58 -0
- package/boost/numeric/ublas/exception.hpp +297 -0
- package/boost/numeric/ublas/experimental/sparse_view.hpp +317 -0
- package/boost/numeric/ublas/expression_types.hpp +506 -0
- package/boost/numeric/ublas/functional.hpp +2112 -0
- package/boost/numeric/ublas/fwd.hpp +229 -0
- package/boost/numeric/ublas/hermitian.hpp +2633 -0
- package/boost/numeric/ublas/io.hpp +355 -0
- package/boost/numeric/ublas/lu.hpp +350 -0
- package/boost/numeric/ublas/matrix.hpp +6013 -0
- package/boost/numeric/ublas/matrix_expression.hpp +5693 -0
- package/boost/numeric/ublas/matrix_proxy.hpp +5457 -0
- package/boost/numeric/ublas/matrix_sparse.hpp +5773 -0
- package/boost/numeric/ublas/matrix_vector.hpp +406 -0
- package/boost/numeric/ublas/opencl/elementwise.hpp +508 -0
- package/boost/numeric/ublas/opencl/library.hpp +38 -0
- package/boost/numeric/ublas/opencl/matrix.hpp +123 -0
- package/boost/numeric/ublas/opencl/misc.hpp +182 -0
- package/boost/numeric/ublas/opencl/operations.hpp +18 -0
- package/boost/numeric/ublas/opencl/prod.hpp +364 -0
- package/boost/numeric/ublas/opencl/transpose.hpp +142 -0
- package/boost/numeric/ublas/opencl/vector.hpp +90 -0
- package/boost/numeric/ublas/opencl.hpp +16 -0
- package/boost/numeric/ublas/operation/begin.hpp +318 -0
- package/boost/numeric/ublas/operation/c_array.hpp +41 -0
- package/boost/numeric/ublas/operation/end.hpp +318 -0
- package/boost/numeric/ublas/operation/num_columns.hpp +45 -0
- package/boost/numeric/ublas/operation/num_rows.hpp +44 -0
- package/boost/numeric/ublas/operation/size.hpp +350 -0
- package/boost/numeric/ublas/operation.hpp +830 -0
- package/boost/numeric/ublas/operation_blocked.hpp +266 -0
- package/boost/numeric/ublas/operation_sparse.hpp +198 -0
- package/boost/numeric/ublas/operations.hpp +26 -0
- package/boost/numeric/ublas/storage.hpp +2131 -0
- package/boost/numeric/ublas/storage_sparse.hpp +578 -0
- package/boost/numeric/ublas/symmetric.hpp +2309 -0
- package/boost/numeric/ublas/tags.hpp +37 -0
- package/boost/numeric/ublas/tensor/algorithms.hpp +345 -0
- package/boost/numeric/ublas/tensor/expression.hpp +181 -0
- package/boost/numeric/ublas/tensor/expression_evaluation.hpp +288 -0
- package/boost/numeric/ublas/tensor/extents.hpp +335 -0
- package/boost/numeric/ublas/tensor/functions.hpp +558 -0
- package/boost/numeric/ublas/tensor/index.hpp +89 -0
- package/boost/numeric/ublas/tensor/multi_index.hpp +110 -0
- package/boost/numeric/ublas/tensor/multi_index_utility.hpp +364 -0
- package/boost/numeric/ublas/tensor/multiplication.hpp +945 -0
- package/boost/numeric/ublas/tensor/operators_arithmetic.hpp +244 -0
- package/boost/numeric/ublas/tensor/operators_comparison.hpp +175 -0
- package/boost/numeric/ublas/tensor/ostream.hpp +122 -0
- package/boost/numeric/ublas/tensor/storage_traits.hpp +84 -0
- package/boost/numeric/ublas/tensor/strides.hpp +251 -0
- package/boost/numeric/ublas/tensor/tensor.hpp +734 -0
- package/boost/numeric/ublas/tensor.hpp +26 -0
- package/boost/numeric/ublas/traits/c_array.hpp +110 -0
- package/boost/numeric/ublas/traits/const_iterator_type.hpp +127 -0
- package/boost/numeric/ublas/traits/iterator_type.hpp +126 -0
- package/boost/numeric/ublas/traits.hpp +753 -0
- package/boost/numeric/ublas/triangular.hpp +2775 -0
- package/boost/numeric/ublas/vector.hpp +2947 -0
- package/boost/numeric/ublas/vector_expression.hpp +1762 -0
- package/boost/numeric/ublas/vector_of_vector.hpp +1347 -0
- package/boost/numeric/ublas/vector_proxy.hpp +1697 -0
- package/boost/numeric/ublas/vector_sparse.hpp +2246 -0
- 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
|