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,50 @@
|
|
|
1
|
+
/* Boost interval/detail/c99_rounding_control.hpp 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_DETAIL_C99_ROUNDING_CONTROL_HPP
|
|
12
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
|
|
13
|
+
|
|
14
|
+
#include <boost/numeric/interval/detail/c99sub_rounding_control.hpp>
|
|
15
|
+
|
|
16
|
+
namespace boost {
|
|
17
|
+
namespace numeric {
|
|
18
|
+
namespace interval_lib {
|
|
19
|
+
|
|
20
|
+
template<>
|
|
21
|
+
struct rounding_control<float>:
|
|
22
|
+
detail::c99_rounding_control
|
|
23
|
+
{
|
|
24
|
+
static float force_rounding(float const &r)
|
|
25
|
+
{ volatile float r_ = r; return r_; }
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
template<>
|
|
29
|
+
struct rounding_control<double>:
|
|
30
|
+
detail::c99_rounding_control
|
|
31
|
+
{
|
|
32
|
+
static double force_rounding(double const &r)
|
|
33
|
+
{ volatile double r_ = r; return r_; }
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
template<>
|
|
37
|
+
struct rounding_control<long double>:
|
|
38
|
+
detail::c99_rounding_control
|
|
39
|
+
{
|
|
40
|
+
static long double force_rounding(long double const &r)
|
|
41
|
+
{ volatile long double r_ = r; return r_; }
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
} // namespace interval_lib
|
|
45
|
+
} // namespace numeric
|
|
46
|
+
} // namespace boost
|
|
47
|
+
|
|
48
|
+
#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
49
|
+
|
|
50
|
+
#endif // BOOST_NUMERIC_INTERVAL_DETAIL_C99_ROUNDING_CONTROL_HPP
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* Boost interval/detail/c99sub_rounding_control.hpp 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_DETAIL_C99SUB_ROUNDING_CONTROL_HPP
|
|
12
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUNDING_CONTROL_HPP
|
|
13
|
+
|
|
14
|
+
#include <boost/detail/fenv.hpp> // ISO C 99 rounding mode control
|
|
15
|
+
|
|
16
|
+
namespace boost {
|
|
17
|
+
namespace numeric {
|
|
18
|
+
namespace interval_lib {
|
|
19
|
+
namespace detail {
|
|
20
|
+
|
|
21
|
+
extern "C" { double rint(double); }
|
|
22
|
+
|
|
23
|
+
struct c99_rounding_control
|
|
24
|
+
{
|
|
25
|
+
typedef int rounding_mode;
|
|
26
|
+
|
|
27
|
+
static void set_rounding_mode(rounding_mode mode) { fesetround(mode); }
|
|
28
|
+
static void get_rounding_mode(rounding_mode &mode) { mode = fegetround(); }
|
|
29
|
+
static void downward() { set_rounding_mode(FE_DOWNWARD); }
|
|
30
|
+
static void upward() { set_rounding_mode(FE_UPWARD); }
|
|
31
|
+
static void to_nearest() { set_rounding_mode(FE_TONEAREST); }
|
|
32
|
+
static void toward_zero() { set_rounding_mode(FE_TOWARDZERO); }
|
|
33
|
+
|
|
34
|
+
template<class T>
|
|
35
|
+
static T to_int(const T& r) { return rint(r); }
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
} // namespace detail
|
|
39
|
+
} // namespace interval_lib
|
|
40
|
+
} // namespace numeric
|
|
41
|
+
} // namespace boost
|
|
42
|
+
|
|
43
|
+
#endif // BOOST_NUMERIC_INTERVAL_DETAIL_C99SUB_ROUBDING_CONTROL_HPP
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/* Boost interval/detail/division.hpp file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2003 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_DETAIL_DIVISION_HPP
|
|
11
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
|
|
12
|
+
|
|
13
|
+
#include <boost/numeric/interval/detail/interval_prototype.hpp>
|
|
14
|
+
#include <boost/numeric/interval/detail/bugs.hpp>
|
|
15
|
+
#include <boost/numeric/interval/detail/test_input.hpp>
|
|
16
|
+
#include <boost/numeric/interval/rounded_arith.hpp>
|
|
17
|
+
#include <algorithm>
|
|
18
|
+
|
|
19
|
+
namespace boost {
|
|
20
|
+
namespace numeric {
|
|
21
|
+
namespace interval_lib {
|
|
22
|
+
namespace detail {
|
|
23
|
+
|
|
24
|
+
template<class T, class Policies> inline
|
|
25
|
+
interval<T, Policies> div_non_zero(const interval<T, Policies>& x,
|
|
26
|
+
const interval<T, Policies>& y)
|
|
27
|
+
{
|
|
28
|
+
// assert(!in_zero(y));
|
|
29
|
+
typename Policies::rounding rnd;
|
|
30
|
+
typedef interval<T, Policies> I;
|
|
31
|
+
const T& xl = x.lower();
|
|
32
|
+
const T& xu = x.upper();
|
|
33
|
+
const T& yl = y.lower();
|
|
34
|
+
const T& yu = y.upper();
|
|
35
|
+
if (::boost::numeric::interval_lib::user::is_neg(xu))
|
|
36
|
+
if (::boost::numeric::interval_lib::user::is_neg(yu))
|
|
37
|
+
return I(rnd.div_down(xu, yl), rnd.div_up(xl, yu), true);
|
|
38
|
+
else
|
|
39
|
+
return I(rnd.div_down(xl, yl), rnd.div_up(xu, yu), true);
|
|
40
|
+
else if (::boost::numeric::interval_lib::user::is_neg(xl))
|
|
41
|
+
if (::boost::numeric::interval_lib::user::is_neg(yu))
|
|
42
|
+
return I(rnd.div_down(xu, yu), rnd.div_up(xl, yu), true);
|
|
43
|
+
else
|
|
44
|
+
return I(rnd.div_down(xl, yl), rnd.div_up(xu, yl), true);
|
|
45
|
+
else
|
|
46
|
+
if (::boost::numeric::interval_lib::user::is_neg(yu))
|
|
47
|
+
return I(rnd.div_down(xu, yu), rnd.div_up(xl, yl), true);
|
|
48
|
+
else
|
|
49
|
+
return I(rnd.div_down(xl, yu), rnd.div_up(xu, yl), true);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
template<class T, class Policies> inline
|
|
53
|
+
interval<T, Policies> div_non_zero(const T& x, const interval<T, Policies>& y)
|
|
54
|
+
{
|
|
55
|
+
// assert(!in_zero(y));
|
|
56
|
+
typename Policies::rounding rnd;
|
|
57
|
+
typedef interval<T, Policies> I;
|
|
58
|
+
const T& yl = y.lower();
|
|
59
|
+
const T& yu = y.upper();
|
|
60
|
+
if (::boost::numeric::interval_lib::user::is_neg(x))
|
|
61
|
+
return I(rnd.div_down(x, yl), rnd.div_up(x, yu), true);
|
|
62
|
+
else
|
|
63
|
+
return I(rnd.div_down(x, yu), rnd.div_up(x, yl), true);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
template<class T, class Policies> inline
|
|
67
|
+
interval<T, Policies> div_positive(const interval<T, Policies>& x, const T& yu)
|
|
68
|
+
{
|
|
69
|
+
// assert(::boost::numeric::interval_lib::user::is_pos(yu));
|
|
70
|
+
if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
|
|
71
|
+
::boost::numeric::interval_lib::user::is_zero(x.upper()))
|
|
72
|
+
return x;
|
|
73
|
+
typename Policies::rounding rnd;
|
|
74
|
+
typedef interval<T, Policies> I;
|
|
75
|
+
const T& xl = x.lower();
|
|
76
|
+
const T& xu = x.upper();
|
|
77
|
+
typedef typename Policies::checking checking;
|
|
78
|
+
if (::boost::numeric::interval_lib::user::is_neg(xu))
|
|
79
|
+
return I(checking::neg_inf(), rnd.div_up(xu, yu), true);
|
|
80
|
+
else if (::boost::numeric::interval_lib::user::is_neg(xl))
|
|
81
|
+
return I(checking::neg_inf(), checking::pos_inf(), true);
|
|
82
|
+
else
|
|
83
|
+
return I(rnd.div_down(xl, yu), checking::pos_inf(), true);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
template<class T, class Policies> inline
|
|
87
|
+
interval<T, Policies> div_positive(const T& x, const T& yu)
|
|
88
|
+
{
|
|
89
|
+
// assert(::boost::numeric::interval_lib::user::is_pos(yu));
|
|
90
|
+
typedef interval<T, Policies> I;
|
|
91
|
+
if (::boost::numeric::interval_lib::user::is_zero(x))
|
|
92
|
+
return I(static_cast<T>(0), static_cast<T>(0), true);
|
|
93
|
+
typename Policies::rounding rnd;
|
|
94
|
+
typedef typename Policies::checking checking;
|
|
95
|
+
if (::boost::numeric::interval_lib::user::is_neg(x))
|
|
96
|
+
return I(checking::neg_inf(), rnd.div_up(x, yu), true);
|
|
97
|
+
else
|
|
98
|
+
return I(rnd.div_down(x, yu), checking::pos_inf(), true);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
template<class T, class Policies> inline
|
|
102
|
+
interval<T, Policies> div_negative(const interval<T, Policies>& x, const T& yl)
|
|
103
|
+
{
|
|
104
|
+
// assert(::boost::numeric::interval_lib::user::is_neg(yl));
|
|
105
|
+
if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
|
|
106
|
+
::boost::numeric::interval_lib::user::is_zero(x.upper()))
|
|
107
|
+
return x;
|
|
108
|
+
typename Policies::rounding rnd;
|
|
109
|
+
typedef interval<T, Policies> I;
|
|
110
|
+
const T& xl = x.lower();
|
|
111
|
+
const T& xu = x.upper();
|
|
112
|
+
typedef typename Policies::checking checking;
|
|
113
|
+
if (::boost::numeric::interval_lib::user::is_neg(xu))
|
|
114
|
+
return I(rnd.div_down(xu, yl), checking::pos_inf(), true);
|
|
115
|
+
else if (::boost::numeric::interval_lib::user::is_neg(xl))
|
|
116
|
+
return I(checking::neg_inf(), checking::pos_inf(), true);
|
|
117
|
+
else
|
|
118
|
+
return I(checking::neg_inf(), rnd.div_up(xl, yl), true);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
template<class T, class Policies> inline
|
|
122
|
+
interval<T, Policies> div_negative(const T& x, const T& yl)
|
|
123
|
+
{
|
|
124
|
+
// assert(::boost::numeric::interval_lib::user::is_neg(yl));
|
|
125
|
+
typedef interval<T, Policies> I;
|
|
126
|
+
if (::boost::numeric::interval_lib::user::is_zero(x))
|
|
127
|
+
return I(static_cast<T>(0), static_cast<T>(0), true);
|
|
128
|
+
typename Policies::rounding rnd;
|
|
129
|
+
typedef typename Policies::checking checking;
|
|
130
|
+
if (::boost::numeric::interval_lib::user::is_neg(x))
|
|
131
|
+
return I(rnd.div_down(x, yl), checking::pos_inf(), true);
|
|
132
|
+
else
|
|
133
|
+
return I(checking::neg_inf(), rnd.div_up(x, yl), true);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
template<class T, class Policies> inline
|
|
137
|
+
interval<T, Policies> div_zero(const interval<T, Policies>& x)
|
|
138
|
+
{
|
|
139
|
+
if (::boost::numeric::interval_lib::user::is_zero(x.lower()) &&
|
|
140
|
+
::boost::numeric::interval_lib::user::is_zero(x.upper()))
|
|
141
|
+
return x;
|
|
142
|
+
else return interval<T, Policies>::whole();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
template<class T, class Policies> inline
|
|
146
|
+
interval<T, Policies> div_zero(const T& x)
|
|
147
|
+
{
|
|
148
|
+
if (::boost::numeric::interval_lib::user::is_zero(x))
|
|
149
|
+
return interval<T, Policies>(static_cast<T>(0), static_cast<T>(0), true);
|
|
150
|
+
else return interval<T, Policies>::whole();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
template<class T, class Policies> inline
|
|
154
|
+
interval<T, Policies> div_zero_part1(const interval<T, Policies>& x,
|
|
155
|
+
const interval<T, Policies>& y, bool& b)
|
|
156
|
+
{
|
|
157
|
+
// assert(::boost::numeric::interval_lib::user::is_neg(y.lower()) && ::boost::numeric::interval_lib::user::is_pos(y.upper()));
|
|
158
|
+
if (::boost::numeric::interval_lib::user::is_zero(x.lower()) && ::boost::numeric::interval_lib::user::is_zero(x.upper()))
|
|
159
|
+
{ b = false; return x; }
|
|
160
|
+
typename Policies::rounding rnd;
|
|
161
|
+
typedef interval<T, Policies> I;
|
|
162
|
+
const T& xl = x.lower();
|
|
163
|
+
const T& xu = x.upper();
|
|
164
|
+
const T& yl = y.lower();
|
|
165
|
+
const T& yu = y.upper();
|
|
166
|
+
typedef typename Policies::checking checking;
|
|
167
|
+
if (::boost::numeric::interval_lib::user::is_neg(xu))
|
|
168
|
+
{ b = true; return I(checking::neg_inf(), rnd.div_up(xu, yu), true); }
|
|
169
|
+
else if (::boost::numeric::interval_lib::user::is_neg(xl))
|
|
170
|
+
{ b = false; return I(checking::neg_inf(), checking::pos_inf(), true); }
|
|
171
|
+
else
|
|
172
|
+
{ b = true; return I(checking::neg_inf(), rnd.div_up(xl, yl), true); }
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
template<class T, class Policies> inline
|
|
176
|
+
interval<T, Policies> div_zero_part2(const interval<T, Policies>& x,
|
|
177
|
+
const interval<T, Policies>& y)
|
|
178
|
+
{
|
|
179
|
+
// assert(::boost::numeric::interval_lib::user::is_neg(y.lower()) && ::boost::numeric::interval_lib::user::is_pos(y.upper()) && (div_zero_part1(x, y, b), b));
|
|
180
|
+
typename Policies::rounding rnd;
|
|
181
|
+
typedef interval<T, Policies> I;
|
|
182
|
+
typedef typename Policies::checking checking;
|
|
183
|
+
if (::boost::numeric::interval_lib::user::is_neg(x.upper()))
|
|
184
|
+
return I(rnd.div_down(x.upper(), y.lower()), checking::pos_inf(), true);
|
|
185
|
+
else
|
|
186
|
+
return I(rnd.div_down(x.lower(), y.upper()), checking::pos_inf(), true);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
} // namespace detail
|
|
190
|
+
} // namespace interval_lib
|
|
191
|
+
} // namespace numeric
|
|
192
|
+
} // namespace boost
|
|
193
|
+
|
|
194
|
+
#endif // BOOST_NUMERIC_INTERVAL_DETAIL_DIVISION_HPP
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/* Boost interval/detail/ia64_rounding_control.hpp file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2006-2007 Boris Gubenko
|
|
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_DETAIL_IA64_ROUNDING_CONTROL_HPP
|
|
11
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP
|
|
12
|
+
|
|
13
|
+
#if !defined(ia64) && !defined(__ia64) && !defined(__ia64__)
|
|
14
|
+
#error This header only works on ia64 CPUs.
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
#if defined(__hpux)
|
|
18
|
+
|
|
19
|
+
# include <fenv.h>
|
|
20
|
+
|
|
21
|
+
namespace boost {
|
|
22
|
+
namespace numeric {
|
|
23
|
+
namespace interval_lib {
|
|
24
|
+
namespace detail {
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
struct ia64_rounding_control
|
|
28
|
+
{
|
|
29
|
+
typedef unsigned int rounding_mode;
|
|
30
|
+
|
|
31
|
+
static void set_rounding_mode(const rounding_mode& mode) {
|
|
32
|
+
fesetround(mode); }
|
|
33
|
+
static void get_rounding_mode(rounding_mode& mode) { mode = fegetround(); }
|
|
34
|
+
|
|
35
|
+
static void downward() { set_rounding_mode(FE_DOWNWARD); }
|
|
36
|
+
static void upward() { set_rounding_mode(FE_UPWARD); }
|
|
37
|
+
static void to_nearest() { set_rounding_mode(FE_TONEAREST); }
|
|
38
|
+
static void toward_zero() { set_rounding_mode(FE_TOWARDZERO); }
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
} // namespace detail
|
|
42
|
+
|
|
43
|
+
extern "C" {
|
|
44
|
+
float rintf(float);
|
|
45
|
+
double rint(double);
|
|
46
|
+
long double rintl(long double);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
template<>
|
|
50
|
+
struct rounding_control<float>:
|
|
51
|
+
detail::ia64_rounding_control
|
|
52
|
+
{
|
|
53
|
+
static float force_rounding(const float r)
|
|
54
|
+
{ volatile float _r = r; return _r; }
|
|
55
|
+
static float to_int(const float& x) { return rintf(x); }
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
template<>
|
|
59
|
+
struct rounding_control<double>:
|
|
60
|
+
detail::ia64_rounding_control
|
|
61
|
+
{
|
|
62
|
+
static const double & force_rounding(const double& r) { return r; }
|
|
63
|
+
static double to_int(const double& r) { return rint(r); }
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
template<>
|
|
67
|
+
struct rounding_control<long double>:
|
|
68
|
+
detail::ia64_rounding_control
|
|
69
|
+
{
|
|
70
|
+
static const long double & force_rounding(const long double& r) { return r; }
|
|
71
|
+
static long double to_int(const long double& r) { return rintl(r); }
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
} // namespace interval_lib
|
|
75
|
+
} // namespace numeric
|
|
76
|
+
} // namespace boost
|
|
77
|
+
|
|
78
|
+
#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
79
|
+
|
|
80
|
+
#endif /* __hpux */
|
|
81
|
+
|
|
82
|
+
#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_IA64_ROUNDING_CONTROL_HPP */
|
|
83
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/* Boost interval/detail/interval_prototype.hpp file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2002 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_DETAIL_INTERVAL_PROTOTYPE_HPP
|
|
11
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
|
|
12
|
+
|
|
13
|
+
namespace boost {
|
|
14
|
+
namespace numeric {
|
|
15
|
+
|
|
16
|
+
namespace interval_lib {
|
|
17
|
+
|
|
18
|
+
template<class T> struct rounded_math;
|
|
19
|
+
template<class T> struct checking_strict;
|
|
20
|
+
class comparison_error;
|
|
21
|
+
template<class Rounding, class Checking> struct policies;
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
* default policies class
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
template<class T>
|
|
28
|
+
struct default_policies
|
|
29
|
+
{
|
|
30
|
+
typedef policies<rounded_math<T>, checking_strict<T> > type;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
} // namespace interval_lib
|
|
34
|
+
|
|
35
|
+
template<class T, class Policies = typename interval_lib::default_policies<T>::type >
|
|
36
|
+
class interval;
|
|
37
|
+
|
|
38
|
+
} // namespace numeric
|
|
39
|
+
} // namespace boost
|
|
40
|
+
|
|
41
|
+
#endif // BOOST_NUMERIC_INTERVAL_DETAIL_INTERVAL_PROTOTYPE_HPP
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/* Boost interval/detail/msvc_rounding_control.hpp file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2000 Maarten Keijzer
|
|
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_DETAIL_MSVC_ROUNDING_CONTROL_HPP
|
|
12
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP
|
|
13
|
+
|
|
14
|
+
#ifndef _MSC_VER
|
|
15
|
+
# error This header is only intended for MSVC, but might work for Borland as well
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
#include <float.h> // MSVC rounding control
|
|
19
|
+
|
|
20
|
+
// Although the function is called _control87, it seems to work for
|
|
21
|
+
// other FPUs too, so it does not have to be changed to _controlfp.
|
|
22
|
+
|
|
23
|
+
namespace boost {
|
|
24
|
+
namespace numeric {
|
|
25
|
+
namespace interval_lib {
|
|
26
|
+
namespace detail {
|
|
27
|
+
|
|
28
|
+
#if BOOST_MSVC < 1400 || defined(_WIN64)
|
|
29
|
+
extern "C" { double rint(double); }
|
|
30
|
+
#else
|
|
31
|
+
inline double rint(double x)
|
|
32
|
+
{
|
|
33
|
+
_asm FLD [x] ;
|
|
34
|
+
_asm FRNDINT ;
|
|
35
|
+
//_asm RET ;
|
|
36
|
+
}
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
struct x86_rounding
|
|
40
|
+
{
|
|
41
|
+
static unsigned int hard2msvc(unsigned short m) {
|
|
42
|
+
unsigned int n = 0;
|
|
43
|
+
if (m & 0x01) n |= _EM_INVALID;
|
|
44
|
+
if (m & 0x02) n |= _EM_DENORMAL;
|
|
45
|
+
if (m & 0x04) n |= _EM_ZERODIVIDE;
|
|
46
|
+
if (m & 0x08) n |= _EM_OVERFLOW;
|
|
47
|
+
if (m & 0x10) n |= _EM_UNDERFLOW;
|
|
48
|
+
if (m & 0x20) n |= _EM_INEXACT;
|
|
49
|
+
switch (m & 0x300) {
|
|
50
|
+
case 0x000: n |= _PC_24; break;
|
|
51
|
+
case 0x200: n |= _PC_53; break;
|
|
52
|
+
case 0x300: n |= _PC_64; break;
|
|
53
|
+
}
|
|
54
|
+
switch (m & 0xC00) {
|
|
55
|
+
case 0x000: n |= _RC_NEAR; break;
|
|
56
|
+
case 0x400: n |= _RC_DOWN; break;
|
|
57
|
+
case 0x800: n |= _RC_UP; break;
|
|
58
|
+
case 0xC00: n |= _RC_CHOP; break;
|
|
59
|
+
}
|
|
60
|
+
if (m & 0x1000) n |= _IC_AFFINE; // only useful on 287
|
|
61
|
+
return n;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static unsigned short msvc2hard(unsigned int n) {
|
|
65
|
+
unsigned short m = 0;
|
|
66
|
+
if (n & _EM_INVALID) m |= 0x01;
|
|
67
|
+
if (n & _EM_DENORMAL) m |= 0x02;
|
|
68
|
+
if (n & _EM_ZERODIVIDE) m |= 0x04;
|
|
69
|
+
if (n & _EM_OVERFLOW) m |= 0x08;
|
|
70
|
+
if (n & _EM_UNDERFLOW) m |= 0x10;
|
|
71
|
+
if (n & _EM_INEXACT) m |= 0x20;
|
|
72
|
+
switch (n & _MCW_RC) {
|
|
73
|
+
case _RC_NEAR: m |= 0x000; break;
|
|
74
|
+
case _RC_DOWN: m |= 0x400; break;
|
|
75
|
+
case _RC_UP: m |= 0x800; break;
|
|
76
|
+
case _RC_CHOP: m |= 0xC00; break;
|
|
77
|
+
}
|
|
78
|
+
switch (n & _MCW_PC) {
|
|
79
|
+
case _PC_24: m |= 0x000; break;
|
|
80
|
+
case _PC_53: m |= 0x200; break;
|
|
81
|
+
case _PC_64: m |= 0x300; break;
|
|
82
|
+
}
|
|
83
|
+
if ((n & _MCW_IC) == _IC_AFFINE) m |= 0x1000;
|
|
84
|
+
return m;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
typedef unsigned short rounding_mode;
|
|
88
|
+
static void get_rounding_mode(rounding_mode& mode)
|
|
89
|
+
{ mode = msvc2hard(_control87(0, 0)); }
|
|
90
|
+
static void set_rounding_mode(const rounding_mode mode)
|
|
91
|
+
{
|
|
92
|
+
_control87(hard2msvc(mode),
|
|
93
|
+
_MCW_EM | _MCW_RC
|
|
94
|
+
#if !defined(_M_AMD64) && !defined(_M_ARM) && !defined(_M_ARM64)
|
|
95
|
+
// x64 ignores _MCW_PC and _MCW_IC, and the Debug CRT library actually
|
|
96
|
+
// asserts when these are passed to _control87.
|
|
97
|
+
// MSDN says on '_control87' that changing precision (_MCW_PC) or
|
|
98
|
+
// infinity (_MCW_IC) handling is not supported on the ARM and x64
|
|
99
|
+
// architectures and that _control87 raises an assertion
|
|
100
|
+
// and the invalid parameter handler is invoked.
|
|
101
|
+
| _MCW_PC | _MCW_IC
|
|
102
|
+
#endif
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
static double to_int(const double& x) { return rint(x); }
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
} // namespace detail
|
|
109
|
+
} // namespace interval_lib
|
|
110
|
+
} // namespace numeric
|
|
111
|
+
} // namespace boost
|
|
112
|
+
|
|
113
|
+
#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_MSVC_ROUNDING_CONTROL_HPP */
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/* Boost interval/detail/ppc_rounding_control.hpp file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2000 Jens Maurer
|
|
4
|
+
* Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
|
|
5
|
+
* Copyright 2005 Guillaume Melquiond
|
|
6
|
+
*
|
|
7
|
+
* Distributed under the Boost Software License, Version 1.0.
|
|
8
|
+
* (See accompanying file LICENSE_1_0.txt or
|
|
9
|
+
* copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
#ifndef BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP
|
|
13
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP
|
|
14
|
+
|
|
15
|
+
#if !defined(powerpc) && !defined(__powerpc__) && !defined(__ppc__)
|
|
16
|
+
#error This header only works on PPC CPUs.
|
|
17
|
+
#endif
|
|
18
|
+
|
|
19
|
+
#if defined(__GNUC__ ) || (__IBMCPP__ >= 700)
|
|
20
|
+
|
|
21
|
+
namespace boost {
|
|
22
|
+
namespace numeric {
|
|
23
|
+
namespace interval_lib {
|
|
24
|
+
namespace detail {
|
|
25
|
+
|
|
26
|
+
typedef union {
|
|
27
|
+
::boost::long_long_type imode;
|
|
28
|
+
double dmode;
|
|
29
|
+
} rounding_mode_struct;
|
|
30
|
+
|
|
31
|
+
static const rounding_mode_struct mode_upward = { 0xFFF8000000000002LL };
|
|
32
|
+
static const rounding_mode_struct mode_downward = { 0xFFF8000000000003LL };
|
|
33
|
+
static const rounding_mode_struct mode_to_nearest = { 0xFFF8000000000000LL };
|
|
34
|
+
static const rounding_mode_struct mode_toward_zero = { 0xFFF8000000000001LL };
|
|
35
|
+
|
|
36
|
+
struct ppc_rounding_control
|
|
37
|
+
{
|
|
38
|
+
typedef double rounding_mode;
|
|
39
|
+
|
|
40
|
+
static void set_rounding_mode(const rounding_mode mode)
|
|
41
|
+
{ __asm__ __volatile__ ("mtfsf 255,%0" : : "f"(mode)); }
|
|
42
|
+
|
|
43
|
+
static void get_rounding_mode(rounding_mode& mode)
|
|
44
|
+
{ __asm__ __volatile__ ("mffs %0" : "=f"(mode)); }
|
|
45
|
+
|
|
46
|
+
static void downward() { set_rounding_mode(mode_downward.dmode); }
|
|
47
|
+
static void upward() { set_rounding_mode(mode_upward.dmode); }
|
|
48
|
+
static void to_nearest() { set_rounding_mode(mode_to_nearest.dmode); }
|
|
49
|
+
static void toward_zero() { set_rounding_mode(mode_toward_zero.dmode); }
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
} // namespace detail
|
|
53
|
+
|
|
54
|
+
// Do not declare the following C99 symbols if <math.h> provides them.
|
|
55
|
+
// Otherwise, conflicts may occur, due to differences between prototypes.
|
|
56
|
+
#if !defined(_ISOC99_SOURCE) && !defined(__USE_ISOC99)
|
|
57
|
+
extern "C" {
|
|
58
|
+
float rintf(float);
|
|
59
|
+
double rint(double);
|
|
60
|
+
}
|
|
61
|
+
#endif
|
|
62
|
+
|
|
63
|
+
template<>
|
|
64
|
+
struct rounding_control<float>:
|
|
65
|
+
detail::ppc_rounding_control
|
|
66
|
+
{
|
|
67
|
+
static float force_rounding(const float r)
|
|
68
|
+
{
|
|
69
|
+
float tmp;
|
|
70
|
+
__asm__ __volatile__ ("frsp %0, %1" : "=f" (tmp) : "f" (r));
|
|
71
|
+
return tmp;
|
|
72
|
+
}
|
|
73
|
+
static float to_int(const float& x) { return rintf(x); }
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
template<>
|
|
77
|
+
struct rounding_control<double>:
|
|
78
|
+
detail::ppc_rounding_control
|
|
79
|
+
{
|
|
80
|
+
static const double & force_rounding(const double& r) { return r; }
|
|
81
|
+
static double to_int(const double& r) { return rint(r); }
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
template<>
|
|
85
|
+
struct rounding_control<long double>:
|
|
86
|
+
detail::ppc_rounding_control
|
|
87
|
+
{
|
|
88
|
+
static const long double & force_rounding(const long double& r) { return r; }
|
|
89
|
+
static long double to_int(const long double& r) { return rint(r); }
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
} // namespace interval_lib
|
|
93
|
+
} // namespace numeric
|
|
94
|
+
} // namespace boost
|
|
95
|
+
|
|
96
|
+
#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
97
|
+
#endif
|
|
98
|
+
|
|
99
|
+
#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_PPC_ROUNDING_CONTROL_HPP */
|