Bill Allombert on Tue, 05 May 2009 17:29:58 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Updating an old C program which uses parilib


On Tue, May 05, 2009 at 10:58:16AM -0400, Jack Fearnley wrote:
> I am trying to run a program I wrote and ran successfully some years  
> back.  It computes Dirichlet twists of elliptic L-functions.  The  
> program uses  lisGEN which seems no longer to exist.  The usage is
> ee = smallinitell(lisGEN(stdin));
> where stdin contains [0,1,0,4,4] for example.
>
> There seems to be no exact replacement for this function so I am using  
> scanf to read the five coefficients as longs and then using mkvecn to  
> package the coefficients into a vector.
> scanf("%ld %ld %ld %ld %ld",&c1,&c2,&c3,&c4,&c5);
>        printf("%ld %ld %ld %ld %ld \n",c1,c2,c3,c4,c5);
>    eee=mkvecn(5,(GEN)c1,(GEN)c2,(GEN)c3,(GEN)c4,(GEN)c5);
>    ee = smallinitell(eee);
>
> Where ee and eee are defined as GEN.
>
> The printed result is
>
>
> 0 1 0 4 4
>
>  ***   segmentation fault: bug in PARI or calling program.
>  ***   Error in the PARI system. End of program.
>
> 1) Is there an exact replacement for lisGEN?

yes, gp_read_stream. thought it seems we forgot to add it to the COMPAT
file.

> 2) Am I doing something stupid?
>
> In previous variations to solve this problem  I have encountered stack  
> overflow and an 'undefined' gzero.

Filling my answer below should not be interpreted as a positive answer
to your question :) anyway it appears that the line
eee=mkvecn(5,(GEN)c1,(GEN)c2,(GEN)c3,(GEN)c4,(GEN)c5);
cannot work: casting C long integer to GEN using (GEN) does not
work: you must use stoi:
mkvecn(5,stoi(c1),stoi(c2),stoi(c3),stoi(c4),stoi(c5));

> 3) Where did gzero go?

It has been renamed to gen_0, see the COMPAT file.

Cheers,
Bill.