Skip to content

Commit

Permalink
Final fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
martun committed Jul 26, 2024
1 parent 16abe47 commit 68d7d96
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ namespace nil {
template<typename PowerType,
typename = typename std::enable_if<boost::is_integral<PowerType>::value>::type>
constexpr element_fp pow(const PowerType pwr) const {
return element_fp(boost::multiprecision::powm(data, boost::multiprecision::uint128_t(pwr)));
return element_fp(boost::multiprecision::powm(data, boost::multiprecision::uint128_modular_t(pwr)));
}

template<typename Backend, boost::multiprecision::expression_template_option ExpressionTemplates>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ namespace nil {
h2 += (((t1 >> 24)) & 0x3ffffffffff) | hibit;

/* h *= r */
uint128_t d0 = uint128_t(h0) * r0 + uint128_t(h1) * s2 + uint128_t(h2) * s1;
uint128_t d1 = uint128_t(h0) * r1 + uint128_t(h1) * r0 + uint128_t(h2) * s2;
uint128_t d2 = uint128_t(h0) * r2 + uint128_t(h1) * r1 + uint128_t(h2) * r0;
uint128_modular_t d0 = uint128_modular_t(h0) * r0 + uint128_modular_t(h1) * s2 + uint128_modular_t(h2) * s1;
uint128_modular_t d1 = uint128_modular_t(h0) * r1 + uint128_modular_t(h1) * r0 + uint128_modular_t(h2) * s2;
uint128_modular_t d2 = uint128_modular_t(h0) * r2 + uint128_modular_t(h1) * r1 + uint128_modular_t(h2) * r0;

/* (partial) h %= p */
word_type c = carry_shift(d0, 44);
Expand Down
4 changes: 2 additions & 2 deletions libs/multiprecision/example/mixed_integer_arithmetic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ int main()
boost::uint64_t i = (std::numeric_limits<boost::uint64_t>::max)();
boost::uint64_t j = 1;

uint128_t ui128;
uint128_modular_t ui128;
uint256_t ui256;
//
// Start by performing arithmetic on 64-bit integers to yield 128-bit results:
Expand All @@ -32,7 +32,7 @@ int main()
//
// The try squaring a 128-bit integer to yield a 256-bit result:
//
ui128 = (std::numeric_limits<uint128_t>::max)();
ui128 = (std::numeric_limits<uint128_modular_t>::max)();
std::cout << std::hex << std::showbase << multiply(ui256, ui128, ui128) << std::endl;

return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,6 @@ namespace boost {
Backend exp;
e.mod_data().adjust_regular(exp, e.base_data());
eval_powm(result, b, exp);
std::cout << "Pow of " << b << " ^ " << exp << " is " << result << " modulo " << b.mod_data().get_mod() << std::endl;
}

template<unsigned Bits, typename StorageType>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,6 @@ namespace boost {
BOOST_MP_CXX14_CONSTEXPR void montgomery_mul_no_carry_impl(
Backend1& c,
const Backend1& b) const {

BOOST_ASSERT( eval_lt(c, m_mod) && eval_lt(b, m_mod) );
BOOST_ASSERT( is_applicable_for_no_carry_montgomery_mul() );

Expand Down Expand Up @@ -593,7 +592,10 @@ namespace boost {

// "t[N-1] = C + A"
result_limbs[N-1] = C + A;
}

if (!eval_lt(result, m_mod)) {
eval_subtract(result, m_mod);
}
c = result;
}
Expand Down
2 changes: 1 addition & 1 deletion libs/multiprecision/test/constexpr_test_cpp_int_2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ decltype(std::declval<F>()(std::declval<V>())) non_constexpr_invoke(F f, V v) {

int main() {
typedef boost::multiprecision::int128_t int_backend;
typedef boost::multiprecision::uint128_t unsigned_backend;
typedef boost::multiprecision::uint128_modular_t unsigned_backend;

{
constexpr int_backend a(22);
Expand Down
2 changes: 1 addition & 1 deletion libs/multiprecision/test/constexpr_test_cpp_int_4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ decltype(std::declval<F>()(std::declval<V>())) non_constexpr_invoke(F f, V v) {

int main() {
typedef boost::multiprecision::checked_int128_t int_backend;
typedef boost::multiprecision::checked_uint128_t unsigned_backend;
typedef boost::multiprecision::checked_uint128_modular_t unsigned_backend;

{
constexpr int_backend a(22);
Expand Down
2 changes: 1 addition & 1 deletion libs/multiprecision/test/test_cpp_int_conv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ int main() {

i3 = -1234567;

uint128_t i5(i3);
uint128_modular_t i5(i3);
BOOST_TEST(i5 == -1234567);

int128_t i6(i4);
Expand Down
36 changes: 18 additions & 18 deletions libs/multiprecision/test/test_nothrow_cpp_int.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::cpp_int>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::int128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::checked_int128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::uint128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::checked_uint128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::checked_uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::int512_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::checked_int512_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::uint512_t>::value);
Expand All @@ -36,8 +36,8 @@ BOOST_STATIC_ASSERT(boost::is_nothrow_move_constructible<boost::multiprecision::
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::cpp_int>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::int128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::checked_int128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::uint128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::checked_uint128_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::checked_uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::int512_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::checked_int512_t>::value);
BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::uint512_t>::value);
Expand All @@ -52,8 +52,8 @@ BOOST_STATIC_ASSERT(boost::is_nothrow_move_assignable<boost::multiprecision::che
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::cpp_int>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::int128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::checked_int128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::uint128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::checked_uint128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::checked_uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::int512_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::checked_int512_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::uint512_t>::value);
Expand All @@ -66,8 +66,8 @@ BOOST_STATIC_ASSERT(boost::has_nothrow_constructor<boost::multiprecision::checke
BOOST_STATIC_ASSERT(!boost::has_nothrow_copy<boost::multiprecision::cpp_int>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::int128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::checked_int128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::uint128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::checked_uint128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::checked_uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::int512_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::checked_int512_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::uint512_t>::value);
Expand All @@ -80,8 +80,8 @@ BOOST_STATIC_ASSERT(boost::has_nothrow_copy<boost::multiprecision::checked_uint5
BOOST_STATIC_ASSERT(!boost::has_nothrow_assign<boost::multiprecision::cpp_int>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::int128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::checked_int128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::uint128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::checked_uint128_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::checked_uint128_modular_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::int512_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::checked_int512_t>::value);
BOOST_STATIC_ASSERT(boost::has_nothrow_assign<boost::multiprecision::uint512_t>::value);
Expand All @@ -97,9 +97,9 @@ BOOST_STATIC_ASSERT(
BOOST_STATIC_ASSERT(noexcept(
boost::multiprecision::checked_int128_t(std::declval<boost::multiprecision::signed_limb_type>())));
BOOST_STATIC_ASSERT(
noexcept(boost::multiprecision::uint128_t(std::declval<boost::multiprecision::signed_limb_type>())));
noexcept(boost::multiprecision::uint128_modular_t(std::declval<boost::multiprecision::signed_limb_type>())));
BOOST_STATIC_ASSERT(!noexcept(
boost::multiprecision::checked_uint128_t(std::declval<boost::multiprecision::signed_limb_type>())));
boost::multiprecision::checked_uint128_modular_t(std::declval<boost::multiprecision::signed_limb_type>())));
BOOST_STATIC_ASSERT(
noexcept(boost::multiprecision::int512_t(std::declval<boost::multiprecision::signed_limb_type>())));
BOOST_STATIC_ASSERT(noexcept(
Expand All @@ -118,9 +118,9 @@ BOOST_STATIC_ASSERT(
BOOST_STATIC_ASSERT(
noexcept(boost::multiprecision::checked_int128_t(std::declval<boost::multiprecision::limb_type>())));
BOOST_STATIC_ASSERT(
noexcept(boost::multiprecision::uint128_t(std::declval<boost::multiprecision::limb_type>())));
noexcept(boost::multiprecision::uint128_modular_t(std::declval<boost::multiprecision::limb_type>())));
BOOST_STATIC_ASSERT(
noexcept(boost::multiprecision::checked_uint128_t(std::declval<boost::multiprecision::limb_type>())));
noexcept(boost::multiprecision::checked_uint128_modular_t(std::declval<boost::multiprecision::limb_type>())));
BOOST_STATIC_ASSERT(
noexcept(boost::multiprecision::int512_t(std::declval<boost::multiprecision::limb_type>())));
BOOST_STATIC_ASSERT(
Expand All @@ -138,9 +138,9 @@ BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::int128_t>() =
std::declval<boost::multiprecision::signed_limb_type>()));
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::checked_int128_t>() =
std::declval<boost::multiprecision::signed_limb_type>()));
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::uint128_t>() =
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::uint128_modular_t>() =
std::declval<boost::multiprecision::signed_limb_type>()));
BOOST_STATIC_ASSERT(!noexcept(std::declval<boost::multiprecision::checked_uint128_t>() =
BOOST_STATIC_ASSERT(!noexcept(std::declval<boost::multiprecision::checked_uint128_modular_t>() =
std::declval<boost::multiprecision::signed_limb_type>()));
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::int512_t>() =
std::declval<boost::multiprecision::signed_limb_type>()));
Expand All @@ -160,8 +160,8 @@ BOOST_STATIC_ASSERT(noexcept(
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::checked_int128_t>() =
std::declval<boost::multiprecision::limb_type>()));
BOOST_STATIC_ASSERT(noexcept(
std::declval<boost::multiprecision::uint128_t>() = std::declval<boost::multiprecision::limb_type>()));
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::checked_uint128_t>() =
std::declval<boost::multiprecision::uint128_modular_t>() = std::declval<boost::multiprecision::limb_type>()));
BOOST_STATIC_ASSERT(noexcept(std::declval<boost::multiprecision::checked_uint128_modular_t>() =
std::declval<boost::multiprecision::limb_type>()));
BOOST_STATIC_ASSERT(noexcept(
std::declval<boost::multiprecision::int512_t>() = std::declval<boost::multiprecision::limb_type>()));
Expand Down
4 changes: 2 additions & 2 deletions libs/multiprecision/test/test_nothrow_cpp_rational.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ typedef boost::multiprecision::number<
boost::multiprecision::rational_adaptor<boost::multiprecision::int128_t::backend_type>>
rat128_t;
typedef boost::multiprecision::number<
boost::multiprecision::rational_adaptor<boost::multiprecision::uint128_t::backend_type>>
boost::multiprecision::rational_adaptor<boost::multiprecision::uint128_modular_t::backend_type>>
urat128_t;
typedef boost::multiprecision::number<
boost::multiprecision::rational_adaptor<boost::multiprecision::int512_t::backend_type>>
Expand All @@ -28,7 +28,7 @@ typedef boost::multiprecision::number<
boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int128_t::backend_type>>
checked_rat128_t;
typedef boost::multiprecision::number<
boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint128_t::backend_type>>
boost::multiprecision::rational_adaptor<boost::multiprecision::checked_uint128_modular_t::backend_type>>
checked_urat128_t;
typedef boost::multiprecision::number<
boost::multiprecision::rational_adaptor<boost::multiprecision::checked_int512_t::backend_type>>
Expand Down

0 comments on commit 68d7d96

Please sign in to comment.