| Home | Libraries | People | FAQ | More

### History

##### Multiprecision-2.2.8 (Boost-1.62)

- Added support for hashing via `Boost.Hash` or `std::hash`.
- Fixed some arithmetic operations in cpp_bin_float and cpp_dec_float that should generate a NaN, see #12157.
- Prevent inadvertant instantiation of variable-precision `mpfr_float_backend` with fixed allocation.
- Fixed division over/underflow in cpp_bin_float, see #12167.
- Added support for signed-zeros throughout the library, including support for `signbit` and `copysign`, mpfr, float128, and cpp_bin_float types should now respect signed-zeros correctly.
- Fixed bug in conversion of cpp_bin_float infinities to double etc, see #12196.
- Fix add and subtract of cpp_bin_float when the exponents would overflow., see #12198.
- Improve variable-precision support in mpfr and mpf backends, allow these types to be used with Boost.Math.
- Fixed bug in subtraction of signed infinities in cpp_bin_float, see #12209.
- Fix result of sqrt(infinity) in cpp_bin_float (result should be infinity), see #12227.
- Added workaround in gmp.hpp for recent MPIR releases which are not quite source-compatible with GMP on Windows x64.
- Allow `cpp_int` code to be used with /RTCc with MSVC.
- Fix conversion of `cpp_int` to signed integer when the result is INT_MIN, see #12343.
- Update uBlas support to match latest uBlas code.
- Fix some errors present when building on big-endian machines (not all `cpp_int` constructors are available on non-little-endian machines).
- Fix fencepost error in rational to float conversion routines, see #12327.
- Fix some Oracle C++ compiler compatibility issues.
- Add modf support to complete C90 compatibility.
- Fix self assignment bug in expression template code for expressions such as `a = a * a * a`, see #12408.
- Fixed some compiler errors that occur when converting from `cpp_int` to `cpp_bin_float`.

##### Multiprecision-2.2.7 (Boost-1.61)

- Fixed bug in stream input for integer types, see #11857.
- Fixed some ambiguous conversions involving expression templates see #11922.
- Add expression template aware min/max overloads see #11149.
- Fix bug in right shifting negative small integers in cpp_int see #11999.
- Use memmove for bitshifts in cpp_int when possible see #9233.
- Use memcpy for data import into cpp_int where possible, see #9235.
- Changed `cpp_bin_float.convert_to<double>()` to a function template rather than proceding via `long double` to avoid double-rounding bug, see #12039.
- Fixed conversions from NaN's and Infinities, see #12112.
- Enabled better support for Clang on Windows.
- Fixed handling of NaN's and Infinities in basic arithmetic for cpp_dec_float and cpp_bin_float, see #12090.
- Fixed fencepost error in cpp_bin_float subtraction.
- Fixed double-rounding in conversion to float routines for cpp_bin_float, see #12039.
- Make float128 denorm aware, see #12075.
- Allow the library and tests to be used without exception handling support, see #12070.
- Fixed buggy comparison operator overloads for boost::rational.
- Added some workarounds for Oracle C++.
- Fixed some missing typecasts for cases where cpp_int's limb_type is wider than unsigned.

##### Multiprecision-2.2.6 (Boost-1.60)

- Fixed result of Miller Rabin primality test for value 2, see #11495.
- Improved initialization of cpp_int from very large strings of hex or octal digits, see #11590.
- Fixed fmod behaviour for negative divisors, see #11641.
- Fixed infinite division loop in cpp_int special case, see #11648.
- Patched missing return statement in #11762.
- Fixed mixed mode arithmetic compiler error in #11764.
- Fixed over-aggressive use of noexcept in #11826.

##### Multiprecision-2.2.5 (Boost-1.59)

- Depricated boost/multiprecision/random.hpp as it's no longer needed, updated random examples to match.
- Fixed a bug in cpp_int's right shift operator when shifting negative values - semantics now gives the same values as shifting 2's compliment integers, though not the same bit pattern.
- Fixed support for GCC-4.6.4 in C++0x mode by disabling conditional noexcept suppoprt for that compiler see #11402.
- Suppressed numerous compiler warnings.

##### Multiprecision-2.2.4 (Boost-1.58)

- Changed `frexp` to always be non-expression template generating, see: 10993.
- Improved support of cpp_dec_float on Cygwin and other platforms with missing long double support, see 10924.
- Improved noexcept support and added some more tests, see 10990.
- Various workarounds applied for Intel-15.0 and Solaris-12.4 compilers.

