mirror of
https://github.com/boostorg/math.git
synced 2026-01-19 04:22:09 +00:00
@@ -15,6 +15,7 @@
|
||||
#include <boost/math/ccmath/abs.hpp>
|
||||
#include <boost/math/ccmath/isinf.hpp>
|
||||
#include <boost/math/ccmath/isnan.hpp>
|
||||
#include <limits>
|
||||
|
||||
namespace boost::math::ccmath {
|
||||
|
||||
@@ -23,6 +24,13 @@ namespace detail {
|
||||
template <typename T>
|
||||
inline constexpr T floor_pos_impl(T arg) noexcept
|
||||
{
|
||||
constexpr auto max_comp_val = T(1) / std::numeric_limits<T>::epsilon();
|
||||
|
||||
if (arg >= max_comp_val)
|
||||
{
|
||||
return arg;
|
||||
}
|
||||
|
||||
T result = 1;
|
||||
|
||||
if(result < arg)
|
||||
|
||||
@@ -37,6 +37,20 @@ constexpr void test()
|
||||
static_assert(boost::math::ccmath::ceil(T(2.9)) == T(3));
|
||||
static_assert(boost::math::ccmath::ceil(T(-2.7)) == T(-2));
|
||||
static_assert(boost::math::ccmath::ceil(T(-2)) == T(-2));
|
||||
|
||||
using std::ceil;
|
||||
|
||||
constexpr T half_max_ceil = boost::math::ccmath::ceil(T((std::numeric_limits<T>::max)() / 2));
|
||||
static_assert(half_max_ceil == (std::numeric_limits<T>::max)() / 2);
|
||||
BOOST_MATH_ASSERT(half_max_ceil == ceil((std::numeric_limits<T>::max)() / 2));
|
||||
|
||||
constexpr T third_max_ceil = boost::math::ccmath::ceil(T((std::numeric_limits<T>::max)() / 3));
|
||||
static_assert(third_max_ceil == (std::numeric_limits<T>::max)() / 3);
|
||||
BOOST_MATH_ASSERT(third_max_ceil == ceil((std::numeric_limits<T>::max)() / 3));
|
||||
|
||||
constexpr T one_over_eps = boost::math::ccmath::ceil(1 / T(std::numeric_limits<T>::epsilon()));
|
||||
static_assert(one_over_eps == 1 / T(std::numeric_limits<T>::epsilon()));
|
||||
BOOST_MATH_ASSERT(one_over_eps == ceil(1 / T(std::numeric_limits<T>::epsilon())));
|
||||
}
|
||||
|
||||
#if !defined(BOOST_MATH_NO_CONSTEXPR_DETECTION) && !defined(BOOST_MATH_USING_BUILTIN_CONSTANT_P)
|
||||
|
||||
@@ -37,6 +37,20 @@ constexpr void test()
|
||||
static_assert(boost::math::ccmath::floor(T(2.9)) == T(2));
|
||||
static_assert(boost::math::ccmath::floor(T(-2.7)) == T(-3));
|
||||
static_assert(boost::math::ccmath::floor(T(-2)) == T(-2));
|
||||
|
||||
using std::floor;
|
||||
|
||||
constexpr T half_max_floor = boost::math::ccmath::floor(T((std::numeric_limits<T>::max)() / 2));
|
||||
static_assert(half_max_floor == (std::numeric_limits<T>::max)() / 2);
|
||||
BOOST_MATH_ASSERT(half_max_floor == floor((std::numeric_limits<T>::max)() / 2));
|
||||
|
||||
constexpr T third_max_floor = boost::math::ccmath::floor(T((std::numeric_limits<T>::max)() / 3));
|
||||
static_assert(third_max_floor == (std::numeric_limits<T>::max)() / 3);
|
||||
BOOST_MATH_ASSERT(third_max_floor == floor((std::numeric_limits<T>::max)() / 3));
|
||||
|
||||
constexpr T one_over_eps = boost::math::ccmath::floor(1 / T(std::numeric_limits<T>::epsilon()));
|
||||
static_assert(one_over_eps == 1 / T(std::numeric_limits<T>::epsilon()));
|
||||
BOOST_MATH_ASSERT(one_over_eps == floor(1 / T(std::numeric_limits<T>::epsilon())));
|
||||
}
|
||||
|
||||
#if !defined(BOOST_MATH_NO_CONSTEXPR_DETECTION) && !defined(BOOST_MATH_USING_BUILTIN_CONSTANT_P)
|
||||
|
||||
Reference in New Issue
Block a user