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,112 @@
|
|
|
1
|
+
/* Boost interval/detail/sparc_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
|
+
* The basic code in this file was kindly provided by Jeremy Siek.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
#ifndef BOOST_NUMERIC_INTERVAL_DETAIL_SPARC_ROUNDING_CONTROL_HPP
|
|
14
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_SPARC_ROUNDING_CONTROL_HPP
|
|
15
|
+
|
|
16
|
+
#if !defined(sparc) && !defined(__sparc__)
|
|
17
|
+
# error This header is only intended for SPARC CPUs.
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
#ifdef __SUNPRO_CC
|
|
21
|
+
# include <ieeefp.h>
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
namespace boost {
|
|
26
|
+
namespace numeric {
|
|
27
|
+
namespace interval_lib {
|
|
28
|
+
namespace detail {
|
|
29
|
+
|
|
30
|
+
struct sparc_rounding_control
|
|
31
|
+
{
|
|
32
|
+
typedef unsigned int rounding_mode;
|
|
33
|
+
|
|
34
|
+
static void set_rounding_mode(const rounding_mode& mode)
|
|
35
|
+
{
|
|
36
|
+
# if defined(__GNUC__)
|
|
37
|
+
__asm__ __volatile__("ld %0, %%fsr" : : "m"(mode));
|
|
38
|
+
# elif defined (__SUNPRO_CC)
|
|
39
|
+
fpsetround(fp_rnd(mode));
|
|
40
|
+
# elif defined(__KCC)
|
|
41
|
+
asm("sethi %hi(mode), %o1");
|
|
42
|
+
asm("ld [%o1+%lo(mode)], %fsr");
|
|
43
|
+
# else
|
|
44
|
+
# error Unsupported compiler for Sparc rounding control.
|
|
45
|
+
# endif
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static void get_rounding_mode(rounding_mode& mode)
|
|
49
|
+
{
|
|
50
|
+
# if defined(__GNUC__)
|
|
51
|
+
__asm__ __volatile__("st %%fsr, %0" : "=m"(mode));
|
|
52
|
+
# elif defined (__SUNPRO_CC)
|
|
53
|
+
mode = fpgetround();
|
|
54
|
+
# elif defined(__KCC)
|
|
55
|
+
# error KCC on Sun SPARC get_round_mode: please fix me
|
|
56
|
+
asm("st %fsr, [mode]");
|
|
57
|
+
# else
|
|
58
|
+
# error Unsupported compiler for Sparc rounding control.
|
|
59
|
+
# endif
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#if defined(__SUNPRO_CC)
|
|
63
|
+
static void downward() { set_rounding_mode(FP_RM); }
|
|
64
|
+
static void upward() { set_rounding_mode(FP_RP); }
|
|
65
|
+
static void to_nearest() { set_rounding_mode(FP_RN); }
|
|
66
|
+
static void toward_zero() { set_rounding_mode(FP_RZ); }
|
|
67
|
+
#else
|
|
68
|
+
static void downward() { set_rounding_mode(0xc0000000); }
|
|
69
|
+
static void upward() { set_rounding_mode(0x80000000); }
|
|
70
|
+
static void to_nearest() { set_rounding_mode(0x00000000); }
|
|
71
|
+
static void toward_zero() { set_rounding_mode(0x40000000); }
|
|
72
|
+
#endif
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
} // namespace detail
|
|
76
|
+
|
|
77
|
+
extern "C" {
|
|
78
|
+
float rintf(float);
|
|
79
|
+
double rint(double);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template<>
|
|
83
|
+
struct rounding_control<float>:
|
|
84
|
+
detail::sparc_rounding_control
|
|
85
|
+
{
|
|
86
|
+
static const float& force_rounding(const float& x) { return x; }
|
|
87
|
+
static float to_int(const float& x) { return rintf(x); }
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
template<>
|
|
91
|
+
struct rounding_control<double>:
|
|
92
|
+
detail::sparc_rounding_control
|
|
93
|
+
{
|
|
94
|
+
static const double& force_rounding(const double& x) { return x; }
|
|
95
|
+
static double to_int(const double& x) { return rint(x); }
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
template<>
|
|
99
|
+
struct rounding_control<long double>:
|
|
100
|
+
detail::sparc_rounding_control
|
|
101
|
+
{
|
|
102
|
+
static const long double& force_rounding(const long double& x) { return x; }
|
|
103
|
+
static long double to_int(const long double& x) { return rint(x); }
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
} // namespace interval_lib
|
|
107
|
+
} // namespace numeric
|
|
108
|
+
} // namespace boost
|
|
109
|
+
|
|
110
|
+
#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
111
|
+
|
|
112
|
+
#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_SPARC_ROUNDING_CONTROL_HPP */
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/* Boost interval/detail/test_input.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_TEST_INPUT_HPP
|
|
11
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_TEST_INPUT_HPP
|
|
12
|
+
|
|
13
|
+
#include <boost/numeric/interval/detail/interval_prototype.hpp>
|
|
14
|
+
|
|
15
|
+
namespace boost {
|
|
16
|
+
namespace numeric {
|
|
17
|
+
namespace interval_lib {
|
|
18
|
+
namespace user {
|
|
19
|
+
|
|
20
|
+
template<class T> inline
|
|
21
|
+
bool is_zero(T const &v) { return v == static_cast<T>(0); }
|
|
22
|
+
|
|
23
|
+
template<class T> inline
|
|
24
|
+
bool is_neg (T const &v) { return v < static_cast<T>(0); }
|
|
25
|
+
|
|
26
|
+
template<class T> inline
|
|
27
|
+
bool is_pos (T const &v) { return v > static_cast<T>(0); }
|
|
28
|
+
|
|
29
|
+
} // namespace user
|
|
30
|
+
|
|
31
|
+
namespace detail {
|
|
32
|
+
|
|
33
|
+
template<class T, class Policies> inline
|
|
34
|
+
bool test_input(const interval<T, Policies>& x) {
|
|
35
|
+
typedef typename Policies::checking checking;
|
|
36
|
+
return checking::is_empty(x.lower(), x.upper());
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
template<class T, class Policies1, class Policies2> inline
|
|
40
|
+
bool test_input(const interval<T, Policies1>& x, const interval<T, Policies2>& y) {
|
|
41
|
+
typedef typename Policies1::checking checking1;
|
|
42
|
+
typedef typename Policies2::checking checking2;
|
|
43
|
+
return checking1::is_empty(x.lower(), x.upper()) ||
|
|
44
|
+
checking2::is_empty(y.lower(), y.upper());
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
template<class T, class Policies> inline
|
|
48
|
+
bool test_input(const T& x, const interval<T, Policies>& y) {
|
|
49
|
+
typedef typename Policies::checking checking;
|
|
50
|
+
return checking::is_nan(x) || checking::is_empty(y.lower(), y.upper());
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
template<class T, class Policies> inline
|
|
54
|
+
bool test_input(const interval<T, Policies>& x, const T& y) {
|
|
55
|
+
typedef typename Policies::checking checking;
|
|
56
|
+
return checking::is_empty(x.lower(), x.upper()) || checking::is_nan(y);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
template<class T, class Policies> inline
|
|
60
|
+
bool test_input(const T& x) {
|
|
61
|
+
typedef typename Policies::checking checking;
|
|
62
|
+
return checking::is_nan(x);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
template<class T, class Policies> inline
|
|
66
|
+
bool test_input(const T& x, const T& y) {
|
|
67
|
+
typedef typename Policies::checking checking;
|
|
68
|
+
return checking::is_nan(x) || checking::is_nan(y);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
} // namespace detail
|
|
72
|
+
} // namespace interval_lib
|
|
73
|
+
} // namespace numeric
|
|
74
|
+
} // namespace boost
|
|
75
|
+
|
|
76
|
+
#endif // BOOST_NUMERIC_INTERVAL_DETAIL_TEST_INPUT_HPP
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/* Boost interval/detail/x86_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_X86_ROUNDING_CONTROL_HPP
|
|
12
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_X86_ROUNDING_CONTROL_HPP
|
|
13
|
+
|
|
14
|
+
#if defined(__GNUC__) || defined(__BORLANDC__) && defined(__clang__)
|
|
15
|
+
# include <boost/numeric/interval/detail/x86gcc_rounding_control.hpp>
|
|
16
|
+
#elif defined(__BORLANDC__)
|
|
17
|
+
# include <boost/numeric/interval/detail/bcc_rounding_control.hpp>
|
|
18
|
+
#elif defined(_MSC_VER)
|
|
19
|
+
# include <boost/numeric/interval/detail/msvc_rounding_control.hpp>
|
|
20
|
+
#elif defined(__MWERKS__) || defined(__ICC) || defined (__SUNPRO_CC)
|
|
21
|
+
# define BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
|
|
22
|
+
# include <boost/numeric/interval/detail/c99sub_rounding_control.hpp>
|
|
23
|
+
#else
|
|
24
|
+
# error Unsupported C++ compiler.
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
namespace boost {
|
|
28
|
+
namespace numeric {
|
|
29
|
+
namespace interval_lib {
|
|
30
|
+
|
|
31
|
+
namespace detail {
|
|
32
|
+
|
|
33
|
+
#ifdef BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
|
|
34
|
+
typedef c99_rounding_control x86_rounding_control;
|
|
35
|
+
#undef BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
|
|
36
|
+
#else
|
|
37
|
+
struct fpu_rounding_modes
|
|
38
|
+
{
|
|
39
|
+
unsigned short to_nearest;
|
|
40
|
+
unsigned short downward;
|
|
41
|
+
unsigned short upward;
|
|
42
|
+
unsigned short toward_zero;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
// exceptions masked, extended precision
|
|
46
|
+
// hardware default is 0x037f (0x1000 only has a meaning on 287)
|
|
47
|
+
static const fpu_rounding_modes rnd_mode = { 0x137f, 0x177f, 0x1b7f, 0x1f7f };
|
|
48
|
+
|
|
49
|
+
struct x86_rounding_control: x86_rounding
|
|
50
|
+
{
|
|
51
|
+
static void to_nearest() { set_rounding_mode(rnd_mode.to_nearest); }
|
|
52
|
+
static void downward() { set_rounding_mode(rnd_mode.downward); }
|
|
53
|
+
static void upward() { set_rounding_mode(rnd_mode.upward); }
|
|
54
|
+
static void toward_zero() { set_rounding_mode(rnd_mode.toward_zero); }
|
|
55
|
+
};
|
|
56
|
+
#endif // BOOST_NUMERIC_INTERVAL_USE_C99_SUBSYSTEM
|
|
57
|
+
|
|
58
|
+
} // namespace detail
|
|
59
|
+
|
|
60
|
+
template<>
|
|
61
|
+
struct rounding_control<float>: detail::x86_rounding_control
|
|
62
|
+
{
|
|
63
|
+
static float force_rounding(const float& r)
|
|
64
|
+
{ volatile float r_ = r; return r_; }
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
template<>
|
|
68
|
+
struct rounding_control<double>: detail::x86_rounding_control
|
|
69
|
+
{
|
|
70
|
+
/*static double force_rounding(double r)
|
|
71
|
+
{ asm volatile ("" : "+m"(r) : ); return r; }*/
|
|
72
|
+
static double force_rounding(const double& r)
|
|
73
|
+
{ volatile double r_ = r; return r_; }
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
namespace detail {
|
|
77
|
+
|
|
78
|
+
template<bool>
|
|
79
|
+
struct x86_rounding_control_long_double;
|
|
80
|
+
|
|
81
|
+
template<>
|
|
82
|
+
struct x86_rounding_control_long_double<false>: x86_rounding_control
|
|
83
|
+
{
|
|
84
|
+
static long double force_rounding(long double const &r)
|
|
85
|
+
{ volatile long double r_ = r; return r_; }
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
template<>
|
|
89
|
+
struct x86_rounding_control_long_double<true>: x86_rounding_control
|
|
90
|
+
{
|
|
91
|
+
static long double const &force_rounding(long double const &r)
|
|
92
|
+
{ return r; }
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
} // namespace detail
|
|
96
|
+
|
|
97
|
+
template<>
|
|
98
|
+
struct rounding_control<long double>:
|
|
99
|
+
detail::x86_rounding_control_long_double< (sizeof(long double) >= 10) >
|
|
100
|
+
{};
|
|
101
|
+
|
|
102
|
+
} // namespace interval_lib
|
|
103
|
+
} // namespace numeric
|
|
104
|
+
} // namespace boost
|
|
105
|
+
|
|
106
|
+
#undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
107
|
+
|
|
108
|
+
#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_X86_ROUNDING_CONTROL_HPP */
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Boost interval/detail/x86gcc_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_X86GCC_ROUNDING_CONTROL_HPP
|
|
12
|
+
#define BOOST_NUMERIC_INTERVAL_DETAIL_X86GCC_ROUNDING_CONTROL_HPP
|
|
13
|
+
|
|
14
|
+
#if !defined(__GNUC__) && !(defined(__BORLANDC__) && defined(__clang__))
|
|
15
|
+
# error This header only works with GNU CC.
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
#if !defined(__i386__) && !defined(__x86_64__)
|
|
19
|
+
# error This header only works on x86 CPUs.
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
namespace boost {
|
|
23
|
+
namespace numeric {
|
|
24
|
+
namespace interval_lib {
|
|
25
|
+
namespace detail {
|
|
26
|
+
|
|
27
|
+
struct x86_rounding
|
|
28
|
+
{
|
|
29
|
+
typedef unsigned short rounding_mode;
|
|
30
|
+
|
|
31
|
+
static void set_rounding_mode(const rounding_mode& mode)
|
|
32
|
+
{ __asm__ __volatile__ ("fldcw %0" : : "m"(mode)); }
|
|
33
|
+
|
|
34
|
+
static void get_rounding_mode(rounding_mode& mode)
|
|
35
|
+
{ __asm__ __volatile__ ("fnstcw %0" : "=m"(mode)); }
|
|
36
|
+
|
|
37
|
+
template<class T>
|
|
38
|
+
static T to_int(T r)
|
|
39
|
+
{
|
|
40
|
+
T r_;
|
|
41
|
+
__asm__ ("frndint" : "=&t"(r_) : "0"(r));
|
|
42
|
+
return r_;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
} // namespace detail
|
|
47
|
+
} // namespace interval_lib
|
|
48
|
+
} // namespace numeric
|
|
49
|
+
} // namespace boost
|
|
50
|
+
|
|
51
|
+
#endif /* BOOST_NUMERIC_INTERVAL_DETAIL_X86GCC_ROUNDING_CONTROL_HPP */
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* Boost interval/ext/integer.hpp template implementation file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2003 Guillaume Melquiond
|
|
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_EXT_INTEGER_HPP
|
|
11
|
+
#define BOOST_NUMERIC_INTERVAL_EXT_INTEGER_HPP
|
|
12
|
+
|
|
13
|
+
#include <boost/numeric/interval/detail/interval_prototype.hpp>
|
|
14
|
+
#include <boost/numeric/interval/detail/test_input.hpp>
|
|
15
|
+
|
|
16
|
+
namespace boost {
|
|
17
|
+
namespace numeric {
|
|
18
|
+
|
|
19
|
+
template<class T, class Policies> inline
|
|
20
|
+
interval<T, Policies> operator+ (const interval<T, Policies>& x, int y)
|
|
21
|
+
{
|
|
22
|
+
return x + static_cast<T>(y);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
template<class T, class Policies> inline
|
|
26
|
+
interval<T, Policies> operator+ (int x, const interval<T, Policies>& y)
|
|
27
|
+
{
|
|
28
|
+
return static_cast<T>(x) + y;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
template<class T, class Policies> inline
|
|
32
|
+
interval<T, Policies> operator- (const interval<T, Policies>& x, int y)
|
|
33
|
+
{
|
|
34
|
+
return x - static_cast<T>(y);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
template<class T, class Policies> inline
|
|
38
|
+
interval<T, Policies> operator- (int x, const interval<T, Policies>& y)
|
|
39
|
+
{
|
|
40
|
+
return static_cast<T>(x) - y;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
template<class T, class Policies> inline
|
|
44
|
+
interval<T, Policies> operator* (const interval<T, Policies>& x, int y)
|
|
45
|
+
{
|
|
46
|
+
return x * static_cast<T>(y);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
template<class T, class Policies> inline
|
|
50
|
+
interval<T, Policies> operator* (int x, const interval<T, Policies>& y)
|
|
51
|
+
{
|
|
52
|
+
return static_cast<T>(x) * y;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
template<class T, class Policies> inline
|
|
56
|
+
interval<T, Policies> operator/ (const interval<T, Policies>& x, int y)
|
|
57
|
+
{
|
|
58
|
+
return x / static_cast<T>(y);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
template<class T, class Policies> inline
|
|
62
|
+
interval<T, Policies> operator/ (int x, const interval<T, Policies>& y)
|
|
63
|
+
{
|
|
64
|
+
return static_cast<T>(x) / y;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
} // namespace numeric
|
|
68
|
+
} // namespace boost
|
|
69
|
+
|
|
70
|
+
#endif // BOOST_NUMERIC_INTERVAL_EXT_INTEGER_HPP
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* Boost interval/detail/x86gcc_rounding_control.hpp file
|
|
2
|
+
*
|
|
3
|
+
* This header provides a rounding control policy
|
|
4
|
+
* that avoids flushing results to memory. In
|
|
5
|
+
* order for this optimization to be reliable, it
|
|
6
|
+
* should be used only when no underflow or
|
|
7
|
+
* overflow would happen without it. Indeed, only
|
|
8
|
+
* values in range are correctly rounded.
|
|
9
|
+
*
|
|
10
|
+
* Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
|
|
11
|
+
*
|
|
12
|
+
* Distributed under the Boost Software License, Version 1.0.
|
|
13
|
+
* (See accompanying file LICENSE_1_0.txt or
|
|
14
|
+
* copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#ifndef BOOST_NUMERIC_INTERVAL_EXT_X86_FAST_ROUNDING_CONTROL_HPP
|
|
18
|
+
#define BOOST_NUMERIC_INTERVAL_EXT_X86_FAST_ROUNDING_CONTROL_HPP
|
|
19
|
+
|
|
20
|
+
namespace boost {
|
|
21
|
+
namespace numeric {
|
|
22
|
+
namespace interval_lib {
|
|
23
|
+
|
|
24
|
+
namespace detail {
|
|
25
|
+
|
|
26
|
+
// exceptions masked, expected precision (the mask is 0x0300)
|
|
27
|
+
static const fpu_rounding_modes rnd_mode_f = { 0x107f, 0x147f, 0x187f, 0x1c7f };
|
|
28
|
+
static const fpu_rounding_modes rnd_mode_d = { 0x127f, 0x167f, 0x1a7f, 0x1e7f };
|
|
29
|
+
static const fpu_rounding_modes rnd_mode_l = { 0x137f, 0x177f, 0x1b7f, 0x1f7f };
|
|
30
|
+
|
|
31
|
+
} // namespace detail
|
|
32
|
+
|
|
33
|
+
template<class T>
|
|
34
|
+
struct x86_fast_rounding_control;
|
|
35
|
+
|
|
36
|
+
template<>
|
|
37
|
+
struct x86_fast_rounding_control<float>: detail::x86_rounding
|
|
38
|
+
{
|
|
39
|
+
static void to_nearest() { set_rounding_mode(detail::rnd_mode_f.to_nearest); }
|
|
40
|
+
static void downward() { set_rounding_mode(detail::rnd_mode_f.downward); }
|
|
41
|
+
static void upward() { set_rounding_mode(detail::rnd_mode_f.upward); }
|
|
42
|
+
static void toward_zero() { set_rounding_mode(detail::rnd_mode_f.toward_zero); }
|
|
43
|
+
static const float& force_rounding(const float& r) { return r; }
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
template<>
|
|
47
|
+
struct x86_fast_rounding_control<double>: detail::x86_rounding
|
|
48
|
+
{
|
|
49
|
+
static void to_nearest() { set_rounding_mode(detail::rnd_mode_d.to_nearest); }
|
|
50
|
+
static void downward() { set_rounding_mode(detail::rnd_mode_d.downward); }
|
|
51
|
+
static void upward() { set_rounding_mode(detail::rnd_mode_d.upward); }
|
|
52
|
+
static void toward_zero() { set_rounding_mode(detail::rnd_mode_d.toward_zero); }
|
|
53
|
+
static const double& force_rounding(const double& r) { return r; }
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
template<>
|
|
57
|
+
struct x86_fast_rounding_control<long double>: detail::x86_rounding
|
|
58
|
+
{
|
|
59
|
+
static void to_nearest() { set_rounding_mode(detail::rnd_mode_l.to_nearest); }
|
|
60
|
+
static void downward() { set_rounding_mode(detail::rnd_mode_l.downward); }
|
|
61
|
+
static void upward() { set_rounding_mode(detail::rnd_mode_l.upward); }
|
|
62
|
+
static void toward_zero() { set_rounding_mode(detail::rnd_mode_l.toward_zero); }
|
|
63
|
+
static const long double& force_rounding(const long double& r) { return r; }
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
} // namespace interval_lib
|
|
67
|
+
} // namespace numeric
|
|
68
|
+
} // namespace boost
|
|
69
|
+
|
|
70
|
+
#endif // BOOST_NUMERIC_INTERVAL_EXT_X86_FAST_ROUNDING_CONTROL_HPP
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* Boost interval/hw_rounding.hpp template implementation file
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2002 Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion
|
|
4
|
+
* Copyright 2005 Guillaume Melquiond
|
|
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_HW_ROUNDING_HPP
|
|
12
|
+
#define BOOST_NUMERIC_INTERVAL_HW_ROUNDING_HPP
|
|
13
|
+
|
|
14
|
+
#include <boost/config.hpp>
|
|
15
|
+
#include <boost/numeric/interval/rounding.hpp>
|
|
16
|
+
#include <boost/numeric/interval/rounded_arith.hpp>
|
|
17
|
+
|
|
18
|
+
#define BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
19
|
+
|
|
20
|
+
// define appropriate specialization of rounding_control for built-in types
|
|
21
|
+
#if defined(__x86_64__) && !defined(BOOST_NO_FENV_H)
|
|
22
|
+
# include <boost/numeric/interval/detail/c99_rounding_control.hpp>
|
|
23
|
+
#elif defined(__i386__) || defined(_M_IX86) || defined(__BORLANDC__) && !defined(__clang__) || defined(_M_X64)
|
|
24
|
+
# include <boost/numeric/interval/detail/x86_rounding_control.hpp>
|
|
25
|
+
#elif defined(__i386) && defined(__SUNPRO_CC)
|
|
26
|
+
# include <boost/numeric/interval/detail/x86_rounding_control.hpp>
|
|
27
|
+
#elif defined(powerpc) || defined(__powerpc__) || defined(__ppc__)
|
|
28
|
+
# include <boost/numeric/interval/detail/ppc_rounding_control.hpp>
|
|
29
|
+
#elif defined(sparc) || defined(__sparc__)
|
|
30
|
+
# include <boost/numeric/interval/detail/sparc_rounding_control.hpp>
|
|
31
|
+
#elif defined(alpha) || defined(__alpha__)
|
|
32
|
+
# include <boost/numeric/interval/detail/alpha_rounding_control.hpp>
|
|
33
|
+
#elif defined(ia64) || defined(__ia64) || defined(__ia64__)
|
|
34
|
+
# include <boost/numeric/interval/detail/ia64_rounding_control.hpp>
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#if defined(BOOST_NUMERIC_INTERVAL_NO_HARDWARE) && !defined(BOOST_NO_FENV_H)
|
|
38
|
+
# include <boost/numeric/interval/detail/c99_rounding_control.hpp>
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
#if defined(BOOST_NUMERIC_INTERVAL_NO_HARDWARE)
|
|
42
|
+
# undef BOOST_NUMERIC_INTERVAL_NO_HARDWARE
|
|
43
|
+
# error Boost.Numeric.Interval: Please specify rounding control mechanism.
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
namespace boost {
|
|
47
|
+
namespace numeric {
|
|
48
|
+
namespace interval_lib {
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* Three specializations of rounded_math<T>
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
template<>
|
|
55
|
+
struct rounded_math<float>
|
|
56
|
+
: save_state<rounded_arith_opp<float> >
|
|
57
|
+
{};
|
|
58
|
+
|
|
59
|
+
template<>
|
|
60
|
+
struct rounded_math<double>
|
|
61
|
+
: save_state<rounded_arith_opp<double> >
|
|
62
|
+
{};
|
|
63
|
+
|
|
64
|
+
template<>
|
|
65
|
+
struct rounded_math<long double>
|
|
66
|
+
: save_state<rounded_arith_opp<long double> >
|
|
67
|
+
{};
|
|
68
|
+
|
|
69
|
+
} // namespace interval_lib
|
|
70
|
+
} // namespace numeric
|
|
71
|
+
} // namespace boost
|
|
72
|
+
|
|
73
|
+
#endif // BOOST_NUMERIC_INTERVAL_HW_ROUNDING_HPP
|