diff options
author | tlatorre <tlatorre@uchicago.edu> | 2019-02-18 10:27:43 -0600 |
---|---|---|
committer | tlatorre <tlatorre@uchicago.edu> | 2019-02-18 10:27:43 -0600 |
commit | 56bf38b018160471dfe88cb6f2a6dc0a5e93c087 (patch) | |
tree | f7209a9d075f6f4ba84abc46dcf101208799ac57 /doc | |
parent | 8063fa6d1b92a755db9727b17428eb19e0ba590f (diff) | |
download | numpy-56bf38b018160471dfe88cb6f2a6dc0a5e93c087.tar.gz |
BUG: fix signed zero behavior in npy_divmod
Previously when doing floor division numpy would sometimes return an incorrect
signed zero. For example:
>>> np.zeros(10)//1
array([-0., -0., -0., -0., -0., -0., -0., -0., -0., -0.])
>>> np.remainder(-1.0,1.0)
-0.0
The reason for this is that whenever div or mod were zero the code was using
the following to pick the sign of zero:
floordiv = (a / b > 0) ? 0.0@c@ : -0.0@c@;
This commit updates these lines to instead use the copysign function which is
how cpython does floor division.
Fixes #12841.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/release/1.17.0-notes.rst | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/doc/release/1.17.0-notes.rst b/doc/release/1.17.0-notes.rst index d3a7779c8..57f7505ff 100644 --- a/doc/release/1.17.0-notes.rst +++ b/doc/release/1.17.0-notes.rst @@ -36,7 +36,21 @@ Casting from a different floating point precision to float16 used incorrect rounding in some edge cases. This means in rare cases, subnormal results will now be rounded up instead of down, changing the last bit (ULP) of the result. +Signed zero when using divmod +----------------------------- +Starting in version 1.12.0, numpy incorrectly returned a negatively signed zero +when using the ``divmod`` and ``floor_divide`` functions when the result was +zero. For example:: + + >>> np.zeros(10)//1 + array([-0., -0., -0., -0., -0., -0., -0., -0., -0., -0.]) + +With this release, the result is correctly returned as a positively signed +zero:: + + >>> np.zeros(10)//1 + array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) C API changes ============= |