Commit Graph

212 Commits

Author SHA1 Message Date
Andrey Semashev 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
Nick Thompson 29e3ae824c Fully qualify call. 2018-12-04 12:09:31 -07:00
Nick Thompson 0af165bf6d Merge branch 'remove_optional' of https://github.com/NAThompson/integer into remove_optional 2018-12-04 11:31:12 -07:00
Nick Thompson 080f2bdfdc Take care of the case where integer type Z has explicit constructor. 2018-12-04 11:27:37 -07:00
Nick 289939a640 Merge branch 'develop' into remove_optional 2018-12-04 10:57:02 -07:00
Nick Thompson 51b259da19 Return integer with zero signaling common factor rather than boost::optional<Z>. 2018-12-04 10:55:03 -07:00
Andrey Semashev 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
Nick Thompson a7da90a79e Make changes suggested by reviewer. 2018-10-29 13:10:02 -06:00
Nick Thompson 9312962a68 Use using std::swap; swap(n,m) rather than std::swap(n,m) [CI SKIP] 2018-10-29 13:00:30 -06:00
Nick Thompson df7adb52ca Use std::enable_if to enable SFINAE rather than static_assert 2018-10-29 11:58:18 -06:00
Nick Thompson cd60c4c9f9 [CI SKIP] Disable multiprecision in certain compilers. 2018-10-29 08:52:20 -06:00
Nick Thompson de0d24733b Remove dependency on boost/typeindex in tests. 2018-10-26 19:23:11 -06:00
Nick Thompson 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
Nick Thompson 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
Nick Thompson 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
Nick Thompson 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
Nick Thompson 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
Nick Thompson 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
Nick Thompson 9167594533 Merge branch 'develop' of https://github.com/boostorg/integer into develop 2018-10-24 13:11:30 -06:00
Nick Thompson 661986dd3d [ci skip] Deprecate boost/pending/integer_log2.hpp 2018-02-11 12:32:14 -06:00
Nick Thompson 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
Nick Thompson 4f4f3eda37 [ci skip] Fix docs to use less verbose names for modular multiplicative inverse (mod_inverse) 2018-02-10 16:07:17 -06:00
Nick Thompson 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
Nick Thompson 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
Nick Thompson fc4d657201 [ci skip] Modular exponentiation, modular multiplicative inverse, extended Euclidean algorithm, discrete logarithm. 2018-01-28 14:47:14 -06:00
Andrey Semashev 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
Daniela Engert 6ebccd6c80 fix narrowing warnings due to integer promotion.
Signed-off-by: Daniela Engert <dani@ngrt.de>
2017-06-08 17:40:32 +02:00
jzmaddock 7ccb820893 Test mpz_class when available.
And fix errors compiling with that type.
2017-05-07 13:15:15 +01:00
John Maddock 84ded579f3 Qualify recursive calls to avoid ambiguity for types that have their own gcd/lcm 2017-05-04 11:12:33 +01:00
John Maddock c1a08d3185 We can enable compiler intrinsics with GCC in C++14 mode after all 2017-04-30 18:49:47 +01:00
John Maddock 53306630db Fix for Oracle 12.4 compiler 2017-04-27 17:23:40 +00:00
jzmaddock 1d934167fd Tentative fix for overload resolution issue with Oracle C++. 2017-04-26 19:51:03 +01:00
jzmaddock 7c0151c93a Enumerators don't need a final , in their list. 2017-04-26 18:30:11 +01:00
jzmaddock 4991d82385 Need to take abs of return value in short-circuit gcd code. 2017-04-24 19:19:48 +01:00
jzmaddock 58d53beae4 Add missing #include for older compilers. 2017-04-24 18:18:36 +01:00
jzmaddock f5eff7d83d MSVC-8 has no <intrin.h>. 2017-04-24 18:13:56 +01:00
jzmaddock 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
jzmaddock 162e48d14a Remove dependency to mpl and type_traits. 2017-03-31 18:34:14 +01:00
jzmaddock 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
jzmaddock 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
Kohei Takahashi 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
pabristow 175a1caa58 Placed GCD and LCM typdefs and declarations in integer_fwd.hpp inside namespace boost::integer (was in boost::math) and checked that expected tests pass (and expected fails fail).
(Major update to Boost.Integer docs available for review at https://dl.dropboxusercontent.com/u/43940943/modular-boost/libs/integer/index.html
on branch doc-revision).
2015-01-29 11:53:02 +00:00
Vicente J. Botet Escriba a12b96c011 manage with #4881. 2015-01-25 17:11:04 +01:00
Vicente J. Botet Escriba 7ffb75bb43 manage with #6694 Boost.Integer part. 2015-01-25 17:03:09 +01:00
Peter Dimov c5370a9705 Fix ambiguous 'detail' errors under msvc-8.0. 2015-01-18 20:04:09 +02:00
Peter Dimov 8dae82faeb Replace math with integer, untabify. 2015-01-13 20:53:02 +02:00
Peter Dimov acf272ee7d Move common_factor headers to integer/ 2015-01-13 19:55:58 +02:00
Stephen Kelly b70c89a3ff Remove BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
Process #ifndef...#else...#endif blocks.

[SVN r86245]
2015-01-13 19:41:33 +02:00
John Maddock 72b569f84f MSVC warning suppression.
[SVN r69509]
2015-01-13 19:41:31 +02:00
John Maddock ce4bd6cc98 Fix signed/unsigned comparison warnings when char is unsigned.
[SVN r63496]
2015-01-13 19:41:31 +02:00