Questions.. Questions ..

Lucien Hayen l.hayen at
Wed Nov 23 13:34:41 CET 2005


In an effort to understand exactly what the internals of mpf_t mean,
(writing routines to enter single precision floats, long doubles,
and signed and unsigned long long integers into mpf_t items) I came
across some problems.

1) I have version 4.1.4 but the macros __GMPF_BITS_TO_PREC and
   __GMPF_PREC_TO_BITS do not seem to exist.

2) The expression sizeof(mp_limb_t) popped up so many times that
   inclusion of the exact numerical value (4 on my system) in gmp.h
   (as it is generated for each particular system) seems to be
   reasonable : #define GMP_LIMB_BYTES 4 (or whatever is the case).

3) The mpz_t structure element _mp_prec seems to have two 
   different and contradictory uses : at init time the number of
   limbs to use as precision, and the number of limbs allocated (-1).
   Later on this last meaning may be lost.
   Would it not be better to insert a _mp_alloc (or more clearly)
   a _mp_prec_max item in the mpf_t structure ? No more problems
   at clear time, no more mpf_set_prec_raw() accidents if the maximum
   precision is silently or otherwise enforced (warning on page 47 of
   the manual).

4) Clearing in general does deallocate memory, but keeps a pointer
   to now non existing memory, or worse yet, to memory allocated
   after the clear operation for purposes that need not even be
   related to GMP uses. Why not setting _mp_d to NULL so that any
   accidental second clear operation will fail there and then. Now
   it can happen somewhere later, deeper in the software, and
   possibly difficult to find.

I hope that you do not see my questions as criticism on your very
fine work and the resulting software.

Yours truly

Lucien Haijen

More information about the gmp-discuss mailing list