PJACKLAM / Math-BigInt-1.9993 / CHANGES

Complete version history of the rewrite project
===============================================

If you just want to see which things are new and different from the original
Math::* in the Perl core, see HISTORY.

The file NEW lists only the changes for the latest version.

##############################################################################
Math::BigInt::Calc:


2001-07-09 v0.06 Tels
 * first release

2001-07-15 v0.07 Tels
 * applied Philip Newtons spelling and doc patch(s)
 * accidentally had the old, slow mul() code in. Oups.
 * fixed also a bug in that new code
 * also the speedup in mul() occurs with $x having lots of zeros, not $y.
 * first argument is always classname, so removed checks and shift
 * shift in base ten by _lsft() and _rsft()

2001-07-15 v0.08 Tels
 * fixed bug in mul() shortcut

2001-07-20 v0.09 Tels
 * don't use warnings for older Perls

2001-08-24 v0.10 Tels
 * no longer export anything, ignore import calls

2001-09-07 v0.11 Tels
 * automatically USE_MUL or USE_DIV

2001-10-03 v0.12 Tels
 * _div: 99999 => $BASE-1 ($MAX_VAL), that made some div's fail if $BASE != 5

2001-10-23 v0.13 Tels
 * better detection of BASELEN by matching against expected pattern

2001-11-04 v0.14 Tels
 * added _mod() for faster $x % $y

2001-11-11 v0.15 Tels
 * added _dec() and _inc() for much faster $x++ and $x--

2001-11-19 v0.16 Tels
 * fixed comments a bit
 * finished _mod() when $y < $BASE and $BASE % $y != 0 and $BASE % $y != 1
 * streamlined _mod() loops a bit
 * added _pow() for faster bpow()
 * small fix to make 5.005_03 happy ($x = shift @prod vs $x = shift @prod || 0)

2001-12-06 v0.17 Tels
 * added _sqrt() for more speed
 * _sqrt() shortcut for small (< $BASE) numbers for better performance
 * shortcut in _mul for small numbers (< $BASE_LEN2)
 * added _and, _or, and _xor and let them use more than 16 bits
 * find out how many bits _and, _or and _xor can safely use (cap at 23)
 * div() might leave empty array, so __strip_zeros fixes these
 * streamlined _acmp()
 * cap of 5 for BASE for UTS and UNICOS/Cray
 * better test to find out what BASE should be (use +0.0 to force floats)

2001-12-20 v0.18 Tels
 * added _as_hex() and _as_bin() with 16 bit chunks
 * from_bin() now uses oct() and 16 bits per iteration
 * removed needless return statements

2001-12-23 v0.19 Tels
 * first working version of using two different bases: one for mul/div, the
   other for all other ops, including converting via _to_large()/_to_small()

2002-01-07 v0.20 Tels
 * better detection of higher-int-only base (but disabled due to failures)
 * streamlined converting
 * turned dual-basis off by default (now 7-7 on 32 bit and 9-9 on most 64 it)
 * _str() uses int() on first part to avoid '0000' instead of '0'

2002-02-10 v0.22 Tels
 * _sqrt1() => _sqrt() (oups)
 * much better guess for _sqrt() resulting in faster sqrt
 * added _fac()

2002-02-24 v0.23 Tels
 * from_bin() repack input and use from_hex(): twice as fast

2002-02-27 v0.24 Tels
 * streamlined _mod() shortcuts
 * _div() has shortcut if $y is very small

2002-03-03 v0.25 Tels
 * started _square() (not done yet)

2002-03-17 v0.26 Tels
 * a fix in _rsft() that left empty array instead of (0)
 * a fix in _sub(): early out made -1 + 100000000001 == 0 (if length($y) > 8)

2002-05-30 v0.28 Tels
 * added _modinv(), _modpow() (not yet implemented)

2002-06-09 v0.29 Tels
 * filled in _modpow()

2002-06-10 v0.30 Tels
 * undef mul/div in case Calc.pm get's loaded twice
 * fix in _as_hex() and _as_bin() for older Perls
 * speedups in _pow() and _modpow()

2002-08-13 v0.31 Tels
 * _acmp() no longer calls _len() => tad faster
 * some cleanup of old code, added some more comments

2002-08-21 v0.32 Tels
 * fixed bug in _rsft() that did not set result to 0 in some cases
 * _modinv() now works, thanx to the all-positive algorithm
 * much more tests in bigintc.t (taken over from FastCalc)

2002-09-09 v0.33 Tels
 * _fac() keep $n as scalar if possible
 * test for when to USE_MUL or not was inverted
 * _mul() is about 6 times faster if $y is small and $x is big

2002-09-27 v0.34 Tels
 * fixed bug in mul_use_div() shortcut that used * $RBASE instead of / $MBASE
 * $caught & 1 != 0 vs ($caught & 1) != 0 (changed to $caught != 2)
 * $i %= $MBASE does not work on ARM (v5.003), so make it $i -= $car * $MBASE
 * removed unused LEN_CONVERT code (smaller memory footprint)

2003-07-06 v0.35 Tels
 * fixed a bug in _floor() which caused ffloor(0.1234567) to fail.
   (Thanx to cpan@ali.as for finding it and sending a fix/testcases)
 * make _as_hex() and _as_bin() handle 0, and make them faster for very
   short numbers (less than BASE_LEN digits)

2003-08-31 v0.36 Tels
 * fixed a bug in div_use_div() that computed remainder wrong if X == X and
   X was very large
 * fixed a off-by-one error discovered with mbi_rand.t in _div_use_XXX()
   (one internal in $x overflowed, thus the wrong computation)

2003-12-11 v0.37 Tels
 * implemented _log_int() with a simple and fast "iterative" method
 * fixed bug in _root(): int() rounds sometimes wrong, so use sprintf()
 * _as_bin() and _as_hex() are faster (for small values) due to inlining
   is_zero()
 * _acmp() is about 26% faster for very small numbers or numbers that
   differ in length, and slightly faster for bigger numbers. This helps
   both bacmp() and bcmp()
 * _fac() did:
   + not modify $x in place for small arguments
   + something strange for large arguments
   + not handle 0..2 optimal (code now simplified)
 * _as_bin() used %b, which was not known to v5.5.3 - workaround that
 * implemented _log_int(), which is simple and very fast
 * implemented the missing pieces for _root() (which is quite fast)

2003-12-30 v0.38 Tels
 * guess _log_int() result based on $base if $base < $BASE
 * _pow() handle cases 0 ** Y, 1 ** Y, X ** 0 and X ** 1
 * _new(): shortcut for short numbers, makes MBI->new() about 20% faster
 * _root() was wrong for numbers like 9 (0b1001) because they start with
   the pattern /^0b1(0+)/ (missing '$' in regexp) and after fixing this
   it was dead slow for large numbers.

2004-01-25 v0.39 Tels (not released)
 * _zeros(0) is 0, not 1

