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.
This commit is contained in:
Yusuke Endoh 2020-10-12 13:45:32 +09:00
parent 8a39e6d653
commit eb21e8add3

View File

@ -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;
}