Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 29 additions & 29 deletions .drone.star

Large diffs are not rendered by default.

43 changes: 43 additions & 0 deletions .drone/drone.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#!/bin/bash

set -ex
export TRAVIS_BUILD_DIR=$(pwd)
export DRONE_BUILD_DIR=$(pwd)
export TRAVIS_BRANCH=$DRONE_BRANCH
export VCS_COMMIT_ID=$DRONE_COMMIT
export GIT_COMMIT=$DRONE_COMMIT
export PATH=~/.local/bin:/usr/local/bin:$PATH

echo '==================================> BEFORE_INSTALL'

. .drone/before-install.sh

echo '==================================> INSTALL'

cd ..
for i in 1 2 3 4 5; do git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root && break || sleep 15; done
cd boost-root
for i in 1 2 3 4 5; do git submodule update --init tools/build && break || sleep 15; done
for i in 1 2 3 4 5; do git submodule update --init libs/config && break || sleep 15; done
for i in 1 2 3 4 5; do git submodule update --init libs/polygon && break || sleep 15; done
for i in 1 2 3 4 5; do git submodule update --init tools/boost_install && break || sleep 15; done
for i in 1 2 3 4 5; do git submodule update --init libs/headers && break || sleep 15; done
for i in 1 2 3 4 5; do git submodule update --init tools/boostdep && break || sleep 15; done
cp -r $TRAVIS_BUILD_DIR/* libs/multiprecision
for i in 1 2 3 4 5; do python tools/boostdep/depinst/depinst.py multiprecision && break || sleep 15; done
./bootstrap.sh
./b2 headers

echo '==================================> BEFORE_SCRIPT'

. $DRONE_BUILD_DIR/.drone/before-script.sh

echo '==================================> SCRIPT'

echo "using $TOOLSET : : $COMPILER : <cxxflags>-std=$CXXSTD ;" > ~/user-config.jam
(cd libs/config/test && ../../../b2 print_config_info print_math_info toolset=$TOOLSET)
(cd libs/multiprecision/test && ../../../b2 -j3 toolset=$TOOLSET $TEST_SUITE define=CI_SUPPRESS_KNOWN_ISSUES define=SLOW_COMPILER)

echo '==================================> AFTER_SUCCESS'

. $DRONE_BUILD_DIR/.drone/after-success.sh
9 changes: 7 additions & 2 deletions include/boost/multiprecision/cpp_bin_float.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2340,13 +2340,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_signaling_NaN;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable:4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
template <unsigned Digits, boost::multiprecision::backends::digit_base_type DigitBase, class Allocator, class Exponent, Exponent MinE, Exponent MaxE, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_bin_float<Digits, DigitBase, Allocator, Exponent, MinE, MaxE>, ExpressionTemplates> >::has_denorm_loss;
Expand Down
9 changes: 7 additions & 2 deletions include/boost/multiprecision/cpp_dec_float.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3742,13 +3742,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >::has_signaling_NaN;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
template <unsigned Digits10, class ExponentType, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_dec_float<Digits10, ExponentType, Allocator>, ExpressionTemplates> >::has_denorm_loss;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,19 @@ struct numeric_limits<FloatingPointType,
static constexpr bool is_bounded = std::numeric_limits<float_type>::is_bounded;
static constexpr bool is_modulo = std::numeric_limits<float_type>::is_modulo;
static constexpr bool is_iec559 = std::numeric_limits<float_type>::is_iec559;
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
static constexpr std::float_denorm_style has_denorm = std::numeric_limits<float_type>::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
static constexpr bool has_infinity = std::numeric_limits<float_type>::has_infinity;
static constexpr bool has_quiet_NaN = std::numeric_limits<float_type>::has_quiet_NaN;
static constexpr bool has_signaling_NaN = std::numeric_limits<float_type>::has_signaling_NaN;
Expand Down Expand Up @@ -87,7 +99,19 @@ struct numeric_limits<FloatingPointType,
static constexpr bool is_bounded = true;
static constexpr bool is_modulo = false;
static constexpr bool is_iec559 = true;
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
static constexpr std::float_denorm_style has_denorm = std::denorm_present;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
static constexpr bool has_infinity = true;
static constexpr bool has_quiet_NaN = true;
static constexpr bool has_signaling_NaN = false;
Expand Down
18 changes: 7 additions & 11 deletions include/boost/multiprecision/cpp_int/limits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,23 +254,19 @@ template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_i
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_quiet_NaN;
template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_signaling_NaN;
#if defined(__clang__) && defined(__has_warning)
# if __has_warning("-Wdeprecated-declarations")
#ifdef _MSC_VER
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
# endif
#elif defined(_MSC_VER)
# pragma warning(push)
# pragma warning(disable:4996)
#endif
template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_denorm;
#if defined(__clang__) && defined(__has_warning)
# if __has_warning("-Wdeprecated-declarations")
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
# endif
#elif defined(_MSC_VER)
# pragma warning(pop)
#endif
template <std::size_t MinBits, std::size_t MaxBits, boost::multiprecision::cpp_integer_type SignType, boost::multiprecision::cpp_int_check_type Checked, class Allocator, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::cpp_int_backend<MinBits, MaxBits, SignType, Checked, Allocator>, ExpressionTemplates> >::has_denorm_loss;
Expand Down
2 changes: 1 addition & 1 deletion include/boost/multiprecision/detail/number_base.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ struct expression_storage_base<T, true>
};

template <class T>
struct expression_storage : public expression_storage_base<T, boost::multiprecision::detail::is_arithmetic<T>::value>
struct expression_storage : public expression_storage_base<T, boost::multiprecision::detail::is_arithmetic<T>::value || std::is_empty<T>::value>
{};

template <class T>
Expand Down
51 changes: 47 additions & 4 deletions include/boost/multiprecision/float128.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <cfloat>
#include <tuple>
#include <cstring>
#include <complex>
#include <boost/multiprecision/detail/standalone_config.hpp>
#include <boost/multiprecision/number.hpp>
#include <boost/multiprecision/detail/hash.hpp>
Expand Down Expand Up @@ -295,6 +296,14 @@ struct float128_backend
{
return m_value;
}
BOOST_MP_CXX14_CONSTEXPR float128_type& data()
{
return m_value;
}
BOOST_MP_CXX14_CONSTEXPR const float128_type& data() const
{
return m_value;
}
};

inline BOOST_MP_CXX14_CONSTEXPR void eval_add(float128_backend& result, const float128_backend& a)
Expand Down Expand Up @@ -710,6 +719,29 @@ inline boost::multiprecision::number<float128_backend, ExpressionTemplates> rsqr
return res;
}

// The default std::abs(std::complex<>) implementation normalizes by max(|re|, |im|),
// which yields NaN when an input is infinite (inf/inf).
// Per IEEE 754, the result must be +infinity if either component is infinite, even if the other is NaN.
template <boost::multiprecision::expression_template_option ExpressionTemplates>
inline boost::multiprecision::number<float128_backend, ExpressionTemplates>
abs BOOST_PREVENT_MACRO_SUBSTITUTION(const std::complex<boost::multiprecision::number<float128_backend, ExpressionTemplates>>& z)
{
using number_type = boost::multiprecision::number<float128_backend, ExpressionTemplates>;
const float128_type re_v = z.real().backend().value();
const float128_type im_v = z.imag().backend().value();
#ifdef BOOST_MP_USE_FLOAT128
return number_type(::hypotq(re_v, im_v));
#else
if (isinfq(re_v) || isinfq(im_v))
{
return std::numeric_limits<number_type>::infinity();
}
const float128_type re_abs = re_v < 0 ? -re_v : re_v;
const float128_type im_abs = im_v < 0 ? -im_v : im_v;
return number_type(sqrtq(re_abs * re_abs + im_abs * im_abs));
#endif
}

#ifndef BOOST_MP_USE_QUAD
template <multiprecision::expression_template_option ExpressionTemplates>
inline boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates> copysign BOOST_PREVENT_MACRO_SUBSTITUTION(const boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates>& a, const boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates>& b)
Expand Down Expand Up @@ -833,12 +865,17 @@ class numeric_limits<boost::multiprecision::number<boost::multiprecision::backen
static constexpr bool has_quiet_NaN = true;
static constexpr bool has_signaling_NaN = false;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
static constexpr float_denorm_style has_denorm = denorm_present;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
static constexpr bool has_denorm_loss = true;
static BOOST_MP_CXX14_CONSTEXPR number_type infinity() { return HUGE_VAL; /* conversion from double infinity OK */ }
Expand Down Expand Up @@ -902,14 +939,20 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio

