| Karim Belabas on Mon, 03 Oct 2005 11:30:25 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Help to convert a function |
* Quique Becerra [2005-10-02 17:30]:
> Hi people
> Can any1 help me to convert a function to PARI ?
> It's made in c++, and need help to make
> this function work in PARI
>
> ---------------------------------------
> int quick_exp (int a, int b)
> {
> int z, x, resul;
> z = b;
> x = a;
> resul = 1;
> while(z > 0)
> {
> if(z % 1 == 1)
I assume you mean z % 2 here. Otherwise, you may as well return 1 directely.
> resul = resul * x;
> x = x*x;
> z = z/z;
I assume you mean z /= 2 here.
> }
> return(resul);
> }
> ---------------------------------------
In GP:
quick_exp(a, b) = a^b
This is not exactly equivalent to the above since it does not take
overflow into account. If you really intend overflow to take place, then
quick_exp(a, b, bits_in_long = 32) = lift(Mod(a, 2^bits_in_long)^b)
is suitable.
If by "converting to PARI" you mean "converting to a C function using the
PARI library" then (assuming pari-2.2.10 is used):
long quick_exp(long a, long b)
{
pari_sp av = avma;
long c = itos( gpow(stoi(a), stoi(b), 0) );
avma = av; return c;
}
or possibly (this one does overflow)
ulong quick_exp(ulong a, ulong b) { return upowuu(a, b); }
For a direct translation, see leftright_pow().
Karim.
--
Karim Belabas Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France) http://pari.math.u-bordeaux.fr/ [PARI/GP]