Revision history for Perl module Math::MPFR

4.32
  - Workaround a bug in some Win32 builds.
    See https://github.com/StrawberryPerl/Perl-Dist-Strawberry/issues/226

4.31
  - Reduce the testing done in t/LongDouble.t to simply test the correctness of
    Rmpfr_set_LD() and Rmpfr_get_LD().
  - Add log_2(),log_10(), sind(), cosd(), tand() and tangent() functions.
  - Optionally allow (via setting of $Math::MPFR::PERL_INFNAN) infs and nans to be
    stringified by nv2a() to the same as perl provides. Previously they have been
    stringified by nv2a() strictly as "Inf", "-Inf" and "Nan" - which could differ
    from perl's presentation. See "DISPLAYING INFS AND NANS" in the documentation.

4.29
  - Add new (in MPFR-4.3.0) function Rmpfr_compound and new test script t/compound.t.
  - In math_mpfr_include.h, re-specify MATH_MPFR_NV_MAX in hex, as 32-bit Windows
    perl-5.39.7 (nvtype of 'double') was apparently unable to evaluate the decimal
    form correctly.
  - Silence pointless compilation warnings generated by MPFR.xs.

4.28
 - Correct the testing for the presence of the Windows subnormal bug in t/nvtoa2.t.
 - Small tweaks to Rmpfr_cmp_IV and Rmpfr_set_IV.
 - Avoid monitoring PL_markstack_ptr in MPFR.xs.
 - In Rmpfr_deref2, replace 1st arg of '0' in mpfr_get_str() call with 'NULL'.

4.27
 - Remove stray '}' from Rmpfr_add_z
 - Simplify overloading of '++' and '--'

4.26
 - Alter t/out_str.t and t/printf.t to accommodate sisyphus' MSVC-built perls.

4.25
 - work on fixing bugs in nvtoa() for DoubleDoubles. (Use _mpfrtoa instead of _nvtoa.)
 - Fix typos in pod. Thanks Vincent Lefevre - https://github.com/sisyphus/math-mpfr/pull/6.
 - Alter the Makefile.PL (and some test scripts) to accommodate sisyphus' MSVC-built perls.

4.24
 - add nvtoa_test() to facilitate validation of results returned by nvtoa() and mpfrtoa().
 - mpfrtoa() now takes a second optional arg that specifies the minimum normal precision.
   If the precision of the Math::MPFR object is less than the specified value, then the
   the object is deemed to hold a subnormalized value.

4.23
 - Fix bug in overload_spaceship() handling of NaN. If the first arg was non-nan
   and thesecond arg was a Math::MPFR nan object, then the spaceship operator
   returned 0 instead of undef.  (Added a test for this to t/overload.t.)
 - Fix overload_dec() to handle DEAL_WITH_NANFLAG_BUG_OVERLOADED macro.
   See https://github.com/sisyphus/math-mpfr/pull/5

