c5df07cb21
Simplified integer_log2 implementation.
...
Removed unnecessary template specializations, removed workaround for
compilers not supporting partial template specializations. Use unsigned
integers for bit counting, which allows to replace the division with
a shift.
2021-12-21 20:39:22 +03:00
092d94c833
Converted all links to www.boost.org to https.
...
Closes https://github.com/boostorg/integer/pull/25 .
2021-01-20 11:34:42 +03:00
6bb937fa5f
Fixed compilation of gcd in C++20 mode with clang 10.
...
Due to the new overload resolution rules for comparison operators in C++20,
the comparison became ambiguous.
2020-05-07 14:35:47 +03:00
9e6b3d375a
Added missing includes.
2020-05-02 18:34:43 +03:00
5e2a2722f1
Use BOOST_ASSERT instead of assert.
2020-05-02 18:18:10 +03:00
5ae18d139e
Use BOOST_BORLANDC in integer_log2.hpp
2020-05-02 18:16:16 +03:00
52c02d1237
Change __BORLANDC__ to BOOST_BORLANDC, which is defined in Boost config for the Embarcadero non-clang-based compilers.
2020-03-29 08:30:32 -04:00
33c165552c
Fixed incorrect loop termination in lcm_range.
...
lcm_range used to incorrectly terminate on value of 1. Instead, it should
terminate on 0 since any further elements of the range no longer affect
the result of the function.
Also, added tests for the gcd_range and lcm_range functions verifying
that they terminate their loops at the correct points.
2019-03-26 01:55:18 +03:00
29e3ae824c
Fully qualify call.
2018-12-04 12:09:31 -07:00
0af165bf6d
Merge branch 'remove_optional' of https://github.com/NAThompson/integer into remove_optional
2018-12-04 11:31:12 -07:00
080f2bdfdc
Take care of the case where integer type Z has explicit constructor.
2018-12-04 11:27:37 -07:00
289939a640
Merge branch 'develop' into remove_optional
2018-12-04 10:57:02 -07:00
51b259da19
Return integer with zero signaling common factor rather than boost::optional<Z>.
2018-12-04 10:55:03 -07:00
2f634ca78b
Added missing includes, remove C++11 requirement, other code cleanup.
...
Also, use Boost.Swap instead of the direct unqualified call to std::swap
and boost::enable_if_c instead of std::enable_if.
2018-11-03 23:10:44 +03:00
a7da90a79e
Make changes suggested by reviewer.
2018-10-29 13:10:02 -06:00
9312962a68
Use using std::swap; swap(n,m) rather than std::swap(n,m) [CI SKIP]
2018-10-29 13:00:30 -06:00
df7adb52ca
Use std::enable_if to enable SFINAE rather than static_assert
2018-10-29 11:58:18 -06:00
cd60c4c9f9
[CI SKIP] Disable multiprecision in certain compilers.
2018-10-29 08:52:20 -06:00
de0d24733b
Remove dependency on boost/typeindex in tests.
2018-10-26 19:23:11 -06:00
e0646cb7ec
Add template argument to green up build. Remove discrete log as we do not have an overflow-resistant mul_mod in boost.
2018-10-26 16:58:30 -06:00
2d463f3ee7
a*p % m may overflow, do not perform naive multiplication in unit tests or undefined behavior may result. [CI SKIP]
2018-10-26 11:19:43 -06:00
3f1603938c
Revert change as the previous algorithm overflows for all inputs >= half the bit length of the type.
2018-10-25 18:05:14 -06:00
54d0e4c63e
[ci skip] Trade out algorithm from 'The Joy of Factoring' to Wikipedia's version which reduces the number of required temporaries. In fact, the speedup is not large, but the code is more compact, and for larger types, the difference becomes more noticeable.
2018-10-25 14:28:39 -06:00
87e5b365d8
Return custom struct from extended Euclidean algorithm rather than tuple. Reduce number of operations for tests to reduce CI system workload. Disable discrete log tests until we have time to figure out why they are failing.
2018-10-25 09:38:16 -06:00
ada03a59d7
Remove dependency on boost.format, remove unfettered use of auto in order to move towards C++03 compatibility, use BOOST_THROW_EXCEPTION.
2018-10-24 14:29:22 -06:00
faa61cd911
[ci skip] It is *not* the case that a discrete log exists when the base and modulus are coprime. Take 4^x = 2 mod 5 as a counterexample. Change API accordingly.
2018-02-10 17:51:59 -06:00
4f4f3eda37
[ci skip] Fix docs to use less verbose names for modular multiplicative inverse (mod_inverse)
2018-02-10 16:07:17 -06:00
b3966428c4
[ci skip] Add test of short int to see if there's any obvious places for overflow (none are obvious, but no guarantees they still aren't there). Print basic information about the test to console so that failures are easier to track down.
2018-02-10 13:56:11 -06:00
8c415f77b1
[ci skip] Use less verbose naming. Add asserts as verfication of algorithms is a negligible fraction of total runtime. Use boost::multiprecision::powm and boost::multiprecision::sqrt rather than one-offs.
2018-02-09 17:19:26 -06:00
fc4d657201
[ci skip] Modular exponentiation, modular multiplicative inverse, extended Euclidean algorithm, discrete logarithm.
2018-01-28 14:47:14 -06:00
bc2349f71b
Corrected make_odd return type inconsistency.
...
Make gcd_traits<signed char>::make_odd return unsigned int, similar to all other gcd_traits specializations. Also, correct the local variable types that receive the result of make_odd to avoid warnings about unintended conversion.
2017-08-20 01:57:09 +03:00
6ebccd6c80
fix narrowing warnings due to integer promotion.
...
Signed-off-by: Daniela Engert <dani@ngrt.de >
2017-06-08 17:40:32 +02:00
7ccb820893
Test mpz_class when available.
...
And fix errors compiling with that type.
2017-05-07 13:15:15 +01:00
84ded579f3
Qualify recursive calls to avoid ambiguity for types that have their own gcd/lcm
2017-05-04 11:12:33 +01:00
c1a08d3185
We can enable compiler intrinsics with GCC in C++14 mode after all
2017-04-30 18:49:47 +01:00
53306630db
Fix for Oracle 12.4 compiler
2017-04-27 17:23:40 +00:00
1d934167fd
Tentative fix for overload resolution issue with Oracle C++.
2017-04-26 19:51:03 +01:00
7c0151c93a
Enumerators don't need a final , in their list.
2017-04-26 18:30:11 +01:00
4991d82385
Need to take abs of return value in short-circuit gcd code.
2017-04-24 19:19:48 +01:00
58d53beae4
Add missing #include for older compilers.
2017-04-24 18:18:36 +01:00
f5eff7d83d
MSVC-8 has no <intrin.h>.
2017-04-24 18:13:56 +01:00
beb6871864
Switch over to using new Boost.Math version of gcd/lcm.
...
Please refer to the Boost.Math revision log for details of changes, but in summary:
* New version of gcd/lcm internals by Jeremy Murphy include mixed-binary algorithm and better selection logic.
* Support is now included for gcd's of polynomials.
* Full C++14 constexpr support.
2017-04-23 13:01:09 +01:00
162e48d14a
Remove dependency to mpl and type_traits.
2017-03-31 18:34:14 +01:00
45cc025bbd
Merge branch 'bugfix/bitwise-not-and-gcc6' of https://github.com/Flast/boost-integer into cpp14
2017-03-28 19:28:51 +01:00
a52bae3639
Improve C++14 support:
...
* Make functions constexpr.
* Make functions noexcept where appropriate.
* Add test case for the above.
2017-03-28 18:57:50 +01:00
89cec128bd
Fix compile error on GCC6 or later.
...
Bitwise not yields integral promotion and to be signed type.
2016-07-30 16:12:07 +09:00
8dae82faeb
Replace math with integer, untabify.
2015-01-13 20:53:02 +02:00
acf272ee7d
Move common_factor headers to integer/
2015-01-13 19:55:58 +02:00
40b52301df
Move integer_log2 from pending to integer
2014-06-05 15:48:22 -07:00
cd98c4a257
Add a 64 bit specialization of low_bits_mask_t. Fixes #4332
...
[SVN r62756]
2010-06-10 19:49:34 +00:00