Mark C++11 support as deprecated: from
2023 we will move to requiring C++14 as a minimum standard level. That
will drop support for GCC versions prior to 5 and MSVC prior to 14.1.
Fix conflict between boost/cstdfloat.hpp
and this library.
Clean up lots of gcc and clang warnings.
Fix input streaming of composite types (complex, interval rational) where
there is a trailing delimeter in the stream and no whitespace.
Fix constexpr integer square
root where the input is 1, 2 or 3.
Add missing #include
of <memory> to float128.hpp.
Correct 2-arg constructor for class number
to prevent ambiguity in some cases.
Correct and make more consistent behaviour of divide-by-zero in gmp.hpp.
Big update to support use of this library "standalone": ie
without the rest of Boost. A copy of Boost.Config is still required,
and use of Boost.Math to provide the C99 special functions is optional.
Fix IO of floating point numbers when std::ios_base::fixed
is in effect and the precision is zero.
Fix various spurious GCC warnings in cpp_int bitwise operators.
Use float128_type typedef
throughout to suppress GCC/clang warnings about using a non-standard
extension.
Correct conversion of Intel's _Quad type to string, see #427.
Correct usage of Intel intrinsics on GCC to avoid simply checking for
the header, see #419.
Update signbit to match
std::signbit and to return the correct sign
when the result is zero, #426.
Fix over-large reductions in default sin/cos code.
Fix some mpq rational arithmetic errors: Multiplication by zero should
not proceed via gcd, and multiplication by scalar should be restricted
to integer types (not floats).
Support conversion to and from __int128
and __float128 everywhere,
not just on an add-hock basis, #237.
Avoid unnecessary copying in cpp_int's add_unsigned, #357.
Change all bit counts to use std::size_t
or std::ptrdiff_t, #362.
Bring Eigen traits classes up to date and add tests.
Fix is_byte_container
to correctly handle Eigen types, #398.
Improve cpp_int to float conversion to be insensitive to floating point
control flags, #360.
Correct interop between signed-zeros and complex number types, #396.
Big constexpr update allows
cpp_int
and float128
arithmetic to be fully constexpr
with gcc and clang 9 or later, or any compiler supporting std::is_constant_evaluated().
Breaking Change: When converting a multiprecision
integer to a narrower type, if the value is too large (or negative) to
fit in the smaller type, then the result is either the maximum (or minimum)
value of the target type. This was always the intended behaviour, but
was somewhat haphazardly enforced before. If you really do want just
the low order N bits of a value, then you will need to mask these out
prior to the case, for example: static_cast<unsigned>(~static_cast<unsigned>(0)&my_value).
Note that technically (to avoid undefined behaviour) you should do the
same thing with fundamental
(built-in) integer types too. See #13109.
Fix bug in conversion of decimal to rational types (zero needs special
handling), see #13148.
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.
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.
Depricated boost/multiprecision/random.hpp as it's no longer needed,
updated random examples to match.
Fixed a bug in cpp_int
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.
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.
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.