From eb21e8add346854aa93299bf767f119439f74f7a Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Mon, 12 Oct 2020 13:45:32 +0900 Subject: [PATCH] bignum.c (bary_sparse_p): do not comsume Random::DEFAULT It uses random to determine if the bignum is sparse or not. It is arguable if three-digit samples are enough or not to determine it, but anyway, consuming Random source implicitly is not good. I introduced the random sampling mechanism, and I don't know any significant reason to do so. So, let's remove it. This change makes the sampling points fixed: 40th, 50th, and 60th percentiles. --- bignum.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bignum.c b/bignum.c index cd969ac360..0515e2f0d6 100644 --- a/bignum.c +++ b/bignum.c @@ -2359,9 +2359,9 @@ bary_sparse_p(const BDIGIT *ds, size_t n) { long c = 0; - if ( ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++; - if (c <= 1 && ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++; - if (c <= 1 && ds[rb_genrand_ulong_limited(n / 2) + n / 4]) c++; + if ( ds[2 * n / 5]) c++; + if (c <= 1 && ds[ n / 2]) c++; + if (c <= 1 && ds[3 * n / 5]) c++; return (c <= 1) ? 1 : 0; }