0.2624 2022-06-27

 * Improve stringification. Better handling of upgrading/downgrading in
   stringification methods. Add new method bfstr() for compatibility with
   Math::BigInt og Math::BigFloat. Add new author test files to confirm.

0.2623 2022-05-16

 * Fix rounding issues.

0.2622 2022-04-13

 * Add more cases for downgrading, and more tests.

0.2621 2022-04-11

 * Improve downgrading and upgrading.

0.2620 2021-10-03

 * Skip tests that don't work on older Perls. Also skip tests that compare
   floating point numbers.

0.2619 2021-10-01

 * Correct the handling of Inf and NaN in numify().

 * Improve constant overloading. When numeric constants are overloaded
   (with the ":constant" option) in Math::BigRat, every numeric constant
   is converted to an object regardless of how it is written.

0.2618 2021-09-28

 * Add new method binv() for the inverse.

 * Add new method dparts(), which returns the integer part and fraction part
   of a number. For example, 9/4 is split into 2 and 1/4. This method is
   equivalent to the Math::BigInt and Math::BigFloat methods with the same

 * Improve blog(). Handle cases $x->blog($b) where the numerator of $x
   and/or $b is 1 as special.

 * Sync tests with Math-BigInt.

0.2617 2021-07-12

 * Fix CPAN RT #132712.

 * Reorganize existing test files and add more test files.

0.2616 2021-07-12

 * Improve the handling of the backend libraries.

