Le 28/10/2012 09:27, serge Guelton a écrit :
Looking at this, it seems to solve at least a part of the issue. We will just need to specify __gmp_binary_...<>.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 ...
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