mp_bitcnt_signed_t
Marc Glisse
marc.glisse at inria.fr
Sat Aug 22 19:28:18 UTC 2015
On Sat, 22 Aug 2015, Niels Möller wrote:
> Marc Glisse <marc.glisse at inria.fr> writes:
>
>> For the mpz case, the answer should always be nonnegative, so we could
>> use an unsigned type if we wanted, but I guess it is better to keep
>> the current signed type, which is consistent with the mpf case.
>
> If it's really non-negative,
It approximates z as d*2^exp where abs(d)<1, so I believe that exp is
always non-negative.
> I think I'd prefer the unsigned mp_bitcnt_t. I don't think consistency
> with mpf (deprecated) is important.
Ok. Do we consider that changing the type from signed to unsigned in the
next release is fine (some people might get a warning)? Or should I just
leave it alone?
(I was looking at this function because of another project that uses it, I
don't particularly want to change it)
>> What do you think of introducing 2 typedefs mp_builtin_[su]i (or
>> mp_native_[su]i or gmp_[su]i or whatever) and using them in all the
>> functions with _si or _ui in their name ?
>
> As I understand it, the main point of those interfaces is to support
> plain unsigned long (or signed long). Then I think a new typedef is more
> confusing than clarifying.
Ok.
On Sat, 22 Aug 2015, Niels Möller wrote:
[unsigned types]
>> They are really ugly when doing arithmetic on them,
>
> They have the slight advantage that behaviour on overflow is well
> defined. But you might be right that problems from unexpected
> conversions negate that advantage.
The well-defined behavior on overflow is actually a drawback here. It
prevents from having a debug mode that traps on overflow and hinders
optimizers. Wrapping doesn't make much sense for a bit count.
The current dominant opinion in the C++ community (don't know about C) is
that with signed and unsigned defined as they are in C, unsigned types
should be marginalized and only used for very specific cases like bignum
(where wrapping makes sense) and bitfields (where you don't perform
arithmetic anyway). It should not be used just because a value is
non-negative. But it is too late, with many places in the standard using
unsigned types...
--
Marc Glisse
More information about the gmp-devel
mailing list