| 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/