McLaughlin, James on Thu, 29 Jan 2004 01:34:55 +0100


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

RE: Bug?


That worked, thanks. 

A little curious, since I used the old code for some time on the old version (2.1.4).

Jimmy.

 

	-----Original Message----- 
	From: Karim Belabas [mailto:Karim.Belabas@math.u-psud.fr] 
	Sent: Wed 1/28/2004 6:35 PM 
	To: pari-dev list 
	Cc: 
	Subject: Re: Bug?
	
	

	* McLaughlin, James [2004-01-29 00:16]:
	> I have a simple program which I use to work out the regular continued
	> fraction expansion of rational functions (it may not be the most efficient
	> but thats something else). Here is a really simple version that reproduces
	> the problem I am having:
	
	Not a bug, see below.
	
	> allocatemem(356000000)
	> {
	> a=1; b=7; d=17;
	> f=Pol(a*x^2+b*x+d,x);
	> r=Pol((x+1)*(f+1),x);
	> s=Pol(x*f,x);
	> cf=[];
	> while(s,
	> c=5; m=0;
	> t = r;
	> while(c,
	> dr = poldegree(t);
	> ds = poldegree(s);
	> cr = polcoeff(t,dr);
	> cs = polcoeff(s,ds);
	> e = dr - ds;
	> m = Pol(m + (x^e)*cr/cs,x);
	> t = Pol(t - s*(x^e)*cr/cs,x);
	> c = floor((poldegree(t) +1)/(poldegree(s) +1));
	> );
	> cf = concat(cf,[m]);
	> r = s;
	> s = t;
	> );
	> x=3;
	> der=cf;
	> print(der);
	> print(comp);
	> print(eval(cf));
	> kill(x);
	> }
	> 
	> It does not seem to matter how big I make the stack with "allocatemem( )", I
	> still get an error message:
	
	poldegree(0) is -2147483647  ( conveniently close to -\infty ).  Raising an
	object to that power is almost guaranteed to blow up the stack.
	
	I would replace the line
	
	  c = floor((poldegree(t) +1)/(poldegree(s) +1));
	
	by
	
	  if (!t || !(c = floor((poldegree(t) +1)/(poldegree(s) +1))), break);
	
	You get the idea...
	
	Cheers,
	
	    Karim.
	--
	Karim Belabas                     Tel: (+33) (0)1 69 15 57 48
	Dep. de Mathematiques, Bat. 425   Fax: (+33) (0)1 69 15 60 19
	Universite Paris-Sud              http://www.math.u-psud.fr/~belabas/
	F-91405 Orsay (France)            http://pari.math.u-bordeaux.fr/  [PARI/GP]