123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- 1.0.1
- First released version.
- 1.0.2
- Fixed a bug in mp_int_div() which would yield incorrect quotients
- when the divisor was very close in value to a prefix of the
- dividend. This is now fixed, and there are regression tests in
- the tests directory.
- Added recursive multiplication and squaring (Karatsuba-Ofman) for
- large input values. Integrated these with the existing code for
- exponentiation, too. See the code for s_kmul() and s_ksqr() in
- imath.c. Tests added and verified against GNU bc.
- Added documentation on mp_get_multiply_threshold() and the reason
- why it exists.
- 1.0.3
- Fixed a couple of bugs in pi.c that were causing incorrect values
- to be computed for > 30 digits or so. Added a pi-computation test
- to the default test suite (make test), checked against a static
- file computed by bc (set scale=1024, compute 4 * atan(1)). Added
- command line option to specify output radix for pi.
- Cleaned up a sign-related bug in mp_int_gcd(), which would cause
- the sign of gcd(0, x) to be incorrect when x < 0. Test cases
- added for future regression.
- Fixed a bug in s_reduce() which would give incorrect results for
- powers of 2 in certain circumstances. Added tests to drive this
- case for future regression.
- Added mp_int_exptmod_evalue() and mp_int_exptmod_bvalue() to make
- it easier to work with small bases and small exponents.
- Set default recursive multiplication threshold to 50 digits, since
- this seems to work best for the platforms I've tested so far.
- Added iprime.h and iprime.c to the distribution.
- 1.0.4
- Added `findsizes.pl' to the distribution.
- Revised the type declarations in imath.h to use 32/64 bit
- operations where the "long long" type is supported.
- Fixed a sign-related bug in mp_int_invmod().
- Fixed several small bugs related to shifting which affect the use
- of 32-bit digits. Many architectures cannot shift by 32 bits at a
- time (e.g., MIPS), so I split each of these cases into two shifts
- of half the size, which should scale properly for both the smaller
- and larger cases.
- Fixed several arithmetic issues with 32-bit digits that arose due
- to missing type-casts on the right-hand sides of assignments.
- Fixed s_print() and s_print_buf() to handle the sizes of digits
- transparently.
- 1.0.5
- Updated the Makefile to include the _GNU_SOURCE macro. For many
- GCC systems, this is necessary to get the correct definition of
- the ULLONG_MAX macro in <limits.h>. Also, you may now build with
- the make option DEBUG=Y to enable debugging, e.g.:
- make DEBUG=Y imtest
- By default, the Makefile builds with the optimizer enabled.
- Cleaned up the definitions triggered by USE_LONG_LONG in imath.h,
- and added an #error instruction in case the build is unable to
- find a definition of ULLONG_MAX or ULONG_LONG_MAX in <limits.h>.
- Also added the mp_int_to_unsigned(), mp_int_read_unsigned(), and
- mp_int_unsigned_len() prototypes.
- Fixed a bug in s_qmul() [imath.c:2493] that would grow the value
- being multiplied even if there was room in the existing digits to
- hold the result. This was driving an (apparent) bug in the more
- general mp_int_read_binary() routine. Added the routines
- mentioned in the previous paragraph, and factored some common
- code out into a static s_tobin().
- Added reset_registers() to imdrover.{h,c}. Added new test
- driver functions test_to_uns() and test_read_uns(). Renamed
- test_read_bin to test_read_binary().
- Silenced a sign-related warning in pi.c (related to printf).
- Added many new test vectors to tests/conv.t, including the
- original bug proof-of-concept from Tom Wu, and a series of new
- tests for the unsigned conversion routines.
- Updated `doc.txt' to reflect the changes described above.
- 1.0.6
- Updated copyright notices, added LICENSE file explaining the
- license I am using. This is basically the BSD license, so
- you should have no trouble incorporating this code into other
- open source projects.
- No new functionality in this release.
- 1.0.7
- The mp_int_invmod(a, m, c) function would compute a negative value
- for c when given a < 0. I added some code to insure that the value
- returned is always the least non-negative member of the congruence
- class, if the inverse exists. A test for this was added to invmod.t.
- 1.0.8
- Fixed a small buffer-overrun in s_qmul(). Because it only
- allocates an extra digit if it absolutely has to, the test for
- whether it needs to carry a shift out into the "spare" digit had
- to be written carefully; I missed a subtlety, which is now
- fixed. Along the way, I fixed a minor performance-related bug in
- the same routine.
- Added mp_int_error_string(), which converts mp_result values
- into descriptive strings. These are statically allocated, so
- you don't have to free them.
- This version also adds an "examples" subdirectory. Currently,
- there is only one program there, but I will add more examples as
- time permits me. You have to read the source to understand them
- anyway, so I won't explain them here.
- 1.1.0
- Added imrat.h and imrat.c, containing routines for rational number
- arithmetic at arbitrary precision. Added support to the test driver,
- in imath.c and included various tests in the tests/ subdirectory.
- Fixed a sign-of-zero bug in mp_int_mul(). Tests added to mul.t to
- regress this fix.
- 1.1.2
- Fixed a bug with leading zeroes after the decimal point in the
- mp_rat_read_decimal() function (imrat.c). Along the way, I also
- found a sign-related bug, in which -0.5 would be treated as if it
- were positive, because the sign of zero is implicitly positive,
- and the denominator is treated as unsigned always.
- Thanks to Eric Silva for pointing out the leading zeroes bug.
- The solution isn't the most efficient possible.
- 1.1.3
- Rewrote mp_int_to_decimal() to support new rounding modes. The
- modes are documented in doc.txt. Some of the code sucked anyway,
- so I rewrote pretty much the entire function.
- Added new rounding mode constants.
- 1.1.4
- Added mixed rational/integer operations:
- mp_rat_add_int, mp_rat_sub_int, mp_rat_mul_int, mp_rat_div_int
- Added rational exponentiation (with integer exponents):
- mp_rat_expt
- Tests for same were added to the tests/ subdirectory.
- 1.1.5
- Added mp_rat_read_cdecimal() and mp_rat_read_ustring()
- Updated the input.c example.
- 1.1.6
- Fixed a bug in mp_int_read_cstring() which would read the string
- "-0" with incorrect sign (MP_NEG instead of MP_ZPOS). This would
- violate an invariant that zero is always signed with positives.
- Added some tests to tests/neg.t to catch this case.
- 1.1.7
- Fixed a bug in s_udiv(), internal to imath.c, which caused
- division to fail in some corner cases masked by the use of long
- long as a word type. As a result, s_udiv() has now been wholly
- rewritten. I also fixed a few lingering buffer-length errors in
- s_kmul(), and added a "const" qualifier to the input buffers for
- the mp_int_read_string() and mp_int_read_cstring() functions,
- and their analogs in imrat.c.
- 1.1.8
- Added mp_int_alloc() and mp_int_free().
- 1.1.9
- Added mp_rat_alloc() and mp_rat_free(). Fixed a couple of minor
- bugs in the doc.txt file. Added mp_int_sqrt() to imath.{h,c} and
- doc.txt.
- 1.2
- Dropped bugfix component of revision number. Fixed rsakey.c
- example program to be complete and work faster.
- 1.3
- Replaced findsizes.pl with findsizes.py. Fixed two bugs in the
- rsakey tool that were leading to incorrect output.
- 1.4
- Fixed a bug in mp_int_alloc(), it was not returning NULL when out
- of memory, but rather failing in assert() instead. Also, updated
- the documentation to have better language about the return values
- in various error conditions.
- 1.5
- Changed the API for rational rounding. Removed the two functions
- mp_rat_set_rounding() and mp_rat_get_rounding(), along with the
- round_output global variable. Redefined the MP_ROUND_* constants
- as an enumeration type (mp_round_mode). Added a new parameter to
- the mp_rat_to_decimal() function to accept a rounding mode. Unit
- tests and doc.txt updated suitably.
- This release also incorporates a small patch submitted by Jonathan
- Shapiro to support compilation in C++.
- 1.6
- Defined default_precision and multiply_threshold to be constant
- and static. If IMATH_TEST is defined at compile time, these are
- made global, and can be modified by the caller (the imtimer tool
- makes use of this ability, for example).
- Implemented a single-digit optimization suggested by J. Shapiro.
- Documentation updated.
- 1.7
- Fixed a subtle casting problem in the use of the ctype macros that
- would permit negative signed character values to produce illogical
- behaviour in some configurations (e.g., NetBSD). Removed a dead
- "return" statement.
- Added the -pedantic switch for gcc, to get more aggressive
- warnings; to permit the nonstandard "long long" type to still be
- used, I also added -Wno-long-long when building with long long
- enabled (the standard configuration).
- Fixed a bug found by the Samba team running Valgrind on the
- Heimdal project, and reported by Love Hörnquist Âstrand: One of
- the intermediate values used during modular exponentiation could
- be overflowed during recursive multiplication. Fixed by taking a
- more conservative approach to buffer sizing.
- Added a "contrib" subdirectory, whose first entry is a Makefile
- to build IMath with the MSVC++ "nmake" program, contributed by
- Matus Horvath.
- 1.8
- Fixed a bug in s_udiv() affecting the computation of quotient
- digits. Thanks to Love Âstrand for isolating this bug. Also in
- this release, defining USELLONG=Y or USELLONG=N on the command
- line for make will switch support for the "long long" data type on
- or off without having to edit the Makefile. The default is still
- to permit use of "long long", even though the type is not standard
- ANSI C90.
- 1.9
- Increased the number of small primes used for primality testing to
- 100 from 32. Removed an unwanted #define from imath.c, left over
- from testing; added "static" to the declaration of the s_embar()
- internal function since it is not used outside imath.c. Reduced
- the quantity of feedback generated by rsakey.c during the prime
- finding stage of key generation.
- 1.10
- All primes less than 1000 are now used in iprime.c for preliminary
- testing of prime candidates. Removed declaration of s_pad() from
- rsakey.c example. Added imcalc.c example.
- Beginning with this release, defining the DEBUG preprocessor macro
- when compiling imath.c causes all the normally-static helper
- functions to be exported. This makes it easier to troubleshoot
- bugs in the back end functions without manually editing the source
- till you have found where the bug actually is.
- Fixed a memory leak in the test driver (imtest.c) where the input
- buffers allocated for test specs were not released before being
- released. No impact on the core routines, but nevertheless not a
- good thing.
- Fixed several uninitialized memory reads and one subtle read past
- the end of a buffer in s_kmul(), found during a run of Purify.
- Thanks to Love Hörnquist Âstrand for finding this one, and
- providing a good test case so I could isolate the problem. Also
- fixed a buglet in s_kmul(), in which free() was being called
- instead of s_free(), which would break if you provided a custom
- version of s_alloc() and s_free() for your application.
- 1.11
- Those functions which take int parameters to supply one or more of
- the arithmetic values of the function have been converted to use a
- typedef "mp_small". This is defined in imath.h, along with some
- supporting macros.
- Added mp_int_to_uint() and mp_int_lcm() in imath.{h,c}, based on a
- patch contributed by Hal Finkel. Added LCM tests as as well as
- some more GCD tests in tests/lcm.t and tests/gcd.t
- Also at Hal Finkel's request, added mp_int_root() to compute the
- integer nth root, i.e., \lfloor a^{1/b}\rfloor; replaced the old
- mp_int_sqrt() function with a call to mp_int_root() via a macro.
- The new implementation is probably slightly less efficient for
- square roots, but more general. Added tests/root.t and moved the
- sqrt tests there, also.
- 1.12
- Added a new global constant MP_MINERR which is the value of the
- smallest error code defined by IMath itself. This can be used by
- clients who wish to define and use additional error codes, so that
- those codes will not conflict with the existing set.
- Extended the imcalc example to include memory.
- Fixed a bug in mp_int_add() in which -1 + 1 = -0 (the sign of zero
- was recorded incorrectly). Added tests to the regression suite
- for this fix.
- 1.13
- Cosmetic change -- updated all the files with my new web address.
- Fixed a buglet caught by Love Hörnquist Âstrand using the LLVM
- static checker tools, in which a mp_int_copy() failure would be
- silently ignored and cause an extra copy to be generated.
- Fixed a bug in the testing suite while building on MinGW. The pi
- generation tests compare to static files and these tests fail if
- CR/LF is output instead of just LF. The test script now strips
- all CR and LF from the output and compares to files lacking them.
- Reported by Chris Cole <cjcole@gmail.com>.
- 1.14
- Instead of using the preprocessor to delete "static", the static
- definitions in imath.c now use an explicit STATIC macro, that is
- made null when DEBUG is defined. This avoids a subtle problem
- with static variables defined inside functions (although no bugs
- actually arose from it).
- Fixed a bug in s_udiv() while building on MinGW. When building
- with short type digits, the routine was incorrectly discarding
- overflow when computing the next quotient digit.
- Reported by Paul DeMarco <pdemarco@ppg.com>.
- 1.15
- Fixed a bug in the definition of MP_DIGIT_MAX that caused errors
- when IMath is built under 64-bit Linux. Reported by
- Klaus Stengel <klaus.stengel@informatik.stud.uni-erlangen.de>.
- Unpacked the macro definitions in imath.c a bit, to make them more
- readable.
- Added mp_int_expt_full() by request of Andrea Barberio
- <insomniac@slackware.it>.
- 1.16
- Fixed a bug in mp_int_to_uint() which was causing incorrect MP_RANGE
- errors during small integer conversion.
- Reported by Andrea Barberio <insomniac@slackware.it>
- Added mp_int_compare_uvalue().
- Added some new testing hooks in imtest.c, new unit tests.
- Made some code style changes that do not affect functionality.
- 1.17
- Fixed a bug in mp_int_swap() where mpz_t structures using their single
- field as storage would not get swapped correctly.
- Reported by Andres Navarro <canavarro82@gmail.com>
- Added regression test for this and some hooks for future
- regressions in the tests/test.sh script.
- 1.18
- Made mp_int_rat() use mp_int_init() to initialize numerator and
- denominator instead of mp_int_init_size().
- Some minor code cleanup inside the testing code (imdrover.c).
- Fixed an off-by-one bug in s_udiv() which could cause the quotient
- guessing loop to spin. Reported by Andres Navarro. Added
- triggering example to div.t as a regression test.
- 1.19
- Fix signedness error in compile. Reported by Paweł Sikora.
- 1.20
- Fix broken comments, apparently from a previous bad merge.
- Remove emacs folding-mode comments throughout.
- Some minor Makefile cleanup to make clang happier.
- 1.21
- Fix a syntax error. TODO: Run tests before merging, or better
- still set up CI someplace.
- Remove dead division code.
- Restore a missing comparison.
- Drop dead flags from the Makefile.
- 1.22
- Remove MP_USMALL_MIN, which was unused by anything in imath.
- Rework doc.txt into Markdown.
- Restore imath-test.scm and imath.py, dropped during import.
- 1.23
- Portability fixes from PostgreSQL (#8), from nmisch.
- 1.24
- A cosmetic update, consisting mainly of readability updates,
- documentation fixes, and warning fixes. There are not intended to
- be any functional changes in this update, but a fair bit of code
- and the Makefile have been modified, so I'm adding a tag.
- My intent is to keep the source formatted with clang-format going
- forward, though I will need to set up some presubmit checks to
- enforce that. For now it is still a manual step via "make format".
- 7e45d6a Remove a doc reference to MP_USMALL_MIN.
- 544687d Fix the spelling of mp_error_string in doc.md.
- 592d4a0 Fix some mis-converted section breaks in doc.md.
- df9fe8e Format source files with clang-format.
- fcb4e21 Build with 64-bit words by default.
- 1579b70 Minor simplifications to the Makefile.
- 0fbe8e6 Style cleanup: More invasive manual changes.
- 1d28177 Add -Wextra and -Wno-unused-parameter to default build flags.
- 15ba02a Fix warnings for signed/unsigned comparisons.
- 3556984 Style cleanup: Insert missing brackets.
- 1.25
- This version fixes several issues found by clang static analysis.
- It also includes some additional follow-on cleanup tasks from the
- previous release.
- b5a73c4 Cleanup: Use .tc for test files instead of .t.
- dc307ae Cleanup: Remove dead author URLs, SVN markers.
- 389a1be bug: Fix a memory leak in test_meta.
- 8fb98f7 bug: Fix a use of an uninitalized pointer.
- fe0757a bug: Fix reads of uninitalized fields in free_test.
- 08fe765 bug: Fix a reachable null pointer indirection.
- 7b10453 bug: Remove a redundant initialization.
- cebce44 bug: Fix various dead assignments.
- ef36352 Remove the findsizes.py script.
- eebfb85 Fix some more comparison-sign mismatches.
- 9abcf66 Cleanup: Update a stale reference to doc.txt in the README.
- 8ec696f Cleanup: Consolidate the USE_32BIT_WORDS macro sections.
- 1.26
- Another round of fixes. Notably the gmp-compat-test again works on
- macOS, fixing https://github.com/creachadair/imath/issues/26.
- Also, this release cleans up some more warnings and fixes some
- missing #include paths.
- 2ea0fff gmp_compat: Fix warnings for mixed-sign comparisons.
- 2a41bae Fix DLL loading.
- 56c40f4 Make gmp-compat-test work again on macOS.
- f163906 Comment out a vacuously true assertion.
- 667d90e gmp_compat: Ensure a definition of ssize_t is available.
- 6c6fdd8 Fix a vacuously meaningless comparison.
- 4dac16f Silence a warning about an uninitalized variable.
- c6119c4 Include strings.h for strcasecmp.
- 1.27
- Another round of cleanup and bug fixes. This release includes a
- Dockerfile to support basic Linux testing, which I found useful as
- I do most of my work on macOS.
- This release also addresses most of issue #29 (Switching from C90
- to C99). Part of that change removes most function-like macros
- from the API headers, replacing them with static functions. Code
- that used the macros as lvalues will no longer work, but can and
- should be easily updated to access the members of mpz_t directly.
- Fixed: #34.
- 899e202 Add a docker config for basic Linux testing.
- 40e8887 Move imath-test.scm to the tests directory.
- 6f01c9f Add .dockerignore to the release tarball.
- 1dab081 Fix the spelling of __abs__ in imath.py.
- 8f0a00c Enable source formatting for Python.
- 99e27c8 Format all Python source with yapf.
- bf289f0 gmp-compat-test: Remove dependency on Python 3.
- 9269d57 Clean up the Linux test image.
- 61ca691 Include stdbool.h and use the bool type where appropriate.
- d4760ee Replace macros with static inline functions.
- 8241977 linux test: Layer the image for better caching.
- 46bb578 imath: Replace accessor macros with inline functions.
- 50c6cc8 imrat: Replace accessor macros with static functions.
- 0c5cec9 gmp_compat: Fix lvalue uses of MP_USED.
- 89c72f2 Remove CHECK and NRCHECK macros.
- dbe9f50 imath: Replace macros with static functions.
- 0006998 imath: Replace ROUND_PREC macro with a function.
- b628a0c Move local variable declarations closer to first use.
- 54d51da Remove obsolete division spec.
- 796776f iprime: Move and scope variables closer to first use.
- 8fd5236 iprime: Use a sentinel instead of a length.
- ce89180 Include getopt.h explicitly where it is required.
- e6fc170 Make libimath.so build correctly under GCC.
- b54d8c9 Use Bourne in preference to Bash.
- 8f88c01 Makefile: Export CC and CFLAGS for submakes.
- 58f4392 Use the inherited settings in the gmp-compat-tests.
- 8a181cd Make the Linux docker test run "make check".
- 28617f2 gmp_compat: Fix overflow in the uint conversion adapter.
- 1.28
- Another round of cleanup, and some more invasive API changes.
- I removed more macros, and added an API surface for setting the
- default precision and recursive-multiply threshold.
- The compile-time switchable statics are now strictly static.
- The handling of temporary values was greatly reworked to make it
- less brittle.
- ba44b37 Add unit tests for mp_int_is_prime.
- 6f10877 imath: Remove lvalue uses of access macros, and the macros.
- f4939db Fix formatting.
- 85137fa docs: Remove macro implementation comments.
- 37f046e Rework the handling of temporaries.
- cc8ac74 imtimer: Fix a lingering lvalue use of MP_USED.
- 9736a8b imath: Drop switchable statics and stdio dependency.
- 5445ad8 Add functions to set default precision and multiply threshold.
- 58f2d6e Use alpine:latest rather than a fixed version.
- 1.29
- The Documentation Edition. The main improvement here is that the
- API documentation is now unified in the header files, and doc.md
- is now generated from a template that includes the text from the
- headers. The automation for this is still unsatisfactory, but it
- is better than it was.
- d239b2e Remove imath.py.
- e43b0f5 imath: Clean up extraneous whitespace.
- fbbbbad Remove the mpz struct tag.
- 718fef2 imath: Add documentation comments to the header.
- 02600e5 imath: Make radix bound checks into requirements.
- c21f49d imrat: Add documentation comments to the header.
- ea5398f Remove the mpq struct tag.
- c1549c7 Move tools and tests into subdirectories.
- 7187c49 Remove extraneous whitespace from declarations.
- afa715c Comment cleanup on Aisle 2.
- cbf9a03 Add tools/mkdoc.py.
- 58672fc Remove the "dist" target from Makefile.
- 894bb90 Move rtest.c into the tests directory.
- d4cfc69 Add a doc.md.in template file.
- bd929aa Add a make rule for doc.md from doc.md.in.
- 6dea44e Update doc.md using the new generator.
- 56ef9a0 doc: Include mp_int_set_uvalue.
- 13618b3 doc: Explain the comparator terminology.
- 9990b2e Make the clean and distclean make-rules equivalent.
- 13df978 doc: Update the explanation of temp handling macros.
- b80bd8a doc: Emit one generated comment for the whole file.
- 3cde6b8 doc: Remove the markdown disclaimer.
- 045a2a6 doc: Point my address to github instead of e-mail.
- 08f2efd doc: Add headings for general API functions.
- 77159d9 mkdoc.py: Link back to source lines.
- aec8587 doc: Include links back to the source.
- f8c9f6c imath: Document a constraint on mp_int_redux_const.
- 1.30
- Improve test automation; no functional changes to the library.
- fc7846a imtest: Ensure the exit code is non-zero when tests fail.
- 87edcbe test.sh: Exit non-zero if any unit tests fail.
- 276d1f9 imtest: Make test output easier to read.
- c8c90c4 Make the Linux test protocol less brittle.
- f68ba5b Add a .gitattributes file.
- 33c2843 Add a docker-test target to the Makefile.
- 1.31
- Improvements to build and test automation; add CI configuration.
- d419633 Add a Travis CI configuration for imath.
- 3305c4a Ensure the Makefile respects a $CC set in the environment.
- d2da4b6 Update instructions for reporting bugs.
|