]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
log2() is faster than log() (#95214)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Sun, 24 Jul 2022 19:21:29 +0000 (14:21 -0500)
committerGitHub <noreply@github.com>
Sun, 24 Jul 2022 19:21:29 +0000 (14:21 -0500)
Lib/random.py

index ef0034adce5e7cd9cb02a2ef159fe7f60a4afab8..76627309e288b98444b37fa6fb5c8d7668d2abb3 100644 (file)
@@ -50,7 +50,7 @@ from warnings import warn as _warn
 from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
 from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
 from math import tau as TWOPI, floor as _floor, isfinite as _isfinite
-from math import lgamma as _lgamma, fabs as _fabs
+from math import lgamma as _lgamma, fabs as _fabs, log2 as _log2
 from os import urandom as _urandom
 from _collections_abc import Sequence as _Sequence
 from operator import index as _index
@@ -764,11 +764,11 @@ class Random(_random.Random):
             # BG: Geometric method by Devroye with running time of O(np).
             # https://dl.acm.org/doi/pdf/10.1145/42372.42381
             x = y = 0
-            c = _log(1.0 - p)
+            c = _log2(1.0 - p)
             if not c:
                 return x
             while True:
-                y += _floor(_log(random()) / c) + 1
+                y += _floor(_log2(random()) / c) + 1
                 if y > n:
                     return x
                 x += 1