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 USEMUL or USE_DIV
2001-10-03 v0.12 Tels
- div: 99999 => $BASE-1 ($MAXVAL), 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.00503 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 (< $BASELEN2)
- 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 ashex() and asbin() 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 tolarge()/tosmall()
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
- frombin() 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 ashex() and asbin() 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 USEMUL 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 muluse_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 ashex() and asbin() 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 divuse_XXX()
(one internal in $x overflowed, thus the wrong computation)
2003-12-11 v0.37 Tels
- implemented logint() with a simple and fast "iterative" method
- fixed bug in root(): int() rounds sometimes wrong, so use sprintf()
- as_bin() and ashex() 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)
- asbin() used %b, which was not known to v5.5.3 - workaround that
- implemented logint(), which is simple and very fast
- implemented the missing pieces for _root() (which is quite fast)
2003-12-30 v0.38 Tels
- guess logint() 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(), isten(), istwo(), gcd()
- streamlined: isfoo() 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 fromhex() 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 $BASELEN 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 signedfoo)
##############################################################################
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 iszero()
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 iszero() 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 iszero(), 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 asnumber()
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 iszero() 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 log10() 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 iszero() in new() (small speed up)
- added shortcut for simple numbers in new() (speed up)
2005-01-01 v1.48 Tels
- use new interface to scalea() and scalep() 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 isxxx() 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: isnan()
- 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
- trailingzeros()
- 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/roundmode
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
- trailingzeros 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 iszero(), 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 $rndmode 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(), findround_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
- ashex() 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 findround_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 ashex() 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} & MBNEVER_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
- findrounding_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 logint() 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 signedor(), signedand() and signedxor() 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: asint() (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 scalea() and scalep() 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 iszero(): 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()
- fillcan_cache() accidentally did checks for 'or' & 'xor'
- inline fillcan_cache
- add registercallback() 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 trailingzeros()) 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}
- findround_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)
- findround_parameters(), scalea() and scalep(): 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::baselen() (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.9905 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
'podcov.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).
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>