From c5b79003f5fe6aa28a2a028680367839ba8677db Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Thu, 16 Jan 2020 15:09:19 +0100 Subject: bpo-31031: Unify duplicate bits_in_digit and bit_length (GH-2866) Add _Py_bit_length() to unify duplicate bits_in_digit() and bit_length(). --- Python/pymath.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'Python') diff --git a/Python/pymath.c b/Python/pymath.c index 24b804223e..a08a0e7961 100644 --- a/Python/pymath.c +++ b/Python/pymath.c @@ -79,3 +79,18 @@ round(double x) return copysign(y, x); } #endif /* HAVE_ROUND */ + +static const unsigned int BitLengthTable[32] = { + 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 +}; + +unsigned int _Py_bit_length(unsigned long d) { + unsigned int d_bits = 0; + while (d >= 32) { + d_bits += 6; + d >>= 6; + } + d_bits += BitLengthTable[d]; + return d_bits; +} -- cgit v1.2.1