Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

History
PrevUpHomeNext
Multiprecision-2.3.0 (Boost-1.63)
  • Added support for all the C99 math functions.
  • Extended generic-interconversions to handle narrowing cases as well, changed convert_to member function and hence explicit conversion operators to use the same conversion code as the explicit constructors.
  • Fix IO stream parsing error, see #12488.
  • Make default constructed floating point types all zero for consistency, see #12500.
  • Fix conversion of cpp_bin_float to float/double/long double when the exponent value would overflow an int, see #12512.
  • Fix cpp_bin_float subtractions that yield signed-zeros, see #12524.
  • Fix ceil/trunc/round applied to cpp_bin_float and yielding a signed zero, see #12525.
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
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.

PrevUpHomeNext