gmp_gcdext method on 32bit vs 64 bit machines

Waiki Wright waiki at linux.vnet.ibm.com
Thu Apr 21 23:25:11 CEST 2011


On 04/19/2011 01:27 PM, Marc Glisse wrote:
> On Fri, 15 Apr 2011, Waiki Wright wrote:
>
>> Let me know if this is not the right place to post this question.
>
> gmp-bugs sounds better, but I don't know.
>
>> I have 2 machines- RedHat Rel6 64 bit and RedHat Rel6 32 bit.  I have 
>> php 5.3 and gmp 4.3 on both machines.
>>
>> I am using gmp_gcdex() method from php to get the g, s, t values.
>> When I ran gmp_gcdex("34293864345", "23434293864345"); on the 64 bit 
>> and 32 bit machines, I got different results for s & t:
>>
>> On 64 bit: g=195, s= -20983781660442, t= 30707772373
>> On 32 bit: g=195, s= -4760039754357, t= 6965866288
>>
>> I looked into how php treating big integers on 32 and 64 bit machine 
>> but did not find anything.
>>
>> Does anyone have any idea why s & t values are different on 64 bit vs 
>> 32 bit?
>
> This list is for GMP, the C (and C++) library, not the PHP interface, 
> so you could try and reproduce this with a C program, and preferably 
> using the latest GMP version.
>
> The guarantees promised by the documentation are only: "abs(s) <= 
> abs(b) and abs(t) <= abs(a)" which allows for many valid outputs. I 
> believe the code was changed to better canonicalize the result in 
> later versions (though it isn't documented), search the archives of 
> the lists if you are interested.
>
> In 64 bits, your numbers fit in 1 limb (an unsigned long), while in 32 
> bits they require 2 limbs, so it isn't too surprising that the 
> computations could turn out differently.
>
Hi Marc,
Thank you and I will look into getting a C program to reproduce the 
problem if possible.



More information about the gmp-discuss mailing list