Changelog#
2.0.0 (2024-12-10)#
Changes#
Fix#
1.0.4 (2024-10-10)#
Fix#
Workaround for a clang 17 issue that could result in runtime exceptions during (de)serialisation.
1.0.3 (2024-07-21)#
Fix#
1.0.2 (2023-12-22)#
Fix#
Fix wrong version number in
CMakeLists.txt
.
1.0.1 (2023-12-13)#
Fix#
1.0.0 (2023-12-01)#
New#
mp++’s ABI is now versioned (#304).
mp++ now uses semantic versioning.
Fix#
0.27 (2022-10-21)#
New#
Changes#
Performance improvements in the single-limb addition primitives for signed integrals (#293).
Fix#
0.26 (2021-09-02)#
Fix#
real128
andcomplex128
are now correctly supported on PPC64, if__float128
is available (#286).
0.25 (2021-08-31)#
New#
Fix#
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 the Lambert W functions \(W_0\) and \(W_{-1}\) for
real
(#271).Interactive notebooks are now available in the documentation (#270).
Fix#
0.23 (2021-04-02)#
New#
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#
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#
Fix#
0.21 (2020-06-17)#
New#
Implement additional special functions for
real
(log_base_ui()
) (#256).Finish exposing the functions from
libquadmath
forreal128
(#255).Expose all the constants provided by MPFR in the
real
API (#252).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#
Fix#
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()
andset_si_2exp()
functions forreal
, 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 a move constructor with custom precision for
real
(#234).Add support for C++20’s
constinit
(#233).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 forreal128
andcomplex128
(with a couple of minor limitations).The interoperability of
real128
withlong double
has been improved: it is now supported also on Clang (since version 7) and it does not require mp++ to be configured with theMPPP_WITH_MPFR
option any more (#222).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 frommpfr_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 areal
(#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 thereal
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#
0.19 (2020-02-29)#
New#
Implement
real
primitives for exact multiplication/division by powers of 2 (#216).mp++ can now optionally use Arb to provide various additional special functions for
real
(#215).integer
andrational
can now interact withstd::complex
(#214).mp++’s multiprecision classes now support pretty-printing in the xeus-cling notebook (#213).
Implement user-defined literals for
rational
,real128
andreal
(#213).
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 theg
format specifier (#213).
Fix#
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 theMPPP_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#
0.17 (2019-09-13)#
New#
Changes#
Fix#
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 onereal
object (#180).Implement a specialised version of the
swap()
primitive forinteger
andrational
(#174).Improve the implementation of the less than/greater than operators for
integer
. Together with theswap()
improvements, this change leads to a ~9% decrease in runtime for theinteger1_sort_signed
benchmark (#174).Continue moving code from the headers into the compiled library (#170, #172).
Fix#
0.14 (2019-04-11)#
New#
The
type_name()
function is now part of the public API (#169).integer
andrational
now respect the format flags in output streams (#161).
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#
0.13 (2019-03-13)#
Changes#
Fix#
0.12 (2018-10-11)#
New#
Changes#
Initialising a
real
with an invalidreal_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-leveladd_ui()
,add_si()
,sub_ui()
andsub_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-typedmppp::integer_bitcnt_t
enum (#145).
Fix#
Fix various warnings issued by Clang 7 in the unit tests (#157).
0.11 (2018-05-22)#
New#
Changes#
Fix#
0.10 (2018-04-06)#
New#
Add a target in the build system to compile and run the benchmarks (#135).
Extend the
add_ui()
andsub_ui()
functions to work on all unsigned C++ integral types, and introduce correspondingadd_si()
andsub_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#
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#
0.8 (2018-01-26)#
New#
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#
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).Implement division without remainder (
tdiv_q()
) and exact division with positive divisor (divexact_gcd()
) forinteger
(#103).Implement the
trunc()
andinteger_p()
primitives forreal
(#102).Implement the
free_integer_caches()
function to manually free the caches used internally byinteger
(#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 forreal128
(#96).Implement the increment and decrement operators for
rational
(#95).Implement support for
__int128_t
and__uint128_t
(#90).Initial implementation of the pybind11 integration utilities (#81).
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++
tomp++
(#94).Take advantage of
std::gcd()
on C++17 (#93).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).
Fix#
0.5 (2017-11-07)#
New#
Implement move constructors and move assignment operators from
mpz_t
andmpq_t
forinteger
andrational
(#57).Implement a cache for the allocation of limbs arrays in small
integer
objects (#55).Add a CI build testing against the latest unstable GMP branch (#34).
Add assignment operators from
std::string_view
forinteger
andrational
(#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).
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
andrational
now return a reference to the return value, rather thanvoid
(#56).Performance improvements and code simplifications for
integer
division (#55).Minor improvements in the static checks for the expected layouts of
mpz_t
andmpq_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 morestd::domain_error
, it is nowstd::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
andrational
(#41).Fix the PDF build of the documentation (#39).
Fix C++ version detection on MSVC (#36).
Fix some MSVC warnings when compiling the tests in release mode (#28).
Various minor documentation fixes.
0.4 (2017-07-29)#
New#
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#
0.3 (2017-06-12)#
New#
Implement fast assignment functions to zero and plus/minus one for
integer
.Add assignment operators from string for
integer
.Implement the
submul()
primitive forinteger
.Implement the assignment operator from
mpz_t
ininteger
, 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 tointeger
.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.