-
Minor mpfr error handling fix.
-
Update fmod to perform post-condition error correction - fixes problems
with types with hidden guard digits such as cpp_dec_float, see 604.
-
Update complex_adaptor to work correctly with variable precision types,
see 595.
-
Fix potential compilation error in trunc and similar functions, see
586.
-
Allow cpp_bin_float to emulate very low bit count types such as bfloat16_t,
see 576.
-
Fix warnings as a result of using now deprecated numeric_limits members,
see 573,
574.
-
Change
boost::array
to std::array
in the tests, fixes 567.
-
Correct cpp_int::eval_convert_to to be noexcept, fixes 553.
-
Make sure that changing the global precision, also changes the current
thread precision.
-
Fix rational_adaptor construction bug, fixes 540.
-
BREAKING CHANGE: We now require C++14
as a minimum requirement. This drops support for GCC versions prior to
5 and MSVC prior to 14.1.
-
Added a new forward declaration header.
-
Update Eigen interoperability so we no longer rely on Eigen's details,
see 479.
-
Add Cmake install target.
-
Fix cpp_dec_float construction from string in standalone case for better
error handling, see 499.
-
Remove redundent definitions when in C++17 mode, see 530.
-
Fix the error handling in standalone itrunc and ltrunc.
-
Fix potentially uninitialized storage when parsing octal strings.
-
Add arm64 and s390x CI testing.
-
Add some missing expression template unpacking code for
powm
, see 506.
-
Correct thread-safe static initialization of constants for cpp_bin_float,
see 497.
-
Correct cpp_int
import_bits
when just
importing the leading few bits of the value, see 488.
-
Remove some C++03 idioms, including use of
0
rather than nullptr
.
-
Minor fixes for gcc-12 on Mingw.
-
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.
-
Rework rational_adaptor to remove dependency on Boost.Rational and improve
performance.
-
Fix issue with type_traits and clang, see #383.
-
Fixed buggy Lehmer's GCD routine, see #370.
-
Fix mpc_complex constructors so that lossy conversions are explicit,
see #363.
-
Correct miscellaneous configuration issues (Intel intrinsic usage and
Apple clang).
-
Correct some iostream operators for unsigned char types.
-
Correct mpq_rational conversions to integer types, see #342.
-
Much improved Karatsuba sqrt for cpp_int/cpp_bin_float.
-
Added C++11 compatible
to_string
free function.
-
Fixed bug in Lehmer GCD code, see #322.
-
Fixed debug_adaptor/logged_adaptor to work better with complex, rational
and interval types, see #329.
-
Big update to mixed-variable precision arithmetic code with better options
and thread safety, see docs.
-
Fixed up hashing of bools and enums when creating hash values.
-
Improved conversions to and from enum types.
-
Restricted use of Intel intrinsics to when we really are building for
Intel even though the header may be available, see #321.
-
Tidied up Lanczos approximation usage, in conjunction with Boost.Math
this improves the reliability and accuracy of many special functions.
-
Fix use of libtommath deprecated features.
-
Fixed missing sqrt overload, see #319.
-
Added Karatsuba multiplication to cpp_dec_float to bring it into line
with the other types in this library.
-
Added some minor optimizations to mpfr comparison operators.
-
BREAKING CHANGE: Massive refactoring
and code simpification makes C++11 an absolute requirement.
-
Use BOOST_TRY/CATCH in headers so code can be use din s=exception-free
environments.
-
Correct corner case in pow, fixes #277.
-
Correct exception type thrown to match docs in lsb/msb: fixes #257.
-
Allow moves and operators between related but different types (ie types
with the same allocator), fixes #278.
-
Much improved gcd and modulus operations for cpp_int.
-
Improved addition/subtraction routines for cpp_int
via Intel's intrinsics.
-
gmp_int:
add better conversion routines for
long
long
and __int128
.
-
mpfr_float:
Fix
log1p
corner case.
-
Improve accuracy of complex tan/tanh.
-
Improve accuracy of trig functions for cpp_bin_float.
-
IMPORTANT: Mark C++03 support as deprecated and due for removal in 2021.
-
Big update to cpp_int
adds faster Karatsuba and Coomba multiplication routines.
-
Fix conversion of gmp_rational
to
long double
and __float128
, fixes
#178.
-
Fix up libtommath support to function with the latest libtom releases.
-
Fix up some incompatibilities with the latest Intel C++ compiler.
-
Fix up
constexpr
arithmetic
support for forthcoming MSVC release.
-
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()
.
-
Support hexfloat io-formatting for float128.
-
Fix various bugs in variable precision interconversions.
-
Respect uppercase for '0x' prefix outputs.
-
Incorporate some unit tests from the Etherium project.
-
Fix some gcc warnings.
-
Fix various conversion issues in the traits classes, check for compatibility
with Boost.Optional.
-
Prevent instantiation of
std::numeric_limits
on any old type when checking for convertibility. See #98.
-
Update variable precision code to accound for arbitrary precision integers.
See #103.
-
Add support for XML serialization archives.
-
Fix bug in fixed precision iostream formatting in
mpf_float
and mpfr_float
. See
#113.
-
Add more overloads for special functions which are better handled natively
by MPFR.
-
Fixed bug in generic
exp
implementation which could cause invariant failure.
-
Fixed generic conversion from float to integer to avoid undefined behaviour.
See #110.
-
Big update to better support variable precision types so that the precision
of the result is always the largest of all the arguments.
-
Add support for allocators that are
final
in cpp_int.
-
Removed use of deprecated Boost.Endian in favour of Predef.
-
Add support for
std::string_view
.
-
Fixed minor bug in constant initialization. See #67.
-
Make assignment of non-finite value to
cpp_int
a runtime errors. See #58.
-
Added typedefs for
cpp_bin_float_oct
and cpp_complex_oct
.
-
Support added for complex multiprecision numbers.
-
Changed conversion to unsigned integer types to be truncating to match
standard defined behaviour.
-
Correct bug in MPFR string formatting.
-
Fix undefined behaviour in cpp_dec_float conversion from long long.
-
Add support for Eigen interoperability.
-
float128.hpp: Fix Intel on Windows build.
-
Fix type used in temporaries when expanding expression templates containing
mixed expressions.
-
Fix infinite loop in gmp_float to fixed-point string conversion.
-
Update the expression templates to issue static_asserts with better error
messages when you try and do something unsupported.
-
Fix bug in cpp_int where incrementing to zero doesn't set the sign correctly.
-
Remove erroneous use of std::move, and rely on NVRO instead.
-
Fix up support for changes to MPIR-3.0.
-
Fix various conversion errors in cpp_bin_float when the exponent type
is a
long long
,
or else we're converting to an integer that is wider than we are.
-
Fix compatibility issue with GCC-8 caused by the introduction of
std::byte
.
-
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.
-
Fix conversion from cpp_bin_float to a wider fundamental
(built-in) integer type, see #13301.
-
Improve performance heurists used in cpp_bin_float exp function.
-
Fix bug in floor/ceil and cpp_bin_float when the exponent type is wider
than an int, see #13264.
-
Disable explicit conversion operator when the target type is already
constructible from this type, see #30.
-
Fix support for changes new to MPIR-3.0, see #13124.
-
Updated expression templates to store arithmetic literals directly in
the expression template to prevent dangling references, see #19.
-
Fix various issues with huge values and overflow in the trig, pow and
exp functions, see #24.
-
Fix error handling of checked cpp_int multiply that could cause some
overflows to be missed.
-
In
cpp_bin_float
prevent
double rounding when converting to a denormalized float. See #12527.
-
Fix bug in integer sqrt for very small integers. See #12559.
-
Fix conversion to signed-zero in
cpp_bin_float
.
-
Change
cpp_bin_float
rounding code to round at arbitrary location so we can use it for conversions,
see #12527.
-
Improve performance of 128-bit bit-scan operations.
-
Fix subtraction of very small quantities in
cpp_bin_float
.
See: #12580.
-
Bring error handling into line with C99 Annex F. See #12581.
-
Fix bitwise export of trivial
cpp_int
's,
see #12627.
-
Fix
ilogb
(and code that
uses it) to consistently return the smallest value of the exponent type
when the argument is zero, see #12625.
-
Allow conversion from
float128
to cpp_bin_float
.
-
Fix bug in left shift of
cpp_int
which would result in bit-loss, see #12790.
-
Fixed bugs in bounded but variable precision
cpp_int
's
caused by over-aggressive constexpr optimization, see #12798.
-
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.
-
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
.
-
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 NaNs and Infinities, see #12112.
-
Enabled better support for Clang on Windows.
-
Fixed handling of NaNs 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.
-
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.
-
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.
-
Suppressed numerous compiler warnings.
-
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.
-
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.
-
Change floating-point to rational conversions to be implicit, see 10082.
-
Fix definition of checked_cpp_rational typedef.
-
Fix bug in assignment from string in cpp_int, see 9936.
-
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.
-
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.
-
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.
-
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 fundamental
(built-in) integer types.
-
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.