diff options
author | gfyoung <gfyoung17@gmail.com> | 2017-02-22 20:44:38 -0500 |
---|---|---|
committer | gfyoung <gfyoung17@gmail.com> | 2017-02-23 11:05:20 -0500 |
commit | b10b4087132d51ee33bf5e0777282af23d6ee3cd (patch) | |
tree | e9760976a83b89e0e5c5f6ffa7130c5729d31cd9 /numpy/core/numeric.py | |
parent | ddf8d9d8b6c521df8cba9edb3a101e9686c684af (diff) | |
download | numpy-b10b4087132d51ee33bf5e0777282af23d6ee3cd.tar.gz |
BUG: Remove extra digit in binary_repr at limit
For negative numbers at the limit for a given
number of digits, we were appending an extra
digit unnecessarily.
Closes gh-8670.
Diffstat (limited to 'numpy/core/numeric.py')
-rw-r--r-- | numpy/core/numeric.py | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/numpy/core/numeric.py b/numpy/core/numeric.py index 066697f3e..d4d4045a0 100644 --- a/numpy/core/numeric.py +++ b/numpy/core/numeric.py @@ -2206,7 +2206,7 @@ def binary_repr(num, width=None): designated form. If the `width` value is insufficient, it will be ignored, and `num` will - be returned in binary(`num` > 0) or two's complement (`num` < 0) form + be returned in binary (`num` > 0) or two's complement (`num` < 0) form with its width equal to the minimum number of bits needed to represent the number in the designated form. This behavior is deprecated and will later raise an error. @@ -2276,10 +2276,16 @@ def binary_repr(num, width=None): else: poswidth = len(bin(-num)[2:]) - twocomp = 2**(poswidth + 1) + num + # See gh-8679: remove extra digit + # for numbers at boundaries. + if 2**(poswidth - 1) == -num: + poswidth -= 1 + + twocomp = 2**(poswidth + 1) + num binary = bin(twocomp)[2:] binwidth = len(binary) + outwidth = max(binwidth, width) warn_if_insufficient(width, binwidth) return '1' * (outwidth - binwidth) + binary |