Bill Allombert on Wed, 08 Jun 2005 13:38:32 +0200

```On Wed, Jun 08, 2005 at 07:20:23AM +0200, Vincent Torri wrote:
>
> Hello,
>
> i've just started to use PARI (that is, the library), and I want to use
> the rational objects. But I have some problems.
> My program is quite simple :
>
>    GEN r1;
>    GEN r2;
>
>    pari_init (1000000, 2);
>
>    r1 = cgetg (3, t_FRAC);
>    r2 = cgetg (3, t_FRAC);
>
>    r1[1] = (long)2;
>    r1[2] = (long)2;
>
>    r2[1] = (long)2;
>    r2[2] = (long)2;
>
>    r2 = gadd (r2, r1);
>
> but, when i launch the program, i get:
>
>    ***   segmentation fault: bug in PARI or calling program.
>    ***   Error in the PARI system. End of program.
>
> Could you please tell me why there is this problem, and where my error(s)
> is (are)

'r1[1] = (long)2;' is not correct, you must convert the C long integer 2 to a
PARI GEN integer using stoi().
'r1[1] = (long)stoi(2);' should work.

Secondly, the numerator and the denominator must be coprime else you
build a incorrect PARI object, so 2/2 is not allowed.

Usually it is simpler to use gdiv() to build rational numbers.

I suggest you try out GP2C. This program convert GP code to C code, so
you can use it to generate example code you can reuse.

For example, what you are doing is equivalent to the GP code
r1=2/2;
r2=2/2;
r2=r1+r2;

GP2C will translate it to the following C code:

r1 = gdivgs(gdeux, 2);
r2 = gdivgs(gdeux, 2);