| Bill Allombert on Fri, 10 Jun 2005 15:51:44 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: dumb question about rationals |
On Fri, Jun 10, 2005 at 02:48:48PM +0200, Vincent Torri wrote:
>
> >Sure, but why do you need it as a long long ? It is quite possible
> >for the numerator to be too large to fit in a long long, and whatever
> >you can do with a long long, you can do it with a t_INT.
>
> ho, ok, i've not understood that. Well, i use the program i write in a
> fortran one (i have done a C-fortran interface for it). Afaik, the best
> integer precision that I can have in fortran 90 is 64 bits.
Try this function then:
long long itoll(GEN x)
{
const long s = signe(x);
long long lu, hu, u;
if (!s) return 0LL;
hu = (ulong)x[2];
if (lgefint(x) == 3)
return (s>0) ? hu : -hu;
else if (lgefint(x) > 4 || x[2]< 0)
err(affer2);
lu = (ulong)x[3];
u = (hu<<BITS_IN_LONG) + lu;
return (s>0) ? u : -u;
}
(this assume the GMP kernel is not is use.)
It has the same bug than itos, it does not accept the largest negative
interger (itos(-2^31) does not return -2^31 but fails).
> Btw, is there a fortran binding of PARI ?
I don't think so.
Cheers,
Bill.