From: Serhiy Storchaka Date: Fri, 4 Jan 2013 10:18:35 +0000 (+0200) Subject: Issue #16674: random.getrandbits() is now 20-40% faster for small integers. X-Git-Tag: v3.4.0a1~1695 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8a0bac8f761a72661fa464b34517df5294499d2;p=python Issue #16674: random.getrandbits() is now 20-40% faster for small integers. --- diff --git a/Misc/NEWS b/Misc/NEWS index 7611c07091..310a0b2899 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -201,6 +201,8 @@ Core and Builtins Library ------- +- Issue #16674: random.getrandbits() is now 20-40% faster for small integers. + - Issue #16009: JSON error messages now provide more information. - Issue #16828: Fix error incorrectly raised by bz2.compress(b'') and diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c index d8927c05b5..a729817f3d 100644 --- a/Modules/_randommodule.c +++ b/Modules/_randommodule.c @@ -360,6 +360,9 @@ random_getrandbits(RandomObject *self, PyObject *args) return NULL; } + if (k <= 32) /* Fast path */ + return PyLong_FromUnsignedLong(genrand_int32(self) >> (32 - k)); + bytes = ((k - 1) / 32 + 1) * 4; bytearray = (unsigned char *)PyMem_Malloc(bytes); if (bytearray == NULL) {