mini-gmp
    Niels Möller 
    nisse at lysator.liu.se
       
    Fri Jan 17 09:51:28 UTC 2014
    
    
  
Vincent Lefevre <vincent at vinc17.net> writes:
> IMHO, if a non-negative value fits in a signed type and is regarded
> more as an element of the ring of integers Z than a bit array (said
> otherwise, it will be used in arithmetic expressions), then the type
> should be signed.
I see your point. Personally, I tend to use unsigned for non-negative
numbers such as loop counters (but then I have to be careful to avoid
underflow).
In the context of GMP, it's maybe worth noting that mp_bitcnt_t is an
unsigned type, and that for micro optimization, we prefer to use
unsigned types whenever dividing a non-negative number by a constant.
For illustration, compile the following with gcc -O3. Instruction counts
for x86_64.
  int
  sdiv2(int x) /* 5 instr */
  {
    return x / 2;
  }
  
  unsigned
  udiv2(unsigned x) /* 3 instr */
  {
    return x / 2U;
  }
  
  int
  sdiv3(int x) /* 7 instr */
  {
    return x / 3;
  }
  
  unsigned
  udiv3(unsigned x) /* 6 instr */
  {
    return x / 3U;
  }
Regards,
/Niels
-- 
Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26.
Internet email is subject to wholesale government surveillance.
    
    
More information about the gmp-devel
mailing list