aboutsummaryrefslogtreecommitdiffstats
path: root/bignum.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2020-10-12 13:45:32 +0900
committerYusuke Endoh <mame@ruby-lang.org>2020-10-12 13:45:32 +0900
commiteb21e8add346854aa93299bf767f119439f74f7a (patch)
treedba824240163cd8124194233fcbbe658104e1875 /bignum.c
parent8a39e6d6539bd37100cbbfb88916b853f444f771 (diff)
downloadruby-eb21e8add346854aa93299bf767f119439f74f7a.tar.gz
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.
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c6
1 files 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;
}