On Fri, Nov 14, 2014 at 12:02:15PM -0800, Mehdi AMINI wrote: > Hi, > > from pythran/pythonic/patch/README.rst > """ > The implementation of std::complex is very slow, due to the complex limited > range (see `-fcx-limited-range`) feature. Numpy does not implement it, so we > have to conform to numpy's version. > """ Let's focus on the multiplication. The multiplication in CPython is implemented as Py_complex c_prod(Py_complex a, Py_complex b) { Py_complex r; r.real = a.real*b.real - a.imag*b.imag; r.imag = a.real*b.imag + a.imag*b.real; return r; } and the result of the following: >>> c = complex(4, -np.inf) >>> d = complex(-4, -np.inf) >>> c * d (-inf+nanj) same behavior with np.complex while in C++ #include <iostream> #include <complex> #include <limits> int main() { std::complex<double>c{-4., std::numeric_limits<double>::quiet_NaN()}; std::complex<double>d{4., std::numeric_limits<double>::quiet_NaN()}; auto f = c * d; std::cout << f << std::endl; return 0; } ~ prints (nan,nan) So, Python/Numpy behavior and C++ behavior are different with respect to complex multiplication. What we did is provide a std::complex<T> that match Python/Numpy behavior. We cannot ask nt2 to follow numpy's behvaior, so... we hijacked std::complex :-/ I have not checked the division though