gmp v4.2: misc. bugs and flaws

ThMO thmo-13 at gmx.de
Fri Mar 31 22:07:15 CEST 2006


Hello folks,

I've noticed some bugs and flaws, which needs some correction, namely:

· intalled library versions aren't correctly numbered:
  · v4.1.4:
    · libgmp.so.3.3.3
    · libmp.so.3.1.7
  · v4.2:
    · libgmp.so.3.3.0
    · libmp.so.3.1.4
  -> one would expect, that newer versions of this library do install
     libraries with higher version numbers, since `ldconfig' will use
     the *older* libraries, unless removed first

· the declaration of the gmp_vasprintf() inside the texinfo manual is
  wrong, since it's first parameter is of type char **
  (I've reported this already last year in october...)

# snip for diff #
--- gmp-4.2/doc/gmp.texi.orig   2006-03-22 09:39:17.000000000 +0100
+++ gmp-4.2/doc/gmp.texi        2006-03-29 21:52:53.000000000 +0200
@@ -5805,7 +5805,7 @@
 @end deftypefun
 
 @deftypefun int gmp_asprintf (char **@var{pp}, const char *@var{fmt}, @dots{})
- at deftypefunx int gmp_vasprintf (char *@var{pp}, const char *@var{fmt}, va_list @var{ap})
+ at deftypefunx int gmp_vasprintf (char **@var{pp}, const char *@var{fmt}, va_list @var{ap})
 Form a null-terminated string in a block of memory obtained from the current
 memory allocation function (@pxref{Custom Allocation}).  The block will be the
 size of the string and null-terminator.  The address of the block in stored to
# end of snip for diff #

· it would be nice, if the generated binaries and C files be deleted,
  while invoking `make clean', namely:
  FUCK= mpz/fac_ui.h gen-fac_ui gen-fac_ui_.c fib_table.h gen-fib \
        mpn/fib_table.c gen-fib_.c mp_bases.h gen-bases mpn/mp_bases.c \
        gen-bases_.c mpn/perfsqr.h gen-psqr gen-psqr_.c
  clean: clean-recursive
        $(RM) $(FUCK)

· mpz_set_str(): this function fails several times converting string values
  (I've reported those failures last year in october too, but it seems, it
   wasn't of interest..., although it might be the reason, that the mailing
   list software is unable to handle FWDs correctly...)
  [if some C code is wanted to play with the conversion failures, just drop
   me a note, since the older C code doesn't handle the increased bases]

  now following the failures:
  · mpz_set_str( n, "+13", 10);
    -> an optional `+' sign is *not* an error
  · mpz_set_str( n, "13 ", 10);
    -> trailing white-space *is* an error
  · mpz_set_str( n, "  -000 13", 10);
    -> white-space between digits *is* an error
  · mpz_set_str( n, "0x", 0);
    -> if the given base is 0, which means the base shall be set upon scanning,
       and the base-signifier isn't followed by at least one valid digit, this
       *must* be an error
  · mpz_set_str( n, "0xabc1262", 16);
    -> if base is 2 or 16 *and* the respective base-signifier is given at the
       front of the number, this *is* correct
    the only exception to this rule is octal zero, which is handled correctly

· default values, according to `configure --help' and the configuration re=
  sults differ, e.g. `configure --help' says, that re-entrant temporary
  allocation is the default, but after inspecting the generated config.h
  file, alloca() will be used for temporary storage allocation
  this is fine for me, but not for others - and differs, from what the
  help-screen says

· make ordering: recursing into the demos/calc directory, *before* the
  library has been generated, isn't a good solution, if someone changes
  the Makefile in this sub-directory, in order to built this program...

· some thoughts about automatically select the processor gimmicks, namely
  MMX and SSE stuff, during runtime:
  detecting those features for the processor in question is easy, but checking
  that the underlying OS is able to support them, while running, is very
  difficult, if not to say impossible, in a reliable way, e.g. I've checked
  the gmp library on a friend's computer running a P-III, where the configure
  script accordingly activates SSE, but the underlying OS doesn't support SSE;
  in the best case, the program simply dies, but in the most common case, the
  program simply delivers wrong results (although one time some SSE instructions
  hang the computer, which cried for a hard boot then), so it might be the best
  solution, to always let the user decide at compile time, which gimmicks should
  be used

· and now a compliment - it's good to see, that mpz_millerrabin() can be called
  directly, hoping you'll not decide to hide it in the future...

THX for listening.

CU Tom.
(Thomas M.Ott)
Germany


More information about the gmp-bugs mailing list