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

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

This lists the complete version history for the rewritten versions.

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

2001-07-09 v0.06 Tels
 * first release
2001-07-15 v0.07 Tels
 * applied Philip Newtons speling and doc patch(s) 
 * accidentily 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

############################################################################## 
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

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

2000-02-18 1.00: started work
2000-02-22 1.01: new() and bstr() work now (sort of)
2000-02-24 1.02: add()/sub() should work now
2000-03-06 1.03: layed more foundations (mul() etc)
2000-03-27 1.04: bmul/bdiv/cmp work now, better _norm()
2000-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
2000-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
2000-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
2000-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!)
2000-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
2000-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()
2000-05-09 1.11: bug bcmp() (1e-08 was < 0, aka fractions were broken)
2000-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'
2000-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()
2000-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, speling 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 speling 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) 
2001-10-05 v1.23 Tels
 * fixed facmp() (was broken the same way as fcmp())
 * more rounding fixes from John P.

############################################################################## 
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
 * 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
 * accidentily 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 dicsovered that the bstr()'s return of '[+-][0-9]+' instead of
   Perls ways of '[-]?[0-9]+' breaks string comparisations 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 trailig 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
 * speling 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, speling 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 speling 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 

Please send me test-reports, your experiences with this and your ideas - I love
to hear about my work!

Tels <http://bloodgate.com/>
