Karim BELABAS on Mon, 4 Dec 2000 13:18:58 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: long long with libpari |
[Janet:] > I'm wondering if there is a way to use really big integers with libpari > (where a really big integer is one that requires more space than a long). > It seems like stoi is the only function to stuff an integer into a GEN > (perhaps I'm wrong on this point?), and this automatically converts the > integer to a long first. Is there anything I can do to get bigger > integers? You can convert from a string: GEN x = lisexpr("123456768912312312391273198372131"); But most "interesting" integers are the result of some computation, so you can program that computation, e.g GEN x = addis( gpowgs(stoi(3), 1000), 7 ); /* 3^1000 + 7 */ If what you want is a low-level function to convert from "long long" to PARI integer, you'll have to copy the code from stoi and modify it to your liking. Something like GEN lltoi(long long x) { GEN y; if ((x >> BITS_IN_LONG) == 0) return stoi((long)x); y = cgeti(4); if (x > 0) { y[1] = evalsigne(1) | evallgefint(4); } else { y[1] = evalsigne(-1) | evallgefint(4); x = -x; } y[2] = x >> BITS_IN_LONG; y[3] = (long)x; return y; } [untested, but should work after minimal tweaking...] Cheers, Karim. -- Karim Belabas email: Karim.Belabas@math.u-psud.fr Dep. de Mathematiques, Bat. 425 Universite Paris-Sud Tel: (00 33) 1 69 15 57 48 F-91405 Orsay (France) Fax: (00 33) 1 69 15 60 19 -- PARI/GP Home Page: http://www.parigp-home.de/