##### Multiprecision-2.2.3 (Boost-1.57)

- Changed rational to float conversions to exactly round to nearest, see 10085.
- Added improved generic float to rational conversions.
- Fixed rare bug in exponent function for cpp_bin_float.
- Fixed various minor documentation issues.

##### Multiprecision-2.2.2 (Boost-1.56)

- Change floating-point to rational conversions to be implicit, see 10082.
- Fix definition of checked_cpp_rational typedef.

##### Multiprecision-2.2.1

- Fix bug in assignment from string in cpp_int, see 9936.

##### Multiprecision-2.2.0

- Moved to Boost.Multiprecision specific version number - we have one breaking change in Boost-1.54 which makes this major version 2, plus two releases with new features since then.
- Added new cpp_bin_float backend for binary floating-point.
- Added MSVC-specific #include for compiler intrinsics, see 9336.
- Fixed various typos in docs, see 9432.
- Fixed gmp_rational to allow move-copy from an already copied-from object, see 9497.
- Added list of values for numeric_limits.

##### Boost-1.55

- Added support for Boost.Serialization.
- Suppressed some GCC warnings. See 8872.
- Fixed bug in pow for large integer arguments. See 8809.
- Fixed bug in pow for calculation of 0N. See 8798.
- Fixed bug in fixed precision cpp_int IO code that causes conversion to string to fail when the bit count is very small (less than CHAR_BIT). See 8745.
- Fixed bug in cpp_int that causes left shift to fail when a fixed precision type would overflow. See 8741.
- Fixed some cosmetic warnings from cpp_int. See 8748.
- Fixed calls to functions which are required to be macros in C99. See 8732.
- Fixed bug that causes construction from INT_MIN, LONG_MIN etc to fail in cpp_int. See 8711.

##### 1.54

- Breaking change renamed `rational_adapter` to `rational_adaptor`.
- Add support for MPFI.
- Add logged_adaptor.
- Add support for 128-bit floats via GCC's `float128` or Intel's `_Quad` data types.
- Add support for user-defined literals in cpp_int, improve `constexpr` support.
- Fixed bug in integer division of `cpp_int` that results in incorrect sign of `cpp_int` when both arguments are small enough to fit in a `double_limb_type`. See 8126.
- Fixed bug in subtraction of a single limb in `cpp_int` that results in incorrect value when the result should have a 0 in the last limb: 8133.
- Fixed bug in `cpp_int` where division of 0 by something doesn't get zero in the result: 8160.
- Fixed bug in some transcendental functions that caused incorrect return values when variables are reused, for example with `a = pow(a, b)`. See 8326.
- Fixed some assignment operations in the mpfr and gmp backends to be safe if the target has been moved from: 8667.
- Fixed bug in `cpp_int` that gives incorrect answer for 0%N for large N: 8670.
- Fixed set_precision in mpfr backend so it doesn't trample over an existing value: 8692.

##### 1.53

- First Release.
- Fix bug in cpp_int division.
- Fix issue #7806.

##### Post review changes

- Non-expression template operators further optimised with rvalue reference support.
- Many functions made `constexp`.
- Differentiate between explicit and implicit conversions in the number constructor.
- Removed "mp_" prefix from types.
- Allowed mixed precision arithmetic.
- Changed ExpressionTemplates parameter to class `number` to use enumerated values rather than true/false.
- Changed ExpressionTemplate parameter default value to use a traits class so that the default value depends on the backend used.
- Added support for fused-multiply-add/subtract with GMP support.
- Tweaked expression template unpacking to use fewer temporaries when the LHS also appears in the RHS.
- Refactored `cpp_int_backend` based on review comments with new template parameter structure.
- Added additional template parameter to `mpfr_float_backend` to allow stack-based allocation.
- Added section on mixed precision arithmetic, and added support for operations yielding a higher precision result than either of the arguments.
- Added overloads of integer-specific functions for built in integer types.

##### Pre-review history

- 2011-2012, John Maddock adds an expression template enabled front end to Christopher's code, and adds support for other backends.
- 2011, Christopher Kormanyos publishes the decimal floating-point code under the Boost Software Licence. The code is published as: "Algorithm 910: A Portable C++ Multiple-Precision System for Special-Function Calculations", in ACM TOMS, {VOL 37, ISSUE 4, (February 2011)} (C) ACM, 2011.
- 2002-2011, Christopher Kormanyos develops the all C++ decimal arithmetic floating-point code.