diff --git a/pyperf/_formatter.py b/pyperf/_formatter.py index 6c3a1eea..131721d7 100644 --- a/pyperf/_formatter.py +++ b/pyperf/_formatter.py @@ -78,15 +78,8 @@ def format_number(number, unit=None, units=None): number = '10^%s' % pow10 if isinstance(number, int) and number > 8192: - pow2 = 0 - x = number - while x >= 2: - x, r = divmod(x, 2) - pow2 += 1 - if r: - break - if not r: - number = '2^%s' % pow2 + if number & (number-1) == 0: + number = '2^%s' % (number.bit_length() - 1) if not unit: return str(number) diff --git a/pyperf/tests/test_utils.py b/pyperf/tests/test_utils.py index edf8549c..24b4ec78 100644 --- a/pyperf/tests/test_utils.py +++ b/pyperf/tests/test_utils.py @@ -130,15 +130,15 @@ def test_format_number(self): self.assertEqual(format_number(33 * 10 ** 4, 'unit'), '330000 units') - # powers of 10 + # powers of 2 self.assertEqual(format_number(2 ** 10, 'unit'), '1024 units') self.assertEqual(format_number(2 ** 15, 'unit'), '2^15 units') self.assertEqual(format_number(2 ** 15), '2^15') - self.assertEqual(format_number(2 ** 10 + 1, 'unit'), - '1025 units') + self.assertEqual(format_number(2 ** 15 - 1), '32767') + self.assertEqual(format_number(2 ** 15 + 1), '32769') def test_format_filesize(self): self.assertEqual(format_filesize(0),