* Mon Oct 04 2021 Tina Müller <firstname.lastname@example.org>
- updated to 1.999827
* Improve error message for missing library argument.
* Skip tests that don't work on older Perls. Also skip tests that compare
floating point numbers.
* Improve documentation related to floating point literals.
* Skip tests that fail due to Perl's broken handling of floating point literals
* Make Math::BigInt accept integers regardless of whether they are written as
decimal, binary, octal, or hexadecimal integers or decimal, binary, octal, or
hexadecimal floating point number.
* When numeric constants are overloaded (with the ":constant" option) in
Math::BigInt, every numeric constant that represent an integer is converted
to an object regardless of how it is written. All finite non-integers are
converted to a NaN.
* When numeric constants are overloaded (with the ":constant" option) in
Math::BigFloat, every numeric constant is converted to an object regardless
of how it is written.
* Add method from_dec() (cf. from_bin(), from_oct(), and from_hex()). It is
like new() except that it does not accept anything but a string representing a
finite decimal number.
* Wed Sep 22 2021 Tina Müller <email@example.com>
- updated to 1.999824
* Don't allow mixing math libraries. Use the first backend math library that is
successfully loaded, and ignore any further attempts at loading a different
backend library. This is a solution to the re-occurring problem of using
objects using different math libraries.
* Add missing documentation.
* Miscellaneous minor improvements.
* Tue Jul 13 2021 Tina Müller <firstname.lastname@example.org>
- updated to 1.999823
* Improve the handling of the backend libraries. Provide more useful warnings
and error messages. Update the documentation.
* Make the from_hex(), from_oct(), and from_bin() methods consistent with
CORE::oct(), which does not require a leading "0" before the letter ("x",
"o", or "b").
* Make the from_oct() and new() methods accept octal numbers with prefix
"0o", "0O", "o" (lowercase letter o), and "O" (capital letter O).
* Make the from_bin() and new() methods accept binary numbers with
prefix "0b", "0B", "b", and "B".
* Make the from_hex() and new() methods accept hexadecimal numbers with
prefix "0x", "0X", "x", and "X".
* Update test files to match with the above.
* Make new() and from_hex() accept the "0X" prefix, not just the "0x" prefix,
but not accept just "X" or "x". Now, "0XFF" returns 255, not NaN.
* Make new() and from_bin() accept the "0B" prefix, not just the "0b" prefix, but
not accept just "B" or "b". Now, "0B1111" returns 255, not NaN.
* Make new() and from_oct() accept the "0o" and "0O" prefixes, but not accept
just "O" (capital letter O) or "o" (lowercase letter o). Now, "0o377" and
"0O377" return 255, not NaN. Also intepret floating point numbers with a
leading zero and a binary exponent as an octal number, so that "01.4p0"
returns 1.5, not NaN. There is still no ambiguety, since decimal floating
point numbers use "e" or "E" before the exponent, and binary and hexadecimal
floating point numbers use a "0b"/"0B" or "0x"/"0x" prefix, respectively.
* Fix bug and improve error messages in Math::BigInt::import().
* Add method btfac() (triple factorial) and bmfac() (multi-factorial),
including tests and documentation.
* Add missing and correct erroneous documentation for bfac() (factorial)
and bdfac() (double factorial). Also correct handling of special cases
and add tests for these cases.
* Fix error in bsin() and bcos() causing them to hang indefinitely if the
invocand is +/-inf.
* Make it possible for the end user to specify the base length used internally
* Tue Oct 22 2019 <email@example.com>
- updated to 1.999818
* Fix CPAN RT #130736 regarding numify() on a Math::BigFloat with a large
number of digits and an equally large, but negative, exponent.
* Fix a problem in to_ieee754() due to rounding in bpow().
* Sat Oct 12 2019 <firstname.lastname@example.org>
- updated to 1.999817
* Avoid non-integers in intermediate computations in Math::BigInt::Calc. This
causes errors due to rounding issues, e.g., 47265625999999999 / 1000000000
is 47265626 with double precision.
* Remove api_version() and the corresponding test file. There is no need to
check which methods are supported by a backend library now that each backend
library is a subclass of Math::BigInt::Lib. Methods not provided in the
backend library are provided by the parent class.
* Add to_ieee745() and from_ieee754().
* Add backermann() and ackermann() for the Ackermann function.
* Add buparrow() and uparrow() for Knuth's up-arrow notation.
* Add information about the github repository.
* Update links in SUPPORT section in POD.
* Fix bpow(). It returned NaN when it should truncate to zero.
* Make blsft() in Math::BigInt allow bases up until the largest unsigned
* Make _lsft() in Math::BigInt::Calc handle an arbitrarily large base.
* Add new methods bdigitsum() and digitsum() to Math::BigInt. Add new method
_digitsum() to Math::BigInt::Lib.
* Add new methods is_non_negative() and is_non_positive().
* Extend the default collation sequence used by to_base() and from_base() to
all the 94 printable ASCII characters except blank/space.
* Make new() in Math::BigFloat handle octal floating point numbers.
* Slightly more robust t/01load.t.
* Remove unused variables.
* Miscellaneous code cleanup.
* Thu Nov 08 2018 Stephan Kulow <email@example.com>
- updated to 1.999816
* bnok() for Math::BigInt and Math::BigFloat now support the full Kronenburg
extension. The behaviour is identical to the behaviour of the Maple and
Mathematica function for negative integers n, k. Add tests. This closes CPAN
* Fix POD errors. This closes CPAN RT #125141.
* Move bitwise operators signed and, signed or, and signed xor from
lib/Math/BigInt/CalcEmu.pm into lib/Math/BigInt/Lib.pm. The file
lib/Math/BigInt/CalcEmu.pm is no longer needed and thus removed.
* Add to_base() and from_base() to Math::BigInt and corresponding library
methods _to_base() and _from_base() to Math::BigInt::Lib. This was inspired
by CPAN RT #122681.
* Fix Makefile.PL to reflect that Test::More is only needed for testing, not
* In the documentation for each of the to_(bin|hex|oct|bytes) methods, add a
reference to the corresponding from_(bin|hex|oct|bytes) method.
* Sat Apr 21 2018 firstname.lastname@example.org
- updated to 1.999813
* Fix CPAN RT #125108. Remove test files try.pl, t/author-bpi-big-mbf.t, and
t/release-unused-vars.t, which were included in the 1.999812 distribution by
* Wed Apr 18 2018 email@example.com
- updated to 1.999812
* Fri Mar 17 2017 firstname.lastname@example.org
- updated to 1.999811
2017-03-15 v1.999811 pjacklam
* Fix an old in the Math::BigFloat methods as_hex(), as_oct(), and as_bin()
methods resulting in loss of accuracy. This bug was introduced in bug in
Math-BigInt-1.76. Due to a naive copy and paste by me, and lack of tests,
this bug was also present in the newer to_hex(), to_oct(), and to_bin()
methods. This shows the bug, as it did not print "0xffff...":
print Math::BigFloat -> from_hex("f" x 30) -> as_hex();
* Fix incorrect formatting in the output from the Math::BigFloat methods
to_hex(), to_oct(), and to_bin() when the output was zero. A prefix was
added when it shouldn't have been.
* Add tests to bigintpm.inc and bigfltpm.inc for better testing of as_hex(),
as_oct(), and as_bin() as well as to_hex(), to_oct(), and to_bin().
* "Synchronize" tests and code formatting in bigintpm.inc and bigfltpm.inc.
* Fri Mar 03 2017 email@example.com
- updated to 1.999810
2017-03-01 v1.999810 pjacklam
* CPAN RT #120240 revealed that the problems with undefined values is still
present. After a close examination, I believe the only way to get this
really working is to to make blog() call objectify() differently depending
on whether the base for the logarithm is undefined or not. That way we can
avoid objectify() converting the undefined value to a zero. Ideally, we
should warn about undefined values when used in any other context, but we'll
handle that in a later release. See also the related changelog entry for
* Fix the way the argument count is computed in objectify(). When an argument
count of 0 is given, it means that we should objectify all input arguments.
However, it turned out that the actual argument count was computed
* Fix CPAN RT #120242 rearding c3 method resolution.
* Sat Feb 11 2017 firstname.lastname@example.org
- updated to 1.999809
2017-02-10 v1.999809 pjacklam
* When a new method is added to Math::BigInt or Math::BigFloat, and this new
method requires a new backend library method, die with a suitable error
message if the installed backend library does not support this new method.
The error message says that the method requires a newer version of the
* Fix typos in Math::BigFloat and Math::BigInt.
* Add bfib() and blucas() to Math::BigInt. They return Fibonacci and Lucas
numbers, respectively. The actual computation of the numbers is done by the
backend library. Documented both methods in POD. Add test files bfib-mbi.t
* Add _fib() and _lucas() to Math::BigInt::Lib. They return Fibonacci and
Lucas numbers, respectively. Document both methods in POD. Add test files
author-lib-arithmetic-unary-_fib.t and author-lib-arithmetic-unary-_lucas.t.
* Thu Jan 12 2017 email@example.com
- updated to 1.999808
2017-01-11 v1.999808 pjacklam
* In Math::BigInt and Math::BigFloat, add methods bdfac() for double
factorial. Add tests for this method.
* In Math::BigInt and Math::BigFloat, add methods to_hex(), to_oct(), and
to_bin() for hexadecimal, octal, and binary string output without prefix.
Even for Math::BigFloat there is still only support for integer output. Add
tests for these methods.
* Add test for as_oct() corresponding to the old tests for as_hex() and
* In Math::BigInt::Lib, add method _dfac() for double factorial. Add
* In Math::BigInt::Lib, fix bug in overloaded "int".
* In Math::BigInt::Lib, implement much faster versions of _from_hex(),
_from_oct(), and _from_bin().
* In Makefile.PL, improve the wording in the message displayed if some of
the installed backend libraries are not a subclass of Math::BigInt::Lib (and
hence will not provide
* Fix minor bugs in some of the author library test files (t/author-lib*.t).
* Allow leading and trailing whitespace in the input to from_hex(),
from_oct(), and from_bin(). Add tests to verify. This is a regressions
(CPAN RT #119805).
* Sat Dec 24 2016 firstname.lastname@example.org
- updated to 1.999807
2016-12-23 v1.999807 pjacklam
* Add a message to Makefile.PL recommending upgrade if old libraries are
installed. This message is more or less equivalent to the one appearing in
Math-BigInt up until v1.997.
* Improve the documentation (POD) in Math::BigInt::Lib.
* Speed up _sqrt() and _root() in Math::BigInt::Lib.
* Remove checking for exception cases (cases that would return +Inf, -Inf, or
NaN) in Math::BigInt::Lib. It has been documented for a long time that such
checking should be done by the caller.
* Add library methods _to_bin(), _to_oct(), _to_hex(), which are equivalent to
the _as_bin(), _as_oct(), and _as_hex() methods respectively, except that
the _to_*() methods don't use a prefix in the output. This removes the need
for the frequent removal of the various prefixes. Now each _as_*() method
calls the equivalent _to_*() method, adds a prefix, and returns the output.
The _to_*() methods are faster than the equivalent _as_*() methods were.
* Add author test files for the methods _to_bin(), _to_oct(), and _to_hex().
* Add library method _to_bytes(). The method _as_bytes() would have been
called _to_bytes() if I had thought of it earlier. The method _as_bytes() is
now just an alias to _to_bytes(). The _to_bytes() method also fixes a bug
that was present in the _as_bytes() method. (CPAN RT #119346).
* Add author test files for the method _to_bytes().
* Add more tests for library methods _inc() and _dec(). When trying to bring
the Math::BigInt::BitVect library back to life I realized that the test
suite didn't catch certain errors in _inc() and _dec().
* Die if trying to use as_bytes() or from_bytes() with a backend library that
doesn't support the corresponding library methods.
* Correct minor errors in the output messages in the test files.
* Improve/correct various comments in the source code.
* More diagnostic output is displayed by the author test files if the
AUTHOR_DEBUGGING environment variable is set.
* Wed Dec 14 2016 email@example.com
- updated to 1.999806
2016-12-13 v1.999806 pjacklam
* Add more logic to Makefile.PL regarding INSTALLDIRS (CPAN RT #119199
* In the TODO file, remove stuff that has been implemented.
* Mon Dec 12 2016 firstname.lastname@example.org
- updated to 1.999805
2016-12-11 v1.999805 pjacklam
* Fix Makefile.PL so that this module installs over the core version.
* Add more tests for _nok() (binomial coefficient "n over k"). These new tests
revealed some problems with some of the backend libraries when _nok() was
given very large arguments.
* Remove t/Math/BigFloat/#Subclass.pm#, which is an Emacs temporary file
included by accident.
* Fri Dec 09 2016 email@example.com
- updated to 1.999804
2016-12-07 v1.999804 pjacklam
* Implement as_bytes(), as requested (CPAN RT 119096). Also implement the
inverse conversion from_bytes(). This applies to Math::BigInt only. (Alas,
these methods will be inherited from Math::BigInt into Math::BigFloat,
Math::BigRat etc. where the methods won't work. Fixing this class
relationship is an issue of its own.)
* Implement _as_bytes() and _from_bytes() in Math::BigInt::Lib. Preferably,
the various backend libraries will implement faster versions of their
own. Add author test files for testing these methods thorougly.
* Fix from_hex(), from_oct(), and from_bin().
- When called as instance methods, the new value should be assigned to the
invocand unless the invocand is read-only (a constant).
- When called as instance methods, the assigned value was incorrect, if the
invocand was inf or NaN.
- Add tests to t/from_hex-mbf.t, t/from_oct-mbf.t, and t/from_bin-mbf.t
to confirm the fix.
- Add new test files t/from_hex-mbi.t, t/from_oct-mbi.t, and
t/from_bin-mbi.t for better testing of these methods with Math::BigInt.
* Correct typo in Math/BigInt/Lib.pm (otherise -> otherwise) (CPAN RT 118829).
* Add POD coverage testing of Math::BigInt::Lib to t/03podcov.t.
* Mon Dec 05 2016 firstname.lastname@example.org
- updated to 1.999803
* Tue Nov 29 2016 email@example.com
- updated to 1.999802
2016-11-28 v1.999802 pjacklam
* When bzero(), bone(), binf(), and bnan() are used as constructors, don't
check whether the class allows the object to be modified. This applies to
both Math::BigInt and Math::BigFloat.
* Improve bgcd() and blcm(). This applies to both Math::BigInt and
* Fri Nov 25 2016 firstname.lastname@example.org
- updated to 1.999801
* Thu Nov 17 2016 email@example.com
- updated to 1.999800
2016-11-15 v1.999800 pjacklam
* Upgrade bundled Module::Install from version 1.16 to version 1.17.
* Add Math::BigInt::Lib (lib/Math/BigInt/Lib.pm), a parent class for
Math::BigInt backend libraries.
* Use objects in Math::BigInt::Calc, not just array refs. Also use OO-style,
i.e., use $class->_add($x, $y) rather than _add($class, $x, $y).
* Not all library methods modify the invocand, so call library methods as,
e.g, $x = $LIB->method($x, $y) rather than just $LIB->method($x, $y).
* Math::BigInt::Calc is now a subclass of Math::BigInt::Lib.
* Add Math::BigInt::Lib::Minimal (t/Math/BigInt/Lib/Minimal.pm) for testing
inheritance from Math::BigInt::Lib.
* Minor simplification in Math::BigInt::Calc->_str().
* Speed up Math::BigInt::Calc->_root().
* Remove test files that were included in the previous release by accident.
* Add more tests and use more verbose output in some tests.
* Fix typo in lib/Math/BigFloat.pm
* Fix documentation error in lib/Math/Calc.pm
* Use Config::Tiny and an .ini file to handle the library specific
configuration for the author-lib*.t test files.
* Sat Nov 05 2016 firstname.lastname@example.org
- updated to 1.999727
2016-11-04 v1.999727 pjacklam
* Skip test exceeding the range of VAX floating point number in t/bigintpm.inc
(CPAN RT 118468).
* Fix typo in lib/Math/BigInt.pm (CPAN RT 118550).
* Sat Jul 16 2016 email@example.com
- updated to 1.999726
2016-07-15 v1.999726 pjacklam
* Re-insert Math::BigFloat->DESTROY, which was accidentally removed in
* Thu Jul 14 2016 firstname.lastname@example.org
- updated to 1.999725
2016-07-13 v1.999725 pjacklam
* Add method is_finite().
* In Math::BigInt and Math::BigFloat, remove warnings about deprecated usage,
at least until we have removed this usage from the "bignum" distribution.
These warnings were too annoying for some people.
* Faster bnok() when the library (backend) does not support it.
* In the Math::BigFloat method bpi(), use a precomputed list of digits when
the accuracy is <= 1000. This speeds up the trigonometric functions
considerably, when I will introduce range reduction in a later release. This
makes the _atan_inv() method redundant, so remove it. Also, the _alen()
library method is now only used in _log_int(), which is good, because it
isn't clear from the docs and tests what it was supposed to do.
* Fix bug in the Math::BigInt::Calc library method _digit(). It would
sometimes return undef or an empty string when it should have returned zero.
* Fix bug in the Math::BigInt::Calc library method _rsft(). It would sometimes
return two output arguments.
* Fix bug in the Math::BigInt::Calc library method _lsft(). When the number
zero was shifted N places in base 10, the result was not zero, but an
* Fix bug in the Math::BigInt::Calc library methods _and(), _or(), and _xor().
They always assigned zero to the first input argument (the invocand).
* Improve the Math::BigInt::Calc library method _log_int() for the cases when
the output is zero or one. Also simplify the code.
* Simplify the code for the Math::BigInt::Calc library method _zeros().
* Reformat Math::BigInt::Calc so it is easier to read, for me anyway.
* Add file t/author-bnok-mbi.t
* Add one test file for every method in the libraries, including
t/Math/BigInt/Lib/TestUtil.pm with test utilities.
* Clean up whitespace in all files in the distribution.
* Better testing in t/author-bpi-mbf.t
* The Math::BigInt::Calc library now always uses integers inside the objects,
so there is no longer any need for all the "0 + ..." to convert strings to
numbers, and the "int()" inside "length(int(...))" to determine the length
of an array element. The only case that needs "0 + ..." now is the
constructor _new(), whose input is a string.
Note, however, that the Math::BigInt::FastCalc library method _new() still
creates objects with leading zeros, so until that is fixed, we can't remove
all the "0 + ..." etc. until Math::BigInt::FastCalc has been modified.
* Thu Jun 23 2016 email@example.com
- updated to 1.999724
* Sun Jun 12 2016 firstname.lastname@example.org
- updated to 1.999723
2016-06-09 v1.999723 pjacklam
* Add Math::BigInt and Math::BigFloat methods bnstr(), bestr(), and bdstr(),
as well as corresponding methods nparts(), eparts(), and dparts(). Also add
test files bdstr-mbf.t, bdstr-mbi.t, bestr-mbf.t, bestr-mbi.t, bnstr-mbf.t,
bnstr-mbi.t, bsstr-mbf.t, bsstr-mbi.t, dparts-mbf.t, dparts-mbi.t,
eparts-mbf.t, eparts-mbi.t, nparts-mbf.t, nparts-mbi.t, sparts-mbf.t, and
* Fix documentation errors.
* Thu May 05 2016 email@example.com
- updated to 1.999722
2016-04-16 v1.999717 pjacklam
* Using new() with an undefined argument no longer gives a warning. Explicit
use of this is discouraged, but it is sometimes used by the modules
themselves issuing warnings that is confusing to the end user. Just
uncomment the code, since we plan to reintroduce this warning later.
* Avoid using L<> around e-mail addressess in POD.
2016-04-22 v1.999718 pjacklam
* Improve documentation on large, unquoted input values to Math::BigInt.
* Remove stuff from bitfltpm.inc that was placed into author-numify-mbf.t, but
accidentally still present in bitfltpm.inc. Adjusted test counts as needed.
* Fix file headers in author-bmod-bdiv-mbi.t and author-btmod-btdiv-mbi.t.
* Add bnan(), binf(), and bsub() methods to Math::BigFloat. This is a step
along the way to having Math::BigFloat no longer being a subclass of
* Using bnan, binf(), bzero() and bone() as functions is deprecated. This is a
step along the way to a pure object oriented design.
* When bnan() and binf() are used as instance methods, they no longer delete
the accuracy and precision instance variables.
* Add test files from_bin-mbf.t, from_oct-mbf.t, and new-mbf.t.
* Remove some code for Perl prior to 5.6. Such old versions are no longer
* Fix buggy handling of NaN in bcmp().
* Add methods beq(), bne(), blt(), ble(), bgt(), and bge() to Math::BigInt and
Math::BigFloat. These methods are called for the overloaded operators.
* Add overloading of '==', '!=', '<', '<=', '>', to to Math::BigInt and
Math::BigFloat and fix the broken overloading of '>='. These overloaded
operators now behave like the equivalent core Perl operators.
* Add test file author-relop-mbi-mbf.t for testing bcmp(), beq(), bne(),
blt(), ble(), bgt(), and bge(), as well as the overloaded operators '==',
'!=', '<', '<=', '>', and '>='.
* 'int' now truncates a Math::BigFloat object to an integer without converting
it to a Math::BigInt. When an object becomes a Math::BigInt, further
computations with that object as invocand causes the arguments to be
converted to Math::BigInt objects too, leading to unexpected results. This
is confusing people. Unless downgrading is in effect, no Math::BigFloat
object should become a Math::BigInt unless a Math::BigInt is explicitly
* For Math::BigFloat, modify bitwise operations brsft() and brsft(), and add
band(), bior(), bxor(), and bnot(). These now handle floating point numbers
the same way as core Perl does, i.e., truncate non-integers to integers
before applying the bitwise operator. This change will also make Perl's
behaviour more consistent whether 'use bignum' is in effect or not.
* Add overloading of '~' (bitwise not). It just calls bnot(), which has been
implemented for ages.
* Fix error in POD for bone().
* Take parts of the code in t/calling.t and move it into the new files
t/calling-class-methods.t and t/calling-instance-methods.t.
* Improve test descriptions in t/mbimbf.inc.
2016-04-25 v1.999719 pjacklam
* Revert the change to Math::BigFloat's blsft() and brsft() methods, which
truncated the input (and output) to integers. However, now convert the base
to an object only when the base isn't an object already. Also return NaN if
any of the three operands is a NaN.
* Change t/bigfltpm.inc to reflect the changes to blsft() and brsft(). Also,
when a method should be tested, actually test that method, not the
overloaded operator, which doesn't necessarily behave in the exact same
manner as the method. This applies to the methods binc(), bdec(), bpow(),
badd(), bsub(), bmul(), bdiv() in scalar context, brsft(), blsft(), and
* The first output argument from objectify() is the class name, so use the
variable name $class, not $self.
2016-04-26 v1.999720 pjacklam
* Overloaded 'int' should not modify it's argument.
* Better documentation of blsft() and brsft().
2016-04-26 v1.999721 pjacklam
* Prevent Math::BigFloat methods band(), bior(), bxor(), and bnot() from
modifying unmodifiable objects.
2016-04-26 v1.999722 pjacklam
* Fix bug in bone() and binf() when used as a function. The error caused
warnings about using an unitialized variable. This fix applies to both
Math::BigInt and Math::BigFloat.