Karim BELABAS on Wed, 4 Jun 2003 21:06:32 +0200 (MEST) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: GEN serialisation |
On Wed, 4 Jun 2003, Gonzalo Tornaria wrote: > As a first idea (to check my prototype implementation), I thought of > using GENtostr and readseq. > Question: is it guaranteed that > > readseq(GENtostr(x),0) == x > > provided GEN x is well formed? No. Rounding problems for instance (internal is base 2^BITS_IN_LONG, output is base 10). Besides you should use flisexpr() [ which is documented and slightly less cryptic ] > I think the "lontyp" array is for this, but I'm not familiar with it. My > understanding is the following: > > say we have a GEN x, and let lt=lontyp[typ(x)], len=lg(x). > > * if lt=0, the type is not recursive: > > * if lt>0, the type is recursive, > with lt codewords, and the rest is more GENs Correct. > recv_GEN(GEN *data, int count) > { > for(int i=0; i<count; i++) > { > long codeword; /* a "pseudo-GEN" */ > GEN x=data[i]; > long lt, len; > > recv_long(&codeword, 1); /* get the type and length */ > lt=lontyp[typ(&codeword)]; That's dangerous, it assumes x[0] contains the typ() [ it's documented this way, but it's the kind of dependency I'd rather do without. ] > len=lg(&codeword); Same here. > x[0]=codeword; /* is this necesary ??? */ No it's not. > Am I missing something??? If some machines are compiled with a GMP kernel, and some with the native one, or if endianness or sizeof(long) differ, you'll run into trouble. There's also a big problem with variable numbers. You have to make sure that all processes have defined the same number of variables [ otherwise transmiting and using a GEN involving an undefined variable number will very probably trigger a SEGV ] [ note that my previously posted solution only deals with the first problem :-( ] > Is it guaranteed that the first codeword has only length and type > information??? I.e., after doing > > x=cgetg(lg(&codeword), typ(&codeword)), > > is it guaranteed that > > x[0]==codeword No. You lose the "clone bit". In any case, it's very unsafe to act on words without using the documented API ( there's been a few proposals to change the internal representation already ). Cheers, Karim. -- Karim Belabas Tel: (+33) (0)1 69 15 57 48 Dép. de Mathématiques, Bât. 425 Fax: (+33) (0)1 69 15 60 19 Université Paris-Sud http://www.math.u-psud.fr/~belabas/ F-91405 Orsay (France) http://www.parigp-home.de/ [PARI/GP]