Karim Belabas on Wed, 27 Jan 2016 15:23:51 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Precision in the PARI library (gp_read_str)


* Bill Allombert [2016-01-27 14:58]:
[...]
> If you use the master branch you can change the
> default precision locally with:
> 
> push_localprec(BIGDEFAULTPREC);
> gp_read_str(....)
> pop_localprec();

It's not the first time this problem is mentioned.

Bill, how about exporting utility functions such as

  GEN
  gp_read_str_bitprec(const char *s, long bitprec)
  {
    GEN x;
    push_localbitprec(bitprec);
    x = gp_read_str(s);
    pop_localprec();
    return x;
  }

  GEN
  gp_read_str_prec(const char *s, long prec)
  { return gp_read_str_bitprec(s, prec2nbits(prec)); }

? [Untested].

Other functions could be wrapped in the same way: GENtostr and variants, etc.
Then a single generic wrapper would implement all such variants.

GEN
wrap_read_bitprec(GEN (*eval)(const char *), const char *s, long bitprec)
{
  GEN x;
  push_localbitprec(bitprec);
  x = eval(s);
  pop_localprec();
  return x;
}
GEN
gp_read_str_bitprec(const char *s, long bit)
{ return wrap_read_bitprec(&gp_read_str, s, bit); }

[Untested again]

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`