On Mon, Feb 7, 2011 at 1:03 AM, Cactus <rieman...@gmail.com> wrote:
>
>
> On Feb 7, 7:23 am, Case Vanhorsen <cas...@gmail.com> wrote:
>> On Fri, Feb 4, 2011 at 7:50 AM, Cactus <rieman...@gmail.com> wrote:
>> > Having been caught once more by the often made, but incorrect,
>> > assumption that the length of the 'long int' types GMP and MPIR use in
>> > conversions match the length of limbs, I am wondering if it is time to
>> > do something about this.
>>
>> > This has recently come up several times over on the MersenneForum,
>> > with more than one plea that we should 'do something about it' by, for
>> > example, by using a type in these functions that is defined to be of
>> > the same length as mp limbs.   An alternative would be to introduce a
>> > distinct type for all such uses so that GMP/MPIR users could set the
>> > actual type used when GMP/MPIR is built.
>>
>> Based on my experience with gmpy, I suggest the following:
>>
>> Create a parallel set of APIs (mpz_set_sii ??) that accepts a long
>> long. On platforms with a 32-bit limb and a 64-bit long long, this API
>> would need to set two limbs.
>>
>> If you want to present a single API to the user, you could define a
>> signed version of mp_limb_t and then define mpz_set_limb as either
>> mpz_set_si or mpz_set_sii.
>>
>> Python has distinct API calls for working with long vs. long long, so
>> having access to both mpz_set_si and mpz_set_sii works well for me.
>>
>> I think the underlying limb type should be chosen for performance and
>> the API should expose standard C types so I'm not in favor of
>> specifying the limb type at compile time.
>>
>> Another "length of long" issue is the size of mp_bitcnt_t. It is
>> currently set to unsigned long. I think size_t (which is already used
>> in mpz_sizeinbase) would be more appropriate.
>
> Thank you for this feedback Case.
>
> To have a complete parallel API for long long types would involve a
> lot of new functions because it is not only the set/get functions that
> are involved.
>
> Are you suggesting that we should just add set/get functions or a
> complete parallel long long API?
A complete parallel long long API. I was just just mpfr_set_ as an example.
>
> In MPIR (not GMP) mp_bitcnt_t is defined as:
>
> #ifdef _WIN64
> typedef unsigned long long int  mp_bitcnt_t;
> #else
> typedef unsigned long int mp_bitcnt_t;
> #endif
>
> so it follows the size of limbs.
I missed that. The documentation for mpz_popcount should be changed
since it refers to ULONG_MAX.
>
>   Brian
>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "mpir-devel" group.
> To post to this group, send email to mpir-devel@googlegroups.com.
> To unsubscribe from this group, send email to 
> mpir-devel+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/mpir-devel?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"mpir-devel" group.
To post to this group, send email to mpir-devel@googlegroups.com.
To unsubscribe from this group, send email to 
mpir-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/mpir-devel?hl=en.

Reply via email to