0.2615 2021-07-10

 * Fix bnok(). It didn't work at all.

 * Fix minor POD error (CPAN RT #125148).

 * Better Makefile.PL.

 * Update the BUGS and SUPPORT sections in the POD.

 * Update README.

0.2614 2018-04-17

 * Fix bug in bpow() (CPAN RT #124002). Add tests to verify fix.

 * Fix bug in is_one(). The code $x->is_one("-") returned false when $x was -1
   and true when $x was 1. Add tests to verify fix.

 * Improve bsqrt() so it returns the exact result when possible.

 * Fix documentation errors.

 * The tests now require Test::More version 0.88 or newer.

 * Add test files t/release-portability.t, t/release-test-version.t, and

 * Update TODO file.

 * Prefer as_int() to as_number(), since what is does is return an integer.

 * Expand tabs to spaces and clean up whitepace.

 * Convert test file t/02pod.t to t/release-pod.t and t/03podcov.t to

 * Reformat CHANGES to match the specification in CPAN::Changes::Spec and

 * Better testing of NaN and Inf trapping.

 * Use $class->config("xyz") rather than $class->config()->{xyz}.

 * Add more tests of is_inf() to catch bugs like the one that was in is_one().
   Specifically, make sure we test is_inf() with and without a sign argument.

 * Use $LIB for the math backend library class.

 * Reformat test data in t/bigratpm.inc.

 * Import carp() and croak() from Carp.

 * Make tests pass when '.' is not in @INC (CPAN RT #120892).

 * Remove t/bigroot.t and t/biglog.t which didn't test Math::BigRat at all.

0.2613 2017-06-16 pjacklam

 * Fix problem with second operand being changed in multiplication (CPAN RT

0.2612 2017-03-01 pjacklam

 * Improve the logic in blog() to determine how to call objectify(). The old,
   simpler logic didn't handle an undefined base correctly.

 * Fix bexp() which was objectifying one argument too many.

 * Don't quote the version number of a use'd module.

0.2611 2016-12-13 pjacklam

 * Add more logic to Makefile.PL regarding INSTALLDIRS (CPAN RT #119199
   and #119225).

0.2610 2016-12-11 pjacklam

 * Fix Makefile.PL so that this module installs over the core version.

0.2609 2016-12-03 pjacklam

 * Use ExtUtils::MakeMaker rather than Module::Install in Makefile.PL

 * Remove INSTALL file. The information is in the README file.

 * Inform in the BUGS file that the file may not be up to date.

 * Inform in the TODO file that the file may not be up to date.

 * Update AUTHOR information in Math/BigRat.pm.

 * Remove author information in LICENSE file.

 * Update README file.

 * Minor POD reformatting in lib/Math/BigRat.pm.

0.260805 2016-11-15 pjacklam

 * Standardize on using $LIB for the variable holding the class of the backend

 * Improve bmul() by doing _gcd() twice on smaller numbers rather than once on
   larger numbers.

0.260804 2016-04-25 pjacklam

 * Revert the change to the blsft() and brsft() methods, which truncated the
   input (and output) to integers. However, now convert the base to an object
   only when the base isn't an object already. Also return NaN if any of the
   three operands is a NaN.

 * Overloaded 'int' should not modify it's argument.

 * The first output argument from objectify() is the class name, so use the
   variable name $class, not $self.

 * In Makefile.PL, change "build_requires 'Test::More' => 0.47" to
   "test_requires 'Test::More' => 0.47". Test::More is only needed for testing,
   not for building.

0.260803 2016-04-22 pjacklam

 * Add methods bnan(), binf(), bzero(), and bone(). The old code was based on
   an undocumented behaviour where the superclass made assumptions about the

 * Fix tests where ok() was used incorrectly, like ok($got, $expected).

 * Remove "require Carp", since we have "use Carp" in the heading.

 * Completly rewrite new(). It was buggy and hard to maintain.

 * Add more descriptions to tests.

 * Rename blog-mbr.t to author-blog-mbr.t.

 * Simplify bsqrt() and blog(). Don't assume we know the internals of
   Math::BigFloat objects.

 * Change bmodpow() and bmodinv() so they handle all input arguments.
   Non-integers are truncated to integers.

 * Change internals of bnok().

 * as_float() and numify() should not make assumptions about the internals of
   Math::BigFloat objects.

 * Wrap long lines.

 * Fix typo in POD ("conversation" -> "conversion").

 * Make internal functions _new_from_float() and _new_from_int() redundant and
   remove them. They make assumtions about the internals of Math::BigFloat
   objects and Math::BigInt objects, respectively.

 * Make internal function _as_float() redundant and remove it.

 * Add methods band(), bior(), bxor(), and bnot().

0.260802 2015-12-28 pjacklam

 * Fix blog(). The handling of inf and NaN was broken. It also returned
   incorrect result in several cases, especially when both the operand and the
   base were both integers. In some cases, the correct result was returned,
   but the operand was not set to this value. An undefined base (indicating
   that Euler's number e should be used) was not handled correctly.

 * Update author information in Makefile.PL.

 * Add tests for log() in t/bigratpm.inc as well as templates for the other
   overloaded functions exp, sin, cos, atan2, int, abs, and sqrt.

 * Update number of tests in t/bigratpm.t.

 * Add test file t/blog-mbr.t.

 * Reformat tests and add comments/descriptions to them.

 * Accept both "Inf" and "Infinity", ignoring letter case, and letting the
   sign be optional. This matches the current behaviour of core Perl.

 * Internal clean-up of the copy() method.

 * Remove all occurences of "require Carp", since we "use Carp".

 * Reformat some of the code to make the code more readable (for me, at least)
   and more in accordance with the guidelines in the "perlstyle" man page.

 * Correct some errors in the comments in the code.

 * Use "our ..." rather than "use vars ...".

 * Rename variables so they have more descriptive names and are more in
   accordance with the Math-BigInt distribution.

 * Remove unused variables.

 * Use "use lib 't'" rather than "unshift @INC, 't'".

 * Include "use strict" and "use warnings" in all files.

0.260801 2015-09-14 pjacklam

 * Added support for bdiv() in list context. Added corresponding tests.

 * Changed bmod() so the result corresponds to Perl's % operator, as well as
   the second output argument of bdiv() in list contest. Modified tests
   correspondingly. Now the behaviour of bmod() is consistent between
   Math::BigInt, Math::BigFloat, and Math::BigRat.

 * Clearer POD for the bdiv() and bmod() methods.

 * Display more information about loaded modules.

0.2608 2015-08-28 pjacklam

  * Wrap long lines.

  * Increment version number. (Sync with blead.)

0.2607 2015-08-28 pjacklam

  * Add changes from v0.2602 to v0.2606.

  * Increment version number. (Sync with blead.)

  * Update bundled version of Module::Install from v1.08 to v1.16.

0.2606 2014-04-03 pjacklam

  * Add ref to https://rt.cpan.org/Public/Dist/Display.html?Name=Math-BigRat

  * Misc. updates.

  * Update bundled version of Module::Install from v1.00 to v1.08.

  * Fix spelling errors.

  * Avoid negative zero.

  * Various POD corrections.

  * Add refereces to CPAN testers, CPAN RT etc.

  * Test to avoid negative zero.

0.2602 2011-02-13 pjacklam (1000 tests)

 * Fix spelling errors (Peter John Acklam).

 * Include latest versions test scripts shared with the Math::BigInt
   distribution (Peter John Acklam).

 * Add 00sig.t for testing the SIGNATURE file, 01load.t for explicitly
   testing module loading and showing version information useful for
   debugging (Peter John Acklam).

 * Replace pod.t and pod_cov.t by 02pod.t as a generic script for testing
   POD syntax, and 03podcov.t as a more generic script for testing POD
   coverage (Peter John Acklam).

0.26 2010-09-15 rafl 975 tests

 * Remove obsolete test boilerplate that was once needed to test within the
   perl core (Nicholas Clark).

 * Convert tests from Test to Test::More (Nicholas Clark).

0.25 2010-09-13 rafl 975 tests

 * Re-upload 0.24 with a fixed SIGNATURE

0.24 2009-09-09 Leto 975 tests

 * Fix [perl RT #49565: SIGNATURES]

 * Fix [perl RT #44827: Documentation incorrect]

0.23 2009-09-08 Leto 975 tests

 * Fix [perl RT #67244] hex "e" misunderstood by Math::BigRat

0.22 2008-04-06 Tels 973 tests

 * fix bug ##34584: hang when calling exp (Thanx Steve Wills!)
   + broot() normalizes result
   + bexp() works for values like '1/2' (sqrt), '1/4' (broot), etc.
   + broot() works for values like '2/3'

 * added as_float() - return the BigRat as rounded Math::BigFloat

0.21 2007-09-16 Tels 956 tests

 * require Math::BigInt v1.88

 * fix as_number() with Nan/inf (thanx zefram!)

 * add POD stub for objectify() to make pod_cov.t happy

0.20 2007-06-30 Tels 956 tests

 * require Math::BigInt v1.87

 * add bnok() and bexp()

0.19 2007-04-17 Tels 934 tests

 * fix the check in bnorm() as it breaks under Pari

 * require Math::BigInt v1.83

 * exponent() makes a copy, so we can skip copy()

 * fix the licence back to be "perl"

0.18 2007-04-09 Tels 934 tests

 * install_as_core() to work around Module::Install bug

 * remove PREREQ_FATAL since the toolchain is broken

 * require Math::BigInt v1.82

0.17 2007-02-03 Tels 934 tests

 * include the spelling fixes for bleadperl

 * more typo and POD fixes

 * include from_bin(), from_hex() and from_oct()

 * add tests for octal and from_hex()/from_bin()

 * bundle and use Module::Install

0.16 2007-01-28 Tels 926 tests

 * require Math::BigInt 1.78

 * add support for 'try' and 'only'

 * add pod tests

0.15 2005-04-02 Tels 924 tests

 * no need to require Exporter

 * rem no longer used 'with' from import

 * add a few comments here and there

 * fix import()'s handling of the lib argument (it didn't work)

 * fix segfault under trap_nan in _bnan()

 * remove unused IMPORT logic (require BigRat seems to work without it)

0.14 2005-01-01 Tels 924 tests

 * require Math::BigInt v1.74

 * streamline copy()

 * inline is_zero() into bneg(), making it about 50% faster

 * more tests for bneg()

 * register callback to get notified of lib changes from Math::BigInt

 * much simpler import() logic

 * new() accepts input like new(Math::BigInt->new(123),Math::BigInt->new(7));

 * doc: as_hex(), as_bin(), add note about as_pos(), as_neg() and as_int()

 * numify() now deals with large N and D by using BigFloat (Thanx Hugo!)

 * numify() lost the sign on negative integer values (Thanx Zefram!)

0.13 2004-10-22 Tels 892 tests

 * fixed digit(): it never worked due to dropping the second parameter

 * fixed a bug in brsft() when passing arguments (2 vs. 3 in objectify)

 * use Math::BigInt->config('lib') for parts instead of Math::BigInt
   + This makes everything go about 2..4 times faster :)
   + And it saves memory (408 vs. 807 bytes for a simple number)

 * _as_float() is about 6 times as fast for integers (e.g. 123/1 vs. 2/3)

 * denominator() returns 1 for +inf and -inf (+inf/1, -inf/1) instead of +-inf

 * when using "lib => GMP;", certain things never worked:
   + sqrt() was not possible
   + new("2.3") did not work
   + new("12.3e-2") did not work

0.12 2004-02-15 Tels 863 tests

 * fixed bug in is_one() (segfault under v.5.6.x)

 * implemented length() and digit() for integers

 * beefed up testing class Test.pm to make more float tests work (185 of them
   still fail)

 * added AUTOLOAD to load fxxx() stubs (for BigFloat compatibility tests)

 * $IMPORT for require and AUTOLOAD

 * added as_bin(), as_hex() which work for integers, NaN, and +-inf

 * implement broot() and blog() for non-integer numbers

 * fixed blsft()/brsft() to work with undefined or scalar base

 * added a copy() method to be independend from BigInt's copy()

 * adopted to new internal format of Math::BigFloat v1.44 (from BigInt v1.70)

0.11 2004-01-07 Tels 859 tests

 * require Exporter vs. use it

 * more tests for bacmp(), bnorm()

 * fixed bug in bacmp() with ($x,[+-]inf) (Thanx to William T. Morgan!)

 * fixed bug in new("+-inf/X") (e.g. "-inf/5" resulted in "inf", not "-inf")

 * delete _a and _p on _d and _n, reduces size of a BigRat object from
   887 bytes to 767 bytes on a x86 32 bit system. This also makes some
   operations slightly (single-digit percentages) faster.

 * bacmp() is about 20% faster

 * bcmp() is:
   * about 4 times faster if sign($x) != sign($y)
   * about 20% faster if sign($x) == sign($y)

 * added broot(), bmodinv(), bmodpow(), blog() so that their equivalent of:
    # perl -MMath::BigRat=:constant -le '$a = 2.0 ** 32; print $a->broot(4)'
     Can't call method "copy" on an undefined value at BigFloat.pm line 1442.
   works now for integer arguments and inf/NaN, at least.

 * doc: rationales => rational numbers

0.10 2003-07-06 Tels 751 tests (released on 2003-08-13)

 * one more die => croak conversion

 * fix inf/NAN handling in new()

 * fix bsqrt(3/4) and similiar cases failing with some obscure error, this was
   a simple typo ({_n} vs. {_m}). Added tests for that.

 * numify() is now much faster (38400 vs 720 tries/s on 2Ghz AMD XP2400+)

 * support for :trap_nan/:trap_inf

 * doc for config()

 * implement trapping of creation of NaN/inf/-inf

 * as_number() forgot to disable $upgrade, resulting in BigRat again when
   run under -Mbigrat -- thanx to Ian Phillips.

 * fixed a bug in new() that failed with

 * fixed new() to work better under
    use Math::BigRat with => 'Math::BigInt::Lite';

 * add a test for "require Math::BigRat; $x = Math::BigRat->new(123); $x++;"
   (it already works since we "use Math::BigFloat;"

 * require Carp; Carp::croak () instead of simple die()

 * implemented bmod() - Thanx Ian Phillips.

 * bsqrt() now returns a big rationale - Ian again

 * tests for bmod(), as_number(), bsqrt() and some NaN cases

 * bfloor()/bceil() broke under use bigrat; due to missing upgrade-disabling

0.09 2002-08-14 Tels

 * documentation was lacking a proper description, METHODS missing etc

 * setting accuracy/precision in BigFloat/BigInt interfered with BigRat

 * new testcases for the A/P fix in t/big_ap.t

 * speedup: apply the same trick to avoid calls to objectify() like in BigInt

 * speedup: badd()/bsub() did needless gcd(), copy() and bdiv()

 * speedup: workaround for 'x.y.z'-valid bug in BigFloat no longer neccessary

0.08 2002-08-13 Tels

 * bsstr() returned positive result for negative numbers - Oups!

 * added a numify() so that $array[Math::BigRat->new('17/8')] works

0.07 2002-06-04 Tels

 * bfac() now works for integers (x/1), and returns $x->bnan() instead of
   Math::BigRat->bnan() (modify in-place)

 * bpow() faster for x/1 ** y/1 and x/z ** y/1 cases (some of the speedups are
   two-digit factors :) - also some bugfixes

 * bpow() no longer litters stdout

 * removed some (all of them commented out) debug prints to reduce footprint

 * shortened testfile bigrat.t

 * some hardcoded 'Math::BigInt' replaced with '$MBI'

 * bceil() would leave -0 in some cases

 * (more) tests (all in all 628) for:

 * parts('-3/1') would return (3,1) instead of (-3,1)

 * parts() did not work for NaN, +inf, -inf

 * numerator()/denominator() did not work for inf,-inf,NaN

 * new('1.2.2') was valid (resulted in 12/10 due to bug in BigFloat)

 * new() for some cases left internal state not as 0/0 for NaN, inf, -inf etc

 * binc()/bdec() were missing entirely

0.06 2002-05-23 Tels

 * added import() routine

 * support for 'use Math::BigRat with => Foo::Bar;'

 * support for 'use Math::BigRat lib => Foo::Bar;'

 * bnorm() makes sure that both parts (n and d) are of class $MBI

 * more documentation

 * bugfix in new() with two arguments

 * INSTALLDIRS => perl

0.05 2002-03-26 Tels

 * various bugfixes
   (local undef upgrade, Bigint handling, handling of string arguments)

 * fixed up isa()

 * removed some old and wrong comments

0.04 2002-03-19 Tels

 * 5/7+3/7 hung under "Math::BigInt upgrade =>" (forgot local upgrade = undef)

 * better testsuite

 * added & fixed isa()

 * new() can handle Lite

0.04 2002-03-19 Tels

 * bcmp/bacmp/as_number/bfloor/bceil work now

 * bsqrt() is better now

 * t/Math/BigInt/Test.pm is fixed now and makes a much better figure
   (formerly almost all of the 1500 tests in bigfltrt.inc would fail. Now we
   fail "only" 868 of 2014 tests, and most of them since the test dies early.

 * added stubs for round, bfround, bround and certain others

0.03 2002-02-25 Tels (early morning hours)

 * fixed bstr()/bsstr() for negative output and inf/NaN

 * _d/_n were accidentily swapped

 * added numerator()/denominator()/parts() and doc and tests

 * fixed is_one()

 * '1/ ' is as invalid as '1/'

 * badd/bsub/bmul: inf/NaN handling was wrong due to copy&paste (ha!) from bdiv

 * more extensive testsuite (about 400 tests)

 * bnorm() normalizes 0/x to 0/1

 * badd()/bsub()/bmul()/bdiv() handle +/-/NaN/inf/-inf sign properly

 * t/Math/BigRat/Test.pm: fixed bstr() and bsstr() to handle inf/NaN and signs

0.02 2002-02-24 Tels (late night)

 * ripped out doc and replaced by something closer to the truth

 * subclass of BigFloat w/ overload section

 * uses d/n instead of x/y for denominator and nominator

 * tests from Math::BigFloat with a test subclass warping the input/output

 * added preliminary bmul(), badd(), bdiv() methods

 * added binf(), bone(), bzero() and bnan()

 * added _bzero(), _bone(), _bnan() and _binf() (bnan() etc inherited)

 * dummy blog(), bceil(), floor(), bfac() and bpow() functions

 * parse input as '0.1', '0.1/0.1', '1/10', '10' or '10/0.1'

 * input as Math::BigInts or Math::BigFloats is okay

0.01 2001-11-21 Tels

 * first release