template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_round_style numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates> >::round_style;

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::backends::float128_backend, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif

} // namespace std
Expand Down
36 changes: 28 additions & 8 deletions include/boost/multiprecision/gmp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3645,13 +3645,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
template <unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<Digits10>, ExpressionTemplates> >::has_signaling_NaN;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<Digits10>, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
template <unsigned Digits10, boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<Digits10>, ExpressionTemplates> >::has_denorm_loss;
Expand Down Expand Up @@ -3749,13 +3754,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<0>, ExpressionTemplates> >::has_signaling_NaN;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<0>, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_float<0>, ExpressionTemplates> >::has_denorm_loss;
Expand Down Expand Up @@ -3863,13 +3873,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_int, ExpressionTemplates> >::has_signaling_NaN;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_int, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_int, ExpressionTemplates> >::has_denorm_loss;
Expand Down Expand Up @@ -3978,13 +3993,18 @@ constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecisio
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_rational, ExpressionTemplates> >::has_signaling_NaN;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4996)
# pragma warning(push)
# pragma warning(disable : 4996)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wdeprecated-declarations"
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr float_denorm_style numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_rational, ExpressionTemplates> >::has_denorm;
#ifdef _MSC_VER
#pragma warning(pop)
#elif (defined(__clang__) && (__clang_major__ >= 17))
# pragma clang diagnostic pop
#endif
template <boost::multiprecision::expression_template_option ExpressionTemplates>
constexpr bool numeric_limits<boost::multiprecision::number<boost::multiprecision::gmp_rational, ExpressionTemplates> >::has_denorm_loss;
Expand Down
Loading
Loading