[pythran] Re: gmp

  • From: Brunet Pierrick <pierrick.brunet@xxxxxxxxxxxxxxxxxxx>
  • To: pythran@xxxxxxxxxxxxx
  • Date: Sun, 28 Oct 2012 11:19:29 +0100

Le 28/10/2012 09:27, serge Guelton a écrit :
On Sat, Oct 27, 2012 at 11:56:21PM +0200, serge Guelton wrote:
Does it mean we have to make all arguments assignable ?
The problem is not with assignable. For now, when we have a
__gmp_expr<T,G>, Assignable say : "ho, I have a specialisation which
say it is a mpz_class" but in fact, is is not really a mpz_class. It
is for exemple a __gmp_expr<mpz_struct,
gmp_binary<__gmp_expr<mpz_struct,mpz_struct>,double,binary_plus> >
or something like this.
As you can see, in fact this is the result of an addition between a
double and a mpz_class and it should be a mpf_class because we can
see a double in this expression. But it should be more complicated
otherwise gmp developper may have fix this problem isn't it?
OK I got it. Pythran cast the result to long and python to float,
because we do not try to expand the __gmp_expr...
Or
__gmp_resolve_expr
__gmp_resolve_temp
...

Looking at this, it seems to solve at least a part of the issue. We will just need to specify __gmp_binary_...<>.
For example:
__gmp_binary_op<mpz_class,double,...> type is mpf_class as here is a double. This specification isn't in gmpxx.h AFAIK.

To use all of these features, I will first need to convert python float to pythran mpf_class as we doesn't have big floating point number in pythran.

BTW we will need to fix some pythonic library. I tried with sqrt for example and it doesn't work as we should use sqrt from gmpxx.h and not from math.h

Other related posts: