[pypy-commit] pypy numpy-fixes: add implementation of 9ea844c184eb

mattip noreply at buildbot.pypy.org
Wed Apr 29 21:28:27 CEST 2015


Author: mattip <matti.picus at gmail.com>
Branch: numpy-fixes
Changeset: r76947:43445ac2ff6b
Date: 2015-04-27 20:27 +0300
http://bitbucket.org/pypy/pypy/changeset/43445ac2ff6b/

Log:	add implementation of 9ea844c184eb

diff --git a/pypy/module/micronumpy/types.py b/pypy/module/micronumpy/types.py
--- a/pypy/module/micronumpy/types.py
+++ b/pypy/module/micronumpy/types.py
@@ -1305,12 +1305,30 @@
 
     @complex_binary_op
     def floordiv(self, v1, v2):
-        try:
-            ab = v1[0]*v2[0] + v1[1]*v2[1]
-            bb = v2[0]*v2[0] + v2[1]*v2[1]
-            return math.floor(ab/bb), 0.
-        except ZeroDivisionError:
-            return rfloat.NAN, 0.
+        (r1, i1), (r2, i2) = v1, v2
+        if r2 < 0:
+            abs_r2 = -r2
+        else:
+            abs_r2 = r2
+        if i2 < 0:
+            abs_i2 = -i2
+        else:
+            abs_i2 = i2
+        if abs_r2 >= abs_i2:
+            if abs_r2 == 0.0:
+                return rfloat.NAN, 0.
+            else:
+                ratio = i2 / r2
+                denom = r2 + i2 * ratio
+                rr = (r1 + i1 * ratio) / denom
+        elif rfloat.isnan(r2):
+            rr = rfloat.NAN
+        else:
+            ratio = r2 / i2
+            denom = r2 * ratio + i2
+            assert i2 != 0.0
+            rr = (r1 * ratio + i1) / denom
+        return math.floor(rr), 0.
 
     #complex mod does not exist in numpy
     #@simple_binary_op


More information about the pypy-commit mailing list