4.22
 - Add overloading of '<<' and '>>'. (Left shifts and right shifts don't make a lot of
   sense in floating-point environments. These overloads simply call mul_2ui or mul_2si
   or (respectively) div_2ui or div_2si, thereby altering  the value of the exponent,
   but having no effect on the mantissa.
 - Work around perl bug in https://github.com/Perl/perl5/issues/19550.
   (Affected only perl-5.35.10.)

4.21
 - Fix bug re inconsistent settings of POK and NOK flag, which manifests itself as (eg):
   http://www.cpantesters.org/cpan/report/dc17e330-900b-11ec-bfc9-d1f1448276d4
   It's a bug that rarely bites, and applies mainly (but not only) to perl-5.18.x and
   earlier.

4.19
 - Fix https://github.com/sisyphus/math-decimal64/pull/1 (also aplies to Math::MPFR)
   Thanks to @hiratara
 - Deal with deprecations of mpfr_root() and mpfr_grandom(). These 2 functions
   will now croak() if Math::MPFR has been built against mpfr-4.0.0 or later.
 - Replace four instances of mpz_cmp_ui(z, 0) with less expensive mpz_sgn(z)
 - Fix doubletoa() handling of negative zero. (Was hanging.)
 - Remove references to _MSC_VER
 - Replace sv_2mortal(newSVpv()) with more efficient newSVpvn_flags() where
   applicable. This is done via the MORTALIZED_PV() macro in math_mpfr_include.h

4.18
 - Allow anytoa() to (optionally) take just one (Math::MPFR object) arg, instead of
   the two args originally mandated.
 - Simplify Makefile.PL.
 - Replace XS defines NV_IS_FLOAT128 and NV_IS_LONG_DOUBLE with
   USE_QUADMATH and USE_LONG_DOUBLE (which are already defined by perl headers).
 - Replace XS defines NV_IS_DOUBLE and NV_IS_53_BIT with the condition NVSIZE == 8
   (which is already defined in the perl headers).
 - Add Rmpfr_set_IV.
 - Utilize Rmpfr_cmp_IV and Rmpfr_cmp_NV in the overloaded comparison subs.
 - Remove the *_UV functions and adapt the corresponding *_IV functions to handle the case
   that SvUOK() is true. (This is how it should always have been.)
 - Add Rmpfr_init_set_IV, Rmpfr_init_set_NV and Rmpfr_init_set_float128.
 - Add Rmpfr_cmp_float128.
 - Rmpfr_cmp_IV, Rmpfr_set_IV, Rmpfr_init_set_IV, Rmpfr_cmp_NV, Rmpfr_set_NV
   and Rmpfr_init_set_NV accept only scalars that are IOK or (respectively) NOK as their
   2nd argument.
 - Add POK_flag(), IOK_flag(), NOK_flag (@EXPORT_OK only)

4.17
 - In Rmpfr_set_default_prec(), Rmpfr_set_prec() and Rmpfr_set_prec_raw(), check
   that the argument is not less than 2 if mpfr version is less than 4.0.0.
   (This change was actually applied to Rmpfr_set_default_prec in Math-MPFR-4.16.)
 - Remove all occurrences of "scalar reverse" in demos\doubledouble.p and
   t\subnormal_doubles.t.
 - Add q_add_fr, q_sub_fr, q_mul_fr, q_div_fr and fr_cmp_q_rounded functions.
 - Add Rmpfr_cmp_IV, Rmpfr_cmp_UV, Rmpfr_cmp_sj and Rmpfr_cmp_uj (though the MPFR
   library currently contains neither mpfr_cmp_sj nor mpfr_cmp_uj).
 - Fix Rmpfr_get_str_ndigits and Rmpfr_get_str_ndigits_alt so that they don't change
   the inexflag from unset to set. (This was fixed for mpfr_get_str_ndigits in
   mpfr versions > 4.1.0.)
 - Add new function mpfrtoa.
 - Fix typo in Rmpfr_get_str_ndigits code:
   https://github.com/sisyphus/math-mpfr/commit/1f47b34b4d6b289bef9a40994f95ff57da3c6952#commitcomment-50313325
   Thanks @trizen.
 - Add new functions Rmpfr_acosu, Rmpfr_acospi, Rmpfr_asinu, Rmpfr_asinpi,
   Rmpfr_atanu, Rmpfr_atanpi, Rmpfr_atan2u, Rmpfr_atan2pi, Rmpfr_powr, Rmpfr_pown,
   Rmpfr_pow_uj, Rmpfr_pow_sj, Rmpfr_log2p1, Rmpfr_log10p1, Rmpfr_compound_si,
   Rmpfr_exp2m1 and Rmpfr_exp10m1.
 - Add Rmpfr_pow_IV and Rmpfr_pow_UV
 - Alter decimalize() such that, if a second argument is provided, the function returns
   the projected number of significant digits. This does not break backward compatibility.
   (See the POD for elaboration.)
 - Add anytoa() function.
 - Use POSIX in demos/doubledouble.p to fix a (rarely encountered) bug.
 - Refactor IV/UV/NV/PV handling inside overload subs.

4.16
 - Workaround mpfr library assertion failure in decimalize() could occur when
   precision is 1 && mpfr library version is less than 4.0.2.

4.15
 - Make some changes in test files relating to bareword filehandles and indirect
   object syntax.
 - Enhance the Makefile.PL's capability of detecting that mpfr/gmp libraries are
   not going to be found when needed.
 - Add decimalize() and check_exact_decimal().
 - For mpfr-4.2.0 and later only: add Rmpfr_sinu, Rmpfr_cosu, Rmpfr_tanu,
   Rmpfr_sinpi, Rmpfr_cospi, Rmpfr_tanpi.
 - Add Rmpfr_fmod_ui - new in mpfr-4.2.0, but also implemented here in Math::MPFR
   when built against earlier versions of the mpfr library.
 - Move code out of MPFR.xs and into (newly created) grisu3.c.


4.14
 - Add numtoa() and atonum().
 - #include <inttypes.h> at beginning of grisu3.h to address:
   https://www.cpantesters.org/cpan/report/0d8a8dfd-6bf4-1014-a7c0-8323ad4a5811
 - Fix https://www.cpantesters.org/cpan/report/3622b742-4202-11ea-8c53-8f701f24ea8f
   by amending Makefile.PL
 - Add some debug statements throughout nvtoa() in MPFR.xs - relies on NVTOA_DEBUG=1
   being provided as a Makefile.PL command line argument .
 - Correct test 5 of t/numtoa.t for DoubleDouble nvtype.
 - Add wrapping of mpfr_total_order_p (previously missed) which is new in 4.1.0.
 - Add wrapping of mpfr_cmpabs_ui (previously missed) which is new in 4.1.0.
 - In atonv() pre-processing replace " & " with " && " as the former (which was a
   mistake, anyway) is not guaranteed to yield the correct result.

4.13
 - Fix bug in t/rndna.t and t/rndna2.t (exposed by:
   http://www.cpantesters.org/cpan/report/90030d18-8f4f-11e9-a14c-c69b77725194 )
 - Change stringification of 'inf' & 'nan' from '@Inf@' & '@NaN@'to 'Inf' & 'NaN,
   except for Rmpfr_deref2(), which will still retain the actual inf or nan
   string returned by mpfr - ie '@Inf@' & '@NaN@'.
 - Remove definition of MAXIMUM_ALLOWABLE_BASE as it is always 62 now that we
   no longer support versions of MPFR older than 3.0.0.
 - Accommodate extended range of allowable bases for mpfr_out_str with MPFR-4.1.0
   and later.
 - Cleanup of some code called by nvtoa().
 - Fix bug in _get_exp_and_bits() for DoubleDoubles. Integer values > 2 ** 105
   were being misrepresented by nvtoa().
 - Improve the private functions _d_bytes, _ld_bytes, _dd_bytes, _f128_bytes
 - Replace the private functions _d_bytes_fr, _ld_bytes_fr, _dd_bytes_fr,
   _f128_bytes_fr with the single function _bytes_fr.
 - Remove mpfr_min_inter_base() and mpfr_max_orig_base() as both are of no value.

4.12
 - Fix bug in nvtoa() that had values with negative single digit significands &&
   exponents less than -4 appearing as "-x.e-EXP" instead of "-xe-EXP"
 - Add doubletoa() function. (Uses grisu3 algorithm.)

4.11
 - Optimizations to nvtoa()

4.09
 - Hopefully fix bugs in t/nvtoa.t reported by (eg):
   http://www.cpantesters.org/cpan/report/844b433e-2463-11e9-b3bd-8a932d9bfb17
   and
   http://www.cpantesters.org/cpan/report/608800de-245b-11e9-b3bd-8a932d9bfb17
 - Add t/nvtoa2.t for additional testing of nvtoa function\
 - Fix nvtoa() for Double-Double long doubles. (Previous to fix, strings being
   returned by nvtoa() for this nvtype were not always the minimum required
   length.)

4.08
 - In nvtoa(), Work around mpfr_get_str() bug that was not fixed until
   mpfr-4.0.2

4.07
 - Fix bug in t/atonv.t. (Thanks Dana Jacobsen)
 - Add nvtoa()
 - Alter the way that atonv() is called.
 - Emit deprecation warnings in Rmpfr_grandom and Rmpfr_root if mpfr
   version >= 4.0

4.06
 - Fix bug (https://bugs.debian.org/918673) in t/subnormal_doubles.t

4.05
 - Add atodouble() function
 - Fix atonv to correctly handle subnormal double-doubles
 - Add Rmpfr_dot() and Rmpfr_get_str_ndigits. (New in 4.1.0.)
 - Correct Rmpfr_sum to return signed int, not unsigned value.
 - Add Rmpfr_set_DECIMAL128 and Rmpfr_get_DECIMAL128. (New in 4.1.0.)

4.04
 - Support only mpfr-3.0.0 and later
 - Check that first arg given to atonv() is of correct precision.
 - In MPFR.xs - replace NULL FILE* arguments with stdin/stdout in
   mpfr_out_str/mpfr_inp_str. (Thanks Vincent Lefevre.)

4.03
 - Values less than DENORM_MIN were automatically denormalized to 0 ... but should have been
   denormalized to DENORM_MIN when greater than DENORM_MIN/2.
 - Attend to various other issues involving handling of subnormals.
 - Remove Math::Float128 and Math::Decimal64 from PREREQ_PM.
 - Add atonv().

4.02
 - mpfr_subnormalize() in _d_bytes(), _ld_bytes() and _f128_bytes(). (These 3 functions are
   used by Math::NV.)
4.01
 - Automatically build Math::MPFR with __float128 support if mpfr_buildopt_float128_p() returns
   true && 'F128=0' has not been provided as an argument to Makefile.PL.
 - Automatically build Math::MPFR with _Decimal64 support if mpfr_buildopt_decimal_p() returns
   true && 'D64=0' has not been provided as an argument to Makefile.PL.
 - Make sure that _Float128 is a known type when MPFR_WANT_FLOAT128 is defined
   (because it appears in mpfr.h in mpfr-4.1.0).
 - Add '-lquadmath' to LIBS in Makefile.PL (as some Cygwin builds apparently want it).
 - Prototype those subs specified in 'use subs'.
 - Alter Prec.xs, Random.xs and V.xs to accommodate perl.h's defining (as of 5.28.7) of
   INTMAX_C and UINTMAX_C.
   (Replaced '#include <mpfr.h>' with '#include "../math_mpfr_include.h"

4.0
 - Add Rmpfr_free_cache2 and Rmpfr_free_pool.
 - Add MPFR_RNDF rounding mode
 - Fix bug in Rmpfr_cmp_NV and add the tests (test 8 in t/nan_cmp.t) that would have
   detected it. The bug affected only quadmath builds of perl, and only then if
   CAN_PASS_FLOAT128 was not defined.
 - Improve performance of Rmpfr_set_NV and Rmpfr_cmp_NV for quadmath builds of perl
   where CAN_PASS_FLOAT128 is not defined.
 - Add Rmpfr_rootn_ui (mpfr-4.0.0 and later only).
 - Add tests to Rmpfr_get_q.t to check that Rmpfr_get_q canonicalizes the rational.
   (Trizen pointed out that, with 4.0.0-RC1, mpfr_get_q did NOT canonicalize.)

3.36
 - Add Rmpfr_rec_root, provided by Vincent Lefevre:
   (See https://sympa.inria.fr/sympa/arc/mpfr/2016-12/msg00032.html)
   Re-arranged as an XSub, and some special case handling added.
 - Add Rmpfr_beta (mpfr-4.0.0 and later only).
 - Rename t/new_in_3.2.0.t to t/new_in_4.0.0.t
 - Add Rmpfr_q_div and Rmpfr_z_div and use them in overload_div to replace the existing
   code (that was rounding twice).
 - Add overloading of comparisons with mpq_t and mpz_t
 - use mpfr library of version of mpfr_get_q (in preference to homegrown rendition) if
   MPFR_VERSION_MAJOR >= 4.
 - Workaround mpfr_get_float128() failure to round subnormals reliably. (Workaround was removed
   soon after - when the mpfr_get_float128 problem was fixed in mpfr source.)

3.35
 - In Makefile.PL define -DNV_IS_DOUBLE if appropriate (for use in math_mpfr_include.h as part of
   fix for __float128 handling in nvtype=double DEBUGGING builds of perl).
 - Tighten the conditions under which _win32_infnanstring() is called. (Now called only if OS is
   MS Windows && $] < 5.022.)
 - Add Rmpfr_round_nearest_away()
 - Move POD from MPFR.pm to MPFR.pod

3.34
 - eval{} Rmpfr_z_sub in t/flags.t (test 23).
 - Remove -DUSE_LONG_DOUBLE (from Makefile.PL).
 - Add _is_infnanstring to MPFR.xs (for use with overloaded string operations).
 - Add Rmpfr_cmp_NV.

3.33
 - Document Rmpfr_grandom as deprecated as of mpfr-3.2.0.
 - Add the following functions which will be available when mpfr-4.0.0 (or higher) is installed:
    Rmpfr_fmodquo, Rmpfr_fpif_export, Rmpfr_fpif_import, Rmpfr_flags_clear, Rmpfr_flags_set,
    Rmpfr_flags_test, Rmpfr_flags_save, Rmpfr_flags_restore, Rmpfr_rint_roundeven, Rmpfr_roundeven,
    Rmpfr_nrandom, Rmpfr_erandom, Rmpfr_fmma, Rmpfr_fmms, Rmpfr_log_ui and Rmpfr_gamma_inc
 - Add support for IEEE 754 long doubles to bytes() function, and rewrite bytes() documentation.
 - Remove library functions (gmp_v and Rmpfr_get_version) from Math::MPFR::V, as we don't want any
    library functions in that module.
 - Handle the setting of the NaN flag with mpfr_add/sub_ui/si functions for versions of mpfr (3.1.4
    and earlier only). The bug should be fixed in later versions of mpfr.
 - Replace SvNV/SvUV/SvIV with SvNVX/SvUVX/SvIVX where appropriate. (In typemap, too.)
 - Add Rmpfr_buildopt_float128_p and Rmpfr_buildopt_sharedcache_p
 - t/_1basic.t now ouptuts the values of the various (available) buildopt functions.

3.32
 - Corrections to fixes to t/DoubleDouble2.t and t/bytes.t. (Same problem existed with
   some addtional architectures, too.)
   Version 3.31 will be marked for removal to backpan.

3.31
 - Fixes to t/DoubleDouble2.t and t/bytes.t (which were failing on machines that had the
   "double-double" type, but only when perl's nvtype was double).

3.30
 - Correction to the negative zero bug workaround in Rmpfr_fits_uintmax_p (which
   had previously been returning false for (-0, MPFR_RNDD).
 - Remove Rmpfr_set_str_binary and Rmpfr_print_binary. (Obsolete in mpfr library.)
 - Fix t/LongDouble.t for change to Math::LongDouble output precision (ticket #111813)

3.29
 - Add _d_bytes XSub.
 - Simplify demos/doubledouble.p
 - Allow _d_bytes, _ld_bytes, and _f128_bytes to determine the base of
   the given argument.
 - Add _d_bytes_fr, _dd_bytes_fr, _ld_bytes_fr and _f128_bytes_fr
 - Add bytes() function.
 - Amend typedef of __float128 alignment (Windows only)
 - Add Rmpfr_get_q (even though MPFR does not implement mpfr_get_q)
 - define mp_bitcnt_t to unsigned long int for pre-gmp-5.0.0

3.28
 - Fix mistake in test 5 in t/bytes.t.

3.27
 - Replace mpfr_set_default_prec() calls in _ld_bytes and _f128_bytes with
   appropriate mpfr_init2() calls.

3.26
 - Re-phrase misleading message in t/use64bitint.t. (Message implied
   that absence of 'long long int' implied that ivsize was 32-bit.)
 - Add Rmpfr_print_rnd_mode - previously missed.
 - Rewrite rounding value check as CHECK_ROUNDING_VALUE macro
 - Add _ld_bytes and _f128_bytes XSub (for use of Math::NV)

3.25
 - Catch the error of giving too large a "size" argument to mpfr_sum.t and add a
   check for this to t/sum.t
 - Amend the #definition of LNGAMMA_BUG to cater for the fact that mpfr-3.1.3
   did *not* contain a fix for the lngamma bug.

3.24
 - Rename the Rgmp_randstate* functions to Rmpfr_randstate*, and move them into
   their own (Math::MPFR::Random) module.
 - Standardise numeric treatment of strings that contain non-numeric characters.
   Add Math::MPFR::NNW and Math::MPFR::nnumflag() & friends.
 - Correction to t/native_float128.t
 - Use NVtoD64 to assign NV to Math::Decimal64 object in D64_LD.t - as
   Math::Decimal64::new() is no longer capable of making that assignment.

3.23
 - Rename Rmpfr_get_decimal64, Rmpfr_set_decimal64, Rmpfr_get_float128 & Rmpfr_set_float128
       to Rmpfr_get_DECIMAL64, Rmpfr_set_DECIMAL64, Rmpfr_get_FLOAT128 & Rmpfr_set_FLOAT128
 - Provide Rmpfr_get_float128 & Rmpfr_set_float128 which pass the __float128 value as an NV
 - Ensure that when casting an IV/NV to an mpfr_t, the mpfr_t has enough precision to
   accurately represent the value.
 - No longer define USE_64_BIT_INT if ivtype is 'long'. (Thus had to tweak some test files.)
 - Rename USE_64_BIT_INT #define to MATH_MPFR_NEED_LONG_LONG_INT
 - Define IVSIZE_BITS (in XS file) if MATH_MPFR_NEED_LONG_LONG_INT is defined - for use in
   initialization of mpfr_t in some of the overload functions.
 - Add FLOAT128_DIG

3.22
 - Add some metadata to Makefile.PL.
 - Fix the LNGAMMA_BUG workaround in mpfr.c, and change test 69 in t/test1.t to
   test for correct behaviour of mpfr_lngamma().
 - Add Rmpfr_set_NV - and use it in new().
 - Remove Rmpfr_sprintf_ret and Rmpfr_snprintf_ret.
 - No longer include inttypes.h on the basis of USE_LONG_DOUBLE being defined.
   (Was harmless ... but didn't make much sense.)
 - Define PERL_NO_GET_CONTEXT.
 - Tweaks to Math::MPFR::gmp_v() and Math::MPFR::V::gmp_v()

3.21
 - Fix errors in t/decimal64_conv.t

3.19
 - Rewrite _wrap_mpfr_sprintf(), _wrap_mpfr_snprintf(), _wrap_mpfr_sprintf_rnd()
   and _wrap_mpfr_snprintf_rnd(). Their first arg has been changed from a char*
   to an SV*, and they take an additional argument that specifies the size of
   the buffer (1st arg) into which the resultant string is written.
 - Change Rmpfr_sprintf_ret() and Rmpfr_snprintf_ret(). The first arg (buffer)
   has been removed, and an additional argument that specifies the size of the
   buffer into which the resultant string is written needs to be provided.
 - Fix spelling error in doc. Thanks Salvatore Bonaccorso. (Ticket #89710)
 - Add Rmpfr_set_float128 and Rmpfr_get_float128. These provide access to the
   '__float128' data type (for compilers that support the type) via the
   Math::Float128 module.
 - Simplify querying of Decimal64 support in the mpfr library being used
 - Add MPFR_DBL_DIG, MPFR_LDBL_DIG, mpfr_max_orig_len, mpfr_min_inter_prec,
    mpfr_min_inter_base and mpfr_max_orig_base.
 - Have lngamma(-0) be +Inf instead of NaN. (Bug in mpfr 3.1.2 and earlier.)

3.18
 - Depending upon the rounding mode values, the mpfr library may incorrectly return
   false for mpfr_fits_u*_p(x) for -1.0 < x < 0.0 or for -0.5 < x <0.0. (This
   should be fixed in versions of mpfr later than 3.1.2.)
   Have the Rmpfr_fits_u*_p() functions return  correct result irrespective of the
   version of mpfr being used - and have the Math:MPFR test suite test for this.
 - The 'P' type specifier (precision) wasn't working correctly on big-endian machines
   when mp_prec_t size is less than IV size. Add a prec_cast function to fix this.
 - Add an _mp_sizes function (not exportable) that returns the sizes of mpfr_exp_t,
   mpfr_prec_t and mpfr_rnd_t.
 - Add Math::MPFR::_ivsize (not exportable).
 - Add Math::MPFR::_nvsize (not exportable).
 - Correct the Rmpfr_*printf functions so that they croak with an appropriate error
   message if a rounding arg is supplied but the last arg is not a Math::MPFR object.

3.17
 - Apply patch to MPFR.xs from Daniel Kahn Gillmor that eliminates
   "null argument where non-null required" warnings.
 - Fix typo in croak() message in MPFR.xs (also caught by Daniel).

3.16
 - Add Rmpfr_set_LD() and Rmpfr_get_LD(). These provide access to the
   'long double' data type (for perls whose nvtype is double) via the
   Math::LongDouble module.

3.15
 - Add _Decimal64-mpfr_t conversion

3.14
 - Fix pod. (The ' ' symbol was causing pod.t failures.) Also took care of
   some other typos/oversights in the documentation.

3.13
 - Add Math::MPFR::V
 - Add pre/post increment/decrement operations (overload_add and overload_inc)
 - Allow (cross-class) overloading of basic math operations with Math::GMPz,
   Math::GMPq and Math::GMPf objects.

3.12
 - Remove 'not' from overloads. Apparently achieved nothing anyway, and 5.16
   warns that it's invalid.

3.11
 - Add t/tls.t and t/tls_flags.t (to test the thread local storage capabilities,
   where applicable).
3.10
 - Add the following functions (conditional upon building against
   mpfr-3.1.0 or later):
   Rmpfr_set_divby0, Rmpfr_clear_divby0, Rmpfr_divby0_p, Rmpfr_buildopt_tune_case,
   Rmpfr_frexp, Rmpfr_grandom, Rmpfr_z_sub, Rmpfr_buildopt_gmpinternals_p.
 - Add Rgmp_randinit_mt.
 - In Rmpfr_get_d_2exp and Rmpfr_get_ld_2exp, replace sv_setuv (was incorrect)
   with sv_setiv.
 - Replace New/Newz with Newx/Newxz on perls that support the new symbols (Newx/Newxz).
3.02
 - Rmpfr_min_prec now available only when building against mpfr-3.0.0 or later. (The
   mpfr_min_prec function was not available until 3.0.0.)
3.01
 - Remove the (outdated) link to http://www.loria.fr/projets/mpfr/mpfr-current/mpfr.html
   in the "DESCRIPTION" section of the documentation. (Thanks Hugh Myers.)
 - In the documentation, elaborate on the way that Rmpfr_get-version() and
   MPFR_VERSION & friends determine their values. (Thanks Vincent Lefevre.)
 - Correct Rmpfr_min_prec(), and remove Rmpfr_max_prec().
3.0
 - Corresponding to release of mpfr-3.0.0. (Still needs only 2.4.0,
   but 3.0.0 needed to take advantage of all features.)
 - Add MPFR_* rounding modes (including MPFR_RNDA for builds against
   mpfr-3.0.0)
 - Add Rmpfr_buildopt_tls_p() and Rmpfr_buildopt_decimal_p() (mpfr-3.0.0 only)
 - Add the following functions, specific to mpfr-3.0.0: Rmpfr_regular_p,
   Rmpfr_set_zero, Rmpfr_digamma, Rmpfr_ai, Rmpfr_set_flt, Rmpfr_get_flt,
   Rmpfr_urandom and Rmpfr_set_z_2exp.
 - Add Rmpfr_get_z_2exp (mpfr_get_z_exp is now renamed to mpfr_get_z_2exp).
 - Add gmp_randstate_t* to the Math::MPFR typemap.
 - Change handling of NaNs (wrt overloaded comparison operators).
   The overloaded spaceship operator now returns undef when NaNs are involved
   (more in keeping with perl behaviour), and the erange flag is now
   set whenever a comparison involving NaNs is performed (more in
   keeping with the mpfr library behaviour). This is irrespective
   of whether the NaN is a Math::MPFR object or a perl NV.
   The other comparison operators now also set the erange flag when
   a NaN is involved (for compatibility with the mpfr library).
 - Add Rmpfr_snprintf and Rmpfr_snprintf_ret.
 - Add Rmpfr_inits, Rmpfr_inits2 and Rmpfr_clears functions.
 - The overload_copy sub now preserves the precision of the copied
   object (instead of taking on default precision).
2.03
 - Needs version 2.4.0 (or later) of the mpfr library.
 - Add the following functions (new in mpfr-2.4.0):
   Rmpfr_add_d, Rmpfr_sub_d, Rmpfr_d_sub Rmpfr_mul_d, Rmpfr_div_d,
   Rmpfr_d_div, Rmpfr_rec_sqrt, Rmpfr_sinh_cosh, Rmpfr_li2, Rmpfr_zeta_ui,
   Rmpfr_modf, Rmpfr_fmod, Rmpfr_printf, Rmpfr_fprintf, Rmpfr_sprintf,
   Rmpfr_sprintf_ret
 - Fix overload_sqrt() so that it returns a NaN for negative operands
   instead of croaking, as was originally the case.
 - Remove (the need for) INLINE.h
 - Add RMPFR_PREC_MIN and RMPFR_PREC_MAX.
 - Add Rmpfr_sum, Rmpfr_get_d_2exp, Rmpfr_get_ld_2exp, Rmpfr_dim,
   Rmpfr_fits_ushort_p, Rmpfr_fits_sshort_p, Rmpfr_fits_uint_p,
   Rmpfr_fits_sint_p, Rmpfr_fits_uintmax_p, Rmpfr_fits_intmax_p,
   Rmpfr_fits_IV_p, Rmpfr_fits_UV_p Rmpfr_add_si Rmpfr_get_UV
   Rmpfr_get_IV Rmpfr_get_NV

2.02
 - Add TRmpfr_out_str/TRmpfr_inp_str (which wraps mpfr_out_str/mpfr_inp_str
   more Truly than Rmpfr_out_str/Rmpfr_inp_str).
 - Rmpfr_out_str now has the option to take a prefix string.
 - Remove the tests in the Makefile.PL that test for the presence of
   a suitable compiler, GMP library and MPFR library.

2.01
 - Needs version 2.3.0 (or later) of the mpfr library.
 - Add Rmpfr_j0, Rmpfr_j1, Rmpfr_jn, Rmpfr_y0, Rmpfr_y1,
   Rmpfr_yn, Rmpfr_lgamma, Rmpfr_remainder, Rmpfr_remquo,
   Rmpfr_fms, Rmpfr_signbit, Rmpfr_setsign, and
   Rmpfr_copysign(all new in 2.3.0). Add also Rmpfr_get_patches
   (documented for the first time in 2.3.0).
 - Add Rmpfr_init_set_ld.
 - Add Rmpfr_deref2 to the list of exportable functions, and
   document its usage in the POD section.
 - Rmpfr_deref2 now has the mpfr library allocate (and free) memory
   for the mantissa.
 - Add Rmpfr_hypot (previously missed).
 - Rmpfr_out_str now takes an optional fifth argument (a string that
   will be appended to the mpfr_out_str output). And the output
   buffer is now flushed each time Rmpfr_out_str is called.
 - Rewrite new() - to make it a little tidier.
 - Add Rmpfr_set_uj and Rmpfr_set_uj_2exp to @EXPORT_TAGS. (Previously
   overlooked.)
 - Add Rmpfr_integer_string() - mainly to provide a simple means of
   getting 'sj' and 'uj' values on a 64-bit perl where the MPFR
   library does not support mpfr_get_uj and mpfr_get_sj functions -
   which happens with libraries built with Microsoft Compilers.
 - Fix the rendering of Inf and NaN values. (Now matches the
   mpfr_out_str output for Inf and NaN.)
 - Change the format returned by Rmpfr_get_str. (Hence the output of
   Rmpfr_get_string and Math::MPFR::overload_string have changed
   from earlier versions of Math::MPFR.)
 - Fix some of the overloaded subroutines as regards their handling
   of NaN.

1.11
 - Fix bug in Rmpfr_get_str. (Sometimes printed out one less digit
   than it ought.)
 - Remove mpfr.info from distribution. Refer instead to:
   http://www.mpfr.org/mpfr-current/mpfr.html
 - Have 'make clean' remove comp.exe, check.exe and version.exe.
 - Add support for perls built with -Duselongdouble
   (Rmpfr_*_ld functions, except Rmpfr_init_set_ld() which is not
    available in unpatched 2.2.1).
 - Add Rmpfr_cmp_d, Rmpfr_exp10 and the Rmpfr_*_uj functions (which
   had somehow been earlier overlooked).
 - Fix handling of unsigned long longs on perls built with -Duse64bitint.
 - Allow assignment of mpz, mpq, and mpf types using new()

1.10
 - No longer assign Exporter and DynaLoader to @Math::MPFR::ISA.
 - Add support for perls built with -Duse64bitint. This involved the
   inclusion of the Rmpfr_set_sj, Rmpfr_set_sj_2exp and Rmpfr_get_sj
   functions - as well as some alterations to the overload subs.

1.09
 - Changes to the format returned by Rmpfr_get_str and overload_string.
 - Add a new() method/function for creation of mpfr_t objects.
 - Fix Rmpfr_out_str() and Rmpfr_inp_str() - were segfaulting with
   MS compilers.


1.08
 - As of this version, MPFR-2.2.x is required.
 - Add new functions made available with the release of MPFR-2.2.0:
   Rmpfr_set_overflow Rmpfr_set_underflow Rmpfr_set_inexflag
   Rmpfr_set_erangeflag Rmpfr_set_nanflag Rmpfr_erfc Rmpfr_atan2
   Rmpfr_pow_z Rmpfr_subnormalize Rmpfr_const_catalan Rmpfr_sec
   Rmpfr_csc Rmpfr_cot Rmpfr_root Rmpfr_eint Rmpfr_get_f Rmpfr_sech
   Rmpfr_csch Rmpfr_coth Rmpfr_lngamma RMPFR_VERSION_NUM
 - Add constants (actually implemented as subroutines):
   MPFR_VERSION MPFR_VERSION_MAJOR MPFR_VERSION_MINOR
   MPFR_VERSION_PATCHLEVEL MPFR_VERSION_STRING
 - Remove Rmpfr_add_one_ulp and Rmpfr_sub_one_ulp (no longer supported
   by the MPFR library).
 - Redefine '__gmpfr_default_rounding_mode' in MPFR.xs as it's no
   longer in mpfr.h. (Been moved to mpfr-impl.h which I don't want to
   include.)
 - Rewrite of overload_atan2 - now that mpfr_atan2 is available in
   MPFR-2.2.0. (Also fixes a bug in overload_atan2).

1.07
 - New() was allocating more memory than necessary in many instances.
   Rewrote the XS code (in those instances) to fix that.
 - Add Rmpfr_strtofr


1.06
 - Modify the Makefile.PL checks added in version 1.05 to cater for
   those building with a Microsoft compiler
 - Alter Rmpfr_set_str and Rmpfr_init_set_str so that a base of 0
   can be specified - in which case the base is determined from the
   input string
 - Added the following functions:
   Rmpfr_get_ui Rmpfr_get_si Rmpfr_fits_ulong_p Rmpfr_fits_slong_p
 - Fix a bug in 'Rmpfr_deref2()' - used by 'overload_print()'
 - Provide more complete testing with 4 new test files - namely
   test4.t, trig.t, set_str.t and exceptions.t.


1.05
 - Add some checks to Makefile.PL to ensure that anyone trying to
   build this module has an up-to-date MPFR library. This is mainly
   an attempt to stop cpan testers who don't have an up-to-date MPFR
   from testing the module and subsequently reporting "FAIL" or "NA".


1.04
 - Math::MPFR-1.04 to 1.07 require MPFR-2.1.x.
 - Added the following functions, not available with versions earlier
   than 2.1.0 :
   Rmpfr_set_ui_2exp Rmpfr_set_si_2exp Rmpfr_get_z Rmpfr_si_sub
   Rmpfr_sub_si Rmpfr_mul_si Rmpfr_si_div Rmpfr_div_si Rmpfr_sqr
   Rmpfr_cmp_z Rmpfr_cmp_q Rmpfr_cmp_f Rmpfr_zero_p Rmpfr_free_cache
   Rmpfr_get_version Rmpfr_get_emin_min Rmpfr_get_emin_max
   Rmpfr_get_emax_min Rmpfr_get_emax_max Rmpfr_clear_erangeflag
   Rmpfr_erangeflag_p Rmpfr_rint_round Rmpfr_rint_trunc
   Rmpfr_rint_ceil Rmpfr_rint_floor

1.03
 - Replace 'SvROK()' with 'sv_isobject()' in the overload functions.
 - Make 'get_refcnt()' and 'get_package_name()' non-exportable.

1.02
 - Make overloading work with strings.
 - Add 'Rmpfr_dump'.
 - Add 'Math::MPFR::gmp_v' (not exportable).

1.01
 - Eradicate segfault that was occurring when 'overload_add',
   'overload_sub', 'overload_mul', 'overload_div' and 'overload_pow'
   croaked due to invalid argument(s).

0.07
 - Replace 'Rmpfr_round_prec' with 'Rmpfr_prec_round' in keeping
   with changes to the MPFR library.
 - Remove 'Rmpfr_random' (deprecated).
 - Add 'Rmpfr_cbrt', 'Rmpfr_cmpabs', ', 'Rmpfr_greater_p',
   'Rmpfr_greaterequal_p', 'Rmpfr_less_p', 'Rmpfr_lessequal_p',
   'Rmpfr_lessgreater_p', 'Rmpfr_equal_p', 'Rmpfr_unordered_p',
   'Rmpfr_inp_str', 'Rmpfr_frac', 'Rmpfr_integer_p',
   'Rmpfr_nexttoward', 'Rmpfr_nextabove', 'Rmpfr_next_below',
   'Rmpfr_min', 'Rmpfr_max', 'Rmpfr_get_exp', 'Rmpfr_set_exp'
   'Rgmp_randinit_default', 'Rgmp_randinit_lc_2exp',
   'Rgmp_randinit_lc_2exp_size', 'Rgmp_randseed', 'Rgmp_randseed_ui',
   'Rgmp_randclear'.
 - Change module name from 'Math::GnuMPfr' to 'Math::MPFR'.

0.06
 - Add 'Rmpfr_gamma()', 'Rmpfr_zeta()', and 'Rmpfr_erf()'.
 - Add overloading for 'atan2', 'cos', 'sin', 'log', 'exp', and 'int'.

0.05
 - Requires mpfr-2.0.3
 - Add 'Rmpfr_out_str()'
 - Add 'Rmpfr_get_default_rounding_mode()'
 - Rename 'Rmpfr_set_str_raw()' to 'Rmpfr_set_str_binary()'
   in keeping with changes to the MPFR library.
 - Alter 'Rmpfr_check_range()' in keeping with change to
   'mpfr_check_range()' in the MPFR library.
 - Introduce operator overloading.