59 lines
2.9 KiB
Diff
59 lines
2.9 KiB
Diff
From 4239d93dad32a11e4c3829050f8070d456266133 Mon Sep 17 00:00:00 2001
|
|
From: jzmaddock <john@johnmaddock.co.uk>
|
|
Date: Wed, 1 Jun 2022 19:35:36 +0100
|
|
Subject: [PATCH] Update multiprecision_float_test.cpp to not overflow type
|
|
double. Previously the max value for uint1024_t could just squeeze into a
|
|
double because truncation occurred during the conversion, now that cpp_int
|
|
performs correctly rounded conversions, overflow occurs, and the computation
|
|
fails. Changed the problem distribution to use a multiprecision weight type,
|
|
rather than double.
|
|
|
|
---
|
|
test/multiprecision_float_test.cpp | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/test/multiprecision_float_test.cpp b/test/multiprecision_float_test.cpp
|
|
index bc2a936..2b53483 100644
|
|
--- a/libs/random/test/multiprecision_float_test.cpp
|
|
+++ b/libs/random/test/multiprecision_float_test.cpp
|
|
@@ -77,7 +77,7 @@ typedef boost::mpl::list <
|
|
boost::random::lognormal_distribution<big_float>,
|
|
boost::random::normal_distribution<big_float>,
|
|
#ifndef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
|
|
- boost::random::piecewise_constant_distribution<big_float>,
|
|
+ boost::random::piecewise_constant_distribution<big_float, big_float>,
|
|
boost::random::piecewise_linear_distribution<big_float>,
|
|
#endif
|
|
boost::random::student_t_distribution<big_float>,
|
|
|
|
From 7561690135c67ecf88c2133bad7680ebd2665c36 Mon Sep 17 00:00:00 2001
|
|
From: jzmaddock <john@johnmaddock.co.uk>
|
|
Date: Wed, 1 Jun 2022 19:32:55 +0100
|
|
Subject: [PATCH] Update multiprecision_int_test.cpp to not accidentality
|
|
overflow type double. Multiprecision now performs correct rounding when
|
|
converting to double - previously the max value for uint1024_t would just fit
|
|
in a double if it was truncated. But now that it's correctly rounded it
|
|
overflows and breaks the calculation.
|
|
|
|
---
|
|
test/multiprecision_int_test.cpp | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/test/multiprecision_int_test.cpp b/test/multiprecision_int_test.cpp
|
|
index 41ec229b5..a861cca39 100644
|
|
--- a/libs/random/test/multiprecision_int_test.cpp
|
|
+++ b/libs/random/test/multiprecision_int_test.cpp
|
|
@@ -215,8 +215,11 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(discrete_distributions, distribution_type, other_d
|
|
distribution_type d2;
|
|
ss >> d2;
|
|
BOOST_CHECK(d == d2);
|
|
-
|
|
- boost::random::independent_bits_engine<boost::random::mt19937, std::numeric_limits<boost::multiprecision::uint1024_t>::digits, boost::multiprecision::uint1024_t > big_random;
|
|
+ //
|
|
+ // The number of digits in the independent_bits_engine must be low enough that we don't overflow
|
|
+ // when converting to a double (see other_distributions declared above).
|
|
+ //
|
|
+ boost::random::independent_bits_engine<boost::random::mt19937, std::numeric_limits<boost::multiprecision::uint1024_t>::digits - 2, boost::multiprecision::uint1024_t > big_random;
|
|
for(unsigned i = 0; i < 200; ++i)
|
|
{
|
|
result_type r = d(big_random);
|