Changelog#

1.0.2 (2023-12-22)#

Fix#

  • Fix wrong version number in CMakeLists.txt.

1.0.1 (2023-12-13)#

Fix#

  • Fix constness of the formatters’ parse() function (#308).

  • Fix building against fmt 9 (#308).

1.0.0 (2023-12-01)#

New#

  • mp++’s ABI is now versioned (#304).

  • mp++ now uses semantic versioning.

Fix#

  • Fix C++20 deprecations about user-defined literals (#303).

  • Fix compilation in C++20 mode with recent versions of the fmt library (#303).

0.27 (2022-10-21)#

New#

  • Add initial optional support for formatting via the fmt library (#296).

  • Add helpers to determine the number of limbs in the significand of a real number (#296).

  • Add several std math overloads for real (#295).

  • Add hashing capabilities to real (#295).

  • Add a std::hash specialisation for real128 (#295).

Changes#

  • Performance improvements in the single-limb addition primitives for signed integrals (#293).

Fix#

  • Fix compilation in debug mode on recent versions of Clang (#293).

  • Fix an MSVC build issue in C++20 mode (#292).

0.26 (2021-09-02)#

Fix#

0.25 (2021-08-31)#

New#

  • Add functions to compute the number of digits necessary for round-tripping for real and complex (#280). Requires MPFR>=4.1.

  • Add new interactive notebooks for real and integer (#280).

Fix#

  • Don’t prepend :: when invoking GMP/MPFR/MPC macros. This fixes build failures observed on some platforms (#283, #282).

0.24 (2021-06-26)#

New#

  • The mp++ conda packages are now available for 64-bit ARM and PowerPC architectures.

  • complex128 now respects the format flags in output streams (#276).

  • complex now respects the format flags in output streams (#275).

  • real128 now respects the format flags in output streams (#273).

  • real now respects the format flags in output streams (#272).

  • Add polylogarithms for real (#271).

  • Add the Lambert W functions \(W_0\) and \(W_{-1}\) for real (#271).

  • Interactive notebooks are now available in the documentation (#270).

Fix#

  • Workaround for a failing test with GCC in C++20 mode (#277).

  • Workaround for a failing test on 64-bit ARM in release mode (#274).

0.23 (2021-04-02)#

New#

  • Add a new fabs() overload for the computation of the absolute value of a real128 (#269).

Changes#

  • Remove the explicit attribute from several generic constructors in the multiprecision classes (#269).

Fix#

  • Disable Boost’s autolinking feature in the build system (#267).

0.22 (2021-01-03)#

New#

  • Add a binary serialisation API for real (#263).

  • Implement optional support for Boost.serialization for all multiprecision classes (#262).

  • Add a header file containing the forward declarations of all the number classes (#261).

  • Add a couple of new categorisation functions for real128 (#261).

  • Make MPPP_FLOAT128_WITH_LONG_DOUBLE a public definition (#261).

Changes#

  • Change the sphinx theme for the documentation (#261).

  • mp++ now requires CMake >= 3.8 when compiling from source (#261).

Fix#

  • Fix build with recent versions of clang-tidy (#263).

  • Various build system/docs fixes and enhancements (#263, #261).

  • Workaround for a compiler issue with older versions of Clang (#260).

0.21 (2020-06-17)#

New#

  • Implement additional special functions for real (log_base_ui()) (#256).

  • Finish exposing the functions from libquadmath for real128 (#255).

  • Expose more MPFR functions for real (#255, #254).

  • Add a tutorial for real (#252).

  • Expose all the constants provided by MPFR in the real API (#252).

  • Add the integer LCM primitives (#247).

  • Implement additional special functions for complex (inverse, reciprocal square root, n-th root, AGM) (#250, #246).

  • Implement the detection of finite and infinite values for complex (#246).

Changes#

  • Overhaul the benchmark suite and update the benchmark results (#248).

  • BREAKING: the complex cmp_abs() function has been renamed to cmpabs() for consistency with real (#246).

Fix#

  • Fix the return value of the real tan_pi() and cot_pi() functions at the poles (#256).

  • Implement a workaround for a build issue with Xcode (#251).

0.20 (2020-06-03)#

New#

  • mp++ now builds cleanly with clang-tidy (#244).

  • Implement additional three-way comparison functions for real (#243).

  • Add the set_ui_2exp() and set_si_2exp() functions for real, and implement constructors from an integral multiple of a power of 2 (#242).

  • The mp++ library can now be built with link-time optimisations enabled (#240).

  • Add Bessel functions of real order for real (#238).

  • Add a move constructor with custom precision for real (#234).

  • Add support for C++20’s constinit (#233).

  • real can now interact with std::complex (#232).

  • Add complex, a multiprecision complex number class (#232).

  • Improve the interoperability between mp++ classes via additional assignment operators (#229).

  • mp++ now works with the Intel compiler (#224, tested with icpc (ICC) 19.1.0.166). This includes also support for real128 and complex128 (with a couple of minor limitations).

  • The interoperability of real128 with long double has been improved: it is now supported also on Clang (since version 7) and it does not require mp++ to be configured with the MPPP_WITH_MPFR option any more (#222).

  • real128 can now interact with std::complex (#220).

  • Add complex128, a quadruple-precision complex number class (#220).

  • mp++ now officially supports the ARM (aarch64) and PowerPC (ppc64le) architectures, which have been added to the continuous integration setup (#219).

Changes#

  • Enable all tests on MinGW (#237).

  • Update Catch to the latest version, 2.12.1 (#237).

  • real move operations from mpfr_t have been disabled on MSVC due to compiler issues (#236).

  • Improve the implementation of real binary operators/functions by using the MPFR primitives more extensively and by handling mixed-precision computations more rigorously when one of the operands in not a real (#230).

  • For consistency with C++20, mp++’s concepts now use snake case notation. The concept hierarchy has also been simplified and streamlined (#228).

  • BREAKING: the global precision setting mechanism has been removed from real. As a result, the API and behaviour of the real class have undergone a few backwards-incompatible changes (#227).

  • The documentation is now using sphinx exclusively, doxygen is not involved any more (#227, #225, #223, #221).

  • Improve the build system’s compatibility with other projects by namespacing variables and imported targets related to mp++’s dependencies (#226).

  • Various internal simplifications and improvements to real128 (#221).

Fix#

  • Implement a workaround for Clang 10 not allowing constexpr in-place arithmetics for __complex128 (#238).

  • Fix a bug in the real128 test suite (#224).

  • Various doc fixes (#220).

  • Fix a bug in the test suite in release mode (#219).

0.19 (2020-02-29)#

New#

Changes#

  • The real dilogarithm functions now return NaN if the argument is not less than 1.

  • Move more real functions from the header into the compiled library (#216).

  • The GCC quadmath library is now a private dependency of the mp++ library (#215).

  • The real128 string representation has been changed to use the g format specifier (#213).

Fix#

  • Fix a compilation warning with GCC 4.8 (#216).

  • Fix a couple of real functions returning copies rather than references (#216).

  • Various build system/doc fixes and improvements (#214, #215, #216).

  • Fix compilation with older Clang versions in C++17 mode (#213).

0.18 (2020-02-14)#

New#

Changes#

  • Update the internal copy of Catch to the latest version, 2.11.1 (#210).

  • mp++’s public headers do not include the quadmath.h header any more. This change greatly improves mp++’s compatibility with Clang when the MPPP_WITH_QUADMATH option is active (#206).

  • Continue moving code into the compiled library (#204, #206).

  • Enable the C++20 concept declaration syntax if GCC >= 9 is being used (#203).

Fix#

  • Various build system and documentation improvements (#200, #202).

0.17 (2019-09-13)#

New#

  • mp++’s concepts are now compatible with the C++20 concepts proposal (#196, #198). Many thanks to 7ofNine!

  • Expose most of the missing special functions from the MPFR API for real (#190, #192, #194).

Changes#

  • On MSVC, use the WIN32_LEAN_AND_MEAN definition (#198).

  • Update the internal copy of Catch to the latest version, 2.9.2 (#197).

  • Drastically reduce the build time of the test suite by separately compiling the Catch main function (#197).

Fix#

  • Workaround a constexpr issue involving real128 on GCC 9 (#197).

  • Fix C++17 builds with MSVC 2015 (#191).

0.16 (2019-05-25)#

Fix#

  • Properly set the version numbers for the mp++ dynamic library (#187).

0.15 (2019-05-24)#

New#

  • Expose the hyperbolic functions from the MPFR API for real (#184).

  • Add the possibility of generating Unicode MSVC solutions (#183).

  • Finish exposing all the trigonometric functions from the MPFR API for real (#180).

  • Add the possibility to build mp++ as a static library (#176).

  • Add CircleCI to the continuous integration pipeline (#173).

  • Implement the logarithm/exponential functions for real (#172).

Changes#

  • When compiled with MPFR version 4 or later, mp++ now ensures that thread-local and global caches are freed separately at thread exit and program shutdown (#182).

  • Update the internal copy of Catch to the latest version, 2.7.2 (#181).

  • The MPFR cleanup function mpfr_free_cache() is now called at the end of every thread which creates at least one real object (#180).

  • Implement a specialised version of the swap() primitive for integer and rational (#174).

  • Improve the implementation of the less than/greater than operators for integer. Together with the swap() improvements, this change leads to a ~9% decrease in runtime for the integer1_sort_signed benchmark (#174).

  • Continue moving code from the headers into the compiled library (#170, #172).

Fix#

  • Fix two race conditions in the testing code (#181).

  • The zero_division_error exception is now correctly marked as visible (#180).

  • Add a workaround for a clang-cl bug (#179).

  • Various build system and documentation improvements (#172).

  • Fix a warning when building mp++ with older MSVC versions (#170).

0.14 (2019-04-11)#

New#

Changes#

  • mp++ does not depend on the DbgHelp library on Windows any more (#169).

  • BREAKING: mp++ has now a compiled component. In order to use mp++, you will now have to both include the mp++ headers and link to the mp++ library (#169).

  • Various improvements to the benchmarks (#166).

  • BREAKING: the input stream operators have been removed from all classes (#161).

Fix#

  • Fix an issue in the build system when compiling the unit tests in release mode with MSVC (#164).

  • Fixes for the demangler on OSX when 128-bit integers are involved (#163).

  • Fix a build issue on OSX when the compiler is not Xcode (#161).

0.13 (2019-03-13)#

Changes#

  • Update copyright date (#162).

  • Add a tutorial for real128 (#160).

  • Various build system improvements (#159).

  • Update the internal copy of Catch to the latest version, 2.5.0 (#158).

Fix#

  • Fix a compilation error when using booleans as second arguments in the pow() and binomial() overloads of integer (#162).

  • Work around a compilation error on MSVC when using C++17 (#162).

  • Various documentation fixes (#160).

0.12 (2018-10-11)#

New#

  • Add a hash function for real128 (#157).

  • Add all the root functions from the GMP API to the integer API (#156).

  • Add all the root functions from the MPFR API to the real API (#154).

  • Add a specialisation of std::numeric_limits for real128 (#144).

Changes#

  • Initialising a real with an invalid real_kind enum value now raises an exception, rather than initialising to NaN (#153).

  • Switch to the sphinx material design theme for the documentation (#153).

  • Update the internal copy of Catch to the latest version, 2.4.0 (#152).

  • Various improvements to the GCD implementation for integer (#150).

  • The addition/subtraction operators of integer now use the low-level add_ui(), add_si(), sub_ui() and sub_si() primitives when the other argument is a C++ integral (#147).

  • Various documentation additions, improvements and fixes (#146, #148, #149, #153, #155).

  • BREAKING: replace the integer_nbits_init tag structure with the strongly-typed mppp::integer_bitcnt_t enum (#145).

  • Ensure that real128 is trivially copyable (#144).

Fix#

  • Fix various warnings issued by Clang 7 in the unit tests (#157).

0.11 (2018-05-22)#

New#

  • Wrap more functions from the quadmath API in real128 (#140).

Changes#

  • The build system should now detect MPIR installations when looking for GMP (#139).

  • Update the internal copy of Catch to the latest version, 2.2.2 (#137).

Fix#

  • Fix a couple of missing inline specifiers in the tests (#143).

  • Fix a missing noexcept in the move constructor of real128 (#138).

0.10 (2018-04-06)#

New#

  • Add a target in the build system to compile and run the benchmarks (#135).

  • Extend the add_ui() and sub_ui() functions to work on all unsigned C++ integral types, and introduce corresponding add_si() and sub_si() functions for signed C++ integral types (#131).

  • Initial version of the rational tutorial (#130).

  • The demangler is now aware of cv qualifiers and references (#129).

Changes#

  • BREAKING: the add_ui() function now requires an unsigned integral as the third argument (previously, the function could be invoked with a signed integral argument thanks to C++’s conversion rules).

Fix#

  • Fix a test failure on FreeBSD (#134).

  • Various small documentation fixes (#130, #135).

  • Fix demangling failures for 128-bit integers in OSX (#128).

0.9 (2018-02-25)#

New#

  • Add a couple of benchmarks against hardware integer types (#124).

Changes#

  • The mppp::string_type concept is now satisfied by cv qualified types as well (#127).

  • Add a leading mppp:: to the names of mp++’s classes in the pybind11 custom type casters (#120). This should be only a cosmetic change.

  • Update the internal copy of Catch to the latest version, 2.1.1 (#120).

  • Small tweaks/improvements to the build system and to the docs (#118, #120, #121, #124, #126).

Fix#

  • Fix a potential bug in the real printing code (#123).

  • Fix a potential name shadowing issue in the pybind11 integration utilities (#125).

0.8 (2018-01-26)#

New#

  • Add a function to check if a real is equal to one (#117).

  • The pybind11 integration utilities now automatically translate mp++ exceptions into appropriate Python exceptions (#115).

  • Expose various internal type traits in the public API (#114).

  • Add an implementation of the binomial coefficient for rational top arguments (#113).

Changes#

  • When C++ concepts are enabled, various functions now use automatically-deduced return types to simplify the implementation and improve the generated documentation (#114).

  • In the CMake config-file package produced by the installation process, ensure that the installed package version is considered compatible with any other version with the same major version number (#113).

Fix#

  • Fix a compilation error in the in-place operators of real when using concepts (#116).

  • Fix a compilation error in the pybind11 utilities when mp++ is configured with quadmath support but without MPFR (#114).

0.7 (2018-01-11)#

New#

  • Implement the initial version of the binary serialisation API (#110).

  • Add builds based on MSVC 2017 in Appveyor (#110).

  • Extend the mppp::CppInteroperable concept to include all C++ integral types (#104).

  • Add left bit shift benchmarks for integer (#103).

  • Implement division without remainder (tdiv_q()) and exact division with positive divisor (divexact_gcd()) for integer (#103).

  • Implement the trunc() and integer_p() primitives for real (#102).

  • Implement the free_integer_caches() function to manually free the caches used internally by integer (#98).

Changes#

  • Update copyright date (#110).

  • Various updates to the documentation and to the benchmarks (#107, #108).

  • Add an internal demangling utility to improve the quality of the error messages (#105).

  • Various performance improvements for integer division, fused multiply-add, left bit shift, addition and multiplication (#103, #106, #108).

  • Improve the detection of the availability of the thread_local keyword on recent Xcode versions (#99).

0.6 (2017-12-05)#

New#

  • Implement additional get() conversion functions for real128 (#96).

  • Implement the increment and decrement operators for rational (#95).

  • Implement support for __int128_t and __uint128_t (#90).

  • Implement the bitwise logic operators for integer (#86).

  • Initial implementation of the pybind11 integration utilities (#81).

  • Implement the frexp() primitive for real128 (#81).

  • Implement the get/set_z_2exp() primitives for real (#77).

  • Implement construction with preallocated storage for integer (#74).

  • Implement construction from an array of limbs for integer (#73).

Changes#

  • Various additions to the tutorial (#97).

  • BREAKING: the imported target created by the installation process has been renamed from Mp++ to mp++ (#94).

  • Take advantage of std::gcd() on C++17 (#93).

  • Update the benchmark results for integer (#91).

  • Add division benchmarks for integer (#91).

  • A few performance tweaks for integer (#91).

  • Simplifications in the bit shifting primitives for integer (#85).

  • Split an integer test in two parts to curb memory usage during compilation (#80).

  • Use bit counting intrinsics in MSVC (#79).

  • Update the internal copy of Catch to the latest version, 2.0.1 (#76).

  • Improve the performance of generic assignment for integer (#74).

  • Improve construction from C++ integrals for integer (#74).

Fix#

0.5 (2017-11-07)#

New#

  • Implement the real class (#40).

  • Add non-throwing GMP-style conversion functions (#59, #61).

  • Implement move constructors and move assignment operators from mpz_t and mpq_t for integer and rational (#57).

  • Implement a cache for the allocation of limbs arrays in small integer objects (#55).

  • Implement the real128 class (#31).

  • Implement the sub_ui() primitive for integer (#37).

  • Add a CI build testing against the latest unstable GMP branch (#34).

  • Add assignment operators from std::string_view for integer and rational (#32).

  • Add the possibility of constructing non-canonical rational objects from numerator/denominator pairs (#28).

Changes#

  • Use the sphinx bootstrap theme for the html documentation (#71).

  • Various simplifications in the rational API (#66).

  • Introduce a string_type concept and use it to reduce the number of overloads in the constructors/assignment operators from string (#63, #64).

  • The integer functions accepting the return value as a parameter will now demote a return value with dynamic storage to static storage if the other arguments all have static storage (#58).

  • The free functions for integer and rational now return a reference to the return value, rather than void (#56).

  • Performance improvements and code simplifications for integer division (#55).

  • Minor improvements in the static checks for the expected layouts of mpz_t and mpq_t (#53, #42).

  • Enable additional compiler warning flags in debug builds for GCC (#52).

  • BREAKING: various improvements/changes to the bit shifting functions for integer, and the exception raised by the bit shifting operators is not any more std::domain_error, it is now std::overflow_error (#48).

  • Various updates to the benchmarks (#39).

  • Use various C++17 standard library bits if available, and improve general C++17 compatibility (#31, #37).

  • Update the internal copy of Catch to the latest version, 1.9.7 (#36).

  • Bump up the minimum required CMake version to 3.3 (#31).

  • Performance improvements and simplifications in the rational constructors and assignment operators (#28, #32).

Fix#

  • Fixes/improvements in the support for long double (#50, #54).

  • Fix the compilation of the tests on Clang 5 (#43).

  • Fix too lax constraints in the implementation of in-place operators for integer and rational (#41).

  • Fix the PDF build of the documentation (#39).

  • Fix a few missing inline specifiers (#38, #41).

  • Fix C++ version detection on MSVC (#36).

  • Fix missing tests for rational hashing (#29).

  • Fix some MSVC warnings when compiling the tests in release mode (#28).

  • Various minor documentation fixes.

0.4 (2017-07-29)#

New#

  • Implement the constructors from a range of characters and from std::string_view for integer and rational (#23).

  • Implement the assignment operator and the constructor from mpz_t in rational (#19).

Changes#

  • Expand CI to include GCC 7 in C++17 mode (#27).

  • Improve testing coverage (#25).

  • Various extensions to the benchmark suite (#25).

  • Various performance improvements in integer thanks to the reduction of the number of branches in the implementation of basic arithmetic for the 1/2-limb specialisations (#25).

  • Update the internal copy of Catch to the latest version, 1.9.6 (#24).

  • Performance improvements for mppp::integer::size() (#23).

  • Performance improvements for the construction/conversion of integer from/to C++ integrals (#23).

  • Make sure the MPFR cleanup routine is automatically called on shutdown (#22).

  • Performance improvements for mppp::integer::nbits() on GCC and Clang (#17).

Fix#

  • Fix a build failure on older GMP versions (#25).

  • Fix a build system bug when building the benchmarks with older CMake versions (#25).

  • Various minor fixes.

0.3 (2017-06-12)#

New#

  • Implement the multiprecision rational class (#14).

  • Implement fast assignment functions to zero and plus/minus one for integer.

  • Add assignment operators from string for integer.

  • Implement the submul() primitive for integer.

  • Implement the assignment operator from mpz_t in integer, and use it in various function in order to avoid the creation of a temporary.

Changes#

  • Performance improvements for the copy/move assignment operators of integer.

Fix#

  • Various small documentation fixes.

0.2 (2017-05-09)#

New#

  • Provide a CMake config-file package as part of the install process.

  • Implement the missing in-place modulo operator with C++ integrals on the left.

  • Experimental support for C++ concepts.

  • Support the clang-cl compiler on Windows.

  • Add input stream operator.

  • Add in-place arithmetic operators with interoperable types on the left-hand side.

  • Add convenience overloads for the computation of the binomial coefficient.

  • Add convenience overloads for pow().

  • Add functions to test if an integer is equal to -1.

  • Add a static member to integer storing the static size.

Changes#

  • Split out the library in multiple files.

  • Rename the mp_integer class to integer.

  • Various improvements to the documentation.

  • Rework the library interface to use regular functions rather than inline friend functions.

  • Change the license to MPL2.

  • Remove the allocation cache.

  • Remove the custom namespace option.

Fix#

  • Fix operators example in the documentation.