2004-03-12 v0.40 Tels
 * added: api_version(), _ten(), _two(), _is_ten(), _is_two(), _gcd()
 * streamlined: is_foo() methods
 * _new() takes scalar, not scalar ref
 * _str() returns scalar, not scalar ref
 * _and(): bugfix for [perl #26559]: negative arguments that are shorter
    than the positive one caused an error due to cutting instead padding
 * _ior(): forgot to calculate the proper sing of result, making, for
    instance, 30 | -4 go wrong

2004-04-05 v0.41a Tels (not released)
 * removed the unused integer-detection code and combined the two BEGIN blocks

2004-07-30 v0.41 Tels
 * from_hex() convert 28 bits (vs 16) at a time, faster (helps from_bin(), too)
 * potential bug in padding with '0' in _digit()
 * fixed undef warnings in fceil(0.222222222222...) (thanx kenny!)

2004-10-10 v0.42 Tels
 * fix critical bug in _from_hex() with parts that were to big for one part
   (introduced in v1.72, thanx Mark Lakata for finding it!)

2005-01-01 v0.44 Tels
 * small cleanups
 * shortcut for numbers of same length in _div, where X > Y

2005-03-20 v0.45 Tels
 * fix the div() shortcut for short numbers to actually work

2005-03-29 v0.46 Tels
 * avoid crash in FastCalc by making $BASE and $BASE_LEN use vars qw//;

2005-05-17 v0.47 Tels
 * remove shortcut in div(), it wasn't working properly

2007-01-27 v0.48 Tels
 * support for octal numbers

2007-04-16 v0.49 Tels
 * API version 2.0 support: add _1ex(), _alen()
 * make _fac() about twice as fast

2007-05-05 v0.50 Tels
 * speed up _mul() by "use integer;"
 * we do not need to remove zeros after mul()
 * implement an alternative algorithm for _fac()

2007-05-30 v0.51 Tels
 * use CORE::hex() instead of hex() to help bigint/bignum/bigrat
 * use 9 digit parts on 64bit integer or long double systems

2007-09-16 v0.52 Tels
 * fix 64bit ints on Perl v5.8.0 (thanx zefram)

##############################################################################
Math::BigInt::CalcEmu:


2003-12-26 v0.01 Tels
 * first version, taken over all the code from BigInt

2003-12-30 v0.02 Tels
 * the code in Calc::_root() uses now sprintf(), but the one in Emu was not

2004-01-13 v0.03 Tels
 * $VERSION was overriding the $VERSION from MBI (Thanx Gisle Aas!)

2004-03-12 v0.04 Tels
 * removed unnec. emulation routines (all except _signed_foo)

##############################################################################
Math::BigInt::Scalar:


2001-07-09 v0.04 Tels
 * first release

2001-07-15 v0.05 Tels
 * first argument is always classname, so removed checks and shift

2001-07-20 v0.06 Tels
 * don't use warnings for older Perls

2001-08-24 v0.10 Tels
 * no longer export anything, ignore import calls

2002-01-07 v0.11 Tels
 * fixed version
 * added DESCRIPTION section to stop pod2man complaining
 * added _dec, _inc

##############################################################################
Math::BigFloat:


2001-02-18 1.00: started work

2001-02-22 1.01: new() and bstr() work now (sort of)

2001-02-24 1.02: add()/sub() should work now

2001-03-06 1.03: layed more foundations (mul() etc)

2001-03-27 1.04: bmul/bdiv/cmp work now, better _norm()

2001-03-31 1.05: fixed bstr() and bsstr()
                 added AUTOLOAD for fxxx() to work as well as bxxx()
                 enhanced and fixed testsuite for mul/cmp/add/new

2001-04-05 1.06: bstr() returns NaN for NaN's
                 renamed _norm to bnorm, added it to AUTOLOAD for compatibility
                 fixed bug Math::BigFloat->new(Math::BigInt->new(3));
                 bug mul/div when second arg was BigInt
                 bdiv() works now with precision
                 precision()
                 doc about mixing different objects in overloaded math

2001-04-07 1.07: bug in bstr() for 0.xxx style numbers, as well as for "-xxx"
                 babs(), bneg(), bint() work now
                 empty stubs for bsqrt(), bround() and bmod()
                 exponent(), mantissa(), parts() work now as expected

2001-04-18 1.08: exponent(), mantissa() and parts() now return BigInt's
                 bnorm: 0Ey => 0E1 (was wrongly 0E0)
                 fixed is_zero()
                 added bround() and bfround() (only truncate mode)
                 fixed bug in bstr() for 1.203E-2 style numbers (Thanx Tom!)

2001-04-23 1.09: length() in list context return length of mantissa & exponent
                 bug in bstr() for '0.x' style strings
                 added bsqrt()
                 workaround for Perl v5.6.0 overload-bool bug (via MBI)
                 fixed rounding

2001-05-07 1.10: Tom's round fixes (minus one nit)
                 new: .xxx, -.xxx, +.xxx etc are valid inputs, while
                 '.', 'x x x' and 'Exxx' are now invalid
                 finally got rid of C&P of overload section and clone()

2001-05-09 1.11: bug bcmp() (1e-08 was < 0, aka fractions were broken)

2001-05-11 1.12 Tels
 * taken over testsuite from John P.
 * added tests for compare with fraction
 * fixed fcmp/fround/ffround
 * added accuracy/precision/fallback/round_mode
 * bsstr('NaN') returned 'NaNeNaN'

2001-06-09 1.13 Tels:
 * adjusted fdiv() so that it now works proper with old testcases
 * (except a few nits, see testsuite and ACCURACY)
 * fdiv() in listmode (uses non-working fmod())
 * fixed/test A/P after each op
 * $x->accuracy(), $x->precision() actually round $x to the value A/P
 * fixed fpow(), added tests for it
 * hexadecimal integer input (0xdeadbeef)
 * is_one() for -1 was wrongly true, tests for is_one()

2001-06-13 1.14 Tels:
 * accuracy/precision rounding after fdiv() was missing
 * binary integer input (0b01110 etc)
 * A/P rounding after fdiv() was missing
 * '-0x0' would wrongly leave '-0'
 * as_number() was wrong for negative numbers and had no tests
 * added is_even(), is_odd(), _set(), the inherited ones were broken
 * fixed is_zero() for NaN
 * $x->bpow($y) for negative $y was unfinished
 * added is_inf(), binf() and some support for +-inf in new(), bsstr() etc
 * added tests for is_odd(), is_even(), _set() and is_zero(), is_inf(), bsstr()

2001-06-15 v1.15 Tels
 * added bfloor(), bceil()

2001-07-09 v1.16 Tels
 * is_positive(), is_negative()
 * various pod fixes (overlong =item, spelling erorrs etc)
 * removed internal _set() and the tests for it
 * infinity support for fcmp(), fpow()
 * nailed the bug in fdiv() that caused fsqrt() to fail. fsqr() works now, too.
 * more tests

2001-07-15 v1.17 Tels
 * applied Philip Newtons spelling and doc patch(s)
 * added bone()
 * tests for bnan() and bone()

2001-08-02 v1.19 Tels
 * 123/+-inf => 0, test for that and -1,0 / NaN => NaN
 * +123 / 0 => +inf, -123 / 0 => -inf (was missing in MBF)
 * fixed +-inf handling in bacmp/bcmp/bsub/badd/bdiv and tests for that
 * padd bstr() output of numbers with set A or P
 * remove bfloat() (Math::BigInt->bfloat() did not work, anyway, see bint())

2001-08-03 v1.20 Tels
 * streamlined bcmp
 * drop leading '+' for inf

2001-09-03 v1.21 Tels
 * serious bug in bcmp() caused 1.5 to be greater than 2. Yikes!
 * bcmp() did not only return -1,0,1 and undef but other values, too
 * new('inf') produced NaN (was expecting '+inf')
 * exponent(), mantissa() & parts() failed or returned scalars for inf,-inf,NaN
 * include finf in AUTOLOAD list

2001-10-03 v1.22 Tels
 * Quite a lot of rounding fixes
 * $x->bnorm() is 4 times faster if $x == 0
 * $x->bround($n) is 43 times faster if $n > $x->{_a} (no-op)
 * added as_number()

2001-10-05 v1.23 Tels
 * fixed facmp() (was broken the same way as fcmp())
 * more rounding fixes from John P.

2001-11-11 v1.24 Tels
 * bacmp() fix for +-inf
 * streamlined new()
 * faster finc()/fdec()

2001-11-18 v1.25 Tels
 * streamlining fixes in new() were missing
 * further streamlining in new() for 12345e1234 cases (fraction part empty)
 * added $rnd_mode support for compatibility
 * replaced the 'laber schwad blah blah' pod section by a pointer to MBI

2001-12-06 v1.26 Tels
 * fneg() failed (now hand up to MBI)
 * frsft() and flsft() were no aliases to brsft() and blsft()
 * fone() was no alias for bone()
 * blsft() and brsft() were missing altogether
 * streamlined: fpow() and fmul()
 * removed the EXPORT_OK
 * fqsrt() uses now BigInt::bsqrt() as guess: greatly improved performance
 * make fsqrt() subclass proof by using $self instead of Math::BigFloat
 * bzero(), bone(): take additional A and P and store 'em
 * bnan(), binf(): clear A and P

2002-01-06 v1.27 Tels
 * overload for log() and flog()/blog()
 * bzero()/bone() handling of A & P was broken
 * bround()/bfround() handling of zeros forgot to set A & P
 * fdiv: fixed a bug in round to A with given round_mode (always used global)
 * fsqrt(): would hang/fail if either $x's or global A or P were set
 * fsqrt() didn't modify $x sometimes, but returned a new reference
 * fsqrt(): calc 4 more digits for rounding, not 1 (endless looping otherwise)
 * fmod() now actually works

2002-02-10 v1.27 Tels (forgot to increase version)
 * ffac()
 * various: disable Math::BigInt::upgrade to avoid deep recursion

2002-02-16 v1.28 Tels
 * fixed use Math::BigFloat ':constant';
 * fixed flog() function to calc right result, honour rounding-globals

2002-02-24 v1.29 Tels
 * overload for 'log' now inherited by BigInt
 * _binf(), _bnan(), _bone() and _bzero() instead of longer bone() etc
 * inf/NaN fixes from v1.51 were missing for BigFloat
 * bdiv() upgrades if applicable

2002-02-25 v1.30 Tels
 * bug in bsub() with not rounding when $x->bsub(0) was also in MBF
 * bcmp() and bacmp() 5 times faster due to numify() (might have now impose a
   limit on exponent - but I couldn't find a test that breaks it)
 * streamlined ffloor() and fceil()
 * fixed bug in $x->bsub(0) and $x->badd(0) (both forgot to round result)
 * new() downgrade integers if $downgrade is in effect
 * optimized fpow() (one is_zero() less)
 * optimized as_number (nearly twice as fast)
 * $x->badd(0) forgot to round $x
 * downgrade and upgrade are valid methods for inheritance

2002-03-03 v1.31 Tels
 * bpow() can handle second arguments beeing non-integer (f.i. 2 ** 0.2)
 * $x->bpow(0.5) optimized to $x->bsqrt();

2002-05-19 v1.32 Tels
 * upgrade used badd() instead of bmul() inside bmul()
 * bpow() now uses slower, but more correct way for fractions (this needs work)

2002-06-09 v1.33 Tels
 * import() fixed for older Perls

2002-06-10 v1.34 Tels
 * upgrade used badd() instead of bmul() inside bmul() (again! arg!)

2002-07-07 v1.35 Tels
 * bfround() used accidentally BigInt math; is now about 5.6 times faster for
   small numbers
 * bdiv()/badd() etc skip objectify() if possible and are thus faster
 * doc for accuracy()/precision()
 * $x->bmod() was not modifying $x in place when returning NaN/inf/-inf
 * avoid unec. calls to objectify() for binary op's

2002-08-13 v1.36 Tels
 * as_hex() and as_bin() work now at least for inf, NaN and integers
 * fixed bsstr() (and thus also numify()) for negative numbers - Ouch!
 * $x->new("0.02"); $x->accuracy($a); $x->bdiv($y,$d) failed to round
   when $d > $a
 * numify() returned '+inf' instead of 'inf'
 * (more) tests for bsstr(), numify(), as_hex(), as_bin

2002-08-20 v1.37 Tels
 * bcmp()/bacmp() upgrade now if requested

2002-09-08 v1.38 Tels
 * fix that bsqrt() would hang for certain inputs. Instead of using Newton's,
   we now rely on the fact that sqrt(x*y) = sqrt(x) * sqrt(y) by setting y to
   100. This removes the while loop entirely and makes it much faster while
   fixing the bug at the same time.
 * $x->bsqrt(0) did needless warn about undef values, and round to 4 digits
   instead of beeing equivalent to $x->bsqrt(undef)
 * ditto for $x->bpow($y,0), $x->blog($base,0) and $x->bdiv($y,0)
 * use File::Spec was needless, since it was required later on again

2002-11-03 v1.39 Tels
 * $x->bpow($y,0), $x->blog($base,0) and $x->bdiv($y,0) were still not doing
    the right thing and no tests caught it *sigh*
 * blog():
   + MUCH faster when $x > 10 or $x < 0.1 (constant time vs.
     time * 10 when doubling/halving $x)
   + also much faster if $x has many digits (like 1/3 or 123**123)
   + for $x < 1 and $x > 0 did not work at all (bacmp vs bcmp)
   + returns now NaN if $base <= 0 or $base == 1
   + does handle other bases than "undef" (aka e) properly now
 * require Math::BigFloat did not work (opposed to BigInt, where it does)
 * _pow() suffered the same bug of bacmp vs bcmp (so 0.2 ** 0.2 failed)
 * removed unused _pow2() routine
 * _find_round_parameters() returns ($x,$a,$p,$r) and not ($a,$p,$r), so
   use it correctly, and also test for $x = NaN afterwards
  (happens when $a and $p were set and thus $x became NaN)
 * bsqrt() failed since v1.63 for values like 0.2, 0.002, 0.00134 etc
 * added broot() method (albeit slow for now)
 * $x->is_one('-') was broken (never returned true for $x == -1)
 * config() can take arguments and set them, croak on wrong ones
 * config(trap_nan => 1) to manipulate former $NaNOK variable
 * config(trap_inf => 1), too
 * trap_nan/trap_inf really croak on any attempt to create an NaN/inf
 * spellings of Bigint => BigInt
 * simplify config() by using SUPER::config()

2003-07-06 v1.39 Tels
 * $x->blog($base) can handle a $base which is a Math::Bigint
 * replace die() with Carp::croak

2003-09-23 v1.40 Tels
 * bstr(): removed unnec. BigInt math and inlined is_zero() => great speedup
   (10% to factor 6.5 depending on input)
 * replace $self->_one() by $self->bone()

2003-12-11 v1.41 Tels
 * flog(): 0.5, 0.25, 0.125, 2, 4 and 8 were not scaled properly back to
   1, instead they remained 0.5 and 2, respectively. This was a '<' vs.
   '>=' respective '<' vs. '<=' issue. No other values are affected
   (neither getting slower nor faster), but the ones in question (incl.
   their multiples like 20, 80, 0.0125 etc) are now tremendously faster -
   about a factor of 30 to 60! :-)
 * removed some crufty logic from _log_10() and made the special cases of
   2, 10 and 0.1 slightly faster. This also helps log($x,2) and log($x,10).
 * bfac() slightly faster for small arguments
 * downgrading to bigint failed for .2e2 (produced 200 vs. 20)

2003-12-30 v1.42 Tels
 * ffac(inf) is inf, not NaN
 * flog() calculate integer result first, and if it fits, return it
   this makes it much faster in case the result is a perfect integer
 * require (instead of use) Exporter
 * froot() calculates an integer result first, and it if fits, returns it

2004-01-13 v1.43 Tels
 * small fixes in AUTOLOAD
 * delete $x->{_a} vs. $x->{_a} = undef to save memory

2004-03-12 v1.44 Tels
 * bpow() computed -X ** Y wrong for Y that are odd
 * use $HALF instead of 0.5 to speed up broot()
 * use Calc instead of BigInt for parts, that makes it roughly 2x faster
   it also saves memory (419 vs. 767 bytes per (small number) object)
 * bmod() did needlessly test for NaN arguments twice

2004-07-30 v1.45 Tels
 * simple inherit bsub() from BigInt, also fixes bsub() failing under
   $x -= $x - Thanx Peter J. Acklam!
 * bdiv() failed when passed a variable twice (thanx Peter J. Acklam!)
 * bfround() and bround() are about 10% faster when going via Math::BigInt's
   bround() due to constructing a fake BigInt instead of going via ->new()
 * fixed undef warnings in bpow(0,$y) ($y non-integer) (thanx kenny!)

2004-08-13 v1.46 Tels
 * blog(10,10) ($x == $y) returned '1.0000...' instead of '1'

2004-10-10 v1.47 Tels
 * inf/NaN fixes for bpow()
 * eliminate the need for _zeros() in new() (speed-up for GMP et. al.)
 * eliminate _is_zero() in new() (small speed up)
 * added shortcut for simple numbers in new() (speed up)

2005-01-01 v1.48 Tels
 * use new interface to _scale_a() and _scale_p() in BigInt
 * add bneg() and inline is_zero() in it, making it 1.6 times faster
 * replace ref($_[0]) w/ undef when it isn't actually needed. This
   makes some ops (bsstr(), bneg etc) about 2% faster for small numbers
 * use MBI::_register_callback() to get notified of lib changes
 * bgcd()/blcm() never worked, so fix them for integers and add tests

2005-03-20 v1.49 Tels
 * remove dependecy on Scalar::Util in bdiv()
 * bdiv() cache result of "!$y->is_one()" for wantarray case to make
   ($res,$rem) = $x->bdiv($y); about 10% faster

2005-03-29 v1.50 Tels
 * fix rounding doc, add notes about prevision vs. accuracy
 * set FastCalc as default (we still use whatever MBI uses)

2005-04-10 v1.51 Tels
 * fix new() to work with Math::BigInt::Pari

2007-01-27 v1.52 Tels
 * fix brsft() and bpow() in list context only return on number (bug #21413)
 * make as_int() return a BigInt, too (not just as_number()) (bug #21412)
 * add as_oct()
 * bpow(): handle negative X and negative Y (instead of returning NaN)

2007-03-04 v1.53 Tels
 * fix #25144: [PATCH] Math::BigFloat->new considers any reference a BigInt
   (Thanx mschwern!)
 * fix bug #13866: NaN (in bignum queue)
 * fix bug #21586: Incorrect result when comparing with NaN
 * fix bug #15896: "==" overloading is broken for "NaN"

2007-04-09 v1.54 Tels
 * fix bug #21747: Re: weirdity in bignum... (powers and high precision):
   infinite loops for blog() (and consequently bpow()) if you requested
   an accuracy greater than 67 digits (uses _log() now, and not blog())
   Thanx to darconc!
 * cache the result of _log(2) and _log(10) so that subsequent calculations
   can re-use the already done work
 * instead of computing _log(10), compute _log(1.25) and _log(2) and then do:
    _log(1.25 * 2 * 2 * 2) = _log(1.25) + _log(2) + _log(2) + _log(2)
   This makes computing _log(10) much faster, so that computing blog(N) is
   about a factor of 5 faster when N >= 10 or N <= 0.1
 * add bexp()

2007-04-16 v1.55 Tels
 * make bexp() much faster (esp. under GMP) by caching the first coefficients
   and rewriting the inner loop
 * support "try" and "only" in import()

2007-05-05 v1.57 Tels
 * add bnok() method (n over k)
 * add all the missing modify() hooks

2007-06-30 v1.58 Tels
 * remove Exporer from @ISA
 * support config('lib') as shortcut for config()->{lib}
 * add bpi(), bcos(), bsin(), batan(), batan2() methods
 * add bmuladd()
 * streamline the is_xxx() and copy() methods

2008-04-20 v1.60 Tels
 * fix #34459: bsqrt() breaks on floats with enough digits (Thanx Niko Tyni!)
 * fix #35238: batan2() handles inf/+inf wrong
 * fix #35162: MBI segfault (as_number(Math::BigRat()) was wrong)

##############################################################################
Math::BigInt:


2000-11-13 v1.02 Tels
 fixed sub and mul (sort of)
 found out that "$wanted = shift || return bzero()" causes a call to numify,
 testing for undefined fixes this problem (but might waste more time for
 a new(0), will save time on average.

2000-11-14 v1.03 Tels
 x**0 => 1 (instead of x)
 fixed bigintpm to include bpow, binc, bdec, new() test

2000-11-15 v1.04 Tels
 fixed bigintpm to test '++' and '--' properly
 done div, fixed mul/bpow (13 tests remain)

2000-11-16 v1.05 Tels
 8 tests remain
 new copies _all_ fields, not only Math::Bigint ones

2000-11-19 v1.06 Tels
 7 tests remain
 bgcd accepts lists, added blcm

2000-11-20 v1.07 Tels
 objectify fixed to not make copies and work with subclasses

2000-11-22 v1.08 Tels
 fixed all but one test (band bior bxor etc)

2000-11-23 v1.09 Tels
 fixed bug in bmul (and thus bpow) (self multiply works now)

2000-11-24 v1.10 Tels
 finally made it Math::BigInt (w/o trailing 's')

2001-02-14 v1.11 Tels (first release)
 * fixed bug in band(), bxor(), etc that used badd($x, fixed_number_here);
 * since subclasses might not be happy with fixed numbers, make sure we pass
   BigInts all the time if using something like $someclass->badd();
 * fixed bug in band/bxor/bior which destroyed second argument
 * bxor/band/bior work now correctly for subclasses
 * ++ and -- are now a tad (ca 5%) faster

2001-02-16 v1.12 Tels
 * accidentally dropped self-multiply test in bigintpm.t
 * fixed bug in overloading cmp
 * after correcting the overload for 'cmp', I got a lot of test failings and
   finally discovered that the bstr()'s return of '[+-][0-9]+' instead of
   Perls ways of '[-]?[0-9]+' breaks string comparisons with numbers :(
   F.i. ok() from Test.pm uses 'eq' and you can not do ok($a,3*3) where $a
   is a BigInt. IMNSHO clearly wrong. And only changing the way cmp is
   overloaded would lead to the curios situation that the following:
   'print "$a eq $b" if $a eq $b;' would print "+3 eq 3", which looks wrong.
   Mark B. said go ahead and change bstr(), so I changed it ;) to drop
   the '+', adapted all the tests, changed the doc, etc.
   BigInts behave now transparently like build-in scalars in integer/string
   context ;o)

2001-02-18 v1.13 Tels
 * got rid of duplicated copy() code in new()

2001-02-21 v1.14 Tels
 * overload +=, -=, *= and /= for about 20-30% more speed if both args have
   roughly same length
 * shortcut in add() makes $x += $y; $x -= $y; for large $x and small $y
   an O(1) case instead of O(N)
 * fixed (non-critical) bug that caused objectify in numify/bool/stringify to
   create scratch objects from undef params.

2001-02-24 v1.15 Tels
 * $x / $x is now a lot faster (more O(1) than O(N))
 * 10 ** $x is now a lot faster (more O(N/5) instead of O(N))
 * overload of **= makes $x **= $y faster
 * 0 ** 0 was NaN, not 1
 * -a % b = +c (was -c) to be compatible with perl
 * added $x->length() and test for it; fixed _digits() (was off by 1)
 * objectify() was not exported, added tests for objectify()

2001-03-09 v1.16 Tels
 * Math::BigInt::badd(4,5) and Math::SomeChildOfBI->badd(4,5) work now
 * '$x = scalar (**|%|+|-|*|\) $object;' failed (was not tested, either)
 * 'if ($x)' is now O(1) instead of O(N) and at least twice as fast
 * fixed nasty bug in _digits that caused <=> after add/sub/mul etc to fail
   if result was between 100001 and 109999, added test for this
 * added test cases for op's that should preserve args (+,+=,abs(), neg() etc)
 * added tests for overloaded 'bool'
 * added test.pl and some examples (prime.pl, bigprimes.pl)
 * tests after "use Math::BigInt :constant" were screwed due to not using eval
 * $x->numify() (for $array[$x] = 0; etc) is much faster now
 * added caveat documentation for $x = -$x; and $x *= string1 operator string2;

2001-03-24 v1.20 Tels
 * added: is_nan()
 * bug in bmod/bdiv, I forgot some cases with negatives. Thanx to Bruce Fields!
 * documented ':constant' and eval() crash on Perl 5.00x
 * documented BigInts behaviour of bmod/bdiv and use integer

2001-03-30 v1.21 Tels
 * bool() works now under 5_005
 * bug in bsub where numbers with at least 6 trailing digits after any op failed

2001-04-05 v1.22 Tels
 * documented Peters OS/390 patch/changes (fix was in for quite some time)
 * fixed bug Math::BigInt->new(Math::BigFloat->new(3));
 * objectify() with other objects than BigInt as further args, copy() etc
 * $x->digit($n) to query fast value of Nth digit
 * as_number()

2001-04-07 v1.23 Tels
 * spelling errors in pod

2001-04-23 v1.3 Tels
 * added (compatible to MBF) mantissa(), exponent() & parts() as well as tests
 * _trailing_zeros()
 * fixed as_number() to return copy of BigInt
 * added bround(), bfround() and support for round_mode() as well as $rnd_mode
 * fixed bug in bdiv() wich left reminder "-0", causing further op's to die()
 * added is_valid to testsuite to see whether invalid objects are created
 * added bsqrt()
 * workaround coredump bug in bool() for v5.6.1

2001-05-08 v1.31 Tels
 * _ between digits now accepted, ' ' no longer valid inside (but at front/end)
 * Exxx is NaN, and no longer produces warning
 * .xxx style numbers are valid input
 * tests for 1E1, 123E-2, 1E2 etc style input to Bigint.pm
 * fixed overload (w/ _swap/copy), subclasses can inherit it easily
 * removed clone()
 * added bsstr()

2001-05-11 v1.32 Tels
 * added accuracy/precision/fallback/round_mode

2001-06-09 v1.33 Tels
 * bround() no longer uses 10 ** $pad and is thus much faster when rounding up
 * fixed and added rounding benchmark (did time bmul instead bround)
 * blsft(),brsft(): can work in different bases, check against invalid
   inputs, more tests, speedup when in base 10
 * _trailing_zeros is 50% faster
 * A/P after each op, tests for it in accuracy.t
 * round() instead of bnorm()
 * $x->accuracy(), $x->precision() actually round $x to the set value
 * tests for is_one()
 * hexadecimal integer input (0xcafebabe etc)

2001-06-13 v1.34 Tels
 * binary integer input (0b01110 etc)
 * fixed: '-0x0' left '-0'
 * added is_inf(), binf() and some support for +-inf in new(), bsstr() etc
 * added tests for is_odd(), is_even(), _set() and is_zero(), is_inf(), bsstr()

2001-06-15 v1.35 Tels
 * added bfloor(), bceil()
 * fixed bior(), bxor(), band() for $x->bxxx(NaN,0), added modify() to them

2001-07-04 v1.36 Tels
 * is_positive(), is_negative()
 * various pod fixes (overlong =item, spelling erorrs etc)
 * torn out the bones from under the flesh and moved them to Math::BigInt::Calc
 * added Math::BigInt::Calc, Math::BigInt::Small (and Math::BigInt::BitVect)
 * fixed tests for bacmp() (could never fail)
 * removed internal _set() and tests for it
 * +-inf handling in bcmp(), bpow()

2001-07-15 v1.37 Tels
 * applied Philip Newtons spelling and doc patch(s)
 * Benjamin Trott: _split() is faster for numbers that need no splitting
 * Benjamin Trott: don't take shortcut in badd(), or Pari won't work
 * allow use Math::BigInt lib => 'Pari,BitVect,Foo,Bar';
 * delegate shifting to CALC if possible, otherwise fallback
 * test for self-pow, to see if lib's fail (since BitVect failed for self-pow)
 * _one() => bone()
 * +x / 0 => +inf, -x / 0 => -inf, while 0/0 and +-x % 0 are still NaN
 * tests for bnan() and bone()
 * Math::BigInt::Calc now determines biggest $BASE to use. Default should now
   be 1e7 on most systems, giving 20% to 40% speedups.

2001-07-15 v1.38 Tels
 * test for mul() shortcut

2001-08-02 v1.39 Tels
 * fixed history (duh!)
 * assign return values from $CALC back to $x->{value}
 * fixed +-inf handling in a lot of places and tests for that
 * band(), bxor() and bior() now work with negative inputs
 * remove bint() (Math::BigFloat->bint() just DNDWIM and no sense, either)

2001-08-03 v1.40 Tels
 * bxor(-$x,-$y) was broken (and not tested *sigh*)
 * streamlined bcmp
 * drop leading '+' for inf
 * bxor(), band(), bior() with negative arguments don't get passed to lib
   (makes it work with BitVect, Pari, GMP etc)

2001-08-08 v1.41 Tels
 * fixed inf test (coredumps)

2001-09-03 v1.42 Tels
 * bug in overload section causing performance losses in subclasses
 * call $CALC->import() with list of libs
 * odd numbers never have trailing zeros, so don't convert them to DEC to look
 * as_hex() and as_bin()
 * $x->bmod() did not modify $x, only returned result. Oups.
 * new('inf') produced NaN (was expecting '+inf')
 * exponent(), mantissa() & parts() failed or returned scalars for inf,-inf,NaN

2001-10-05 v1.43 Tels
 * $x->bround($n) is 43 times faster if $n > $x->{_a} (no-op)
 * Heaploads of rounding fixes (and tests)
 * Test for 99999-bug in Calc

2001-11-04 v1.45 Tels
 * tests run now in subclass, too
 * bmod() can use _mod in lib
 * lots of tests fixed (assumed wrong base etc) and added
 * bpow() about 10-15% faster for small numbers (like 2 ** 150, 3 * 200 etc)

2001-11-11 v1.46 Tels
 * binc(),bdec() use lib (via _inc(),_dec()) => faster (see BENCHMARK)
 * avoid the unnec. rounding bsub()/binc()/bdec() (badd() already took care)
 * made bsub() faster by removing the bneg() overhead from it

2001-11-18 v1.47 Tels
 * added $rnd_mode support for compatibility
 * two 'my $t = ... if ..;' cases to 'my $t; $t = ... if ...;'
 * added overload for %=, |=, &= and ^= for more speed
 * _split(): check for 1e2e3 and reject it

2001-12-06 v1.48 Tels
 * fixed pod in many places
 * bmod: use round(), not bround()
 * bsqrt: use _sqrt() from lib, if possible
 * bsqrt: would hang for certain (most?) inputs
 * bdiv: slow check for 1 || -1 replaced by much faster version
 * bdiv: call _div() only when nec. in list context, otherwise scalar
 * streamlined copy(), _find_round_parameters()
 * removed the EXPORT_OK except for objectify, _swap and bgcd/blcm
 * bzero(), bone(): take additional A and P and store 'em
 * bnan(), binf(): clear A and P

2002-01-07 v1.49 Tels
 * as_hex() and as_bin() use 16 instead of 8 bits per iteration
 * overload for log() and blog()
 * tricks to make 'require Math::BigInt' and 'use Math::BigInt();' work again
 * use $CALC instead of require for newer Perls (test for $] > 5.006 vs 5.6)
 * bzero()/bone() handling of A & P was broken
 * bround()/bfround() forgot to set A or P for zeros
 * embedded _find_round_parameters into round(), streamlined both versions
 * round() now uses string-add to make it almost twice as fast
 * bnot() did round twice

2002-02-10 v1.50 Tels
 * bfac() and hook for _fac() in libs
 * documented sub-classing and auto-upgrade
 * < 4 test in bsqrt() after the CALC call for more performance
 * added overload for sqrt()
 * added possibility to upgrade via use Math::BigInt upgrade => 'Foo::Bar'
 * Math::Big(Int|Float)->accuracy() clears precision, and vice versa
 * small optimization in bdiv() regarding abs($x) < abs($y)
 * brsft() for negative numbers in base 2 was completely wrong

2002-02-16 v1.51 Tels
 * fixed bfround(-x) (f.i. 0.004->bfround(-2) resulted in 0.01, not 0.00)
 * bfround(x) rounded at wrong place (off by one)
 * calling bfround(x) rounded further and further instead of keeping result
 * blog() upgrades if requested
 * added doc stub for every public function

2002-02-24 v1.52 Tels
 * hooks for _bin(), _bnan(), _bone() and _bzero()
 * =head2 section for accuracy

2002-02-27 v1.53 Tels
 * precisision typo
 * fixed overlong pod =item
 * added downgrade()

2002-03-03 v1.54 Tels
 * really fixed overlong pod =item
 * downgrade() and upgrade() with undef as argument didn't clear the variable
 * bmul() upgrades if second argument is non-integer
 * bdiv() upgrades if $x > $y
 * bpow() upgrades if second argument is non-integer
 * objectify disable downgrade (for MBF)
 * new() twice as fast due to shortcut simple numbers, save _split() & _round()

2002-03-17 v1.55 Tels
 * :constant picks up binary/hexadecimal constants
 * Math::BigInt->digit(123) works now

2002-03-17 v1.56 Tels
 * documented config()
 * simplified import() logic a bit
 * changed some isa->($upgrade) => !$isa->($self);

2002-05-30 v1.57 Tels
 * fixed objectify() to make "perl -Mbigrat -le 'print 1+2/3'" work
 * added bmodpow() and bmodinv() as (not-working yet) stubs

2002-06-09 v1.58 Tels
 * invalid inputs with two dot's (1.2.3 or 1..2 etc) are now really invalid

2002-06-10 v1.59 Tels
 * pod fixes for bmodpow()/bmodinv()
 * fix in as_hex() and as_bin() for older Perls
 * speedups in bpow(), bmodin() and bmodpow()

2002-07-07 v1.60 Tels
 * shortcuts to avoid calls to objectify for add/sub/mul/div/mod/pow/bcmp etc
 * fix overloaded bcmp() so that the objectify()-avoidance kicks in
 * avoid calling round() when BigFloat requested 'no rounding please'
 * bcmp()'s shortcut for comparing x <=> 0, 0 <=> 0, 0 <=> $y was making things
   slower than just handing the compare to Calc. Even more so for Pari et al.
 * $x->accuracy() and $x->precision() returned undef, instead of 0 if
   A/P of $x was 0 and global A/P was undef.
 * $x->bmod() did not modify $x in place when returning NaN/inf/-inf
 * some binary ops (band/bxor/bior/bpow) were not properly rounding the result
   to the requested A/P/R; the same ops also forgot to take $y into account
 * doc for accuracy()/precision()

2002-08-13 v1.61 Tels
 * tests for bsstr()/numify() with negative/special inputs
 * bround() keeps $scale as scalar for speed and less problems
 * fix for trailing newlines in input
 * some doc fixes (especially return values of is_foo() methods)
 * make testsuite so that it will pass under FastCalc easily

2002-08-21 v1.62 Tels
 * bcmp()/bacmp() upgrade now if requested
 * bmodinv() uses an all-positive algorithm, speeding it up by about 5-8%
   and allowing to implement the same algorithm in Calc for factor 4 speedup

2002-09-08 v1.63 Tels
 * bsqrt() did not modify $x but returned new object when lib does not have
   a _sqrt() routine (BareCalc, BitVect and Pari are affected, Calc, FastCalc
   and GMP were not)

2002-11-03 v1.64 Tels
 * removed needless "my $c = ...;" statements in binf() and bnan()
 * forgot () around "$x->{_f} & MB_NEVER_ROUND"
 * bsqrt(inf) == inf, not NaN
 * $x->bdiv($x) did not round the resulting 1 properly
 * removed the shortcut testcode in bdiv() (Calc handles this now)
 * added (non-working for now) broot() method
 * changed length() to CORE::length() in two places (thanx Liz!)
 * config() can take arguments and set them, croak on wrong ones
 * config(trap_nan => 1) to manipulate former $NaNOK variable
 * config(trap_inf => 1), too
 * trap_nan/trap_inf really croak on any attempt to create an NaN/inf
 * spellings of Bigint => BigInt
 * _find_rounding_parameters(): set $a to undef if it is 0

2003-07-13 v1.65 Tels
 * document that config() can set certain values
 * replace die() with Carp::croak()
 * remove needless is_zero() check in as_bin() and as_hex(), making them
   faster, especially when under a different lib like GMP.
 * Fixed the infinite recursion in bignum. See http://xrl.us/k6y
 * fix handling of 0e999, 0e-999 etc

2003-09-01 v1.66 Tels
 * document accepted inputs better
 * fix wrong upgrade and undef-parameter handling in broot()
 * implement broot() if lib doesn't have a _root() routine for $y that are
   powers of two and for small $x
 * warn if broot() cannot yet compute proper result
 * remove needless _one(): 3% speedup for binc()
 * remove needless _swap(): 1% (Calc) - 6% (GMP) speedup for overloaded math

2003-12-02 v1.67 Tels
 * overload for cos/sin/exp/atan2 to make cos(Math::BigInt->new(...)) work
 * implemented blog() with a simple and fast "iterative" method
 * use _log_int() in $CALC if possible
 * cache $CALC->can(...) calls in global %CAN hash for speed
 * reorder is_zero() check for band(), bior() and bxor() to speed up the
   case for when the underlying lib has _and(), _ior() and _xor()
 * implement a new way of emulating AND, OR and XOR, this tremendously
    helps if band() et. al. are called with negative arguments
 * try to call _signed_or(), _signed_and() and _signed_xor() in lib
 * is_foobar() methods are slightly faster
 * bnot() is about 12% faster
 * bsqrt(): moved is_zero() || is_one() test out of the way => 28% faster
   for "small" values (Calc and GMP)
 * small change for overload::constant
 * bfac(): do 0 or 1 check only if CALC cannot do _fac() (thus faster)
 * removed a needless _copy in bmod() with negative arguments (slightly faster)

2003-12-26 v1.68 Tels
 * bfac(inf) is inf, not NaN
 * added alias names: as_int() (as_number()), is_pos(), is_neg() and doc
 * factored out all the emulation code and moved it to Math::BigInt::CalcEmu
 * binary/hexadecimal input was twice as slow as v1.66 due to a typo in v1.67
 * streamlined overload for boolean context (20% faster "... if $x;")
 * round() was missing a croak() in path testing for wrong roundmode
 * badd(): optimize away setting of sign if it is already right
 * bdec() is about 10% faster for negative numbers
 * bpow(): removed some now needless tests for 0 and 1: about 30% faster
   for small numbers
 * streamlined exponent() (parts() benefits from this, too)

2004-01-13 v1.69 Tels
 * bacmp(+-$x,-inf) was wrong (Thanx William T. Morgan!)
 * digit($x,$y) segfaulted under 5.6.1 if $y was a BigInt
 * blog() was missing the modify() check (breaking MBI::Constant)
 * delete $x->{_a} vs. $x->{_a} = undef to save memory

2004-03-12 v1.70 Tels
 * bpow() computed -X ** Y wrong for Y that are odd
 * 0 ** -Y => +inf (was NaN) due to 0 ** -Y => 1/0**Y => 1/0 => +inf
 * fixed bug in perl -Mbignum -le 'print 2 ** 46 * 3' under Bigint::Lite
   leading to "Can't use an undefined value as an ARRAY reference at
   /usr/local/lib/perl5/5.8.2/Math/BigInt/Calc.pm line 462."
 * fixed upgrading of blog() with base = undef (means: base e)
 * make the synopsis actually runnable (Thanx Paul McCarthy)
 * blcm(): handle a list of strings (instead one obj and some strings), too

2004-07-08 v1.71 Tels
 * fixed bsub() failing under $x -= $x; Thanx Peter J. Acklam!
 * _scan_for_nonzero() reuses length/stringform of $x and is thus faster, this
   helps rounding if the number after the roundposition is '5'

2004-07-13 v1.72 Tels
 * no changes

2004-10-10 v1.73 Tels
 * overloading of <<= and >>= makes these ops about 10% faster and fixes the
   problem that "$a <<= 2" would create a different object for $a to point to
 * quite a lot of fixes for NaN/inf handling in bpow() (bmul already did it
   right) - bug report by jeff at thekidders com and Hugo - Thank you!

2005-01-01 v1.74 Tels
 * streamline _scale_a() and _scale_p() for more speed in rounding
 * remove the now unnec. support for MB_NEVER_ROUND and {_f}, this
   makes all ops that call round() a tad faster (one exists is
   removed) and shrinks the codesize a bit
 * streamline bneg(), inline is_zero(): makes it 1.6 times faster
 * replace ref($_[0]) w/ undef when it isn't actually needed. This
   makes some ops (bsstr(), bneg etc) about 2% faster for small numbers
 * restrict low-level math library names to sane chars to avoid
   exploitation of eval()
 * fill_can_cache() accidentally did checks for 'or' & 'xor'
 * inline _fill_can_cache
 * add _register_callback() to notify subclasses of lower math lib changes
 * bgcd() is now about 10% faster
 * is_positive(0) == 0, since 0 is neither positive nor negative
 * streamline bmod() a bit
 * fix blog() constructing arguments (broke Math::BigInt::Constant)

2005-03-20 v1.75 Tels
 * use a trick to remove the dependency on Scalar::Util in bsub()
 * fix atan2(), it did not preserve the order of arguments
   (Thanx to Ambros & Zaxo for report and patch!)

2005-04-10 v1.76 Tels
 * fix rounding doc, add notes about prevision vs. accuracy
 * trap inf and -inf in new()
 * load FastCalc as default

2005-05-17 v1.77 Tels
 * bump version

2007-01-27 v1.78 Tels
 * implement "try" and "only" as replacements for "lib"
 * make 'use Math::BigInt lib => "foo"' warn if foo cannot be loaded and a
   fallback occurs
 * fix bug #21446 - Docs/code inconsistency for bnorm() method
 * fix bug #21964 - A patch to include a rounding mode of 'common'
 * fix bug #21445 - Documentation error for exponent() method
 * fix bug perl #41050 - NaN returned when raising integer value to negative power
 * add from_hex(), from_oct(), and from_bin()
 * add as_oct()

2007-02-02 v1.79 Tels
 * fix typos

2007-03-04 v1.80 Tels
 * require Perl v5.6.2 as minimum
 * fix bug #24969 (Can't use an undefined value as an ARRAY reference)
 * fix bug #12857: Subclasses and overload
 * fix bug #13866: NaN (in bignum queue)
 * fix bug #21586: Incorrect result when comparing with NaN
 * fix bug #15896: "==" overloading is broken for "NaN"

2007-03-16 v1.81 Tels
 * no code change, just a package update

2007-04-09 v1.82 Tels
 * use $CALC->_zeros() directly (instead _trailing_zeros()) to speed up
   exponent() and mantissa()
 * fix documentation that blsft() and brsft() default to base 2 (not 10)
 * add bexp() and fix overloading for exp()

2007-04-16 v1.83 Tels
 * bump version

2007-05-04 v1.84 Tels
 * add bnok() method (n over k)

2007-05-05 v1.85 Tels
 * bump version

2007-05-05 v1.86 Tels
 * bump version

2007-06-30 v1.87 Tels
 * fix undef base in blog()
 * support config('lib') as shortcut for config()->{lib}
 * _find_round_parameters(): convert $a & $p to normal scalars, or bad
   things will happen during rounding of BigFloats
 * add bpi(), bcos(), bsin(), batan(), batan2() methods
 * add bmuladd()
 * streamline the is_xxx() and copy() methods

2007-09-22 v1.88 Tels
 * fix wide ints on Perl v5.8.0 (Thanx zefram!)
 * minimum required is Perl v5.6 (tested by zefram)
 * _find_round_parameters(), _scale_a() and _scale_p(): trunc A/P to integers
 * fix from_oct(), from_bin() and from_hex()

2008-04-20 v1.89 Tels
 * fix #35238: batan2() handles inf/+inf wrong

2010-09-03 v1.90 rafl
 * fix bnok() for k==0 and k==n-1

2010-09-10 v1.91 rafl
 * fix various documentation bugs

2010-09-10 v1.92 rafl
 * re-upload v1.91 with a fixed SIGNATURE

2010-09-13 v1.93 rafl
 * Depend on perl >= 5.6.2
 * Remove obsolete core test directory boilerplate
 * Convert from Test to Test::More

2010-09-13 v1.94 rafl DEVELOPMENT RELEASE
 * Attempt to fix Math::BigInt::Lite failures

2010-09-14 v1.95 rafl
 * Re-upload v1.94 as a stable release

2010-09-28 v1.96 rafl
 * Various documentation fixes provided by gregor herrmann

2010-11-07 v1.97 rafl
 * Reorder the list return of Math::BigInt::Calc::_base_len() (Nicholas Clark)
   This change requires an update of Math::BigInt::FastCalc to version 0.24.
 * Fix segfault when upgrading irrational numbers (Father Chrysostomos)

2010-11-08 v1.98 rafl
 * Fix from_bin() documentation error (Peter John Acklam) (Closes: RT#61845).
 * Make as_int($inf) return inf, not NaN (Peter John Acklam) (Closes RT#62101).
 * Fix various typos in documentation and tests (Peter John Acklam)
   (Closes RT#62643).
 * Make digit($n) return 0 for "out of range"-digits (Peter John Acklam)
   (Closes RT#61812).

2010-11-15 v1.99 rafl
 * Stop as_int/as_number from losing precision (Peter John Acklam)
   (Closes: RT#43694)
 * Fix Math::BigInt::Calc::_modpow for (0 ** $x) % $y, with $x > 0
   (Peter John Acklam) (Closes: RT#62918).
 * Stop $x -> bmodpow(1, 1) from failing when $x is large (Peter John Acklam)
   (Closes: RT#62949).

2011-01-29 v1.99_05 pjacklam
 * Fix typos (reminder -> remainder etc.) (Peter John Acklam)
 * Fix Math::BigInt::Calc::_num returning NaN, not Inf, when it overflowed
   (Peter John Acklam) (Closes: RT #25274).
 * Fix Math::BigFloat->bcmp() so it can handle arbitrarily large exponents
   (Peter John Acklam) (Closes: RT #62764).
 * Fix bmodpow() in Math::BigInt 1.99 mis-calculating powers of one
   (Peter John Acklam) (Closes: RT #63237).
 * Fix bmodpow() and bmodinv() in Math::BigInt to handle negative input
   (Peter John Acklam) (Closes: RT #61543)
 * Clean up whitespace (Nicholas Clark).
 * Added file t/00-signature.t for testing SIGNATURE (Peter John Acklam).

2011-02-05 v1.991 pjacklam
 * Add workaround for library inconsistencies (Math::BigInt::Calc vs.
   Math::BigInt::GMP). This makes older versions of Math::BigInt::GMP
   work with latest version of Math::BigInt (Peter John Acklam).
 * Correct and extend API documentation (Peter John Acklam).

2011-02-18 v1.992 pjacklam
 * Math::BigInt::Calc->_nok(): Use symmetry property nok(n,k) = nok(n,n-k) to
   speed up execution when k is large. Also general code cleanup. (Peter John
   Acklam).
 * Math::BigInt::Calc->_gcd(): Speed up by reducing amount of data copying
   (Peter John Acklam).
 * Add '01load.t' for basic module loading and diagnostics useful for
   debugging. Rename '00-signature.t' to '00sig.t', 'pod.t' to '02pod.t', and
   'pod_cov.t' to '03podcov.t' (Peter John Acklam).
 * Math::BigInt:: Make from_hex(), from_oct(), and behave more like hex() and
   oct() in the Perl core, and make from_bin() consistent with from_hex() and
   from_oct() (this is related to RT #58954) (Peter John Acklam).
 * Math::BigInt::Calc->_rem(): Modify first input arg always, not just
   sometimes (Peter John Acklam).
 * Math::BigInt::Calc->_modinv(): be more consistent with the _modinv() method
   in other libraries (Math::BigInt::GMP, etc.) (Peter John Acklam)
 * Math::BigInt::Calc->_nok(): use symmetry property nok(n,k) = nok(n,n-k).
   This cuts computation time tremendously when n and k are large (Peter John
   Acklam).
 * Math::BigInt::Calc->_gcd(): quickly handle zero cases, avoid code
   duplication, and always modify the first input argument in-place (Peter John
   Acklam).
 * Clean up code and add more code comments (Peter John Acklam).
 * Fix typos (Peter John Acklam).

2011-02-26 v1.993 pjacklam
 * Change default backend library from Math::BigInt::FastCalc to
   Math::BigInt::Calc, which is included in the Math-BigInt distro. This
   avoids recursive distribution dependency (RT #65976) (Peter John Acklam).

2011-09-04 v1.997 pjacklam
 * Document actual behaviour of from_xxx() methods. [perl #85334] (Peter John
   Acklam)
 * Make bmuladd() able to handle third arg properly. [perl #85482] (Peter John
   Acklam)
 * Add sign function bsgn() as a complement to babs(). (Peter John Acklam)
 * Fix objectify()'s handling of "foreign objects". (RT #16221 and #52124)
   (Peter John Acklam)
 * Rewrap some verbatim pod in Math::BigInt. (Father Chrysostomos)
 * Correct links to sections. (Alexandr Ciornii)
 * Remove incorrect formatting inside verbatim paragraphs. (Alexandr Ciornii)
 * Upgrade bundled modules in "inc" to latest version. (Peter John Acklam)
 * Include "^MYMETA\.(yml|json)\z" in MANIFEST.SKIP. Whereas META.* are
   generated by the distribution author at packaging time, MYMETA.* are
   generated by the end user at configure time after any dynamic dependencies
   are known. (Peter John Acklam)

2014-04-03 v1.9993 pjacklam
 * Synchronise with blead perl. For a list of recent changes, see
   http://perl5.git.perl.org/perl.git/history/HEAD:/dist/Math-BigInt
 * Removed examples/hailstone.pl which required the obsolete Math::Big

Please send us test-reports, your experiences with this and your ideas - we love
to hear about our work!

The Math-BigInt developers <bignum@lists.scsys.co.uk>



Hosting generously
sponsored by Bytemark