diff options
Diffstat (limited to 'numpy/core')
-rw-r--r-- | numpy/core/src/npymath/npy_math_internal.h.src | 4 | ||||
-rw-r--r-- | numpy/core/tests/test_umath.py | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/numpy/core/src/npymath/npy_math_internal.h.src b/numpy/core/src/npymath/npy_math_internal.h.src index f2e5229b0..fa820baac 100644 --- a/numpy/core/src/npymath/npy_math_internal.h.src +++ b/numpy/core/src/npymath/npy_math_internal.h.src @@ -654,7 +654,7 @@ npy_divmod@c@(@type@ a, @type@ b, @type@ *modulus) } else { /* if mod is zero ensure correct sign */ - mod = (b > 0) ? 0.0@c@ : -0.0@c@; + mod = npy_copysign@c@(0, b); } /* snap quotient to nearest integral value */ @@ -665,7 +665,7 @@ npy_divmod@c@(@type@ a, @type@ b, @type@ *modulus) } else { /* if div is zero ensure correct sign */ - floordiv = (a / b > 0) ? 0.0@c@ : -0.0@c@; + floordiv = npy_copysign@c@(0, a/b); } *modulus = mod; diff --git a/numpy/core/tests/test_umath.py b/numpy/core/tests/test_umath.py index 21097244f..db6b51922 100644 --- a/numpy/core/tests/test_umath.py +++ b/numpy/core/tests/test_umath.py @@ -273,6 +273,12 @@ class TestDivision(object): y = np.floor_divide(x**2, x) assert_equal(y, [1.e+110, 0], err_msg=msg) + def test_floor_division_signed_zero(self): + # Check that the sign bit is correctly set when dividing positive and + # negative zero by one. + x = np.zeros(10) + assert_equal(np.signbit(x//1), 0) + assert_equal(np.signbit((-x)//1), 1) def floor_divide_and_remainder(x, y): return (np.floor_divide(x, y), np.remainder(x, y)) |